L'algoritmo genetico e le sue possibili applicazioni - pagina 4

 
Edgar Akhmadeev:

Ho scritto su questo molto tempo fa, quando usavo i frame in EA. Non ricordo il punto esatto, ma non mi sembra di ottenere tutti i fotogrammi (e i migliori risultati). Cercherò i vecchi post e cercherò di chiarire.

Ma ricordo distintamente che era chiaramente riproducibile nel mio Expert Advisor - non appena il numero di overshoots superava un certo numero e veniva visualizzato in forma scientifica, la mia genetica era rotta. L'importante non era solo che la variabile avesse un grande numero di passi, ma che anche il numero di variabili fosse grande.

Tutto ha un senso.

C'è un problema con le cornici sulla "grande" genetica.

Lo aggiusteremo.

 
Slava:

Cosa vuol dire "non funziona affatto correttamente"?

Come possiamo riprodurre il malfunzionamento?

https://www.mql5.com/ru/forum/321656/page17#comment_13569022

Non controllo più le cornici, ho rinunciato.

Ma con la genetica regolare l'ho controllato sull'ultima build. Ecco il risultato senza "digit overflow".


Dopo l'interruzione:

2020.03.16 20:50:57.436 Tester  genetic optimization finished on pass 646 (of 160164854439975000)
2020.03.16 20:50:57.436 Statistics      optimization done in 8 minutes 36 seconds
2020.03.16 20:50:57.436 Statistics      shortest pass 0:00:00.002, longest pass 0:00:23.060, average pass 0:00:06.276

Con "overflow":


Dopo aver attraversato diversi passaggi interrotti da EA (controllando che le variabili di input siano corrette), la genetica si è fermata per sempre. Dopo l'interruzione:

2020.03.16 20:59:08.235 Tester  genetic optimization finished on pass 18
2020.03.16 20:59:08.235 Statistics      optimization done in 6 minutes 10 seconds
2020.03.16 20:59:08.235 Statistics      shortest pass 0:00:00.003, longest pass 0:00:05.978, average pass 0:00:01.339

Non un solo risultato reale.

Provato Advisors/MAPSARSizeOptimized.ex5 come esempio, funziona. È chiaro che il problema con "digit overflow" e con i frame si riproduce solo con il mio EA, ma come trovare il problema... Tutto è molto complicato lì, OnTradeTransaction ecc. Ho anche rimosso le cornici. Non posso mostrarvi il codice ed è enorme, circa un megabyte. E ridurlo a un esempio riproducibile richiederebbe un tempo irrimediabilmente lungo. Se ho tempo, proverò a rimuovere OnTradeTransaction e forse qualche altro trucco.

Il fatto è che se non superiamo il numero di passaggi, tutto funziona bene.

E i frame hanno funzionato bene (senza eccedere) fino alla build 2286 compresa.

Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
  • 2019.10.16
  • www.mql5.com
В настоящий момент тестер стратегий MetaTrader 5 подвергается глубокой переработки командой MQ...
 
Igor Makanu:

...

un problema finora - i GA possono iniziare a convergere intorno a un piccolo gruppo di parametri di ottimizzazione dopo un po' - questo mi sembra normale, tutti i GA lavorano in questo modo e questo è un problema del loro uso

...

La convergenza verso qualche estremo è un fenomeno perfettamente normale per qualsiasi algoritmo di ottimizzazione, non c'è alcun suggerimento per assumere che questa sezione non sia globale o locale.

È un'altra questione che AO dovrebbe avere un meccanismo che permette di amplificare la percentuale di mutazione (o un altro equivalente nella logica che permette di amplificare l'espansione del quartiere di ricerca), quando si inizia a calpestare qualche segmento, l'estremo sarà trovato meglio o no - non si sa prima, ma è sicuramente necessario cercare in altri luoghi.

per esempio, si stabilisce un criterio di equilibrio massimo, diversi o molti punti possono corrispondere a questo criterio in termini assoluti ma solo alcuni di essi hanno un valore reale, cioè l'equilibrio 98756423 è stato raggiunto a 1523 operazioni con un drawdown dell'11% e lo stesso equilibrio è stato raggiunto a 12 operazioni con un drawdown del 95%, qual è la differenza tra i due?

 
Edgar Akhmadeev:

Dopo diversi passaggi interrotti dall'esperto (controllando che le variabili di input siano corrette), la genetica si è fermata per sempre. Dopo l'interruzione:

Non un solo risultato reale.

Non ricordo se ne ho scritto sul forum, ma è davvero un problema e non è chiaro perché sia implementato in MT. Nell'idea, se l'esperto restituisce il codice d'errore "parametri sbagliati", il tester è obbligato a generare un'altra istanza invece, in modo che la popolazione sia completa.

 
Stanislav Korotky:

Non ricordo se ne ho scritto sul forum, ma è davvero un problema e non è chiaro perché sia implementato in MT. Nell'idea, se l'esperto restituisce il codice d'errore "parametri sbagliati", il tester è obbligato a generare un'altra istanza invece, in modo che la popolazione sia completa.

Se restituisco INIT_PARAMETERS_INCORRECT per tutte le combinazioni di parametri errati, ce ne sono troppe e la generazione terminerà con un errore. Quindi, restituisco solo INIT_PARAMETERS_INCORRECT quando un parametro specifico è sbagliato, se è fuori portata. E se la combinazione è sbagliata (un parametro non deve superare l'altro) fermo il passaggio, restituisco INIT_SUCCEED e Custom = -N. Questo probabilmente incasina la genetica, ma non vedo alcuna opzione. O piuttosto c'è un'opzione, per sbarazzarsi delle combinazioni sbagliate (nel caso particolare - rendendo un parametro un delta ad un altro: v1=X, v2=Y+v1), ma è un mutageno troppo forte. I due parametri saranno rigidamente legati, e se ne cambiate uno, tutto si sposta. Mi sono allontanato da questa opzione a favore di un risultato falso invece di un errore.

 
Edgar Akhmadeev:

Se si restituisce INIT_PARAMETERS_INCORRECT per tutte le combinazioni di parametri sbagliati, ce ne sono troppi e la generazione terminerà con un errore. Così restituisco solo INIT_PARAMETERS_INCORRECT quando un parametro specifico è sbagliato, se è fuori dai limiti. E se la combinazione è sbagliata (un parametro non deve superare l'altro) fermo il passaggio, restituisco INIT_SUCCEED e Custom = -N. Questo probabilmente incasina la genetica, ma non vedo alcuna opzione. O piuttosto c'è un'opzione, per sbarazzarsi delle combinazioni sbagliate (nel caso particolare - rendendo un parametro un delta ad un altro: v1=X, v2=Y+v1), ma è un mutageno troppo forte. I due parametri saranno rigidamente legati, e se si cambia uno, tutto si sposta. Ho rinunciato a questa opzione in favore di un risultato falso invece di un errore.

Una buona opzione è quella di restituire -DBL_MAX su una variante non valida invece di errore.

in generale, sono riuscito a implementare Ga esterno mantenendo tutto il fascino della fedeltà multicurrency di MT tester, pur essendo in grado di utilizzare tutti i core della CPU e/o gli agenti di rete, compresi gli agenti cloud, evitando situazioni in cui gli agenti sono inattivi a causa di completamenti di passaggi prematuri o popolazioni Ga sotto organico.

ci sono informazioni, solo tSSSSS.... che ci sono piani per implementare diversi tipi di AO nell'ottimizzatore regolare, e anche con parametri, ma questo è impreciso.

 
Andrey Dik:

una buona opzione è quella di restituire -DBL_MAX sulla variante non valida invece di errore.

e se si restituisce un valore casuale - sarebbe peggio per AO?

 
Igor Makanu:

e se si restituisce un valore renderizzato, è peggio per l'AO?

molto peggio.

Se l'obiettivo è quello di incasinare la testa di AO, il modo migliore è quello di restituire un numero casuale.

 
Andrey Dik:

una buona opzione è quella di restituire -DBL_MAX alla variante non valida, invece di errore.

Questo è troppo, il grafico è scalato in modo da non poter vedere i risultati utili. Restituisco un valore leggermente più alto rispetto al caso peggiore di Custom. La cosa principale, però, è impostare la giusta direzione per il miglioramento.

Igor Makanu:

E se si restituisce un valore renderizzato - sarà peggio per AO?

Qual è il punto? La cosa principale è impostare la giusta direzione, quindi devi mostrare a GA che ha mostrato il peggior risultato qui, non solo uno debole.

 
Slava:

Cosa vuol dire "non funziona affatto"?

Come posso riprodurre l'errore dell'operazione?

RimossoOnTradeTransaction, non ha aiutato. Continuerò a pensare.