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

 
Aleksey Vyazmikin:

I parametri errati sono generalmente disabilitati per 3 motivi:

1. l'area di studio non è di interesse (ad esempio, escludendo un certo numero di tempi, come opzione più comprensibile);

//--- пропустить бесполезные проходы оптимизации
   if(my_timeframe != PERIOD_M15   &&
      my_timeframe != PERIOD_M30   &&
      my_timeframe != PERIOD_H1    &&
      my_timeframe != PERIOD_H3    &&
      my_timeframe != PERIOD_H6      )
   {
      Print("ОШИБКА - Период не запланирован");
      return(INIT_PARAMETERS_INCORRECT);
   }
 
Сергей Таболин:

Assolutamente giusto.

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

Bene, come si organizza l'ottimizzazione MA dell'esempio senza includere i parametri "non validi"?

OK, sono d'accordo, non ho guardato attentamente. per ottimizzare un altro parametro con un taglio di gap non valido

 
TheXpert:

OK, sono d'accordo, non l'ho guardato attentamente. per ottimizzare, tirate fuori un altro parametro con la lacuna non valida tagliata

Può farmi un esempio?

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

Posso fare un esempio?

input int period_MA_warp = 15;

//...

period_MA = (period_MA_warp <= 31) ? period_MA_warp : period_MA_warp + 50;
 
TheXpert:

Sono d'accordo. E nel caso dei tempi?

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

Sono d'accordo. E cosa fare in caso di scadenze?

Lo stesso modo - conversione di int all'interno di un intervallo continuo in timeframe. per esempio, creare un array con tutti i valori di TF e ottimizzare per indice di array

 
TheXpert:

Per esempio, per creare un array con tutti i valori TF e ottimizzare per indice dell'array

Beh, questo mi sembra una stampella... Forse mi sbaglio, ma è quasi la stessa cosa che ho dovuto fare con il mio esempio iniziale. Tranne che in questo caso non c'è bisogno di scaricare prima l'intero array in un file...

 

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

double OnTester()
{
   if(MQLInfoInteger(MQL_OPTIMIZATION) && paramIncorrect())  return(-99999999.99);
}

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

Qui sorge un'altra domanda: possiamo ottenere un "deep minus" sul profitto in questo caso?

 

Il modo in cui l'ho fatto: si crea un parametro separato e si sostituiscono altri valori a seconda del suo valore.

Un semplice esempio (2 settimane fa):

Ci sono parametri di timeframe: TF_UP (Senior) e TF_DOWN (Junior), e il Senior deve sempre essere maggiore del Junior, in caso contrario esce input_incorrect. Nel tester ci sono un sacco di risultati nulli e la genetica "lavora per niente" (anche se è veloce). Di conseguenza, ho rimosso questi 2 parametri e ho creato un nuovo parametro che ha il tipo descritto qui sotto, e ottimizzare solo esso, e già nella funzione OnInit la sostituzione in altri 2 parametri, a seconda di questo parametro.

enum TF_only_opt
{
   _H4_H1 = 0,
   _H4_M30 = 1,
   _H4_M15 = 2,
   _H1_M30 = 3,
   _H1_M15 = 4,
   _H1_M5 = 5,
   _M30_M15 = 6,
   _M30_M5 = 7,
   _M30_M1 = 8,
   _M15_M5 = 9,
   _M15_M1 = 10,
   _M5_M1 = 11
};
Motivazione: