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

 

Potete creare il vostro set di ottimizzazione in OnTesterInit e far sì che l'ottimizzatore pensi che solo un sinput int NumPass sia ottimizzato.

È difficile dire quale effetto questo avrà sul risultato finale - se l'estremo globale (locale) desiderato sarà trovato.

Non sono pronto a fornirvi un esempio, date un'occhiata alla Documentazione. È ben scritto lì.

 
fxsaber:

Una ricetta è che gli sviluppatori facciano contare il risultato dei passaggi INCORRETTI come il più vicino passaggio CORRETTO contato in precedenza. Questo uniformerà i buchi nella superficie di ottimizzazione.

Questo è ciò a cui gli sviluppatori sono contrari. In questo caso, altri individui della popolazione "sopravviveranno". E la genetica comincerà a lavorare con gli errori.

 

Che ne dite di scrivere una funzione che emette solo catene valide per numero?

La prima cosa che mi viene in mente è una tabella di 117649 valori, e lasciamo che la genetica cerchi dei numeri in quella tabella.

 
Sergey Savinkin:

Questo è ciò a cui gli sviluppatori sono contrari. In questo caso, altri individui della popolazione "sopravviveranno". E la genetica comincerà a funzionare male.

Sarei anche contrario a un tale algoritmo. INCORRETTO è un insieme di parametri inaccettabile, non può essere sostituito da quello "accettabile più vicino".

 
Sergey Savinkin:

Questo è ciò a cui gli sviluppatori sono contrari. In questo caso, altri individui della popolazione "sopravviveranno". E la genetica comincerà a lavorare per errore.

La genetica in pratica è quasi sempre sbagliata, il che è la norma. Senza un'adeguata ricerca in questo campo, non pretenderei nulla sull'opzione proposta.

 
Georgiy Merts:

Che ne dite di una funzione che restituisce solo le catene valide per numero?

La prima cosa che mi viene in mente è una tabella di 117649 valori e lasciamo che la genetica cerchi dei numeri in quella tabella.

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

Non per gli sviluppatori MT! Con cosa sostituire INIT_PARAMETERS_INCORRECT?

fxsaber, 2018.07.10 16:22

Potete creare il vostro set di ottimizzazione in OnTesterInit e far sì che l'ottimizzatore pensi che solo un sinput int NumPass sia ottimizzato.

È difficile dire quale effetto questo avrà sul risultato finale - se l'estremo globale (locale) richiesto sarà trovato.

Dipende fortemente dal criterio di soddisfazione del risultato finale.


È evidente che se seguiamo l'enumerazione completa di y = x^2. Poi mescola casualmente le righe e crea un nuovo set basato sul mescolamento. Allora GA non troverà il vertice della parabola.

 
fxsaber:

Ovviamente, se si traccia un'enumerazione completa di y = x^2. Poi mescolare casualmente le righe di opimizzazione e creare un nuovo set basato sul mescolamento. Il GA non troverà il vertice della parabola.

Sì, qui si scopre che questi INCORRETTI "strappano" troppo lo spazio della funzione di fitness.

Temo che non ci sia nulla da fare se non riprogettare i parametri di input. Saltare OnTick() come suggerisci tu è solo una stampella che sostituisce il parametro INCORRETTO, in realtà l'algoritmo genetico viene "ucciso" comunque. La genetica richiede alcuni "gradienti" della funzione risultato, quindi possiamo usarli per spostarci verso i massimi. Ma quando si hanno più INCORRETTI che valori validi, come si fa a trovare questo massimo?

Ho il sospetto che tranne la forza bruta completa non si possa fare nulla, e anche la forza bruta completa troverà una soluzione altamente instabile.
 

Ci vuole un po' di abilità per impostare i parametri di ingresso.

Si può fare un esempio molto comune. Quando si ottimizza l'intervallo di trading giornaliero, i tempi di inizio e fine del giorno sono i due parametri di input più comuni.

Ma questo è molto peggio per GA che, per esempio, specificare l'ora di inizio e la durata. Apparentemente la stessa cosa, ma non per il GA. Nel secondo caso, il GA farebbe meglio. Anche se "migliore" è una valutazione piuttosto soggettiva.

 

Georgiy Merts:

quando abbiamo più INCORRETTI che valori validi - come trovate questo massimo?

Prendiamo la stessa parabola di cui sopra. Supponiamo di fare INCORRETTO sull'intervallo di test del 90% del valore di un singolo parametro di input. L'attuale GA si blocca su un tale compito. Tuttavia, se si procede con l'opzione suggerita, il GA andrà bene.


Penso che @Andrey Dik possa aiutare su queste domande. Ma anche la critica costruttiva del GA regolare non è finita bene per lui...

 
fxsaber:

Prendete la stessa parabola di cui sopra. Supponiamo di rendere INCORRETTO sull'intervallo di test il 90% del valore del singolo parametro di input. L'attuale GA morirebbe per un tale compito. Tuttavia, se si procede con la variante suggerita, il GA andrà bene.

Come? Sostituendo gli errati con le correzioni più vicine? Temo che tutto dipenda da come distribuiamo queste stesse incorrezioni. È molto probabile che le correzioni più vicine - saranno lontane dalla cima.

Sì, e risulterà che invece di set di parametri sbagliati - avremo risultati corretti - cosa che anche secondo me non dovrebbe essere fatta - cosa troviamo allora? Otterremo un massimo e avrà un parametro errato impostato ?