Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 71

 

fxsaber:

Diskussion des Artikels "Visualisierung der Handelsstrategieoptimierung im MetaTrader 5".

fxsaber, 2018.02.22 08:39

Im Rahmenmodus werden OnInit, OnDeinit, OnTick, OnTrade, OnTradeTransaction und OnTimer ignoriert. Nur OnChartEvent funktioniert.

Natürlich ist aufgrund von OnChartEvent eine obligatorische Überprüfung des Frame-Modus-Flags erforderlich.

Woher nehmen Sie dieses unbedingte Vertrauen? :-)

 
Dennis Kirichenko:

Wie können Sie so sicher sein? :-)

Aus der Praxis, natürlich.

 

Eine Frage also. Ist der Frame-Modus ein Modus, der sich allgemein auf Tests bezieht oder nicht?

 
Dennis Kirichenko:

Eine Frage also. Ist der Frame-Modus ein Modus, der generell für Tests gilt oder nicht?

Indirekt schon. Allerdings kann der Expert Advisor in diesem Modus nur vom Tester im Terminal gestartet werden.

 

GUT. Und wenn der Expert Advisor hat die OnTick() Handler, dann was, es wird nicht im Frame-Modus arbeiten?

Imho sollten wir hier klarstellen, dass Frame-Handler vom Terminal selbst ausgeführt werden, während alles, was zum Testen üblich ist (OnTick(), OnTrade() usw.), an Test-Agenten übergeben wird. ), werden an die Prüfer weitergegeben. Der Frame-Modus ist also ein spezieller zusammengesetzter Testmodus, bei dem die Agenten mit dem Terminal interagieren.

Es geht also folgendermaßen...


Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Merkmale der Sprache mql5, Feinheiten und Tricks

fxsaber, 2018.02.22 09:22

Indirekt gilt sie. Allerdings kann der EA in diesem Modus nur vom Tester selbst im Terminal ausgeführt werden.


Und warum indirekt? Zum Beispiel kann eine normale Optimierung auch nur im Tester durchgeführt werden.

 
Dennis Kirichenko:

GUT. Und wenn der Expert Advisor hat die OnTick() Handler, dann was, es wird nicht im Frame-Modus arbeiten?

Imho sollten wir hier klarstellen, dass Frame-Handler vom Terminal selbst ausgeführt werden, während alles, was für das Testen üblich ist (OnTick(), OnTrade(), etc.), an Test-Agenten übergeben wird. ), werden an die Prüfer weitergegeben. Der Frame-Modus ist also ein spezieller zusammengesetzter Testmodus, bei dem die Agenten mit dem Terminal interagieren.

Das geht so.



Und warum indirekt? Zum Beispiel kann die normale Optimierung nur im Tester durchgeführt werden.

Denn es handelt sich um einen Kampfexperten-Berater, auch im Frame-Modus. Deshalb müssen wir das Frame-Flag in OnChartEvent überprüfen, da sonst diese Art von Problemen auftreten kann

sinput uint Range = 100;

#define  SETRANGE(A, START, STEP, END) ParameterSetRange(#A, true, A, START, STEP, END)

void OnTesterInit() { SETRANGE(Range, 0, 1, Range); }

void OnTesterDeinit() {}

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
  static const bool IsFrame = MQLInfoInteger(MQL_FRAME_MODE);
  
//  if (!IsFrame) // без этой проверки Терминал (не только Агент) начнет выставлять ордера на реальном счете во время запуска Оптимизации
    OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0);
}


Dies scheint das erste Mal zu sein, dass dies geäußert wird. Das bedeutet, dass Market Products eine unangenehme Schwachstelle schafft... Und es ist sehr schwer, diese Schwachstelle zu umgehen. Und es ist sehr schwierig, sie zu entdecken.

 
fxsaber:

Weil es ein Kampf-EA ist, auch im Frame-Modus. Dies ist der Grund, warum Sie das Frame-Flag in OnChartEvent überprüfen müssen, da sonst diese Art von Problemen auftreten kann

Dies scheint das erste Mal zu sein, dass dies geäußert wird. Das bedeutet, dass Market Products eine unangenehme Schwachstelle schafft... Und diese Schwachstelle ist sehr schwer zu umgehen. Ähnlich schwierig ist es, sie zu erkennen.

Aber! Wenn das stimmt, dann ist es imho ein fehlerhafter Betrieb des EA im Testmodus...

Gut, dass Sie es bemerkt haben!

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2018.02.27 08:01

Schlussfolgerung zu EAs auf OBJ_CHART

  • OnInit, OnDeinit, globaler Konstruktor/Destruktor und OnChartEvent funktionieren.
  • OnTimer, OnTick und OnBookEvent funktionieren nicht.
  • Es werden nur CHARTEVENT_CHART_CHANGE und benutzerdefinierte Ereignisse erfasst.
  • Durch OnChartEvent+EventChartCustom EA ist es möglich, "Ereignisse" für OnTimer und OnTick zu erstellen, aber nicht für OnBookEvent.

Daher ist es möglich, jeden Expert Advisor zu einem vollwertigen Handelsinstrument zu machen, das auf jeder Art von Chart funktioniert (OnTimer + OnTick), indem man den entsprechenden Indikator einfügt(Beispiel).

Lf OBJ_CHART ist durch CHART_IS_OBJECT definiert.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Diskussion über "Verwaltete Optimierung: die Annealing-Methode"

fxsaber, 2018.02.28 08:45

Die Datei tester_file wird nur gelesen, wenn sie zum Zeitpunkt der Kompilierung vorhanden war (der Inhalt spielt keine Rolle).

Wenn mq5 kompiliert wird, obwohl es keine entsprechende Datei gab, wird auch deren weitere Existenz in EX5 nicht wahrgenommen.

Wenn Sie also in OnTesterInit eine Datei für tester_file erzeugen, stellen Sie sicher, dass Sie den Expert Advisor zumindest mit einer leeren übergebenen Datei kompilieren.

Wenn die Richtlinie tester_file vorhanden ist, funktionieren die Caches des Optimierers nicht.

 
Und Sie können keine Dateien aus dem Ordner Files_Common über tester_file einbinden...