class A { public:
int m;
A() { Alert("A"); m=1; }
};
class B { public:
B() { Alert("B"); static A a; Alert("a.m==",a.m); Alert("&a==",&a);}
};
B b;
voidOnStart()
{
};
Bei der Ausführung erhalten wir die folgende Reihenfolge der Warnungen:
B a.m==0 &a==0 A
Das heißt, dass die statische Variable zum Zeitpunkt des Zugriffs noch nicht initialisiert wurde. Auch der Zeiger ist null. Er wurde einfach übersprungen und wir können sicher weitergehen.
Entweder Sie initialisieren die Variable und machen weiter oder Sie brechen die Kompilierung mit einem Fehler ab.
Wenn jedoch eine Rekursion von gegenseitig referenzierten Klassen auftritt, sollte die Kompilierung abgebrochen werden.
Wie kann ich eine Array-Datei mit meinem EA verbinden?
Zunächst schreibt das Skript ein Array:
Ich verbinde die Datei mit dem EA:
Beim Kompilieren treten Fehler auf:
'??????????????????????????t????...' - Bezeichner ist zu lang mas.dat 1 1
'' - unbekanntes Symbol mas.dat 1 3015
Ihr Skript sollte eine Datei mas.mqh erzeugen, die ein Array von uchar-Typen mit Bytes Ihrer Daten enthält. Wenn die Datei beispielsweise drei Byte groß ist, sollte der Inhalt der Datei mas.mqh wie folgt aussehen:
uchar mass[3] = {25, 127, 89};
Die generierte Array-Masse ist das, was Sie in Ihrem Programm verwenden sollten.
Sie müssen eine Datei nicht zehntausendmal von der Festplatte lesen, dafür gibt es den Festplatten-Cache, von dem ich zwar nicht weiß, ob er in diesem speziellen Fall verwendet wird, aber Sie sollten ihn überprüfen und messen, bevor Sie Krücken erfinden.
Wenn ich einen einzelnen Lauf im MT5 unterbreche, ist nur die Grafik der Saldenänderung sichtbar. Aber Handel und Aufträge sind nicht verfügbar.
Die Verwendung des Visualisierungsmodus ist wegen möglicher zusätzlicher langsamer Berechnungen durch MQLInfoInteger(MQL_VISUAL_MODE) nicht immer geeignet.
Ist es möglich, die Verfügbarkeit aller Informationen während des Backtests (ohne Visualisierung) hinzuzufügen, wie es in MT4 der Fall ist?
Vielen Dank für die angebotene Lösung. Alles funktioniert.
Es wäre viel schneller, die gesamte Array-Datei in den Speicher zu lesen und dann mit ihr zu arbeiten.
Wie kann ich eine Array-Datei mit meinem EA verbinden?
Zunächst schreibt das Skript ein Array:
Ich verbinde die Datei mit dem EA:
Beim Kompilieren treten Fehler auf:
'??????????????????????????t????...' - Bezeichner ist zu lang mas.dat 1 1
'' - unbekanntes Symbol mas.dat 1 3015
Schwerwiegende Fehler bei statischen Variablen, z.B. dieser Code:
Bei der Ausführung erhalten wir die folgende Reihenfolge der Warnungen:
B
a.m==0
&a==0
A
Das heißt, dass die statische Variable zum Zeitpunkt des Zugriffs noch nicht initialisiert wurde. Auch der Zeiger ist null. Er wurde einfach übersprungen und wir können sicher weitergehen.
Entweder Sie initialisieren die Variable und machen weiter oder Sie brechen die Kompilierung mit einem Fehler ab.
Wenn jedoch eine Rekursion von gegenseitig referenzierten Klassen auftritt, sollte die Kompilierung abgebrochen werden.
Wie kann ich eine Array-Datei mit meinem EA verbinden?
Zunächst schreibt das Skript ein Array:
Ich verbinde die Datei mit dem EA:
Beim Kompilieren treten Fehler auf:
'??????????????????????????t????...' - Bezeichner ist zu lang mas.dat 1 1
'' - unbekanntes Symbol mas.dat 1 3015
Ihr Skript sollte eine Datei mas.mqh erzeugen, die ein Array von uchar-Typen mit Bytes Ihrer Daten enthält. Wenn die Datei beispielsweise drei Byte groß ist, sollte der Inhalt der Datei mas.mqh wie folgt aussehen:
Die generierte Array-Masse ist das, was Sie in Ihrem Programm verwenden sollten.
Ich glaube nicht, dass der Optimierer die Datei zehntausende Male öffnen, lesen und schließen muss.
Im Debug-Modus für historische Daten gibt MQLInfoInteger(MQL_VISUAL_MODE) immer true zurück.