Perché rompere un buon vecchio algoritmo e sostituirlo con uno nuovo che è 3 volte più lento?
L'algoritmo del tester genetico non è cambiato. E le dichiarazioni su 3 volte sono assolutamente infondate.
Il metodo di lavoro di una cache di risultati precedenti è cambiato. Ed è diventato molto meglio e più completo del precedente.
Se avete bisogno di introdurre un nuovo approccio al metodo genetico, aggiungete una nuova voce alla scheda "ottimizzazione",
Crea una descrizione e delle tecniche per lavorarci.
Dai un'occhiata ai link qui sopra - tutti questi articoli sono del nostro sito. L'ottimizzatore genetico è stato immediatamente discusso per molti anni.
Cerca "tester di strategia", "ottimizzatore genetico" nella ricerca, per favore.
E prendete il mio consiglio ripetuto - l'ottimizzazione del singolo fattore di recupero nella genetica è controindicato. Hai semplicemente ingannato l'algoritmo con un rapporto"profitto/discesa massima" completamente instabile e ingannevole (per gli automatici), che genera facilmente valori enormi. Pensa a come e perché.
Correggeremo il disegno del grafico di ottimizzazione lunedì.
Avete mai visto dei volumi in un bicchiere nella storia? È impossibile farlo senza uno stampo del vetro.
Non me lo sognerei mai. Vorrei che Buy Limit con prezzo 90 e lotto 10 si attivasse parzialmente, se, diciamo, ci fosse un tick SELL con prezzo 89 e volume 1. Ora è molto triste. L'ordine verrebbe attivato se ci fosse un tick BUY con il prezzo 90 e il lotto 1... e a tutto volume.
L'algoritmo del tester genetico non è cambiato. Le affermazioni sulle 3 volte sono assolutamente infondate.
Ciò che è stato cambiato è il modo in cui funziona la cache dei risultati precedenti. Ed è diventato radicalmente migliore e più completo del precedente.
Ho fatto alcuni test comparativi sulle nuove e vecchie build del tester.
Ecco i risultati. Registri e descrizione nel post #34.
impostazioni da https://www.mql5.com/ru/forum/241285/page4#comment_7271206
tutte le cache dei file del tester una volta rimosse dal disco prima dell'inizio dei test
Windows 10, Intel Xeon E5-2630 v4 @ 2.20GHz, 8 core utilizzati per gli agenti
Passaggio completo fino alla fine, poi riavvio del terminale
con fermata a 1000 (circa) passaggi
Continuare dopo l'arresto
Metatrader 5 build 1755
38 sec, 4780 passaggi
15 sec, 1105 passaggi
25 sec, 3487 passaggi
Metatrader 5 build 1809
33 sec, 5.549 passaggi
9 sec, 1126 passaggi
36 sec, 5863 passaggi
Metatrader 5 build 1755:
Bild 1755 full pass, un totale di 8960 varianti passate, di cui 4780 sono state effettivamente calcolate e 4180 sono state prese dalla cache accumulata nella stessa sessione
dopo di che il terminale viene riavviato per evitare l'effetto diretto delle cache calde in memoria
2018.04.30 11:20:46.867 Tester Best result 3391.17 produced at generation 22. Next generation 33
2018.04.30 11:20:47.118 Tester genetic calculation is over
2018.04.30 11:20:47.126 Tester 4697 records written to file cache C:\Users\sys\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\tester\cache\Moving Average.EURUSD.M5.1.xml
2018.04.30 11:20:47.338 Tester result cache used 4180 times
2018.04.30 11:20:47.338 Tester genetic optimization finished on pass 8960 (of 49644595)
2018.04.30 11:20:47.349 Statistics optimization done in 0 minutes 38 seconds
2018.04.30 11:20:47.349 Statistics local 4780 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
costruire 1755 con uno stop a 1337 corse. 216 di esse sono prese dalla cache (216 / 1337 = 16% di cache hit, non molto a causa della casualità di partenza e della piccola dimensione del campione)
2018.04.30 11:24:15.913 Tester Best result 3254.53 produced at generation 0. Next generation 4
2018.04.30 11:24:16.775 Tester file cache used 19 times
2018.04.30 11:24:16.775 Tester result cache used 216 times
2018.04.30 11:24:16.775 Tester genetic optimization finished on pass 1337 (of 49644595)
2018.04.30 11:24:16.775 Statistics optimization done in 0 minutes 15 seconds
2018.04.30 11:24:16.775 Statistics local 1105 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
build 1755 con continuazione dopo un arresto su Stop, il terminale non si è riavviato, continuazione.
test continua dal punto di arresto e non dall'inizio come nella build 1809, quindi da 10496 passaggi proposti sono stati presi 3487 e 66+3814 presi dalla cache (66+3814 / 10496 = 36% cache hit)
2018.04.30 11:26:27.931 Tester Best result 3363.35 produced at generation 15. Next generation 32
2018.04.30 11:26:28.104 Tester genetic calculation is over
2018.04.30 11:26:28.111 Tester 3422 records written to file cache C:\Users\sys\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\tester\cache\Moving Average.EURUSD.M5.1.xml
2018.04.30 11:26:28.539 Tester file cache used 66 times
2018.04.30 11:26:28.539 Tester result cache used 3814 times
2018.04.30 11:26:28.539 Tester genetic optimization finished on pass 8704 (of 49644595)
2018.04.30 11:26:28.550 Statistics optimization done in 0 minutes 25 seconds
2018.04.30 11:26:28.550 Statistics local 3487 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
Metatrader 5 build 1809:
costruire 1809 passaggi completi, totale 8960 passaggi, di cui 5549 sono stati effettivamente contati e 3411 presi dalla cache hit accumulata nella stessa sessione
dopo di che il riavvio del terminale è fatto per evitare l'influenza diretta delle cache calde in memoria.
2018.04.3010:50:58.997 Tester Best result 3391.17 produced at generation 22. Next generation 332018.04.3010:50:59.485 Tester genetic calculation is over
2018.04.3010:50:59.485 Tester result cache used 3411 times
2018.04.3010:50:59.485 Tester genetic optimization finished on pass 8960 (of 49644595)
2018.04.3010:50:59.495 Statistics optimization done in 0 minutes 33 seconds
2018.04.3010:50:59.495 Statistics local 5549 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
costruire 1809 con fermata a 1348 passaggi. 222 di loro sono stati presi dalla cache (222 / 1348 = 16% di cache hit, non abbastanza a causa della casualità di partenza e del piccolo campione)
2018.04.3011:00:59.532 Tester Best result 3263.17 produced at generation 0. Next generation 42018.04.3011:00:59.742 Tester result cache used 222 times
2018.04.3011:00:59.742 Tester genetic optimization finished on pass 1348 (of 49644595)
2018.04.3011:00:59.742 Statistics optimization done in 0 minutes 09 seconds
2018.04.3011:00:59.742 Statistics local 1126 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
build 1809 con continuazione dopo un arresto su Stop, il terminale non si è riavviato, continuazione.
come il test è iniziato dall'inizio, dai 10240 passaggi proposti è stato fatto pulito 5863 e 4377 sono stati presi dalla cache (4377 / 10240 = 42% cache hit)
2018.04.3011:04:28.046 Tester Best result 3391.17 produced at generation 27. Next generation 382018.04.3011:04:28.477 Tester genetic calculation is over
2018.04.3011:04:28.477 Tester result cache used 4377 times
2018.04.3011:04:28.477 Tester genetic optimization finished on pass 10240 (of 49644595)
2018.04.3011:04:28.488 Statistics optimization done in 0 minutes 36 seconds
2018.04.3011:04:28.488 Statistics local 5863 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
Ora le conclusioni:
La tua affermazione su "3 volte più lento" è sbagliata.
Infatti, il tester della build 1809 è diventato più veloce attraverso l'ottimizzazione e la riscrittura dei processi interni.
Questo può essere visto nel tempo di passaggio completo, è di 33 secondi invece di 38 secondi. E 33 secondi per un numero maggiore di passaggi.
Se ricalcoliamo il numero di passaggi al secondo, risulta: - build 1755 dà 4780 passaggi / 38 sec = 125 passaggi al secondo - build 1809 dà 5549 passaggi / 33 sec = 168 passaggi al secondo
Il nuovo schema dell'ottimizzatore genetico "continuazione dopo lo stop" con generazione di un nuovo piano di popolazione è corretto.
Stiamo rivalutando il concetto di tester e correggendo vecchie decisioni sbagliate.
Poiché i test genetici devono essere eseguiti più volte per coprire l'area di ricerca in modo più completo, il nostro nuovo modello con la visualizzazione delle esecuzioni precedenti dalla cache permette una migliore comprensione della meccanica del flusso di lavoro della genetica.
Il nuovo modello di visualizzazione dei risultati di ottimizzazione con tutti i dati delle cache calcolate in precedenza aggiunti alla tabella permette di vedere il quadro in modo più completo. È possibile calcolare la vostra strategia in pezzi e vedere i risultati completi ogni volta, comprese le corse precedenti.
È a causa delle tabelle dei risultati fusi davvero grandi che abbiamo disabilitato la visualizzazione rieltime della lista dei risultati, e mostriamo il risultato aggregato dopo aver fuso tutti i risultati precedenti.
Il mio robot si blocca durante l'inizializzazione, sia in Runtime che in Debug. La compilazione va bene.
C'è una classe con membri statici nel codice, probabilmente a causa loro. Prima tutto funzionava bene. Ma ora riporta un errore durante l'inizializzazione globale.
Rimossi i membri statici dalla classe, funziona bene.
Il mio robot si blocca durante l'inizializzazione, sia in Runtime che in Debug. La compilazione va bene.
C'è una classe con membri statici nel codice, probabilmente a causa loro. Prima tutto funzionava bene. Ora scrive un errore durante l'inizializzazione globale.
Rimossi gli elementi statici nella classe, lanciati normalmente.
Scrivi la tua richiesta al Service Desk e allega l'Expert Advisor (può essere un file ex5), per favore.
Tuttavia, per favore riporta la scheda "Ottimizzazione" - è impossibile lavorare senza l'analisi operativa! Le tabelle grandi sono lente - facciamo un filtro - mostra i primi 20 per ogni criterio - non è così impegnativo in termini di risorse(?), ma aiuterà a vedere il quadro. E quei miliardi di passaggi, chi li fa? Sono unità con capacità enormi - tu stesso stai parlando della ragionevolezza dell'applicazione della genetica, e lì non ci sono questi portmanteaus. Quindi più di 10k passaggi sono una rarità.
Triste.
Almeno è stato possibile costruire un quadro su dati preliminari, mentre l'ottimizzazione è in corso.
Siamo impegnati in un grande aggiornamento delle prestazioni del tester e stiamo ridisegnando le modalità di carico pesante. Sono stati fatti grandi miglioramenti e nuovi metodi di accelerazione saranno presto implementati.
La finestra dell'elenco delle corsie ha deciso di mostrarsi alla fine dell'errore di calcolo, per non sprecare risorse davvero grandi per mantenere, riordinare e visualizzare l'elenco delle corsie in continua evoluzione.
C'è stato davvero un enorme spreco di risorse e rallentamenti. Soprattutto quando si parla di centinaia di migliaia di righe, milioni e decine di milioni di passaggi. Non ha senso guardare con gli occhi un mucchio di dati preliminari.
Facciamo la nostra ottimizzazione ed eseguiamo test con 100 milioni di passaggi completi.
È chiaro che con questi numeri è fuori questione riordinare in tempo reale e visualizzare una tabella di 2-5-10-50 milioni di valori. C'è solo un'opzione: raccogliere tutto in modo rapido ed economico, ordinarlo definitivamente e fornire una visione di qualsiasi profondità.
Perché rompere un buon vecchio algoritmo e sostituirlo con uno nuovo che è 3 volte più lento?
L'algoritmo del tester genetico non è cambiato. E le dichiarazioni su 3 volte sono assolutamente infondate.
Il metodo di lavoro di una cache di risultati precedenti è cambiato. Ed è diventato molto meglio e più completo del precedente.
Se avete bisogno di introdurre un nuovo approccio al metodo genetico, aggiungete una nuova voce alla scheda "ottimizzazione",
Crea una descrizione e delle tecniche per lavorarci.
Dai un'occhiata ai link qui sopra - tutti questi articoli sono del nostro sito. L'ottimizzatore genetico è stato immediatamente discusso per molti anni.
Cerca "tester di strategia", "ottimizzatore genetico" nella ricerca, per favore.
E prendete il mio consiglio ripetuto - l'ottimizzazione del singolo fattore di recupero nella genetica è controindicato. Hai semplicemente ingannato l'algoritmo con un rapporto"profitto/discesa massima" completamente instabile e ingannevole (per gli automatici), che genera facilmente valori enormi. Pensa a come e perché.
Correggeremo il disegno del grafico di ottimizzazione lunedì.
Ci sarà un'esecuzione parziale degli ordini limite, a seconda dei volumi che passano sul mercato?
Avete mai visto dei volumi in un bicchiere nella storia? Questo non è realistico da attuare senza un'istantanea del mercato.
Avete mai visto dei volumi in un bicchiere nella storia? È impossibile farlo senza uno stampo del vetro.
Non me lo sognerei mai. Vorrei che Buy Limit con prezzo 90 e lotto 10 si attivasse parzialmente, se, diciamo, ci fosse un tick SELL con prezzo 89 e volume 1. Ora è molto triste. L'ordine verrebbe attivato se ci fosse un tick BUY con il prezzo 90 e il lotto 1... e a tutto volume.
L'algoritmo del tester genetico non è cambiato. Le affermazioni sulle 3 volte sono assolutamente infondate.
Ciò che è stato cambiato è il modo in cui funziona la cache dei risultati precedenti. Ed è diventato radicalmente migliore e più completo del precedente.
Ho fatto alcuni test comparativi sulle nuove e vecchie build del tester.
Ecco i risultati. Registri e descrizione nel post #34.
Ecco il mio test con le condizioni suggerite:
Metatrader 5 build 1755:
dopo di che il terminale viene riavviato per evitare l'effetto diretto delle cache calde in memoria
2018.04.30 11:24:15.913 Tester Best result 3254.53 produced at generation 0. Next generation 4 2018.04.30 11:24:16.775 Tester file cache used 19 times 2018.04.30 11:24:16.775 Tester result cache used 216 times 2018.04.30 11:24:16.775 Tester genetic optimization finished on pass 1337 (of 49644595) 2018.04.30 11:24:16.775 Statistics optimization done in 0 minutes 15 seconds 2018.04.30 11:24:16.775 Statistics local 1105 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)test continua dal punto di arresto e non dall'inizio come nella build 1809, quindi da 10496 passaggi proposti sono stati presi 3487 e 66+3814 presi dalla cache (66+3814 / 10496 = 36% cache hit)
2018.04.30 11:26:27.931 Tester Best result 3363.35 produced at generation 15. Next generation 32 2018.04.30 11:26:28.104 Tester genetic calculation is over 2018.04.30 11:26:28.111 Tester 3422 records written to file cache C:\Users\sys\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\tester\cache\Moving Average.EURUSD.M5.1.xml 2018.04.30 11:26:28.539 Tester file cache used 66 times 2018.04.30 11:26:28.539 Tester result cache used 3814 times 2018.04.30 11:26:28.539 Tester genetic optimization finished on pass 8704 (of 49644595) 2018.04.30 11:26:28.550 Statistics optimization done in 0 minutes 25 seconds 2018.04.30 11:26:28.550 Statistics local 3487 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)Metatrader 5 build 1809:
dopo di che il riavvio del terminale è fatto per evitare l'influenza diretta delle cache calde in memoria.
come il test è iniziato dall'inizio, dai 10240 passaggi proposti è stato fatto pulito 5863 e 4377 sono stati presi dalla cache (4377 / 10240 = 42% cache hit)
Ora le conclusioni:
Questo può essere visto nel tempo di passaggio completo, è di 33 secondi invece di 38 secondi. E 33 secondi per un numero maggiore di passaggi.
Se ricalcoliamo il numero di passaggi al secondo, risulta:
- build 1755 dà 4780 passaggi / 38 sec = 125 passaggi al secondo
- build 1809 dà 5549 passaggi / 33 sec = 168 passaggi al secondo
Stiamo rivalutando il concetto di tester e correggendo vecchie decisioni sbagliate.
Poiché i test genetici devono essere eseguiti più volte per coprire l'area di ricerca in modo più completo, il nostro nuovo modello con la visualizzazione delle esecuzioni precedenti dalla cache permette una migliore comprensione della meccanica del flusso di lavoro della genetica.
Il nuovo modello di visualizzazione dei risultati di ottimizzazione con tutti i dati delle cache calcolate in precedenza aggiunti alla tabella permette di vedere il quadro in modo più completo. È possibile calcolare la vostra strategia in pezzi e vedere i risultati completi ogni volta, comprese le corse precedenti.
È a causa delle tabelle dei risultati fusi davvero grandi che abbiamo disabilitato la visualizzazione rieltime della lista dei risultati, e mostriamo il risultato aggregato dopo aver fuso tutti i risultati precedenti.
Il mio robot si blocca durante l'inizializzazione, sia in Runtime che in Debug. La compilazione va bene.
C'è una classe con membri statici nel codice, probabilmente a causa loro. Prima tutto funzionava bene. Ma ora riporta un errore durante l'inizializzazione globale.
Rimossi i membri statici dalla classe, funziona bene.
Il mio robot si blocca durante l'inizializzazione, sia in Runtime che in Debug. La compilazione va bene.
C'è una classe con membri statici nel codice, probabilmente a causa loro. Prima tutto funzionava bene. Ora scrive un errore durante l'inizializzazione globale.
Rimossi gli elementi statici nella classe, lanciati normalmente.
Scrivi la tua richiesta al Service Desk e allega l'Expert Advisor (può essere un file ex5), per favore.
Tutto questo è fantastico!
Tuttavia, per favore riporta la scheda "Ottimizzazione" - è impossibile lavorare senza l'analisi operativa! Le tabelle grandi sono lente - facciamo un filtro - mostra i primi 20 per ogni criterio - non è così impegnativo in termini di risorse(?), ma aiuterà a vedere il quadro. E quei miliardi di passaggi, chi li fa? Sono unità con capacità enormi - tu stesso stai parlando della ragionevolezza dell'applicazione della genetica, e lì non ci sono questi portmanteaus. Quindi più di 10k passaggi sono una rarità.
Triste.
Almeno è stato possibile costruire un quadro su dati preliminari, mentre l'ottimizzazione è in corso.
Siamo impegnati in un grande aggiornamento delle prestazioni del tester e stiamo ridisegnando le modalità di carico pesante. Sono stati fatti grandi miglioramenti e nuovi metodi di accelerazione saranno presto implementati.
La finestra dell'elenco delle corsie ha deciso di mostrarsi alla fine dell'errore di calcolo, per non sprecare risorse davvero grandi per mantenere, riordinare e visualizzare l'elenco delle corsie in continua evoluzione.
C'è stato davvero un enorme spreco di risorse e rallentamenti. Soprattutto quando si parla di centinaia di migliaia di righe, milioni e decine di milioni di passaggi. Non ha senso guardare con gli occhi un mucchio di dati preliminari.
Facciamo la nostra ottimizzazione ed eseguiamo test con 100 milioni di passaggi completi.
È chiaro che con questi numeri è fuori questione riordinare in tempo reale e visualizzare una tabella di 2-5-10-50 milioni di valori. C'è solo un'opzione: raccogliere tutto in modo rapido ed economico, ordinarlo definitivamente e fornire una visione di qualsiasi profondità.
Raccontaci e basta.