Bibliotheken: MultiTester - Seite 16

 

Der bequemste Weg, um die Geschichte der Ticks herunterladen (führen Sie den Expert Advisor im Terminal).

#property description "Downloads tickt durch Tester".

sinput datetime inFromDate = D'2019.01.01'; // Ab welchem Datum sollen Ticks hochgeladen werden?
sinput bool inAllSymbols = false;           // Nach allen Zeichen (true) oder dem aktuellen Zeichen (false)

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

string PrevTesterSettings = NULL;

string GetMyName( void )
{
  return(StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Experts\\")));
}

bool RunMe( const datetime FromDate, const bool AllSymbols = false )
{
  const string Str = "[Tester]" +
                     "\nExpert=" + GetMyName() +
                     "\nSymbol=" + _Symbol +
                     "\nOptimization=" + (AllSymbols ? "3" : "0") +
                     "\nModel=4" +
                     "\nFromDate=" + TimeToString(FromDate, TIME_DATE) +
                     "\nToDate=" + TimeToString(TimeCurrent(), TIME_DATE) +
                     "\nForwardMode=0" +
                     "\nProfitInPips=1" +
                     "\nOptimizationCriterion=0" +
                     "\nVisual=0";
                     
  return(MTTESTER::SetSettings2(Str) && MTTESTER::ClickStart());
}

int OnInit()
{
  bool Res = !MQLInfoInteger(MQL_TESTER) && EventSetTimer(1);

  if (Res = Res && MTTESTER::GetSettings(PrevTesterSettings))
    if (!(Res = RunMe(inFromDate, inAllSymbols)))
      MTTESTER::SetSettings2(PrevTesterSettings);

  return(Res ? INIT_SUCCEEDED : INIT_FAILED);
}

void OnTimer()
{
  if (MTTESTER::IsReady())
  {
    MTTESTER::SetSettings2(PrevTesterSettings);
    
    if (inAllSymbols)
      MTTESTER::CloseNotChart();

    ExpertRemove();
  }
}


Danach können Sie Skripte ausführen, die mit Ticks im Terminal arbeiten und nicht eine Menge Zeit ohne Lebenszeichen warten.

 
Stanislav Korotky:

Sie können loswerden, die Notwendigkeit, Ihre eigenen MQL5-Controller für TesterSettings.Add Anrufe zu schreiben, indem Sie das Textformat der Tester übergeben Einstellungen (wie Symbole, Zeitrahmen und andere Dinge, die TesterSettings.Add in jeder Zeile übergeben werden können) unterstützen. Dann machen Sie eine universelle Expert Advisor-Controller (fügen Sie der Bibliothek), die als Eingabe einen einzigen Parameter nimmt - eine Datei mit Einstellungen und implementiert SetTesterSettings auf seiner Basis, dann der Benutzer braucht nicht zu programmieren.

Am Ende habe ich dies getan. Wir bilden einen Stapel von Aufgaben aus Ini-Dateien und schicken ihn zur Ausführung.

Aber oft gibt es Aufgaben, bei denen es notwendig ist, eine Aufgabe auf der Grundlage der Ergebnisse vorheriger Aufgaben zu bilden. Deshalb ist die ini-Variante nicht immer geeignet.


ZY Die Implementierung finden Sie hier.

 
Für diejenigen, die die Automatisierung des Testers praktizieren, empfehle ich folgende Einstellungen
MQL5\Profiles\Tester\Groups\*.txt
MQL5\Profiles\Tester\Symbols\*.txt
 
fxsaber:

Der bequemste Weg zum Herunterladen der Tick-Historie (EA im Terminal ausführen).

Danach können Sie Skripte ausführen, die mit Ticks im Terminal arbeiten und nicht eine Menge Zeit ohne Lebenszeichen warten.

Dies ist sehr nützlich, um aus der Tick-Historie von echten Symbolen benutzerdefinierte Symbole zu erstellen. Die benutzerdefinierten Symbole unterscheiden sich von den Originalsymbolen dadurch, dass sie eine vollständige Korrespondenz von Ticks und Balken aufweisen. So gibt es keine fehlerhaften Ergebnisse des Testers(Beispiel).

 
Leider ist es immer noch nicht möglich, vom Terminal aus auf die Tick-Daten mehrerer Jahre zurückzugreifen, selbst wenn die Tick-Historie im Tester heruntergeladen wird. Ich muss die Ticks erst aus dem Tester in eine Datei entladen und dann über das Terminal in ein benutzerdefiniertes Symbol laden. Hier ist ein Beispiel für einen Expert Advisor, der zunächst im Tester im Real-Tick-Modus ausgeführt werden sollte, um die Ticks zu sammeln, und dann im Terminal, um sie in ein benutzerdefiniertes Symbol zu laden.
Dateien:
 
Evgenii Kuznetsov:
Leider ist es immer noch nicht möglich, vom Terminal aus auf die Tick-Daten mehrerer Jahre zurückzugreifen, selbst wenn die Tick-Historie im Tester heruntergeladen wird. Ich muss zuerst die Ticks aus dem Tester in eine Datei entladen und sie dann über das Terminal in ein benutzerdefiniertes Symbol laden. Hier ist ein Beispiel für einen Expert Advisor, der zuerst im Tester im Real-Tick-Modus ausgeführt werden muss, um die Ticks zu sammeln, und dann im Terminal, um sie in ein benutzerdefiniertes Symbol zu laden.

Ihr Schema kann umgesetzt werden, indem Sie den Expert Advisor im Terminal ausführen, wobei MTTester.mqh verwendet wird.


Ich habe mich seit vielen Jahren nicht mehr mit der Aufgabe beschäftigt, ein benutzerdefiniertes Symbol aus Ticks zu erstellen. Seit einem Jahr - hat und da ohne Probleme Terminal nimmt Ticks. Vielleicht haben Sie nicht in Portionen anfordern und nur an den Mangel an Speicher bei der Anforderung eines großen Intervalls balk.

 
Bei Speicherknappheit würde CopyTicksRange -1 ergeben und dementsprechend könnte der Fehler durch GetLastError() herausgefunden werden, aber in meinem Fall ergab es einfach 0. Nun, die Anfragen waren Intervalle von einem Monat.
 
Evgenii Kuznetsov:
Bei Speicherknappheit würde CopyTicksRange -1 ergeben und dementsprechend könnte der Fehler durch GetLastError() herausgefunden werden, aber in meinem Fall ergab es einfach 0. Nun, die Anfragen waren Intervalle von einem Monat.

Wenn es Daten zur Reproduktion gibt, können die Entwickler sie sich ansehen und korrigieren.

 

Führen Sie einfach einen beliebigen Expert Advisor im Tester im Real-Ticks-Modus seit 2013 aus.

Führen Sie dann das Skript im Terminal aus:

void OnStart(){
   MqlTick Ticks[];
   Print("!!! ",CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, (ulong)D'2013.01.01' * 1000, (ulong)D'2013.02.01' * 1000));
}
 
Evgenii Kuznetsov:

Ja, lassen Sie einfach jeden EA im Tester im Real-Ticks-Modus seit 2013 laufen.

Dann führen Sie das Skript in das Terminal:

2020.02.12 16:35:03.435 Test6 (USDSEK,M1)       !!! 2370228