Historiendatenbank im Programm aktualisieren

WOLFRAM STEFFEN SIEGERT  

Hallo,


MT4 hat ein Problem, wenn man ein Chart eines WP, welches "längere" Zeit nicht benutzt wurde, z.B. im M5 neu öffnet und danach das Programm lädt, in dem steht:

datetime draw_time = iTime(NULL, PERIOD_H1, 1);

dann steht in draw_time nicht die Zeit, welche für die vorletzte Kerze im H1 gilt.

Das hat bei mir schwerwiegende Folgen und kann nur sofort korrigiert werden, wenn z.B. nach

F7, ohne Ändern der Variablen nur OK gedrückt wird. Danach enthält die Variable draw_Time die richtige Zeit.

Dieses Phänomen ist mir auch aufgefallen, wenn man kurz nach dem Tageswechsel dieselbe Abfrage tätigt.


Wer kennt eine Möglichkeit die Historiendatenbank z.B. im OnInit() des Programm zu aktualisieren, bevor der EA

Berechnungen anstellt?


VG

Steffen

WOLFRAM STEFFEN SIEGERT  

Hallo Carl,

ich habe gerade im MT5 nachgeschaut, die Änderung ist noch nicht aktualisiert.

Aber das Enscheidende ist ja, dass diese Änderung  nur für MT5 gilt und nicht für MT4, oder?


VG

Steffen

amando  
WOLFRAM STEFFEN SIEGERT:

Hallo Carl,


Aber das Enscheidende ist ja, dass diese Änderung  nur für MT5 gilt und nicht für MT4, oder?


VG

Steffen

stimmt

wobei man eh nur empfehlen kann, endlich auf mt5 umzustellen

lippmaje  
Vielleicht in einer Schleife LastError abfragen bis es klappt?
amando  

Probiere es mit einer sleep in der oninit

alternativ schleife ob abfragen ob der bar schin da ist


oder du errechnest dir aus den m5 balken den stundenbalken

Carl Schreiber  
WOLFRAM STEFFEN SIEGERT:

Nein, das ist auch keine elegante Lösung.

Nochmals es geht um die Bestimmung der Zeit einer Kerze im H1 aber auf einem neu geladenen Chart im M5.

Wäre die Zeit der Kerze im M5 auf einem neu geladenen M5-Chart zu ermitteln, dann würde das auch normal funktionieren.

Das ist das Problem des Thread-Race. (Übrigens MT4-Fragen gehören in einen Thread weiter unten). MT4 lädt jede TF einzeln (MT5 nur mehr M1) und da passiert es, dass der Thread des EA weiterläuft, während im Hintergrund das Terminal immer noch auf die Daten wartet.

Du musst in onTick() oder onCalculate() daher abfragen, ob alles da ist und, wenn nicht, abbrechen (return(0)) und auf einen neuen Tick warten, da bei einem Indikator ja auch Sleep() nicht funktioniert.

Das wird sicher nicht mehr geändert - da bleibt nur der Umstieg auf MT5.

Carl Schreiber  

Hier ein Kommentar zu Mt4: https://www.mql5.com/ru/forum/352980/page9#comment_18706076

Unser Test-MetaQuotes-Demo-Server für MetaTrader 4 wird nicht mehr gewartet und wird nicht zur Verwendung empfohlen.

Verwenden Sie nur MetaTrader 5.

Новая версия платформы MetaTrader 5 build 2650: Фоновая загрузка графиков и улучшения в профилировщике MQL5-кода
Новая версия платформы MetaTrader 5 build 2650: Фоновая загрузка графиков и улучшения в профилировщике MQL5-кода
  • 2020.10.12
  • www.mql5.com
В пятницу 9 октября 2020 года будет выпущена обновленная версия платформы MetaTrader 5...
Grund der Beschwerde: