Geh mit dem Debugge4r durch Deinen MQ5-Code und kontrolliere, wo und was schiefläuft.
Es scheint hier ein einfaches logikproblem vorzuliegen. Nur leider durchschaue ich dies nicht...
int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i=rates_total-prev_calculated+1; if (i>=rates_total) i=rates_total-1; // // // for (; i>=0 && !_StopFlag; i--) { double tem = (close[i]>close[i+1]) ? tick_volume[i] * (close[i]-close[i+1]) : // auf das Array close[i+1] kann wahrscheinlich nicht zugegriffen werden, da es noch garnicht belegt wurde (close[i]<close[i+1]) ? -1* tick_volume[i] * (close[i+1]-close[i]) : 0; val[i] = iCustomMa(TsvMaMode,tem ,TsvPeriod,i,rates_total,0)*TsvPeriod; sig[i] = iCustomMa(SigMaMode,val[i],SigPeriod,i,rates_total,1); valh[i] = (i<rates_total-1) ? (val[i]>0) ? (val[i]>val[i+1]) ? 0 : 1 : (val[i]<val[i+1]) ? 2 : 3 : 0; huu[i] = (valh[i] == 0) ? val[i] : EMPTY_VALUE; hud[i] = (valh[i] == 1) ? val[i] : EMPTY_VALUE; hdd[i] = (valh[i] == 2) ? val[i] : EMPTY_VALUE; hdu[i] = (valh[i] == 3) ? val[i] : EMPTY_VALUE; } return(rates_total); }
Hast Du die zeitliche Richtung der Array mit den Preisen etc. geprüft? Die hat sich von MQ$ zu MQ5 umgedreht: MQ4: time[0] ist die letzte Zeit, Bar... in MQ5[0] ist die älteste Zeit, Bar ...
Mit ArraySetAsSerie() lässt sich das in MQ5 umdrehen.
Um das zu verstehen lies das hier: https://www.mql5.com/de/docs/series/bufferdirection.
Ist verwirrend - auch für mich, aber man gewöhnt sich dran.
Liegt es daran?
Übrigens einfach nur zusagen, da gibt's ein Problem ist zu wenig um Dir helfen zu können. Du musst schon genau sagen, was der Code wo machen soll, aber wo es genau nicht das tut.
- www.mql5.com
Hast Du die zeitliche Richtung der Array mit den Preisen etc. geprüft? Die hat sich von MQ$ zu MQ5 umgedreht: MQ4: time[0] ist die letzte Zeit, Bar... in MQ5[0] ist die älteste Zeit, Bar ...
Mit ArraySetAsSerie() lässt sich das in MQ5 umdrehen.
Um das zu verstehen lies das hier: https://www.mql5.com/de/docs/series/bufferdirection.
Ist verwirrend - auch für mich, aber man gewöhnt sich dran.
Liegt es daran?
Übrigens einfach nur zusagen, da gibt's ein Problem ist zu wenig um Dir helfen zu können. Du musst schon genau sagen, was der Code wo machen soll, aber wo es genau nicht das tut.
Danke dir! ich werde nächstes mal gründlicher an die Sache heran gehen :)
Habe den Fehler rausgefunden, indem ich den Debugger mit Live-Daten gefüttert habe. Im Experten journal wurde dann auf die jeweilige (kommentierte) Zeile im Code hingewiesen
Es scheint hier ein einfaches logikproblem vorzuliegen. Nur leider durchschaue ich dies nicht...
der Debugger lässt sich nicht anhand historischer Daten Starten.
Liegt das am mt4 oder übersehe ich da etwas?
Nochmal fürs Verständnis:
in mq5 iteriere ich mit einer for-Schleife von 0 bis rates_total. Dabei ist 0 die älteste Kerze und die neueste Kerze befindet sich bei rates-total?
in mq4 iteriere ich mit einer for-Schleife von rates_total bis 0. Dabei ist rates total der index für die älteste Kerze und 0 der Index für die neueste Kerze?
Hier ein mq4 Programmschnipsel:
int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; int limit=MathMin(Bars-counted_bars,Bars-1); for (int i=limit; i>=0; i--)
Ich bin sichtlich überfordert, weshalb meine Problemstellung gerade etwas schwer darzustellen ist. Mich verwirrt vor allem, dass in dem Beispielcode i-- gerechnet wird, statt i++...
Ich versuche gerade die mql4 logik zu verstehen... ziemlich verwirrende Sache
der Debugger lässt sich nicht anhand historischer Daten Starten.
Liegt das am mt4 oder übersehe ich da etwas?
Nochmal fürs Verständnis:
in mq5 iteriere ich mit einer for-Schleife von 0 bis rates_total. Dabei ist 0 die älteste Kerze und die neueste Kerze befindet sich bei rates-total?
in mq4 iteriere ich mit einer for-Schleife von rates_total bis 0. Dabei ist rates total der index für die älteste Kerze und 0 der Index für die neueste Kerze?
Hier ein mq4 Programmschnipsel:
Ich bin sichtlich überfordert, weshalb meine Problemstellung gerade etwas schwer darzustellen ist. Mich verwirrt vor allem, dass in dem Beispielcode i-- gerechnet wird, statt i++...
Deswegen kontrolliere ich immer die Indices [i+1],[i],[i-1] über time[..].
Ja Mt4 kann wohl nicht mit hist. Daten debuggen.
- 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.
Fehlermeldungen gibt es keine, trotzdem berechnet der Indikator alles andere, als das was ich möchte..
Mein Ansatz:
Original Code:
Vielen Dank an euch:)