Librerie: MultiTester - pagina 16

 

Il modo più comodo per scaricare la cronologia dei tick (eseguire l'Expert Advisor nel Terminale).

#property description "I download passano attraverso Tester".

sinput datetime inFromDate = D'2019.01.01'; // Da quale data caricare le zecche
sinput bool inAllSymbols = false;           // Per tutti i caratteri (true) o per il carattere corrente (false)

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/it/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();
  }
}


In seguito, è possibile eseguire gli script che lavorano con i tick nel Terminale e non aspettare molto tempo senza segni di vita.

 
Stanislav Korotky:

È possibile eliminare la necessità di scrivere il proprio controllore MQL5 per le chiamate a TesterSettings.Add supportando il formato testo delle impostazioni del passaggio del tester (come simboli, timeframe e altri elementi che possono essere passati a TesterSettings.Add in ogni riga). Quindi creare un controllore Expert Advisor universale (da aggiungere alla libreria), che prenda come input un singolo parametro - un file con le impostazioni e implementi SetTesterSettings sulla sua base, quindi l'utente non ha bisogno di programmare nulla.

Alla fine, ho fatto così. Formiamo un gruppo di task da file ini e lo inviamo per l'esecuzione.

Ma spesso ci sono compiti in cui è necessario formare un compito sulla base dei risultati di quelli precedenti. Pertanto, la variante ini non è sempre adatta.


ZY L'implementazione è qui.

 
Per coloro che praticano l'automazione del Tester, si consiglia di esaminare le seguenti impostazioni
MQL5\Profiles\Tester\Groups\*.txt
MQL5\Profiles\Tester\Symbols\*.txt
 
fxsaber:

Il modo più comodo per scaricare la cronologia dei tick (eseguire EA in Terminal).

In seguito, è possibile eseguire gli script che lavorano con i tick nel Terminale e non aspettare molto tempo senza segni di vita.

Questo è utile per creare simboli personalizzati dalla cronologia dei tick dei simboli reali. I simboli personalizzati differiscono da quelli originali per la piena corrispondenza tra tick e barre. In questo modo, non ci saranno risultati errati del Tester(esempio).

 
Purtroppo non permette ancora di accedere ai dati dei tick di diversi anni prima dal terminale, anche quando la cronologia dei tick viene scaricata nel tester. Devo prima scaricare i tick dal tester in un file e poi caricarli in un simbolo personalizzato attraverso il terminale. Ecco un esempio di Expert Advisor che dovrebbe essere eseguito prima nel tester in modalità tick reali per raccoglierli e poi nel terminale per caricarli in un simbolo personalizzato.
File:
 
Evgenii Kuznetsov:
Purtroppo non permette ancora di accedere ai dati dei tick di diversi anni prima dal terminale, anche quando la cronologia dei tick viene scaricata nel tester. Devo prima scaricare i tick dal tester in un file e poi caricarli in un simbolo personalizzato attraverso il terminale. Ecco un esempio di Expert Advisor che deve essere eseguito prima nel tester in modalità tick reali per raccoglierli e poi nel terminale per caricarli in un simbolo personalizzato.

Il vostro schema può essere implementato eseguendo l'Expert Advisor nel Terminale, dove verrà utilizzato MTTester.mqh.


Da molti anni non affronto il compito di creare un simbolo personalizzato a partire dai tick. Per un anno - ha fatto e lì senza problemi Terminal prende ticks. Forse non si richiede in porzioni e ci si accorge della mancanza di memoria quando si richiede un intervallo di tempo ampio.

 
In caso di carenza di memoria CopyTicksRange darebbe -1 e di conseguenza l'errore potrebbe essere scoperto tramite GetLastError(), ma nel mio caso ha dato semplicemente 0. Bene, le richieste erano intervalli di un mese.
 
Evgenii Kuznetsov:
In caso di carenza di memoria CopyTicksRange darebbe -1 e di conseguenza l'errore potrebbe essere scoperto tramite GetLastError(), ma nel mio caso ha semplicemente dato 0. Beh, le richieste erano intervalli di un mese.

Se ci saranno dati da riprodurre, gli sviluppatori potranno esaminarli e correggerli.

 

È sufficiente eseguire qualsiasi Expert Advisor nel tester in modalità real ticks dal 2013.

Quindi eseguire lo script nel terminale:

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:

Sì, basta eseguire qualsiasi EA nel tester in modalità real ticks dal 2013.

Quindi eseguire lo script nel terminale:

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