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

 
fxsaber:

Ho fatto un Expert Advisor di prova per la modalità mat dell'Optimizer

Questo è l'aspetto di un grafico di ottimizzazione per 8 agenti in parallelo in modalità forza bruta completa senza passaggi di interleaving (Rand = falso)

Si può chiaramente vedere qui che gli agenti stanno eseguendo compiti in batch.


Per vedere la dipendenza dal parametro, passiamo alla modalità di visualizzazione

Eccola - una parabola nativa, la cui cima (unità) cercheremo attraverso GA.


In modalità shuffle (Rand = true), naturalmente, la forza bruta completa trova il nostro vertice


 
fxsaber:

Ecco la parabola nativa, il cui vertice (uno) sarà cercato attraverso GA.

Senza la miscelazione GA non ho trovato l'estremo, ma ci sono andato vicino

Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 1
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 2
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 3
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 4
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 5
Tester  Best result 0.999424 produced at generation 5. Next generation 6
Tester  Best result 0.99987456 produced at generation 6. Next generation 7
Tester  Best result 0.99987456 produced at generation 6. Next generation 8
Tester  Best result 0.99987456 produced at generation 6. Next generation 9
Tester  Best result 0.99987456 produced at generation 6. Next generation 10
Tester  Best result 0.99987456 produced at generation 6. Next generation 11
Tester  Best result 0.99987456 produced at generation 6. Next generation 12
Tester  Best result 0.99987456 produced at generation 6. Next generation 13
Tester  Best result 0.99987456 produced at generation 6. Next generation 14
Tester  Best result 0.99987456 produced at generation 6. Next generation 15
Tester  Best result 0.99987456 produced at generation 6. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 973 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 00 seconds
Statistics      local 179 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Ci sono voluti 179 passaggi. Vi ricordo che l'insieme completo dei compiti è di 10001 passaggi. Sì, il problema è molto semplice, ma comunque.


Ora proviamo la variante con il rimescolamento (Rand = true).

Tester  Best result 0.99949824 produced at generation 0. Next generation 1
Tester  Best result 0.99949824 produced at generation 0. Next generation 2
Tester  Best result 0.99949824 produced at generation 0. Next generation 3
Tester  Best result 0.99949824 produced at generation 0. Next generation 4
Tester  Best result 0.99992256 produced at generation 4. Next generation 5
Tester  Best result 0.99992256 produced at generation 4. Next generation 6
Tester  Best result 0.99992256 produced at generation 4. Next generation 7
Tester  Best result 0.99992256 produced at generation 4. Next generation 8
Tester  Best result 0.99992256 produced at generation 4. Next generation 9
Tester  Best result 0.99992256 produced at generation 4. Next generation 10
Tester  Best result 0.99992256 produced at generation 4. Next generation 11
Tester  Best result 0.99992256 produced at generation 4. Next generation 12
Tester  Best result 0.99992256 produced at generation 4. Next generation 13
Tester  Best result 0.99992256 produced at generation 4. Next generation 14
Tester  Best result 0.99992256 produced at generation 4. Next generation 15
Tester  Best result 0.99992256 produced at generation 4. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 970 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 01 seconds
Statistics      local 182 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Chiudere di nuovo. Si vede chiaramente nel log, 182 passaggi sono stati calcolati completamente, e 970 sono stati presi dalla cache.


Buon risultato, quindi, proviamo ad aumentare il numero di punti nell'intervallo.

 
fxsaber:

Questo è un buon risultato, quindi proviamo ad aumentare il numero di punti nell'intervallo.

Il numero di punti nell'intervallo è un milione.


Rand = falso

Tester  Best result 0.9999999424 produced at generation 3. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7533 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1171 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Rand = vero (su un milione di punti, coppie scelte a caso sono state scambiate 100 milioni di volte)

Tester  Best result 0.999998294364 produced at generation 10. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7452 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1252 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Il risultato mostra che la mia affermazione sicura di sé

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

Non per gli sviluppatori MT! Con cosa sostituire INIT_PARAMETERS_INCORRECT?

fxsaber, 2018.07.10 16:27

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. Allora la GA non troverà il vertice della parabola.

È piuttosto falso che vero.


D'altra parte, la scelta della funzione di fitness come parabola è stata inizialmente estremamente miope, poiché il numero di punti vicini a uno è fuori scala.


C'è solo una domanda per il GA, perché l'estremo esatto non è stato trovato senza mescolanza, dato che la funzione scelta è ideale per questo?

 
fxsaber:

D'altra parte, scegliere una funzione di fitness come una parabola è stato inizialmente estremamente miope, poiché il numero di punti vicini a uno è fuori scala.

Suppongo che se si sceglie una funzione con un picco acuto, il GA si romperà comunque dopo la miscelazione. E una tale funzione è molto più vicina a TC.

 
fxsaber:

Ho messo fuori un test EA per la modalità matematica dell'ottimizzatore

Purtroppo le mie conoscenze non sono sufficienti per capire tutto ))))

Ho deciso di renderlo più semplice. In generale, ho aggiunto al mio Expert Advisor un record nel file delle catene legittime. Ho trovato 1953 varianti possibili su 117649. A proposito, mi ci sono voluti 3 giorni per fare la ricerca completa su un intervallo di 3 giorni, solo prezzi aperti e 0 scambi.

Tester	optimization finished, total passes 117649 (successful 114123 passes)
Statistics      optimization done in 2 hours 36 minutes 36 seconds

Ora ho un file. Non so ancora come usarlo per l'ottimizzazione. Ci penserò domani...

E perché ci sono meno successi? Dovremo farlo di nuovo?
 
fxsaber:

Presumo che se si seleziona una funzione con un picco acuto, il GA si romperà comunque dopo la miscelazione. E una tale funzione è molto più vicina a TC.

Quindi la genetica non è progettata per catturare i picchi. Il suo scopo è quello di trovare regioni stabili, che è ciò che richiede il TC. E i picchi sono rumore, di regola.

Per quanto riguarda le combinazioni errate di parametri, esse devono essere eliminate nella fase di formazione della popolazione, cioè se lo scambio di geni o la mutazione danno come risultato un individuo errato, è necessario ripetere nuovamente la sua generazione fino ad ottenere quello corretto. Allora tutto sarà a posto.

Se il vaglio diINIT_PARAMETERS_INCORRECT avviene dopo la formazione della popolazione, riducendo così la dimensione di questa popolazione, allora naturalmente questo viola il normale meccanismo di selezione genetica. Apparentemente MQ ha questa variante. E in questo caso il compito del topicstarter è difficilmente risolvibile (nel caso generale), ballare con i tamburelli non aiuta.

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

Grazie per la tua opinione, ma qui non c'è nessuna discussione sull'architettura del programma. Nel caso non l'abbiate notato...

Sbagliato, sbagliato.

Sono d'accordo che il vostro problema è esattamente l'architettura sbagliata del programma. Penso che si possa ottenere il massimo solo con la forza bruta, e sarà altamente instabile.

 
Bene, metterò altri 5 kopeck.
Molto probabilmente vengono utilizzati overshoots completi su ogni tick. Questo di per sé porta alla lentezza del funzionamento. Se è così, dovremmo considerare l'utilizzo di ricerche complete solo all'avvio/apertura della barra di Expert Advisor e poi controllare gli ultimi dati. Tale ottimizzazione riduce sempre il consumo di risorse.
 
Alexey Navoykov:

La genetica non è progettata per catturare i picchi. Il suo scopo è quello di trovare regioni stabili, che è ciò che richiede TC. E i picchi sono rumore, di regola.

Non è esattamente così. Inoltre, anche le aree stabili dello spazio di ottimizzazione sono ancora aree con cali e picchi, il FF è tutt'altro che liscio.

La genetica è uno strumento versatile, potrebbe essere modificato per ottimizzare un FF corrotto, ma in questo caso ci vorrà più tempo per ottimizzare un FF liscio.

Imho, la genetica standard dovrebbe digerire i set con metà di INIT_PARAMETERS_INCORRECT senza nemmeno pensarci. Soprattutto perché queste aree sono di solito ben raggruppate.

ma in generale la soluzione migliore è quella di trasformare lo spazio dei parametri di input.

 
Georgiy Merts:

Invano, invano.

Sono d'accordo che il vostro problema è nell'architettura sbagliata del programma. Penso che si possa ottenere il massimo solo con la forza bruta, e sarà molto instabile.

Non si tratta di architettura. Si tratta dell'insieme di funzioni e dell'ordine in cui vengono applicate. Infatti, in origine, queste funzioni avevano una sola sequenza costante. Poi ho deciso che forse avrei dovuto sperimentare l'ordine di chiamarli e non chiamarne alcuni. L'ho implementato attraverso INIT_PARAMETERS_INCORRECT. Si può vedere il progresso. Ma ho un problema con l'ottimizzazione genetica.

Ora veniamo al punto. Ho creato un file con catene legittime. Come usarlo ora? Ho il sospetto che dovrei usare onTester, frames... Ho guardato la documentazione, ma qualcosa non quadra. Non riesco a capire come affrontarlo.

Sto pensando di leggerlo in un array e prenderne i dati...