Ja, das kann auch gar nicht funktionieren.
Du erstellst das Handle mit double, da gehört int hin und das handle musst Du nur einmal erstellen, darum kommt es nicht in die Schleife, sondern davor. Zum Beispiel in die OnInit... oder ist das ein Skript?
Hier ist mal ein Artikel, da steht ein Bisschen wie es gemacht wird. Du brauchst nämlich noch mindestens einen Array, den mit ArraySetAsSeries als Zeitreihe einstellst und mit Werten füllen kannst.
Und dann füllst Du diesen mit Hilfe von Copybuffer und dem Indikatorhandle. Das steht in dem Artikel unten beschrieben. Dann hast Du aber immer noch nicht die Werte, außerdem ist das ganz logisch, dass die Schleife immer weiter zählt, schließlich hast Du ihr keinen Grund gegeben, anzuhalten. Statt bis i<bars könntest Du auch sagen bis (zzarray[i]!=0&&zzarray[i]!=EMPTY_VALUE ). Dann hält er jedoch beim ersten ZigZagpunkt schon an. Das wäre mal ne gute Übung. Dann musst Du Dir jedoch das Arrayelement zzarray[soundso] anzeigen lassen und nicht das Handle. Wenn Du das hinkriegst hast Du schon ganz schön was gelernt für heute.
https://www.mql5.com/de/articles/31
Hier noch was über Arrays. Die brauchst Du so gut wie immer. Das i in der Schleife zählt die Elemente 0,1,2,3 im Array/Buffer des ZZ ab.
https://www.mql5.com/de/articles/567
Ich sags mal so wie es ist, vielleicht unterschätze ich Deine Intelligenz und Du kommst aus einem ganz anderen Bereich oder so und in zwei Jahren gehst Du voll ab. Kann ich nicht sagen. Es sieht aber so aus, als würde Dir das nicht besonders liegen und es ist dann immer schwierig, gute Ratschläge zu geben, wenn so viele Grundprinzipien nicht verstanden wurden.
- www.mql5.com
Mir ist anscheinend der Unterschied zwischen MQL4 und 5 nicht ganz klar.
Wie kann ich nach einem konkreten Wert innerhalb der icustum-Funktion suchen?
z.b.
CopyBuffer(ZIGZAG_Indikator1,0,0,1000,ZZ_Array1); ArraySetAsSeries(ZZ_Array1,true); for(int i=0; i<1000; i++) { if(ZZ_Array1[i] != 0.0 && ZZ_Array1[i] != EMPTY_VALUE) { if(ZigZag1_Nr[0] == 0.0) { ZigZag1_Nr[0] = ZZ_Array1[i]; }Diese Funktion gibt mir allgemein die Indicatorwerte. '
Mein Ziel ist es direkt nach dem "x" zu suchen:
"ZIGZAG_Indikator1_Time_Hoch=iCustom(_Symbol,PERIOD_CURRENT,"ZigZag",3,0,0,0,x);"
Warum schaust Du nicht nach, wie iCustom verwendet wird?
Entweder Kursor auf iCostom stellen und F1 drücken oder (Du kennst's ja schon) in https://www.mql5.com/de/docs/function_indices iCustom suchen und unten das Beispiel verwenden: 1. in Oninit() ein Handle sich geben lassen und 2. in OnCalculate(..) mit CopyBuffer die Werte holen.
- www.mql5.com
int OnInit() //0,1,2,3,4,5,6,07,08 { atrHandle = iATR(_Symbol,PERIOD_CURRENT,12); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { } void OnTick() { CopyBuffer(atrHandle,0,0,1,atr); ArraySetAsSeries(atr,true);
ungetestetes beispiel. damit hast du aus dem Buffer 0 und der Startposition 0 (jüngste bar) einen Wert aus dem buffer kopiert
Vielen dank für die Hilfe und das Interesse!
Mir ist anscheinend der Unterschied zwischen MQL4 und 5 nicht ganz klar.
Wie kann ich nach einem konkreten Wert innerhalb der icustum-Funktion suchen?
z.b.
Diese Funktion gibt mir allgemein die Indicatorwerte. '
Mein Ziel ist es direkt nach dem "x" zu suchen:
"ZIGZAG_Indikator1_Time_Hoch=iCustom(_Symbol,PERIOD_CURRENT,"ZigZag",3,0,0,0,x);"
Erstmal was Carl sagte. Dann weiß ich grad nicht was das x ist. Schau mal in Indicators\Examples\ZigZag welcher Buffer was speichert und dann kannst Du mit Copybuffer wie bei jedem anderen Indikator den Buffer im EA in ein Array übertragen und wenn Du eine Schleife benutzt, um einen Wert zu suchen ist i der Balken, den Du suchst. Aber dann musst Du auch ArraySetAsSeries verwenden, damit 0 der neueste Balken ist. Und dann schau in der Dokumentation unter "Zugang zu Zeitreihen und Indikatoren", da ist iTime. Du merkst schon, da sind alleine fünf/sechs Ebenen drin.
Dann kannst Du auch mal im Forum suchen unter "Werte vom Indikator richtig auslesen". Da wurde das so ähnlich schon mal gemacht. Hab ich mich da verkünstelt...
Erstmal was Carl sagte. Dann weiß ich grad nicht was das x ist. Schau mal in Indicators\Examples\ZigZag welcher Buffer was speichert und dann kannst Du mit Copybuffer wie bei jedem anderen Indikator den Buffer im EA in ein Array übertragen und wenn Du eine Schleife benutzt, um einen Wert zu suchen ist i der Balken, den Du suchst. Aber dann musst Du auch ArraySetAsSeries verwenden, damit 0 der neueste Balken ist. Und dann schau in der Dokumentation unter "Zugang zu Zeitreihen und Indikatoren", da ist iTime. Du merkst schon, da sind alleine fünf/sechs Ebenen drin.
Dann kannst Du auch mal im Forum suchen unter "Werte vom Indikator richtig auslesen". Da wurde das so ähnlich schon mal gemacht. Hab ich mich da verkünstelt...
for(int v=0; v<bars; v++) { if( ( High[v] == ZigZag1_Array_Hoch_Nr[0] ) ) { ZigZag1_Hoch_Time0 = iTime(_Symbol,PERIOD_CURRENT,v); break; }
Mit der Schleife vergleiche ich ob es sich um den exakten ZIGZAG Wert handelt.
Wenn ich die Werte Visualisiere sind es nicht die exakten ZigZag-Punkte
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
ich zähle alle Kerzen Rückwerts bis ich einen Wert erhalte.
Die letzten Zwei Indikator Parameter stellen die Hochs und Tiefs dar.
Ausgegeben wird der mit Werten gefüllte double.
In der Praxis wird kein Wert erkannt und die Schleife zählt bis in das Unendliche.
Kann mir bitte jemand bei der Fehlersuche helfen?
MQL5