siscop Posted August 28, 2009 Report Share Posted August 28, 2009 //Fractals for (i=-2;i>-50;i--) { H1=Ref(H,i)>Ref(H,i+1); H2=Ref(H,i)>Ref(H,i+2); H3=Ref(H,i)>Ref(H,i-1); H4=Ref(H,i)>Ref(H,i-2); if (H1 && H2 && H3 && H4) { LastFractalHigh=Ref(H,i); break; } }kommt die Fehlermeldung:Error 6. Condition in IF, WHILE, FOR statements has to be Numeric or Boolean type. You can not use array here, please use [] (array subscript operator) to access array elementser stört sich an meiner IF abfrage: habs mit AND oder nur mit einem "&" versucht.Kann mir einer sagen wie ich es verändern muss damit der compiler das annimmt. Quote Link to comment Share on other sites More sharing options...
Technix Posted August 28, 2009 Report Share Posted August 28, 2009 Ref liefert ein Array, keinen Einzelwert. Quote Link to comment Share on other sites More sharing options...
siscop Posted August 28, 2009 Author Report Share Posted August 28, 2009 jo danke aber ich stelle doch da einen direkten vergleich da und der hat doch als ergebnis entweder true oder false (1/0) haben.dies sollte doch ein IF statement annehmen.ich habe offensichtlich einen denkfehler.ok werde schauen wie ich dies dann lösen werde. jetzt weiss ich wenigstens warum der meckert auch wenn ich noch nicht verstehe warum bei einem direkten vergleich ein array raus kommt. Quote Link to comment Share on other sites More sharing options...
ibelieve Posted August 29, 2009 Report Share Posted August 29, 2009 Ich kann es ja gar nicht,und mit Schleifen habe ich ganz große Probleme. Aber was mich wundert, bzw. was ich mich Frage. H1=Ref(H,i)>Ref(H,i+1); 1) bisher habe ich das i immer in Eckigen Klammern gesehen = 2) das erste REF, wo für soll das sein?Sollte doch = H seinoder müsste REF (H, +- irgend was sein) 3) auch hier verstehe ich das REF nicht, oder es fehlt die Zeit für REF.Sollte doch eigentlich so aussehenH[i +1] Du willst doch wissen ob Bar i > ist wie das folge Bar, oder nicht? Für eine kurze Erklärung wäre ich dankbar,will ja immer noch was lernen. Quote Link to comment Share on other sites More sharing options...
duncan Posted August 29, 2009 Report Share Posted August 29, 2009 HI, Plot(C,"Colse",colorBlue); //Fractals function LastFractalHigh() { for (i=48;i>0;i--) { H1=H[i]>H[i+1]; H2=H[i]>H[i+2]; H3=H[i]>H[i-1]; H4=H[i]>H[i-2]; if (H1 AND H2 AND H3 AND H4) { result=H[i]; break; } } return result; } Plot(LastFractalHigh(),"LastFractalHigh",colorRed,styleDots); meinst Du das Gruß Duncan Quote Link to comment Share on other sites More sharing options...
Technix Posted August 29, 2009 Report Share Posted August 29, 2009 @ siscop duncan's Lösung ist wohl das, was Du meinst. Der Fehler ist, daß die Operationen innerhalb der IF-Bedingung Einzelwerte erfordern, Du sie aber mit dem vorher gewonnenen Array aus Ref beschickst. Um einen Einzelwert aus einem Array zu holen sind die [] zu nutzen, Ref versetzt ein ganzes Array um den Offset. Es gilt: Ref(X, n)[m] = X[n + m](hoffe ich wenigstens mal, ohne es getestet zu haben) Quote Link to comment Share on other sites More sharing options...
siscop Posted August 29, 2009 Author Report Share Posted August 29, 2009 danke dir Duncan für deine Lösung.mal ein paar Fragen dazu.bei PRT, MT4 usw ist High[0] der jetzige BalkenHigh[1] der letzte Balken dachte amibroker geht da anders vor.dachte bei amibroker läuft es so dassHigh[1] der erste/zweite Balken und der letzte (also jetzt) High[x] ist wobei x=anzahl der vorhandenen array elemente ist. wenn ich also dein code nehme und habe 1000 Balken so überprüft der doch nur die ersten 48 balken ´-- beim stundenchart wären dass 952 Stunden her.Wie gesagt ich bin noch am AFL lernen.wenn bei AFL High[1] der letzte Balken wäre wie MT4 bzw PRT hätte ich die ganzen probleme nicht. Quote Link to comment Share on other sites More sharing options...
duncan Posted August 29, 2009 Report Share Posted August 29, 2009 HI, wenn ich das Konzept richtig verstanden habe, dann berechnet AmiBroker das immer in Bezug zum aktuellen Bar, d.h. ist bei deinen aktuellen Bar i kleiner 48 kann AmiBroker auch nichts berechnen und Du bekommst keine Rückgabe, ist i aber größer 48 bekommst Du eine Rückgabe ... so verwende ich AmiBroker. Als ich zu AmiBroker gewechselt bin, konnte ich meine "gesamte" Logik über Board werfen und muss alles neu lernen. AmiBroker ist schon sehr anders als z.B. PRT, aber wenn Du erstmal die Problemchen kennst, ist AMI super offen, kannst also z.B. deine eigenen dll's schreiben Gruß Duncan Quote Link to comment Share on other sites More sharing options...
ibelieve Posted September 17, 2009 Report Share Posted September 17, 2009 Manch mal zweifele ich an dem Verstand meines PCs oder doch besser an meinem? Ein einfaches Programm den Voigt Stop anzeigen zu lassen. ahARRAY = Null; // aussenstab hoch atARRAY = Null; // aussenstab tief stopARRAY = Null; stopARRAYs = Null; aussenstabhoch = 0; aussenstabtief = 0; stop1 = L; stop5 = H; stopaussenstab = Ref (L,-1); stopaussenstabshort = Ref (H,-1); innenstab1 = Close < Ref ( High, -1 ) AND Close > Ref ( Low, -1 ) AND Open < Ref ( High, -1 ) AND Open > Ref ( Low, -1 ); // erster innenstab aussenstab = Ref ( innenstab1, -1 ); for ( i = 1; i < BarCount; i++ ) { if ( aussenstabhoch == 0 AND innenstab1[ i ] ) { aussenstabhoch = H[i-1]; aussenstabtief = L[i-1]; stop2 = stopaussenstab[i-1]; stop6 = stopaussenstabshort[i-1]; } if ( aussenstabhoch > 0 AND Close[ i ] < aussenstabtief OR Close [ i ] > aussenstabhoch ) { aussenstabhoch = 0; aussenstabtief = 0; stop2 = 0; stop6 = 0; } if ( aussenstabhoch > 0 ) { ahARRAY[i-1] = aussenstabhoch; atARRAY[i-1] = aussenstabtief; ahARRAY[i] = aussenstabhoch; atARRAY[i] = aussenstabtief; stopARRAY[i] = stop2; stopARRAYs[i] = stop6; } } //Plot ( ahARRAY, "aussenstabhoch", colorBlue, 4 ); //Plot ( atARRAY, "aussenstabtief", colorBlue, 4 ); //Plot ( stopARRAY, " stop", colorRed,4 ); //PlotOHLC( ahARRAY, ahARRAY, atARRAY, atARRAY, "", colorPink,styleCloud ); // ColorRGB( 255, 186, 117 ) stopl = IIf ( stopARRAY <= 0, stop1, Min (stopARRAY,atARRAY) ); stop3 = Ref (stopl,-1); In 90% der Fälle auch kein Problem,nur manch mal hört er ein paar Bar vor Ende auf? Quote Link to comment Share on other sites More sharing options...
duncan Posted September 17, 2009 Report Share Posted September 17, 2009 Manch mal zweifele ich an dem Verstand meines PCs oder doch besser an meinem? Ein einfaches Programm den Voigt Stop anzeigen zu lassen.In 90% der Fälle auch kein Problem,nur manch mal hört er ein paar Bar vor Ende auf? Hi,ich würde es mir ja extra für Dich vor meinen Urlaub ansehen, aber kann es sein, das der Code unvollständig ist? Wenn ich diesen Stopp: //Plot ( stopARRAY, " stop", colorRed,4 ); aktiviere sieht es bei mir ganz anders aus … Sorry, Gruß Duncan Quote Link to comment Share on other sites More sharing options...
ibelieve Posted September 18, 2009 Report Share Posted September 18, 2009 Hi,ich würde es mir ja extra für Dich vor meinen Urlaub ansehen, aber kann es sein, das der Code unvollständig ist? moin, sei doch nicht immer so kleinlich und wie so schon wieder Urlaub?hattest Du nicht Grade Urlaub? ahARRAY = Null; // aussenstab hoch atARRAY = Null; // aussenstab tief stopARRAY = Null; stopARRAYs = Null; aussenstabhoch = 0; aussenstabtief = 0; stop1 = L; stop5 = H; stopaussenstab = Ref (L,-1); stopaussenstabshort = Ref (H,-1); innenstab1 = Close < Ref ( High, -1 ) AND Close > Ref ( Low, -1 ) AND Open < Ref ( High, -1 ) AND Open > Ref ( Low, -1 ); // erster innenstab aussenstab = Ref ( innenstab1, -1 ); for ( i = 1; i < BarCount; i++ ) { if ( aussenstabhoch == 0 AND innenstab1[ i ] ) { aussenstabhoch = H[i-1]; aussenstabtief = L[i-1]; stop2 = stopaussenstab[i-1]; stop6 = stopaussenstabshort[i-1]; } if ( aussenstabhoch > 0 AND Close[ i ] < aussenstabtief OR Close [ i ] > aussenstabhoch ) { aussenstabhoch = 0; aussenstabtief = 0; stop2 = 0; stop6 = 0; } if ( aussenstabhoch > 0 ) { ahARRAY[i-1] = aussenstabhoch; atARRAY[i-1] = aussenstabtief; ahARRAY[i] = aussenstabhoch; atARRAY[i] = aussenstabtief; stopARRAY[i] = stop2; stopARRAYs[i] = stop6; } } Plot ( ahARRAY, "aussenstabhoch", colorBlue, 4 ); Plot ( atARRAY, "aussenstabtief", colorBlue, 4 ); //Plot ( stopARRAY, " stop", colorRed,4 ); //PlotOHLC( ahARRAY, ahARRAY, atARRAY, atARRAY, "", colorPink,styleCloud ); // ColorRGB( 255, 186, 117 ) stopl = IIf ( stopARRAY <= 0, stop1, Min (stopARRAY,atARRAY) ); stop3 = Ref (stopl,-1); stops = IIf ( stopARRAYs <= 0, stop5, Max (stopARRAYs,ahARRAY) ); stop4 = Ref (stops,-1); Plot ( stop3,"stop", colorBlack,4); Plot ( stop4,"stop", colorBlack,4); Quote Link to comment Share on other sites More sharing options...
nichtsnutz Posted September 18, 2009 Report Share Posted September 18, 2009 (edited) stopARRAY = Null;stopARRAYs = Null; Hallo, probiere mal die beiden Werte mit 0 zu initialisieren.Ich glaube dein IIF(stopARRAY Edited September 18, 2009 by nichtsnutz Quote Link to comment Share on other sites More sharing options...
ibelieve Posted September 18, 2009 Report Share Posted September 18, 2009 stopARRAY = Null;stopARRAYs = Null; Hallo, probiere mal die beiden Werte mit 0 zu initialisieren.Ich glaube dein IIF(stopARRAY <=0,....) ergibt immer false. scheint zu gehen, wo bei ich mich jetzt frage warum es vorher auch meist ging? Quote Link to comment Share on other sites More sharing options...
nichtsnutz Posted September 18, 2009 Report Share Posted September 18, 2009 scheint zu gehen, wo bei ich mich jetzt frage warum es vorher auch meist ging? Tja das frage ich mich auch noch. Die Werte in dem Array für die Linien sind eigentlich mist.Siehe Anhang, hoffe das klappt. Quote Link to comment Share on other sites More sharing options...
ibelieve Posted September 18, 2009 Report Share Posted September 18, 2009 Die Werte in dem Array für die Linien sind eigentlich mist. ? Was meinst Du damit? PS,Interessanter Nick für Deine postings Quote Link to comment Share on other sites More sharing options...
nichtsnutz Posted September 18, 2009 Report Share Posted September 18, 2009 ? Was meinst Du damit? Ich meinte damit, wenn du das mit Null initialisierst, dann stehen in dem stop3 und stop4 Array meistens die Werte -1.0000. Auch in der Vergangenheit. Woher holt er sich die Werte zum Zeichnen ? Ich denke das auf den Charts, wo am Ende aktuell nicht gezeichnet wird, er die Linien wieder zeichnet wenn ein aktueller Innenstab auftaucht. Daher auch die Unterschiede auf deinen beiden Bildern. In dem einen gibt es aktuell keinen Innenstab / Aussenstab, in dem anderen befinden sie sich noch innerhalb. PS,Interessanter Nick für Deine postings Ab und an kommt auch mal was gescheites raus ;) Quote Link to comment Share on other sites More sharing options...
nichtsnutz Posted September 18, 2009 Report Share Posted September 18, 2009 aussenstab = 0; innenstab = 0; aussenstabHoch = 0; aussenstabTief = 0; LongStop = Ref(L,-1); ShortStop = Ref(H,-1); for(i = 2; i < BarCount; i++) { // neuer Innenstab if(C[i] <= H[i-1] AND C[i] >= L[i-1] AND NOT innenstab[i-1]) { aussenstab[i-1] = 1; aussenstabHoch[i] = H[i-1]; aussenstabTief[i] = L[i-1]; innenstab[i] = 1; LongStop[i] = L[i-2]; ShortStop[i] = H[i-2]; if( LongStop[i] > L[i-1] ) LongStop[i] = L[i-1]; if( ShortStop[i] < H[i-1] ) ShortStop[i] = H[i-1]; } // immer noch innenstab if(innenstab[i-1] AND C[i] <= aussenstabHoch[i-1] AND C[i] >= aussenstabTief[i-1]) { aussenstabHoch[i] = aussenstabHoch[i-1]; aussenstabTief[i] = aussenstabTief[i-1]; innenstab[i] = 1; LongStop[i] = LongStop[i-1]; ShortStop[i] = ShortStop[i-1]; } } Color = IIf(aussenstab, colorRed, IIf(innenstab,colorBlue,ParamColor("BarColor", colorGrey40 ))); _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) )); Plot( C, "Close", Color, styleBar|styleThick | GetPriceStyle() ); Plot(LongStop,"L",colorGreen); Plot(ShortStop,"S",colorAqua); So ich habe mich auch mal probiert, ist bestimmt noch nicht optimal, aber vielleicht hilft es dir weiter.Bei Aussenstab lege ich den Stoppwert auf das H/L eins davor. Quote Link to comment Share on other sites More sharing options...
duncan Posted September 18, 2009 Report Share Posted September 18, 2009 Hi nichtsnutz,ein neuer der ohne wenn und aber Probleme für andere löst ist mir sehr sympathisch ... Willkommen nichtsnutz. Gruß DuncanPS: Stell Dich doch mal hier: http://www.tom-next.com/community/Welcome-...m-Next-f45.html vor... Quote Link to comment Share on other sites More sharing options...
nichtsnutz Posted September 18, 2009 Report Share Posted September 18, 2009 Hi nichtsnutz,ein neuer der ohne wenn und aber Probleme für andere löst ist mir sehr sympathisch ... Willkommen nichtsnutz. Gruß DuncanPS: Stell Dich doch mal hier: http://www.tom-next.com/community/Welcome-...m-Next-f45.html vor... Danke Duncan. Quote Link to comment Share on other sites More sharing options...
oldschuren Posted September 26, 2009 Report Share Posted September 26, 2009 Weiß jemand, mit welcher Funktion ich ein IntradayWert vom Vortag auslesen kann? Z.B. Close M15 Kerze vom Vortag für den DAX 15:30Uhr. Ich möchte einen Indikator basteln, der mir für den Dow Vortag 22:15 den Close-Wert ausließt und für Berechnungen im heutigen Bereich zu Verfügung stellt. Gruß OS Quote Link to comment Share on other sites More sharing options...
nichtsnutz Posted September 26, 2009 Report Share Posted September 26, 2009 Weiß jemand, mit welcher Funktion ich ein IntradayWert vom Vortag auslesen kann? Z.B. Close M15 Kerze vom Vortag für den DAX 15:30Uhr. Ich möchte einen Indikator basteln, der mir für den Dow Vortag 22:15 den Close-Wert ausließt und für Berechnungen im heutigen Bereich zu Verfügung stellt. Gruß OS Hast du schon TimeFrameGetPrice( pricefield, interval, shift = 0, mode = expandFirst )in15minute für interval probiert ? In welchem Interval befindest du dich ? Hast du schon etwas gecodet ? Soll die Uhrzeit Variabel sein ? Quote Link to comment Share on other sites More sharing options...
oldschuren Posted September 26, 2009 Report Share Posted September 26, 2009 Ne hab noch nicht gecodet. Hab nur mal geschaut, was es für Funktionen in der AFL-Referenz zum Thema gibt. OK, das mit TimeFrameGetPrice( pricefield, interval, shift = 0, mode = expandFirst ) sah ganz gut aus. Das Problem ist aber, dass ich erst mal den ShiftInterval ausrechnen muß, also den Betrag um den der Fokus in die Vergangenheit geshiftet werden muß. Find ich jetzt nicht so galant. Schwer zu erklären. Mir würde es gefallen, wenn man für den Bereich TAG, mit seinen M15-Intervalen, den Wert (Bsp.) 14:00 Close auslesen kann und einer VARIABLE übergibt. Dann brächte man nur Ref(VARIABLE, -1) für den Vortagswert anwenden... Alles klar... Quote Link to comment Share on other sites More sharing options...
nichtsnutz Posted September 26, 2009 Report Share Posted September 26, 2009 Ne hab noch nicht gecodet. Hab nur mal geschaut, was es für Funktionen in der AFL-Referenz zum Thema gibt. OK, das mit TimeFrameGetPrice( pricefield, interval, shift = 0, mode = expandFirst ) sah ganz gut aus. Das Problem ist aber, dass ich erst mal den ShiftInterval ausrechnen muß, also den Betrag um den der Fokus in die Vergangenheit geshiftet werden muß. Find ich jetzt nicht so galant. Schwer zu erklären. Mir würde es gefallen, wenn man für den Bereich TAG, mit seinen M15-Intervalen, den Wert (Bsp.) 14:00 Close auslesen kann und einer VARIABLE übergibt. Dann brächte man nur Ref(VARIABLE, -1) für den Vortagswert anwenden... Alles klar... So wie ich das jetzt verstehe möchtest du im Tageschart das Close eines 15 Min Bars um 14 Uhr haben ?Ich denke sowas geht wenn überhaupt nur mit TimeFrameSet und TimeFrameExpand oder TimeFrameCompress. Habe mal ein bissel rum probiert aber nicht wirklich eine Lösung gefunden. Ich kenne es sonst nur andersrum, dass man im 5 minuten Chart z.B. die Pivots vom Tages o. Stundenchart haben möchte. Quote Link to comment Share on other sites More sharing options...
oldschuren Posted September 26, 2009 Report Share Posted September 26, 2009 Muß ich mal ein bischen mit rumspielen. Da wirds bestimmt ne Möglichkeit geben... Quote Link to comment Share on other sites More sharing options...
whipsaw Posted September 27, 2009 Report Share Posted September 27, 2009 Hi nichtsnutz,ein neuer der ohne wenn und aber Probleme für andere löst ist mir sehr sympathisch ... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.