MQLRates arbeitet nicht korrekt

 

Hallo in die Runde,


ich versuche gerade die Werte der Bars im Tester zu bekommen, wofür es ja genug Anleitung gibt. Allerdings zeigt das Journal (für Debuggingzwecke) für rates[0] für alle Werte (High, low, close) den  Open-Wert an (Siehe Anhang).


Hier ist der Code, der das generiert:

bool BuySignal(void)
  {
   //return(avr_speed[0]>Trend_lev && cog[1]<cog[0] &&(cog[1]<0 && cog[0]<0))?true:false;
   MqlRates rates[];
   //ArrayResize(rates,200);
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(_Symbol,_Period,0,100,rates);
   if(copied >0){
          Print("sar[1] = ",DoubleToString(sar[1],5),
            "\nsar[0] = ", DoubleToString(sar[0],5),
            "\nrates[1].open = ", DoubleToString(rates[1].open,5),
            "\nrates[1].high = ", DoubleToString(rates[1].high,5),
            "\nrates[1].low = ", DoubleToString(rates[1].low,5),
            "\nrates[1].close = ", DoubleToString(rates[1].close,5),
            "\nrates[0].open = ", DoubleToString(rates[0].open,5),
            "\nrates[0].high = ", DoubleToString(rates[0].high,5),
            "\nrates[0].low = ", DoubleToString(rates[0].low,5),
            "\nrates[0].close = ", DoubleToString(rates[0].close,5)
             );
             }


Ich dachte zunächst, es liegt an der Einstellung "Modellierung" im Tester. Aber es ändert nichts, wenn ich von 1 Minute OHLC auf "jeder Tick"(anhand realer ticks) wechsle.


Damit die Buysignal-Funktion funktioniert bräuche ich den korrekten rates[0].close Preis.


Dank im voraus

Dateien:
 
Brazzelhuber:

Hallo in die Runde,


ich versuche gerade die Werte der Bars im Tester zu bekommen, wofür es ja genug Anleitung gibt. Allerdings zeigt das Journal (für Debuggingzwecke) für rates[0] für alle Werte (High, low, close) den  Open-Wert an (Siehe Anhang).


Hier ist der Code, der das generiert:


Ich dachte zunächst, es liegt an der Einstellung "Modellierung" im Tester. Aber es ändert nichts, wenn ich von 1 Minute OHLC auf "jeder Tick"(anhand realer ticks) wechsle.


Damit die Buysignal-Funktion funktioniert bräuche ich den korrekten rates[0].close Preis.


Dank im voraus

Rates0.close ist der ask oder bid price

 

Wenn die bar[0] die aktuelle ist, steht [0].close nicht fest, sondern kann sich ändern wie .high oder .low, deshalb wird zum Handel meist [1].close genommen ist fix oder man kann auch [0].open nehmen, das ändert sich auch nicht mehr.

Wenn alle 4 Werte der Bar den selben Wert haben ist das wohl ein Zeichen, dass die Bar gerade eröffnet wurde.

Aber was genau stört Dich?

 
Danke, das bringt mich weiter!
 

Wo ich aber noch am überlegen bin, ist, warum das Programm bei den beiden ersten Durchläufen korrekt arbeitet und danach immer falsche Werte liefert.


FF    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[1].open = 1.20375
MP    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[1].high = 1.20398
FF    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[1].low = 1.20346
LM    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[1].close = 1.20391
LJ    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[0].open = 1.20390
GD    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[0].high = 1.20397
DR    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[0].low = 1.20367
QI    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[0].close = 1.20368
KL    0    14:55:38.977    Core 1    2018.01.03 10:02:00   ############################ trade.buy = false
IH    0    14:55:38.977    Core 1    2018.01.03 10:02:00   sar[1] = 1.20580
MP    0    14:55:38.977    Core 1    2018.01.03 10:02:00   sar[0] = 1.20561
PM    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[1].open = 1.20375
GE    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[1].high = 1.20398
PQ    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[1].low = 1.20346
NI    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[1].close = 1.20391
JQ    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[0].open = 1.20390
MI    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[0].high = 1.20397
RM    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[0].low = 1.20367
OE    0    14:55:38.977    Core 1    2018.01.03 10:02:00   rates[0].close = 1.20368
QH    0    14:55:38.977    Core 1    2018.01.03 10:02:00   ############################ trade.sell = false
FS    0    14:55:38.977    Core 1    2018.01.03 10:15:00   sar[1] = 1.20561
EK    0    14:55:38.977    Core 1    2018.01.03 10:15:00   sar[0] = 1.20536
GQ    0    14:55:38.977    Core 1    2018.01.03 10:15:00   rates[1].open = 1.20390
LI    0    14:55:38.977    Core 1    2018.01.03 10:15:00   rates[1].high = 1.20397
QM    0    14:55:38.977    Core 1    2018.01.03 10:15:00   rates[1].low = 1.20312
RD    0    14:55:38.977    Core 1    2018.01.03 10:15:00   rates[1].close = 1.20324
NE    0    14:55:38.977    Core 1    2018.01.03 10:15:00   rates[0].open = 1.20325    ============>> ab hier nur noch falsche Werte
DM    0    14:55:38.977    Core 1    2018.01.03 10:15:00   rates[0].high = 1.20325
NI    0    14:55:38.977    Core 1    2018.01.03 10:15:00   rates[0].low = 1.20325
RP    0    14:55:38.977    Core 1    2018.01.03 10:15:00   rates[0].close = 1.20325

 
Die Werte sind wohl richtig, arbeite nicht(!) mit der bar[0], die hat am Anfang nur einen Tick gesehen, in Deinem Fall mit dem Wert 1.20325. Arbeite mit bar[1] - so wie es die aller meisten machen!
 

Habe den Fehler inzwischen gefunden. Ich hatte eine if_clause am Anfang der OnTick Funktion, die die Openingtime abgefragt hat.

Danke für die Hinweise!