Non per gli sviluppatori di MT! Con cosa sostituire INIT_PARAMETERS_INCORRECT? - pagina 11

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

È venuta un'idea per setacciare i parametri "non validi" durante l'ottimizzazione genetica in OnTester():

Si scopre che senza interferire con la genetica i risultati di INIT_PARAMETERS_INCORRECT possono non essere visti.

Ma qui abbiamo un'altra domanda: possiamo ottenere un "deep minus" sul profitto in questo caso?

questo è un metodo molto lento. Stiamo spendendo risorse per calcolare l'intero passo.

 
Mikhail Mitin:

è un metodo molto lento. Stiamo sprecando risorse per sbagliare i calcoli dell'intera navata.

Di due mali...

 
Mikhail Mitin:

è un metodo molto lento. Stiamo sprecando risorse calcolando l'intero passo.

InserisciINIT_PARAMETERS_INCORRECT_ONTESTER - rollover a OnTester.

 

Come ho risolto questo problema (diverse varianti):

  • Viene creato un parametro separato, e altri valori vengono sostituiti a seconda del suo valore (descritto in un paio di post sopra). L'ottimizzazione va solo per questo parametro
  • c'è anche 1 modo per uscire da questa situazione, ma non è facile da attuare:
    1. creato file csv, in cui era l'enumerazione dei soli parametri necessari
    2. leggo il file nell'OnInit, leggo i valori dal file e li do ai parametri (leggere i file con il flag Shared access)
    3. ottimizzato solo 1 parametro (numero di riga nel file csv)
  • ha scritto un algoritmo per generare un file mqh da un file csv (simile ai punti precedenti, ma più veloce) e lo ha collegato all'Expert Advisor.

 
Mikhail Mitin:

Come ho risolto questo problema (diverse varianti):

  • Viene creato un parametro separato, e altri valori vengono sostituiti a seconda del suo valore (descritto in un paio di post sopra). L'ottimizzazione va solo per questo parametro
  • c'è anche 1 modo per uscire da questa situazione, ma non è facile da attuare:
    1. creato file csv, in cui era l'enumerazione dei soli parametri necessari
    2. leggo il file nell'OnInit, leggo i valori dal file e li do ai parametri (leggere i file con il flag Shared access)
    3. ottimizzato solo 1 parametro (numero di riga nel file csv)
  • ha scritto un algoritmo per generare un file mqh da un file csv (simile ai punti precedenti, ma più veloce) e lo ha collegato all'Expert Advisor.

E come permette di implementare un algoritmo genetico, se si ha solo una variabile?

 

Mi è venuto in mente! ))))

Dalle linee OnInit

   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                  return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                    return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)  return(INIT_PARAMETERS_INCORRECT);

spostato a.

void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                                 ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                                   ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)                 ExpertRemove();

La genetica non interferisce ePARAMETERS_INCORRECT non viene calcolato. )))

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

Mi è venuto in mente! ))))

Dalle linee OnInit

spostato a.

La genetica non interferisce ePARAMETERS_INCORRECT non viene calcolato. )))

Soluzione interessante. E come, la genetica va con successo, non si impantana in un solo discendente?

 
Aleksey Vyazmikin:

È una soluzione interessante. E come, la genetica sta andando bene, senza impantanarsi in una sola prole?

Non c'è problema. Non fallisce. ))) Almeno non ancora. Da qualche parte ho avuto un gufo con molti parametri non validi. Dovrò eseguire l'ottimizzazione su di esso e vedere.

L'idea del porting è che la genetica inciampi esattamente all'inizializzazione. Ma se il controllo viene spostato a OnTick, allora l'inizializzazione va bene, il test inizia, finisce immediatamente e la genetica ottiene il risultato di passare a zero.

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

È tutto a posto. Non sta scendendo. ))) Almeno non ancora. Da qualche parte ho avuto un gufo con molti parametri non validi. Dovrò eseguire l'ottimizzazione su di esso e vedere.

L'idea del porting è che la genetica inciampi esattamente all'inizializzazione. Ma se il controllo viene spostato a OnTick, allora l'inizializzazione va bene, il test inizia e finisce subito e la genetica ottiene un risultato nullo.

È bene che non fallisca. L'essenza del codice è chiara, ma aggiungerei l'esecuzione solo una volta, specialmente se ci sono molte condizioni di uscita anticipata.

 
Aleksey Vyazmikin:

È bene che non si impantani. Il succo del codice è chiaro, ma aggiungerei l'esecuzione solo una volta, specialmente se ci sono molte condizioni per l'uscita anticipata.

L'ottimizzazione del gufo di cui parlavo sta andando bene. )))

Buona idea. Dobbiamo aggiungere una bandiera di controllo.