Bibliotheken: MultiTester - Seite 9

 
fxsaber:

Jetzt können Sie den Tester völlig frei automatisieren.

Eines der realen Anwendungsbeispiele (alles wird automatisch durchgeführt)

  1. Alle Symbole werden genommen und die folgenden Schritte werden für jedes Symbol durchgeführt.
  2. Ich starte die Optimierung.
  3. Am Ende des besten Durchlaufs werden Daten entnommen und daraus (eingestellte Bereiche von Eingabeparametern) mehrere Aufgaben zur Optimierung gebildet.
  4. Alle Optimierungen aus Punkt 3 werden durchgeführt.
  5. Die besten Durchläufe werden aus allen Optimierungen aus Punkt 4 entnommen und als Sets für den Portfoliohandel gespeichert.


Es hat sich herausgestellt, dass es sich um einen sehr leistungsfähigen Marktscanner und TS-Anpasser handelt. TK-Quellen werden für solche Manipulationen nicht benötigt.

 
// Beispiel für das Laden einer Set-Datei in den Tester.
#property script_show_inputs

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/de/code/26132

input string inFileName = "SetFile.set"; // Datei einstellen

string FileToString( const string FileName )
{
  ushort Buffer[];
  
  return(FileLoad(FileName, Buffer) ? ShortArrayToString(Buffer) : NULL);
}

void OnStart()
{  
  MTTESTER::SetSettings("[TesterInputs]\n" + FileToString(inFileName));
}
Ähnlich verhält es sich mit den ini-Dateien des Testers.
 
Dankeschön
 
Die Bibliothek wurde für MT5 build2209+ aktualisiert.
 
fxsaber:

Es stellte sich heraus, dass es ein sehr leistungsfähiger Marktscanner und TS-Einsteller ist.

#property script_show_inputs

#include <fxsaber\MultiTester\MultiTester.mqh> // https://www.mql5.com/de/code/26132
#include <fxsaber\MultiTester\Task.mqh>

input bool OnlyCustomSymbols = true; // Nur benutzerdefinierte Zeichen
input bool AllSymbols = false;       // Alle Zeichen oder Strom

void Add( const string SymbName )
{
  TesterSettings.Add(NULL, SymbName, 0, 0, 0, TASK::InitBase, TASK::DeinitBase);

  for (int i = 0; i < ::inAmount; i++)
    TesterSettings.Add(NULL, NULL, 0, 0, 0, TASK::InitSub, TASK::DeinitSub);
}

// Diese Funktion ist für die Erstellung der Aufgabenliste zuständig.
void SetTesterSettings()
{
  if (AllSymbols)
    // Suche nach allen Symbolen in der Marktübersicht.
    for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
    {
      const string Name = SymbolName(i, true);

      if (!OnlyCustomSymbols || SymbolInfoInteger(Name, SYMBOL_CUSTOM))
        Add(Name);
    }
  else if (!OnlyCustomSymbols || SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM))
    Add(_Symbol);
}


Der Expert Advisor sollte haben

sinput int inMinTrades = 500; // Mindestanzahl von Geschäften (Positionen).
sinput int inMaxTrades = 90000; // Maximale Anzahl von Geschäften (Positionen).

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}
 
Ein paar Fallstricke wurden umgangen. Aktualisiert.
 

Ich weiß nicht, wie es bei früheren Versionen war. Aber die neueste Version kann einen Test für dasselbe Instrument mehrmals durchführen.

Done erscheint im Protokoll, dann leer (Start erscheint nicht), und das Terminal hat gleichzeitig einen neuen Durchlauf gestartet. Es scheint so zu sein, dass else if (IsRun = (Init = TesterSettings.Init(Pos)) && TesterSettings.Run(Pos)) false zurückgibt, weil TesterSettings.Run(Pos) false zurückgegeben hat. Und beim nächsten Durchlauf des Zeitgebers wird if (MTTESTER::IsReady()) false zurückgeben, so dass eine Warteschleife entsteht. TesterSettings.Run(Pos)) selbst gibt false zurück, das scheint wegen der Zeitüberschreitung trivial zu sein, d.h. es wartet einfach nicht und beendet sich.

 

traveller00:

TesterSettings.Run(Pos)) false zurückgibt, scheint aufgrund von Timeout trivial zu sein, d. h. es wird nicht gewartet und der Vorgang beendet.

Wenn ja, versuchen Sie, diese Zahl zu erhöhen.

  static bool ClickStart( const bool Check = true, const int Attempts = 5 )

Ich hatte noch nie einen Fall, in dem sich die Start-Schaltfläche nach dem Drücken nicht für längere Zeit in eine Stop-Schaltfläche verwandelt hätte.


Ich habe Example3 für hundert Zeichen laufen lassen und alles hat gut funktioniert.

 
Ja, das habe ich für mich getan, ich habe sie auf 50 erhöht. Aber nur für den Fall, dass jemand anderes ein ähnliches Problem hat oder es in der allgemeinen Version optimieren möchte.
 
traveller00:
Ja, das habe ich für mich getan, ich habe sie auf 50 erhöht. Aber nur für den Fall, dass jemand anderes ein ähnliches Problem hat oder es in der allgemeinen Version optimieren möchte.

Ich habe die Anzahl der Versuche protokolliert, die nötig waren, um den Status der Schaltfläche zu ändern. Interessante Ergebnisse.


ZY Vielleicht wirkt sich dieser Fehler noch aus.