Che diavolo sta succedendo? - pagina 2

 

Ho un trucco diverso. Il consulente mette una vendita all'apertura di ogni ora. Per gli euro funziona correttamente, ma per i simboli personalizzati non è chiaro come

In modalità visiva mancano alcuni candelieri


File:
MySymbol.mq5  4 kb
Test.mq5  2 kb
 
Сергей Таболин:

Si tratta ancora una volta del tester/ottimo...

Notate discrepanze nei risultati dell'ottimizzazione e del singolo test. Riavviato il terminale, cambiato le impostazioni (per essere sicuri). Iniziata l'ottimizzazione.

Ha fatto un solo test...

Come può essere? Da dove viene questa assurdità?

Era la stessa cosa. Tra i passaggi di ottimizzazione, le variabili non erano sempre o non tutte inizializzate come lo erano prima di un singolo passaggio. Ho iniziato a inizializzare tutto e il problema è sparito.

Un'altra volta ho avuto un problema simile a causa di iSAR, su passi minimi.

 

Un cliente aveva un problema. Il suo Expert Advisor stava testando e dando risultati nel tester, ma nell'ottimizzatore tutte le corse erano nulle.

L'algoritmo del suo Expert Advisor in termini di apertura di trade si basava sulla lettura della didascalia del pulsante che cambiava a seconda della situazione. Poiché gli oggetti grafici non sono resi durante l'ottimizzazione, questa richiesta ha sempre dato un risultato negativo.

Se l'algoritmo del tuo Expert Advisor utilizza dati da oggetti grafici, ci possono essere anche differenze significative tra il test e l'ottimizzazione.

 
Сергей Таболин:


Com'è? Entrambi sono uguali. Come può esserci una differenza? Soprattutto perché quasi tutti i dati sono inizializzati in un ciclo. E se qualcosa non è inizializzato lì, otterrete un errore.


Se puoi, approfondisci. Vorrei vedere l'inizializzazione nel ciclo. Lo mostrerò a mia nipote.

 
Per non farlo mai più.
 
Алексей Тарабанов:

Se possibile, più dettagli. Vorrei vedere l'inizializzazione nel ciclo. Lo mostrerò a mia nipote.

int sum = 0;

for ()

  sum = 0;

  for ()

    sum += ....

O meglio, tua nipote non capirà il significato:

int sum;

for ()

  sum = 0;

  for ()

    sum += ....
 
Andrey Barinov:
Basta dimenticare di inizializzare qualcosa nel vostro codice e ci sarà una differenza. Controllare il codice.

Ho ricontrollato tutto - tutte le variabili sono inizializzate.

@Andrey Kaunov, grazie, ma non uso nessun oggetto grafico.

Alexei Tarabanov:

Se puoi, approfondisci. Vorrei vedere l'inizializzazione nel ciclo. Lo mostrerò a mia nipote.

Per amore di Dio )))) Ho esagerato un po' - non tutti, naturalmente, ma solo le maniglie degli indicatori ))))

int      ind_handle[];

int OnInit()
{
...........
   if(!nc_getHandles()) return(INIT_FAILED);
...........
}
//+------------------------------------------------------------------+
bool  nc_getHandles(void)
{
   ind_nums = ArraySize(indicators);
   ArrayResize(ind_handle, ind_nums);

   for(int i = 0; i < ind_nums; i++)
   {
      ind_handle[i]  = iCustom(Symbol(), Period(), folder+indicators[i]);
      if(ind_handle[i] == INVALID_HANDLE)
      {
         Print("Ошибка получения хандла индикатора >>> "+indicators[i]);
         writeErrorFile(program_name,program_version,"Ошибка получения хандла индикатора >>> "+indicators[i]);
         return(false);
      }
   }
   Print("Получены хэндлы всех индикаторов >> ",ArraySize(indicators));
//-----------------------------------
   return(true);
}
 

Ora veniamo al punto.

Cancellato completamente tutti i registri e le cache.

Avviato l'editor, ricompilato l'Expert Advisor.

Ha aperto il terminale.

Ha iniziato l'ottimizzazione genetica.

In attesa...


Esecuzione di un singolo test.

Controllo se i parametri sono corretti - sono passati correttamente.

Apro la scheda Backtest.

Profitti - 697 / 247

Trades - 44 / 56.

Ora raccoglierò i log e li allegherò.

File:
mt5logs.zip  288 kb
 

Guarda nel codice e cerca di capire cosa succede alle transazioni all'interno dell'ottimizzazione e con un solo walkthrough.

Staccatelo e mettetelo voi stessi in un file.

Si tratta della logica all'interno del vostro programma. Che nessuno tranne voi può vedere e quindi non ci sarà nessun aiuto.

 
Renat Fatkhullin:

Guarda nel codice e cerca di capire cosa succede alle transazioni all'interno dell'ottimizzazione e con un solo walkthrough.

Staccatelo e mettetelo voi stessi in un file.

Si tratta della logica all'interno del vostro programma. Che nessuno tranne voi può vedere e quindi non ci sarà nessun aiuto.

Renat, grazie. Ma spiegatemi, chi non conosce la differenza tra 2*2+2*3 nell'ottimizzatore e il passaggio singolo? Almeno dammi un suggerimento su dove esattamente può esserci una discrepanza?

E, visto che ne hai parlato, mi dai un suggerimento su dove e come trovare le differenze tra l'EA nello Strategy Tester e su un conto reale?

Io, forse per mia stupidità, ho sempre creduto che il codice scritto (che abbia errori o no, che sia ottimizzato o no), è compilato, e quindi dovrebbe funzionare ugualmente sia in ottimizzatore, sia in tester, sia su un conto reale...

Bene, prendete semplicemente la posizione di un programmatore ordinario - dove, come e con quali mezzi si dovrebbe cercare qualsiasi differenza poco chiara nell'esecuzione di un codice (compilato) in questi tre stati?

Io, come utente, vedo solo che un eseguibile non funziona allo stesso modo nell'ottimizzatore e nel tester, il che significa che nella vita reale funzionerà allo stesso modo .....


Mi è venuto in mente un pensiero: e se stai testando un EA e... Beh, non va bene. E se lo uso per il trading reale? E se fosse il Santo Graal? ))))