Dann versuche ich mal, den Sachverhalt genauer zu beschreiben:
1) Wenn ein EA z.B. heute am 07.07.2017 um 08:53:48 Uhr gestartet wird, dann würde ich (direkt nach dem Start des EA's) folgendes erwarten:
- im 1M-Chart: Die jüngste Kerze hat um 08:53 Uhr begonnen.
- im 5M-Chart: Die jüngste Kerze hat um 08:50 Uhr begonnen.
- im 15M-Chart: Die jüngste Kerze hat um 08:45 Uhr begonnen.
- im 30M-Chart: Die jüngste Kerze hat um 08:30 Uhr begonnen.
Sind wir bis hier einer Meinung?
2) Nun habe ich in der INIT-Phase u.a. folgende Print-Befehle kodiert, um die Uhrzeit und den Open-Kurs der jüngsten Kerze (Index=0) für die genannten 4 Zeitebenen zu überprüfen:
Code:
Print("init, iTime(,M1,0)=" , iTime(NULL, PERIOD_M1 , 0) ,
" iOpen(,M1,0)=" , iOpen(NULL, PERIOD_M1 , 0) );
Print("init, iTime(,M5,0)=" , iTime(NULL, PERIOD_M5 , 0) ,
" iOpen(,M5,0)=" , iOpen(NULL, PERIOD_M5 , 0) );
Print("init, iTime(,M15,0)=", iTime(NULL, PERIOD_M15, 0) ,
" iOpen(,M15,0)=", iOpen(NULL, PERIOD_M15, 0) );
Print("init, iTime(,M30,0)=", iTime(NULL, PERIOD_M30, 0) ,
" iOpen(,M30,0)=", iOpen(NULL, PERIOD_M30, 0) );
Hier das Ergebnis:
- für den 1M-Chart: Die iTime-Funktion liefert für die jüngste Kerze den Wert 07:53 Uhr. Das ist richtig wegen des Unterschieds zwischen TimeCurrent() und TimeLocal().
- für den 5M-Chart: Die iTime-Funktion liefert für die jüngste Kerze den Wert 14:30 Uhr vom gestern (06.07.2017). Das ist falsch! Warum?
- für den 15M-Chart: Die iTime-Funktion liefert für die jüngste Kerze den Wert 14:30 Uhr vom gestern (06.07.2017). Das ist falsch! Warum?
- für den 30M-Chart: Die iTime-Funktion liefert für die jüngste Kerze den Wert 14:00 Uhr vom gestern (06.07.2017). Das ist falsch! Warum?
Noch ein Hinweis: Das Ergebnis für den 1M-Chart ist wohl deshalb richtig, weil im geöffneten Chart-Window der 1M-Chart eingestellt ist.
3) Kurz zusammengefasst:
Die iTime- und die iOpen-Fuktionen liefern in der Init-Phase die richtigen Werte nur für die Zeitebene, die im Chart-Window geöffnet ist. Für die anderen Zeitebenen werden veraltete Werte geliefert. Ist das immer so oder was mache ich falsch?
Übrigens hatte ich auch mal die Funktion "RefreshRates();" ausprobiert. Sie hatte den Wert "false" geliefert. Demnach müssten die Daten eigentlich aktuell sein.
Ich hoffe, dass der Sachverhalt jetzt klar geworden ist.
Viele Grüße
Andreas