Analisi dei risultati dei test e ottimizzazione nel tester di strategie MetaTrader 5

 

Vediamo i risultati dei test su uno e alcuni personaggi. I test saranno condotti in modalità All ticks. Puoi usare i tuoi schemi EA multisimbolo per riprodurre il problema e condividere i tuoi risultati.

Denotiamo il problema. Per esempio, se si testa un simbolo, il tempo di prova dura 1 minuto. Se viene aggiunto un altro personaggio, il test richiede 4 minuti, non 2 come previsto. Se aggiungiamo un carattere in più (totale di 3), il test richiede 8 volte più tempo che per un carattere in più, e così via.

Cerchiamo di scoprire il motivo per cui il test richiede meno tempo del previsto. Una delle ragioni potrebbe essere la gestione scorretta della storia dell'account. Se richiediamo l'intera storia, potrebbe rallentare significativamente il tempo del test man mano che cresce. In questo caso, il tempo trascorso all'inizio del test sarà significativamente diverso dal tempo trascorso alla fine del test. Questo si vede molto bene quando ci sono molte transazioni in un test (decine di migliaia).

Se tutto è fatto correttamente rispetto al caso descritto sopra, il risultato sarà quello mostrato nella tabella qui sotto. Il tempo di prova iniziale è fisso(2017.01.01). E poi, ogni test aumenta l'intervallo di tempo di un mese. La differenza tra i risultati attuali e quelli precedenti ( colonna Differenza) sarà approssimativamente la stessa. Non c'è dipendenza dalla quantità di scambi nella storia del conto.

Nel test è stato utilizzato un Expert Advisor, in cui gli indicatori sono in esecuzione, i dati delle barre e degli indicatori sono richiesti per verificare le condizioni, e i trade sono eseguiti.

2018.01.27 18:10:50.318 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.031. Test passed in 0:00:36.641 (including ticks preprocessing 0:00:01.297).
2018.01.27 18:10:50.318 Core 1  EURUSD,M5: total time from login to stop testing 0:00:36.672 (including 0:00:00.031 for history data synchronization)
2018.01.27 18:10:50.318 Core 1  891 Mb memory used including 8 Mb of history data, 512 Mb of tick data

Il tempo totale del test in questo caso è di 37 secondi. Tempo di prova previsto usando due simboli 37 sec. x 2 = 1 min. 14 sec. E per tre simboli 37 sec. x 3 = 1 min. 51 sec.

Risultati del test per due personaggi. Tempo totale del test 2 min. 16 sec.


2018.01.27 18:13:49.957 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.031. Test passed in 0:02:16.125 (including ticks preprocessing 0:00:01.344).
2018.01.27 18:13:49.957 Core 1  EURUSD,M5: total time from login to stop testing 0:02:16.156 (including 0:00:00.046 for history data synchronization)
2018.01.27 18:13:49.957 Core 1  53911219 total ticks for all symbols
2018.01.27 18:13:49.957 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.27 18:13:49.957 Core 1  GBPUSD: generate 27742039 ticks in 0:00:01.344, passed to tester 27742039 ticks
2018.01.27 18:13:49.957 Core 1  1497 Mb memory used including 17 Mb of history data, 1024 Mb of tick data

Risultati del test per tre personaggi. Tempo totale del test 5 min. 22 sec.


2018.01.27 18:20:07.658 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.062. Test passed in 0:05:22.360 (including ticks preprocessing 0:00:03.547).
2018.01.27 18:20:07.658 Core 1  EURUSD,M5: total time from login to stop testing 0:05:22.422 (including 0:00:00.062 for history data synchronization)
2018.01.27 18:20:07.658 Core 1  86509916 total ticks for all symbols
2018.01.27 18:20:07.658 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.27 18:20:07.658 Core 1  GBPUSD: passed to tester 27742039 ticks
2018.01.27 18:20:07.658 Core 1  USDJPY: generate 32598697 ticks in 0:00:03.547, passed to tester 32598697 ticks
2018.01.27 18:20:07.658 Core 1  2090 Mb memory used including 26 Mb of history data, 1472 Mb of cached tick data (total memory for tick data 1663 Mb)


 

Ora cerchiamo di scoprire se e quanto gli scambi influenzano la durata del test. Disabilitiamo completamente il blocco per il controllo delle condizioni e l'esecuzione di operazioni nell'Expert Advisor e conduciamo nuovamente una serie di test per uno e più simboli. Lasciamo le maniglie degli indicatori e richiediamo dati su barre e indicatori.

Quando si testa un simbolo, la durata del test è diminuita di 13 secondi rispetto al test precedente per l'anno dei dati(2017.01.01 - 2018.01.01). Il tempo di prova previsto con due simboli è di 24 secondi. x 2 = 48 sec. E per tre caratteri 24 sec. x 3 = 1 min. 12 sec.


2018.01.27 16:20:50.271 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.047. Test passed in 0:00:23.640.
2018.01.27 16:20:50.271 Core 1  EURUSD,M5: total time from login to stop testing 0:00:23.687 (including 0:00:00.047 for history data synchronization)
2018.01.27 16:20:50.271 Core 1  823 Mb memory used including 8 Mb of history data, 512 Mb of tick data

Quando si testano due caratteri, la durata del test è diminuita di 31 secondi rispetto al test precedente per l'anno dei dati(2017.01.01 - 2018.01.01).


2018.01.27 16:24:23.759 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.047. Test passed in 0:01:44.469 (including ticks preprocessing 0:00:01.422).
2018.01.27 16:24:23.759 Core 1  EURUSD,M5: total time from login to stop testing 0:01:44.516 (including 0:00:00.047 for history data synchronization)
2018.01.27 16:24:23.759 Core 1  53911219 total ticks for all symbols
2018.01.27 16:24:23.759 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.27 16:24:23.759 Core 1  GBPUSD: generate 27742039 ticks in 0:00:01.422, passed to tester 27742039 ticks
2018.01.27 16:24:23.759 Core 1  1409 Mb memory used including 17 Mb of history data, 1024 Mb of tick data

Quando si testano tre personaggi, la durata del test è diminuita di 1 minuto. 7 sec. rispetto al test precedente per l'anno dati(2017.01.01.01 - 2018.01. 01).


2018.01.27 16:30:07.790 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.062. Test passed in 0:04:21.141 (including ticks preprocessing 0:00:04.312).
2018.01.27 16:30:07.790 Core 1  EURUSD,M5: total time from login to stop testing 0:04:21.203 (including 0:00:00.062 for history data synchronization)
2018.01.27 16:30:07.790 Core 1  86509916 total ticks for all symbols
2018.01.27 16:30:07.790 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.27 16:30:07.790 Core 1  GBPUSD: passed to tester 27742039 ticks
2018.01.27 16:30:07.790 Core 1  USDJPY: generate 32598697 ticks in 0:00:04.312, passed to tester 32598697 ticks
2018.01.27 16:30:07.790 Core 1  1863 Mb memory used including 26 Mb of history data, 1408 Mb of cached tick data (total memory for tick data 1663 Mb)

//---

I tempi di prova previsti non vengono rispettati neanche in questa serie.

 

Ora proviamo a disabilitare i blocchi per ottenere le maniglie degli indicatori e richiedere i dati. Essenzialmente è solo un Expert Advisor vuoto ora, che testa solo una condizione su un evento di formazione di una nuova barra.

Quando si testa un simbolo, la durata del test è diminuita di 8 secondi rispetto al test precedente per l'anno dei dati(2017.01.01 - 2018.01.01). Il tempo di prova previsto con due simboli è di 16 sec. x 2 = 32 sec. Per tre caratteri 16 sec. x 3 = 48 sec. Per quattro caratteri 16 sec. x 4 = 1 min. 4 sec.


2018.01.27 17:49:39.855 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.062. Test passed in 0:00:16.438 (including ticks preprocessing 0:00:01.281).
2018.01.27 17:49:39.855 Core 1  EURUSD,M5: total time from login to stop testing 0:00:16.500 (including 0:00:00.062 for history data synchronization)
2018.01.27 17:49:39.855 Core 1  787 Mb memory used including 8 Mb of history data, 512 Mb of tick data

Per il test a due caratteri, la durata del test è diminuita di 40 secondi rispetto al test precedente per l'anno dei dati(2017.01.01 - 2018.01. 01).


2018.01.27 17:51:35.343 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.032. Test passed in 0:01:04.593 (including ticks preprocessing 0:00:01.359).
2018.01.27 17:51:35.343 Core 1  EURUSD,M5: total time from login to stop testing 0:01:04.625 (including 0:00:00.048 for history data synchronization)
2018.01.27 17:51:35.343 Core 1  53911219 total ticks for all symbols
2018.01.27 17:51:35.343 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.27 17:51:35.343 Core 1  GBPUSD: generate 27742039 ticks in 0:00:01.359, passed to tester 27742039 ticks
2018.01.27 17:51:35.343 Core 1  1336 Mb memory used including 17 Mb of history data, 1024 Mb of tick data

Quando si testano tre caratteri, la durata del test è diminuita di 1 minuto e 38 secondi rispetto al test precedente per l'anno dei dati(2017.01.01.01 - 2018.01. 01).


2018.01.27 17:55:00.938 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.047. Test passed in 0:02:41.000 (including ticks preprocessing 0:00:02.766).
2018.01.27 17:55:00.938 Core 1  EURUSD,M5: total time from login to stop testing 0:02:41.047 (including 0:00:00.063 for history data synchronization)
2018.01.27 17:55:00.938 Core 1  86509916 total ticks for all symbols
2018.01.27 17:55:00.938 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.27 17:55:00.938 Core 1  GBPUSD: passed to tester 27742039 ticks
2018.01.27 17:55:00.938 Core 1  USDJPY: generate 32598697 ticks in 0:00:02.766, passed to tester 32598697 ticks
2018.01.27 17:55:00.938 Core 1  1892 Mb memory used including 26 Mb of history data, 1536 Mb of cached tick data (total memory for tick data 1663 Mb)

Proviamo un altro test su quattro caratteri per l'anno dei dati(2017.01.01.01 - 2018.01. 01).


2018.01.27 18:00:24.607 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:02.266. Test passed in 0:04:30.140 (including ticks preprocessing 0:00:05.125).
2018.01.27 18:00:24.607 Core 1  EURUSD,M5: total time from login to stop testing 0:04:32.406 (including 0:00:02.375 for history data synchronization)
2018.01.27 18:00:24.607 Core 1  107227636 total ticks for all symbols
2018.01.27 18:00:24.607 Core 1  AUDUSD: generate 20717720 ticks in 0:00:05.125, passed to tester 20717720 ticks
2018.01.27 18:00:24.607 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.27 18:00:24.607 Core 1  GBPUSD: passed to tester 27742039 ticks
2018.01.27 18:00:24.607 Core 1  USDJPY: passed to tester 32598697 ticks
2018.01.27 18:00:24.607 Core 1  1680 Mb memory used including 35 Mb of history data, 1280 Mb of cached tick data (total memory for tick data 2047 Mb)

//---

Anche in questa serie non vengono rispettati i tempi di prova previsti.

 

Domanda:

È possibile creare uno schema EA multisimbolo in MQL in modo che la durata dei test non aumenti ripetutamente quando si aggiungono caratteri al test?

//---

Se questo non è possibile, una delle opzioni per gli sviluppatori del terminale è quella di aggiungere una modalità in più, quando è possibile eseguire il test simbolo per simbolo, piuttosto che tutti i simboli in una volta. Questo produrrebbe alla fine il tempo di prova previsto. Il punto è che gli EA multisimbolo sono molto spesso utilizzati semplicemente per quei casi in cui:

  1. Sono necessari più dati per i test.
  2. Per testare l'algoritmo di trading su una maggiore varietà di comportamenti di prezzo, condizioni (spread, livelli di stop/limite), ecc. con gli stessi parametri.

È per questi casi che abbiamo bisogno di una nuova modalità che ci permetterebbe di ridurre significativamente la durata dei test e ottimizzare i parametri. E già per il test finale per testare tutti i simboli simultaneamente.

 

Consulente esperto

#include <TesterBenchmark.mqh> // https://www.mql5.com/ru/code/18804

input int AmountSymbols = 1;

double Sum2 = 0;
const bool Init = EventSetTimer(1);

double GetBid( const string Symb )
{
  static MqlTick Tick;      

  return(SymbolInfoTick(Symb, Tick) ? Tick.bid : 0);
}

void OnTimer()
{
  static const string Symbols[] = {"EURUSD", "GBPUSD", "AUDUSD"};
  
  for (int i = 0; i < AmountSymbols; i++)    
    Sum2 += GetBid(Symbols[i]);
}

void OnTick()
{
}

void OnDeinit( const int )
{
  Print(Sum2);
}

EURUSD M1 MetaQuotes-Demo, Hedge, USD, no lag, solo Core1-agent, tick reali 01.09.2017 - 26.01.2018.


Un simbolo

i = 0 Pass = 0 OnTester = 3.728 s.: Count = 9753093, 2616173.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 3.727 s.: Count = 9753093, 2616875.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


Due simboli

i = 0 Pass = 0 OnTester = 7.946 s.: Count = 9753093, 1227421.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 7.614 s.: Count = 9753093, 1280942.1 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


Tre simboli.

i = 0 Pass = 0 OnTester = 10.300 s.: Count = 9753093, 946902.2 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 10.236 s.: Count = 9753093, 952822.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


Sembra andare bene con la scalabilità.

 
fxsaber:

...

Tutto sembra essere a posto con la scalabilità.

Serve un EA dove entrano tutti i tick. Attraverso eventi personalizzati da indicatori su ogni simbolo.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Test multivaluta in MT5

fxsaber, 2016.11.13 14:04

Si tratta esattamente della chiamata OnTick. Per gli EA multivaluta ci sono solo due varianti di ortografia corretta (la seconda è difettosa)

  1. Multicurrency OnTick. Viene implementato inviando prima l'indicatore per ogni simbolo. Dove l'indicatore invia un evento personalizzato a OnCalculate. Nello stesso Expert Advisor OnChartEvent cattura l'evento personalizzato da tutti gli indicatori ed esegue la logica di trading. L'OnTick standard in questo Expert Advisor semplicemente non c'è.
  2. ...


 

Metti l'indicatore in MQL5/Indicatori

//+------------------------------------------------------------------+
//|                                            EventsSpyTickOnly.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2018, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//---
#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Перечисление событий                                             |
//+------------------------------------------------------------------+
enum ENUM_CHART_EVENT_SYMBOL
  {
   CHARTEVENT_INIT =0,         // Событие "инициализация" 
   CHARTEVENT_NO   =0,         // События отключены
   CHARTEVENT_TICK =0x00200000 // Событие "новый тик"
  };
//--- Внешние параметры
input long                    chart_id;                 // идентификатор графика-получателя события
input ushort                  custom_event_id;          // идентификатор события  
input ENUM_CHART_EVENT_SYMBOL flag_event=CHARTEVENT_NO; // флаг, определяющий тип события.
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double& price[])

  {
   if(prev_calculated==0)
     {
      EventCustom(CHARTEVENT_INIT);
      return(rates_total);
     }
//--- New tick
   if(flag_event==CHARTEVENT_TICK)
      EventCustom(CHARTEVENT_TICK);
//--- Return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Пользовательское событие                                         |
//+------------------------------------------------------------------+
void EventCustom(ENUM_CHART_EVENT_SYMBOL event)
  {
   EventChartCustom(chart_id,custom_event_id,(long)event,0.0,_Symbol);
  }
//+------------------------------------------------------------------+
 

Esaminatore del test:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2018, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
//+------------------------------------------------------------------+
//| Перечисление событий                                             |
//+------------------------------------------------------------------+
enum ENUM_CHART_EVENT_SYMBOL
  {
   CHARTEVENT_INIT =0,         // Событие "инициализация" 
   CHARTEVENT_NO   =0,         // События отключены
   CHARTEVENT_TICK =0x00200000 // Событие "новый тик"
  };
//--- Внешние параметры
input int AmountSymbols=1;
//---
static const string symbols[]={"EURUSD","GBPUSD","AUDUSD","USDJPY","USDCAD"};
long spy_indicator_handles[];
//---
double     sum2 =0;
const bool init =EventSetTimer(1);
//+------------------------------------------------------------------+ 
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   GetSpyHandles();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int)
  {
   Print(sum2);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer(void)
  {
   //Strategy();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   //Strategy();
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int    id,
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- Если было событие "тик"
   if(lparam==CHARTEVENT_TICK)
     {
      Strategy();
      return;
     }
  }
//+------------------------------------------------------------------+
//| Get bid price                                                    |
//+------------------------------------------------------------------+
double GetBid(const string Symb)
  {
   static MqlTick Tick;
   return(SymbolInfoTick(Symb, Tick)? Tick.bid : 0);
  }
//+------------------------------------------------------------------+
//| Strategy                                                         |
//+------------------------------------------------------------------+
void Strategy(void)
  {
   for(int i=0; i<AmountSymbols; i++)
      sum2+=GetBid(symbols[i]);
  }
//+------------------------------------------------------------------+
//| Получает хэндлы агентов по указанным символам                    |
//+------------------------------------------------------------------+
void GetSpyHandles(void)
  {
   string path="EventsSpyTickOnly.ex5";
//---
   ::ArrayResize(spy_indicator_handles,AmountSymbols);
//--- Пройдемся по всем символам
   for(int s=0; s<AmountSymbols; s++)
     {
      //--- Получим хэндл индикатора
      spy_indicator_handles[s]=::iCustom(symbols[s],::Period(),path,::ChartID(),0,CHARTEVENT_TICK);
      //--- Если не удалось получить хэндл индикатора
      if(spy_indicator_handles[s]==INVALID_HANDLE)
         ::Print("Failed to install agent on "+symbols[s]+"");
     }
  }
//+------------------------------------------------------------------+
 

Risultati.

1 carattere:

2018.01.28 11:10:29.325 Core 1  EURUSD,M5 (MetaQuotes-Demo): every tick generating
2018.01.28 11:10:29.325 Core 1  EURUSD,M5: testing of Experts\Test.ex5 from 2017.01.01 00:00 to 2018.01.01 00:00 started with inputs:
2018.01.28 11:10:29.325 Core 1    AmountSymbols=1

2018.01.28 11:10:49.279 Core 1  final balance 10000.00 USD
2018.01.28 11:10:49.279 Core 1  2017.12.29 23:59:59   64793248.54125572
2018.01.28 11:10:49.279 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.032. Test passed in 0:00:26.015.
2018.01.28 11:10:49.279 Core 1  EURUSD,M5: total time from login to stop testing 0:00:26.047 (including 0:00:00.032 for history data synchronization)
2018.01.28 11:10:49.279 Core 1  778 Mb memory used including 8 Mb of history data, 512 Mb of tick data

2 caratteri:

2018.01.28 11:11:49.343 Core 1  EURUSD,M5 (MetaQuotes-Demo): every tick generating
2018.01.28 11:11:49.343 Core 1  EURUSD,M5: testing of Experts\Test.ex5 from 2017.01.01 00:00 to 2018.01.01 00:00 started with inputs:
2018.01.28 11:11:49.343 Core 1    AmountSymbols=2

2018.01.28 11:13:18.421 Core 1  final balance 10000.00 USD
2018.01.28 11:13:18.421 Core 1  2017.12.29 23:59:59   411044644.6801022
2018.01.28 11:13:18.421 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.032. Test passed in 0:01:35.203 (including ticks preprocessing 0:00:01.360).
2018.01.28 11:13:18.421 Core 1  EURUSD,M5: total time from login to stop testing 0:01:35.235 (including 0:00:00.047 for history data synchronization)
2018.01.28 11:13:18.421 Core 1  53911219 total ticks for all symbols
2018.01.28 11:13:18.421 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.28 11:13:18.421 Core 1  GBPUSD: generate 27742039 ticks in 0:00:01.360, passed to tester 27742039 ticks
2018.01.28 11:13:18.421 Core 1  1330 Mb memory used including 17 Mb of history data, 1024 Mb of tick data

3 caratteri:

2018.01.28 11:14:27.847 Core 1  EURUSD,M5 (MetaQuotes-Demo): every tick generating
2018.01.28 11:14:27.847 Core 1  EURUSD,M5: testing of Experts\Test.ex5 from 2017.01.01 00:00 to 2018.01.01 00:00 started with inputs:
2018.01.28 11:14:27.847 Core 1    AmountSymbols=3

2018.01.28 11:17:43.325 Core 1  final balance 10000.00 USD
2018.01.28 11:17:43.325 Core 1  2017.12.29 23:59:59   1009249102.577681
2018.01.28 11:17:43.325 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.047. Test passed in 0:03:21.750 (including ticks preprocessing 0:00:01.047).
2018.01.28 11:17:43.325 Core 1  EURUSD,M5: total time from login to stop testing 0:03:21.797 (including 0:00:00.156 for history data synchronization)
2018.01.28 11:17:43.325 Core 1  74628939 total ticks for all symbols
2018.01.28 11:17:43.325 Core 1  AUDUSD: generate 20717720 ticks in 0:00:01.047, passed to tester 20717720 ticks
2018.01.28 11:17:43.325 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.28 11:17:43.325 Core 1  GBPUSD: passed to tester 27742039 ticks
2018.01.28 11:17:43.325 Core 1  1750 Mb memory used including 26 Mb of history data, 1408 Mb of tick data

4 caratteri:

2018.01.28 11:19:02.758 Core 1  EURUSD,M5 (MetaQuotes-Demo): every tick generating
2018.01.28 11:19:02.758 Core 1  EURUSD,M5: testing of Experts\Test.ex5 from 2017.01.01 00:00 to 2018.01.01 00:00 started with inputs:
2018.01.28 11:19:02.758 Core 1    AmountSymbols=4

2018.01.28 11:25:57.059 Core 1  final balance 10000.00 USD
2018.01.28 11:25:57.059 Core 1  2017.12.29 23:59:59   63985236406.09325
2018.01.28 11:25:57.059 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.078. Test passed in 0:07:00.531 (including ticks preprocessing 0:00:06.719).
2018.01.28 11:25:57.059 Core 1  EURUSD,M5: total time from login to stop testing 0:07:00.609 (including 0:00:00.078 for history data synchronization)
2018.01.28 11:25:57.059 Core 1  107227636 total ticks for all symbols
2018.01.28 11:25:57.059 Core 1  AUDUSD: passed to tester 20717720 ticks
2018.01.28 11:25:57.059 Core 1  EURUSD: passed to tester 26169180 ticks
2018.01.28 11:25:57.059 Core 1  GBPUSD: passed to tester 27742039 ticks
2018.01.28 11:25:57.059 Core 1  USDJPY: generate 32598697 ticks in 0:00:06.719, passed to tester 32598697 ticks
2018.01.28 11:25:57.059 Core 1  1985 Mb memory used including 35 Mb of history data, 1600 Mb of cached tick data (total memory for tick data 2047 Mb)

5 caratteri:

2018.01.28 11:27:00.683 Core 1  EURUSD,M5 (MetaQuotes-Demo): every tick generating
2018.01.28 11:27:00.683 Core 1  EURUSD,M5: testing of Experts\Test.ex5 from 2017.01.01 00:00 to 2018.01.01 00:00 started with inputs:
2018.01.28 11:27:00.683 Core 1    AmountSymbols=5

2018.01.28 11:38:47.355 Core 1  final balance 10000.00 USD
2018.01.28 11:38:47.355 Core 1  2017.12.29 23:59:59   94559190795.58774
2018.01.28 11:38:47.355 Core 1  EURUSD,M5: 26169180 ticks, 74266 bars generated. Environment synchronized in 0:00:00.266. Test passed in 0:11:54.015 (including ticks preprocessing 0:00:08.734).
2018.01.28 11:38:47.355 Core 1  EURUSD,M5: total time from login to stop testing 0:11:54.281 (including 0:00:00.500 for history data synchronization)
2018.01.28 11:38:47.355 Core 1  130637614 total ticks for all symbols
2018.01.28 11:38:47.355 Core 1  AUDUSD: generate 20717720 ticks in 0:00:01.078, passed to tester 20717720 ticks
2018.01.28 11:38:47.355 Core 1  EURUSD: generate 26169180 ticks in 0:00:01.281, passed to tester 26169180 ticks
2018.01.28 11:38:47.355 Core 1  GBPUSD: generate 27742039 ticks in 0:00:01.406, passed to tester 27742039 ticks
2018.01.28 11:38:47.355 Core 1  USDCAD: generate 23409978 ticks in 0:00:01.188, passed to tester 23409978 ticks
2018.01.28 11:38:47.355 Core 1  USDJPY: generate 32598697 ticks in 0:00:03.781, passed to tester 32598697 ticks
2018.01.28 11:38:47.355 Core 1  2735 Mb memory used including 44 Mb of history data, 2304 Mb of cached tick data (total memory for tick data 2495 Mb)
 
Non l'ho ancora eseguito, ma sembra che manchi un punto saliente qui

Forum sul trading, sistemi di trading automatico e test di strategia

Analisi dei risultati di test e ottimizzazione in MetaTrader 5 Strategy Tester

Anatoli Kazharski, 2018.01.28 09:09

Test Expert Advisor:

void OnChartEvent(const int    id,
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- Если было событие "тик"
   if(lparam==CHARTEVENT_TICK + CHARTEVENT_CUSTOM)
     {
      Strategy();
      return;
     }
  }
 
fxsaber:
Non l'ho ancora eseguito, ma sembra che manchi l'evidenziato

Il parametro lungo (lparam) viene controllato. L'identificatore dell'evento tick è contenuto in esso.

L'identificatore dell'evento utente (int id) è zero.

Può essere scritto in questo modo per renderlo più chiaro:

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int    id,
                  const long   &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- Если было пользовательское событие
   if(id>=CHARTEVENT_CUSTOM)
     {
      //--- Если было событие "тик"
      if(lparam==CHARTEVENT_TICK)
        {
         Strategy();
         return;
        }
      return;
     }
  }
Motivazione: