Merkmale der Sprache mql4, Feinheiten und Techniken - Seite 14

 
Hinweis für Entwickler.


https://docs.mql4.com/ru/basis/types/integer


Der C++-Standard garantiert nur die Größe des Typs char. Die Längen der anderen Typen sind implementierungsspezifisch. Die Übereinstimmungstabelle ist falsch und kann zu undefiniertem Verhalten führen.

Целые типы - Типы данных - Основы языка - Справочник MQL4
Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Целые типы представлены в языке MQL4 одиннадцатью видами. Некоторые из типов могут использоваться вместе с другими, если этого требует логика программы, но при этом необходимо иметь ввиду правила преобразования типов. В таблице приведены характеристики каждого типа. Кроме того, в...
 
Kommentare, die sich nicht auf dieses Thema beziehen, wurden nach "Fragen von MQL4 MT4 MetaTrader 4 Anfängern" verschoben.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2018.12.01 11:15

Super-Bremse Design
string Str[];
const int handle = FileOpen(FileName, FILE_READ | FILE_ANSI | FILE_TXT);  

FileReadArray(handle, Str);

Das Lesen einer 40-MB-Datei mit 1 Million Zeilen dauert 18 Sekunden.


Das gleiche Ergebnis, aber anders gemacht

  uchar Bytes[];
  const int handle = FileOpen(FileName, FILE_READ | FILE_BIN);
  
  FileReadArray(handle, Bytes);

  string Str[];
  StringSplit(CharArrayToString(Bytes), '\n', Str);

Ist bereits in 0,5 Sekunden erledigt.


 

16Gb RAM mit Aufgaben überlastet. Chrome stürzte ab, MT5 mit laufender Optimierung - kein Problem. Interessanter ist jedoch der MT4.

Die Indikatoren funktionieren noch, aber die Expert Advisors sind wegen "out of range" aufgrund der fehlenden ArrayResize-Ergebnisprüfung stehen geblieben.

Ich möchte nicht immer ArrayResize prüfen, aber hier ist eine Bestätigung, dass das Fehlen dieser Prüfung kann zum Beispiel einen Kampf Expert Advisor auf VPS zu stoppen.


Das einzige, was ich nicht verstehen kann ist, wie das Ergebnis "außerhalb des Bereichs" ist, wenn ArrayResize zuvor mit einer großen Reserve getan wurde?

 
fxsaber:

16Gb RAM mit Aufgaben überlastet. Chrome stürzte ab, MT5 mit laufender Optimierung - kein Problem. Interessanter ist jedoch der MT4.

Die Indikatoren funktionieren noch, aber die Expert Advisors sind wegen "out of range" aufgrund der fehlenden ArrayResize-Ergebnisprüfung stehen geblieben.

Ich möchte nicht immer ArrayResize prüfen, aber hier ist eine Bestätigung, dass das Fehlen dieser Prüfung kann zum Beispiel einen Kampf Expert Advisor auf VPS zu stoppen.


Das einzige, was ich nicht verstehen kann ist, wie es bekam "außerhalb des Bereichs", wenn ArrayResize zuvor mit einer großen Reserve getan wurde?

einfach :-) das gilt für die meisten Sprachen/Systeme.

Reservieren Sie virtuellen Speicher, und als mir der physische Speicher ausging, konnte ich keine freie Seite finden. Wir bekamen eine Prozessorausnahme, die sich nach einer Reihe von Verarbeitungen als Out-of-Range

Übrigens, die Tatsache, dass MT überhaupt nicht abgestürzt ist, bestätigt die Qualität der Verarbeitung :-)

 

Schwerer Fehler beim Thema Ordnung in der Geschichte. Die Sortierung nach Geschäftsschluss ist leider nicht immer der Fall.

Skript prüfen

#property strict

void OnStart()
{
  datetime time = INT_MAX;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      if (OrderCloseTime() > time)
      {
        Print(time);
        OrderPrint();
        
//        break;
      }
      
      time = OrderCloseTime();
    }
}


Warum ein solch elementarer Code nicht sofort für Selbsttests geschrieben werden konnte, ist ein Rätsel.

Es ist auch ein Rätsel: Wie kann es sein, dass die Aufträge nicht nach Zeit sortiert sind? Ich stelle diese Frage, weil ich einen benutzerdefinierten Tester in einer QB verwendet habe. Und logischerweise, da der Auftrag in die Geschichte eingegangen ist, ist die Aufzeichnung davon später als die, die vorher eingegangen sind. Wie man an dieser Logik rütteln kann, ist überhaupt nicht klar.

Möglicherweise sind die Aufträge auf verschiedenen MT5-Servern gespeichert und dieses Durcheinander entsteht bei der Synchronisierung. Ich hoffe, dies ist ein Fehler des Terminals und nicht des MT4-Servers. Ich hoffe auch, dass dies nicht mit dem Handel in MT geschieht.

 
fxsaber:

Schwerer Fehler beim Thema Ordnung in der Geschichte. Die Sortierung nach Geschäftsschluss ist leider nicht immer der Fall.

Skript prüfen


Warum ein solch elementarer Code nicht für einen sofortigen Selbsttest geschaffen werden konnte, ist ein Rätsel.

Es ist auch ein Rätsel: Wie kann es sein, dass die Aufträge nicht nach Zeit sortiert sind? Ich stelle diese Frage, weil ich einen benutzerdefinierten Tester in einer QB verwendet habe. Und da der Auftrag in die Geschichte eingegangen ist, ist er logischerweise später aufgezeichnet worden als die Aufträge, die vorher eingegangen sind. Wie an dieser Logik zu rütteln ist, ist überhaupt nicht klar.

Möglicherweise sind die Aufträge auf verschiedenen MT5-Servern gespeichert und dieses Durcheinander entsteht bei der Synchronisierung. Ich hoffe, dies ist ein Fehler des Terminals und nicht des MT4-Servers. Ich hoffe auch, dass dies nicht mit dem Handel in MT geschieht.

Haben Sie versucht, die Sortierung im Kontoverlauf zu ändern?

 
Artyom Trishkin:

Haben Sie versucht, die Sortierung im Kontoverlauf zu ändern?

Dies hat keinen Einfluss auf das Ergebnis.

 
Artyom Trishkin:

Haben Sie versucht, die Sortierung im Kontoverlauf zu ändern?

Ja, es sollte keine Auswirkungen haben. Nur die Anzahl der Bestellungen auf der Registerkarte Kontoverlauf ist davon betroffen. Das muss man im Auge behalten.

 
fxsaber:

Dies hat keinen Einfluss auf das Ergebnis.

Die Schließzeit der Position wird vom Server angegeben.