Optimierung beschleuinigen

 
Hallo zusammen,

ich habe das Problem, dass meine Optimierung viel zu lange dauert. Dies möchte ich beschleunigen, indem ich zum Beispiel meine Equitiy Kurve während der Optimierung abfrage. Falls diese nach einem bestimmten Zeitraum nicht den gewünschten Schwellwert erreicht hat, möchte ich diesen Schritt der Optimierung überspringen, sodass der Tester zu dem nächsten Parameter set springt, ohne unnötig in der Pampa weiter zu rechnen.

Grob gesagt möchte ich:

if(iTime(_Symbol,PERIOD_CURRENT,0) > ThresholdDate)
{
        if(AccountInfoDouble(ACCOUNT_EQUITY) > 20000)
        {
        //...JumpToNexTParameterSet...
        }
}

Was mir als Pfusch Lösung einfällt, wäre, dass ich bei erreichen des //...JumpToNextParameterSet.. ich dem EA einfach verbiete, durch mein programm durchzulaufen, sozusagen, die Ontick() blockiere.

Grobgesagt so:

OnTick()
{
        if(JumpToNextParameterSet == true)
        {
         Process the MainCode;
        }
}


Dennoch wäre dies nur eine Notlösung, da der EA quasi immernoch jeden Tick durchrechnet, diesmal nur ohne den Rattenschwanz innerhalb der OnTick().

Dokumentation zu MQL5: Ereignisbehandlung / OnTick
Dokumentation zu MQL5: Ereignisbehandlung / OnTick
  • www.mql5.com
OnTick - Ereignisbehandlung - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Claudius Marius Walter:
Hallo zusammen,

ich habe das Problem, dass meine Optimierung viel zu lange dauert. Dies möchte ich beschleunigen, indem ich zum Beispiel meine Equitiy Kurve während der Optimierung abfrage. Falls diese nach einem bestimmten Zeitraum nicht den gewünschten Schwellwert erreicht hat, möchte ich diesen Schritt der Optimierung überspringen, sodass der Tester zu dem nächsten Parameter set springt, ohne unnötig in der Pampa weiter zu rechnen.

Grob gesagt möchte ich:

Was mir als Pfusch Lösung einfällt, wäre, dass ich bei erreichen des //...JumpToNextParameterSet.. ich dem EA einfach verbiete, durch mein programm durchzulaufen, sozusagen, die Ontick() blockiere.

Grobgesagt so:


Dennoch wäre dies nur eine Notlösung, da der EA quasi immernoch jeden Tick durchrechnet, diesmal nur ohne den Rattenschwanz innerhalb der OnTick().

Ein einfacher Tipp:


OnTick() muss so schlank wie möglich werden.

Muss wirklich jeden Tick alles berechnet werden ? OnTimer nutzen.

 
Versuch einmal, wenn ein Profit, Saldostand zu einem bestimmten Zeitpunkt (Ende-Angang)/2 nicht erreicht wurde: ExpertRemove() (Ungestetst, gerade eben aus dem Bauch:)
 

In der Beschreibung von ExpertRemove (https://www.mql5.com/de/docs/common/expertremove) steht:

Hinweis

Expert wird nicht sofort beim Aufuf der Funktion ExpertRemove() gestoppt, es wird erst die Flagge für Brechen der Expertarbeit eingestellt. D.h. jedes folgendes Ereignis wird vom Experten schon nicht verarbeitet, OnDeinit() wird aufgerufen werden und Expert wird ausgeladen werden und vom Chart entfernt werden.

Der Aufruf von ExpertRemove() im Strategietester aus der Funktion OnInit() bricht den Test des aktuellen Parametersatzes ab. Ein solches Ende gilt als Initialisierungsfehler.

Wenn ExpertRemove() im Strategietester nach erfolgreicher Initialisierung eines EA aufgerufen wird, wird der Test normal mit dem Aufruf von OnDeinit() beendet und mit OnTester() abgeschlossen. In diesem Fall bleiben die gesamte Handelsstatistik und das Optimierungskriterium erhalten.

Dokumentation zu MQL5: Ereignisbehandlung / OnDeinit
Dokumentation zu MQL5: Ereignisbehandlung / OnDeinit
  • www.mql5.com
OnDeinit - Ereignisbehandlung - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
Danke an alle!

ExperRemove() funktioniert einwandfrei im Strategietester!
Grund der Beschwerde: