Librerie: MultiTester - pagina 17

 

Ho guardato il mio, in effetti per alcuni simboli non apparivano file con la cronologia dei tick, ho guardato nel log ed eccolo lì:

2020.02.12 16:02:30.144 Core 1  NZDUSD : real ticks begin from 2017.01.02 00:00:00

Ora capisco, il resto era una simulazione.


Tra l'altro MultiTester non commuta il simbolo sul terminale minimizzato, è meglio aggiungere l'apertura di una finestra prima di iniziare un nuovo passaggio. Per ora ho aggiunto tale funzione a fInit.

bool ActivateTerminalWindow(){
   HANDLE ChartWindow = (HANDLE)ChartGetInteger(0, CHART_WINDOW_HANDLE);
   if(ChartWindow){
      HANDLE TerminalWindow = GetParent(ChartWindow);
      TerminalWindow = GetParent(TerminalWindow);
      TerminalWindow = GetParent(TerminalWindow);
      if(TerminalWindow){
         ShowWindow(TerminalWindow, 3);
         return true;
      }
   }
   return false;
}
 
Evgenii Kuznetsov:

Tra l'altro MultiTester non commuta il simbolo sul terminale minimizzato, meglio aggiungere l'apertura di una finestra prima di iniziare un nuovo passaggio.

Non ho controllato, non mi è capitato.

 
fxsaber:

Alla fine ho fatto così. Formare un batch di task da file ini e inviarlo per l'esecuzione.

Forum sul trading, sui sistemi di trading automatizzati e sulla verifica delle strategie di trading

Consulenti esperti: convalidare

fxsaber, 2020.02.22 10:46 AM

Quando ho bisogno di eseguire molte attività di test diverse, uso Validate.


1. Nel Tester imposto un'attività che voglio eseguire.

2. Nella scheda Impostazioni, premo CTRL+C. Tutte le impostazioni vengono visualizzate negli appunti.

3. Con CTRL+V, copio queste impostazioni in un file ini, che inserisco nella cartella dei task.

4. In questo modo creo il numero richiesto di attività - file ini (quattro attività sullo schermo).


5. Quando lancio Validate, specifico il nome della cartella in cui si trovano i task.


Tutto qui, ora Validate con tutti i suoi trucchi eseguirà questi task.


Utilizzo MultiTester-derivati solo in casi specifici, quando ho bisogno di creare i task mentre li eseguo.

Consiglio di usare Validate per eseguire un batch di task già pronti.

 

Condividete la vostra esperienza su come eseguire correttamente GA. Ho riscontrato una situazione in cui GA trova solo uno degli estremi locali richiesti.

Per un particolare TS/simbolo capisco dove cercare, quindi eseguo il GA su diversi intervalli. Ma in generale non è chiaro come procedere.

 
fxsaber:

Vi prego di condividere la vostra esperienza su come eseguire correttamente GA. Ho riscontrato una situazione in cui GA trova solo uno degli estremi locali richiesti.

Per un particolare TS/simbolo capisco dove cercare, quindi eseguo il GA su diversi intervalli. Ma in generale non è chiaro come procedere.

Credo che ci sia stato qualcosa sull'argomento qui - https://www.mql5.com/ru/forum/87536.

Oppure chiamare l'autore(@Andrey Dik).

Чемпионат Алгоритмов Оптимизации.
Чемпионат Алгоритмов Оптимизации.
  • 2016.06.09
  • www.mql5.com
Чемпионат алгоритмов оптимизации задуман как соревнование для людей ищущих, любознательных, для которых стоять на месте означает движение назад...
 
Andrey Khatimlianskii:

Credo che ci sia stato qualcosa sull'argomento qui - https://www.mql5.com/ru/forum/87536

Oppure chiamare l'autore(@Andrey Dik).

Sto ponendo domande nel contesto dell'utilizzo di MT5-Tester. Pertanto, gli algoritmi di ottimizzazione personalizzati non sono adatti.

 
fxsaber:

Vi prego di condividere la vostra esperienza su come eseguire correttamente GA. Ho riscontrato una situazione in cui GA trova solo uno degli estremi locali richiesti.

Per un particolare TS/simbolo capisco dove cercare, quindi eseguo il GA su diversi intervalli. Ma in generale non è chiaro come procedere.

Ora smetto di testare se il drawdown è elevato.

e per rallegrare un po' il GA, faccio così:

#define  TESTER_STOP(ret) { EA_STOP = true; TesterStop(); return ret; }
double OnTester()
{
   srand((int)TimeCurrent());
// if(StartHour==20 && CountHours==22) return (-(rand() % 1000));// Lo uso se il GA ha iniziato a convergere intorno a un massimo per tempo di esecuzione

   if(EA_STOP) return (-(rand() % 1000));                                                               // test non riuscito, interrotto da un ampio drawdown

   int o_count = 0;
   for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderType() < 2) o_count++;
   }
   if(o_count < 160) return (-(rand() % 1000));                                                         // cerca almeno 160 accordi in sei mesi

   return(AccountInfoDouble(ACCOUNT_BALANCE));
}


void OnTick()
{
   if(IS_OPTIMIZATION)
   {
      double balance = AccountInfoDouble(ACCOUNT_BALANCE);
      MaxBalance = fmax(MaxBalance, balance);
      if(MaxBalance - balance > 200) TESTER_STOP();                                                     // interrompere il test con un drawdown di $200
   }


Questo è il metodo che ho testato nell'ultima settimana, ora sono molto soddisfatto di GA.

 

Nel mio ottimizzatore ripeto GA finché per 4 volte non c'è alcun miglioramento rispetto all'ultimo risultato. Possono essere necessari una dozzina o più di tentativi. Di solito ottengo buoni risultati. Anche se ci vuole molto tempo.

Quando riottimizzo sulle date attuali, posso ottenere un nuovo massimo locale migliorato e, in caso contrario, parto da quello vecchio e lo perfeziono per il nuovo mercato con un'ottimizzazione lenta (scelgo un gruppo di variabili interdipendenti e ottimizzo iterativamente ogni combinazione a coppie).

Inoltre, ho introdotto micropenalità (mutageni aggiuntivi) in OnTester. In questo caso, il GA esegue più passaggi a causa di mutazioni più frequenti e, di conseguenza, i nuovi massimi vengono trovati più spesso.

// Micro penalità per scegliere un valore di parametro più piccolo quando i risultati sono uguali
res -= BP * 0.0001 / 200;       // Dividere per l'intervallo di ottimizzazione (0...200)
 
Igor Makanu:

Interrompo subito i test se c'è un grande drawdown.

e per rallegrare un po' il GA, faccio questo:

Ho fatto dei test nell'ultima settimana con questo metodo e ora sono molto soddisfatto di GA.

Lo faccio all'incirca nello stesso modo. Il controllo del drawdown serve a ottimizzare più rapidamente e il controllo del numero di operazioni serve a indirizzare meglio il GA, filtrando la spazzatura.

Ma non è sufficiente.


ZY È più economico.

TesterStatistics(STAT_TRADES)
 
Edgar Akhmadeev:

ha introdotto micropenalità (mutazioni aggiuntive) in OnTester. In questo caso, il GA esegue più passaggi a causa di mutazioni più frequenti e, di conseguenza, i nuovi massimi vengono trovati più spesso.

Si prega di chiarire.