Pourquoi casser un bon vieil algorithme et le remplacer par un nouveau qui est 3 fois plus lent ?
L'algorithme du testeur génétique n'a pas changé. Et les affirmations concernant les 3 fois sont absolument sans fondement.
La méthode de travail d'un cache des résultats précédents a changé. Et il est devenu bien meilleur et plus complet que le précédent.
Si vous devez introduire une nouvelle approche de la méthode génétique, ajoutez un nouvel élément à l'onglet "optimisation",
Créez une description et des techniques pour travailler avec elle.
Jetez un coup d'œil aux liens ci-dessus - tous ces articles proviennent de notre site. L'optimiseur génétique fait l'objet de discussions instantanées depuis de nombreuses années.
Cherchez"testeur de stratégie", "optimiseur génétique" dans la recherche, s'il vous plaît.
Et suivez mon conseil répété - l'optimisation d'un seul facteur de récupération en génétique est contre-indiquée. Vous trompez simplement l'algorithme avec un rapport"profit/tirage maximal" complètement instable et trompeur (pour les automatiques), qui génère facilement des valeurs énormes. Réfléchissez au comment et au pourquoi.
Nous corrigerons le dessin du graphique d'optimisation lundi.
Avez-vous déjà vu des volumes dans un verre dans l'histoire ? Il est impossible de le faire sans un moule du verre.
Je n'en rêverais pas. Je voudrais que le Buy Limit avec le prix 90 et le lot 10 se déclenche partiellement, si, disons, il y avait un SELL tick avec le prix 89 et le volume 1. C'est très triste maintenant. L'ordre serait déclenché s'il y avait un tick BUY avec le prix 90 et le lot 1... et en plein volume.
L'algorithme du testeur génétique n'a pas changé. Les affirmations concernant les trois fois sont absolument sans fondement.
Ce qui a changé, c'est la façon dont fonctionne le cache des résultats précédents. Et il est devenu radicalement meilleur et plus complet que le précédent.
J'ai fait quelques tests comparatifs sur les nouvelles et anciennes versions du testeur.
Voici les résultats. Logs et description dans le post #34.
paramètres de https://www.mql5.com/ru/forum/241285/page4#comment_7271206
tous les caches de fichiers du testeur une fois retirés du disque avant le début des tests
Windows 10, Intel Xeon E5-2630 v4 @ 2.20GHz, 8 cœurs utilisés pour les agents
Passage complet jusqu'à la fin, puis redémarrage du terminal
avec arrêt à 1000 (environ) passages
Continuer après l'arrêt
Metatrader 5 build 1755
38 sec, 4780 passages
15 sec, 1105 passages
25 sec, 3487 passages
Metatrader 5 build 1809
33 sec, 5,549 passes
9 sec, 1126 passages
36 sec, 5863 passages
Metatrader 5 build 1755 :
Bild 1755 passage complet, un total de 8960 variantes passées, dont 4780 ont été effectivement calculées et 4180 ont été prises dans le cache accumulé dans la même session
après quoi le terminal est redémarré pour éviter l'effet direct des caches chauds en mémoire
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%)
construire 1755 avec un arrêt à 1337 exécutions. 216 d'entre elles sont prises dans le cache (216 / 1337 = 16% de succès dans le cache, pas beaucoup en raison du hasard du départ et de la petite taille de l'échantillon)
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 avec continuation après un arrêt sur Stop, le terminal n'a pas redémarré, continuation.
le test continue à partir du point d'arrêt et non à partir du début comme dans le build 1809, puis à partir des 10496 passes proposées ont été prises 3487 et 66+3814 prises à partir du 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 :
construire 1809 passes complètes, total 8960 passes, dont 5549 ont été réellement comptées et 3411 prises dans le cache hit accumulé dans la même session
après quoi le redémarrage du terminal est effectué pour éviter l'influence directe des caches chauds en mémoire.
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%)
construire 1809 avec un arrêt à 1348 passes. 222 d'entre elles ont été prises dans le cache (222 / 1348 = 16% de cache hit, pas assez à cause du hasard du départ et du petit échantillon)
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 avec continuation après un arrêt sur Stop, le terminal n'a pas redémarré, continuation.
car le test est repris depuis le début, sur les 10240 passes proposées 5863 ont été effectuées proprement et 4377 ont été prises dans le 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%)
Maintenant, les conclusions :
Votre déclaration sur "3 fois plus lent" est fausse.
En fait, le testeur de la build 1809 est devenu plus rapide grâce à l'optimisation et à la réécriture des processus internes.
Cela se voit dans le temps de passage complet, il est de 33 secondes au lieu de 38 secondes. Et 33 secondes pour un plus grand nombre de passages.
Si nous recalculons le nombre de passages par seconde, il s'avère que : - build 1755 donne 4780 passages / 38 sec = 125 passages par seconde - build 1809 donne 5549 passages / 33 sec = 168 passages par seconde
Le nouveau schéma de l'optimiseur génétique "continuation after stop" avec génération d'un nouveau plan de population est correct.
Nous sommes en train de réévaluer le concept de testeur et de corriger les anciennes mauvaises décisions.
Étant donné que les tests génétiques doivent être exécutés plusieurs fois pour couvrir plus complètement la zone de recherche, notre nouveau modèle avec visualisation des exécutions précédentes à partir du cache permet de mieux comprendre les mécanismes du flux de travail de la génétique.
Le nouveau modèle d'affichage des résultats d'optimisation avec toutes les données des caches calculées précédemment ajoutées au tableau permet d'avoir une vision plus complète de la situation. Il est possible de calculer votre stratégie par morceaux et de voir les résultats complets à chaque fois, y compris les exécutions précédentes.
C'est en raison des tableaux de résultats fusionnés très volumineux que nous avons désactivé l'affichage en temps réel de la liste des résultats, et que nous montrons le résultat agrégé après la fusion de tous les résultats précédents.
Mon robot se bloque pendant l'initialisation, à la fois en Runtime et en Debug. La compilation est bonne.
Il y a une classe avec des membres statiques dans le code, probablement à cause d'eux. Tout fonctionnait bien avant. Mais maintenant, il signale une erreur pendant l'initialisation globale.
J'ai supprimé les membres statiques de la classe, elle fonctionne bien.
Mon robot se bloque pendant l'initialisation, à la fois en Runtime et en Debug. La compilation est bonne.
Il y a une classe avec des membres statiques dans le code, probablement à cause d'eux. Tout fonctionnait bien avant. Maintenant, il écrit une erreur pendant l'initialisation globale.
Suppression des éléments statiques dans la classe, lancée normalement.
Écrivez votre demande au Service Desk et joignez le conseiller expert (peut être un fichier ex5), s'il vous plaît.
Toutefois, veuillez rétablir l'onglet "Optimisation" - il est impossible de travailler sans analyse opérationnelle ! Les grands tableaux sont lents - faisons un filtre - montrons les 20 premiers pour chaque critère - ce n'est pas si gourmand en ressources( ?), mais cela aidera à voir le tableau. Et, ces milliards de passes - qui les fabrique ? Ce sont des unités dotées d'énormes capacités - vous parlez vous-même du caractère raisonnable de l'application de la génétique, et il n'y a pas de tels portmanteaux. Ainsi, plus de 10 000 passages est une rareté.
Triste.
Au moins, il a été possible de dresser un tableau à partir de données préliminaires, pendant que l'optimisation se poursuit.
Nous sommes en train de procéder à une importante mise à niveau des performances du testeur et de redéfinir les modes de charge lourde. Des améliorations majeures ont été apportées et de nouvelles méthodes d'accélération seront bientôt mises en œuvre.
La fenêtre de la liste des allées a décidé de s'afficher à la fin de l'erreur de calcul, afin de ne pas gaspiller des ressources vraiment importantes pour maintenir, retrier et afficher la liste des allées qui change constamment.
Il y a vraiment eu un énorme gaspillage de ressources et des ralentissements. Surtout quand il s'agit de centaines de milliers de lignes, de millions et de dizaines de millions de passages. Il n'y a aucun sens raisonnable à regarder un tas de données préliminaires avec les yeux.
Nous réalisons notre propre optimisation et effectuons des tests avec 100 millions de passages complets.
Évidemment, avec de tels chiffres, il est hors de question de refaire un tri en temps réel et d'afficher un tableau de 2-5-10-50 millions de valeurs. Il n'y a qu'une seule option : tout rassembler rapidement et économiquement, faire un tri final et fournir une vue de toute profondeur.
Pourquoi casser un bon vieil algorithme et le remplacer par un nouveau qui est 3 fois plus lent ?
L'algorithme du testeur génétique n'a pas changé. Et les affirmations concernant les 3 fois sont absolument sans fondement.
La méthode de travail d'un cache des résultats précédents a changé. Et il est devenu bien meilleur et plus complet que le précédent.
Si vous devez introduire une nouvelle approche de la méthode génétique, ajoutez un nouvel élément à l'onglet "optimisation",
Créez une description et des techniques pour travailler avec elle.
Jetez un coup d'œil aux liens ci-dessus - tous ces articles proviennent de notre site. L'optimiseur génétique fait l'objet de discussions instantanées depuis de nombreuses années.
Cherchez"testeur de stratégie", "optimiseur génétique" dans la recherche, s'il vous plaît.
Et suivez mon conseil répété - l'optimisation d'un seul facteur de récupération en génétique est contre-indiquée. Vous trompez simplement l'algorithme avec un rapport"profit/tirage maximal" complètement instable et trompeur (pour les automatiques), qui génère facilement des valeurs énormes. Réfléchissez au comment et au pourquoi.
Nous corrigerons le dessin du graphique d'optimisation lundi.
Y aura-t-il une exécution partielle des ordres à cours limité, en fonction des volumes passant par le marché ?
Avez-vous déjà vu des volumes dans un verre dans l'histoire ? Il est irréaliste de mettre en œuvre cette mesure sans avoir un aperçu du marché.
Avez-vous déjà vu des volumes dans un verre dans l'histoire ? Il est impossible de le faire sans un moule du verre.
Je n'en rêverais pas. Je voudrais que le Buy Limit avec le prix 90 et le lot 10 se déclenche partiellement, si, disons, il y avait un SELL tick avec le prix 89 et le volume 1. C'est très triste maintenant. L'ordre serait déclenché s'il y avait un tick BUY avec le prix 90 et le lot 1... et en plein volume.
L'algorithme du testeur génétique n'a pas changé. Les affirmations concernant les trois fois sont absolument sans fondement.
Ce qui a changé, c'est la façon dont fonctionne le cache des résultats précédents. Et il est devenu radicalement meilleur et plus complet que le précédent.
J'ai fait quelques tests comparatifs sur les nouvelles et anciennes versions du testeur.
Voici les résultats. Logs et description dans le post #34.
Voici mon test avec les conditions suggérées :
Metatrader 5 build 1755 :
après quoi le terminal est redémarré pour éviter l'effet direct des caches chauds en mémoire
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%)le test continue à partir du point d'arrêt et non à partir du début comme dans le build 1809, puis à partir des 10496 passes proposées ont été prises 3487 et 66+3814 prises à partir du 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 :
après quoi le redémarrage du terminal est effectué pour éviter l'influence directe des caches chauds en mémoire.
car le test est repris depuis le début, sur les 10240 passes proposées 5863 ont été effectuées proprement et 4377 ont été prises dans le cache (4377 / 10240 = 42% cache hit)
Maintenant, les conclusions :
Cela se voit dans le temps de passage complet, il est de 33 secondes au lieu de 38 secondes. Et 33 secondes pour un plus grand nombre de passages.
Si nous recalculons le nombre de passages par seconde, il s'avère que :
- build 1755 donne 4780 passages / 38 sec = 125 passages par seconde
- build 1809 donne 5549 passages / 33 sec = 168 passages par seconde
Nous sommes en train de réévaluer le concept de testeur et de corriger les anciennes mauvaises décisions.
Étant donné que les tests génétiques doivent être exécutés plusieurs fois pour couvrir plus complètement la zone de recherche, notre nouveau modèle avec visualisation des exécutions précédentes à partir du cache permet de mieux comprendre les mécanismes du flux de travail de la génétique.
Le nouveau modèle d'affichage des résultats d'optimisation avec toutes les données des caches calculées précédemment ajoutées au tableau permet d'avoir une vision plus complète de la situation. Il est possible de calculer votre stratégie par morceaux et de voir les résultats complets à chaque fois, y compris les exécutions précédentes.
C'est en raison des tableaux de résultats fusionnés très volumineux que nous avons désactivé l'affichage en temps réel de la liste des résultats, et que nous montrons le résultat agrégé après la fusion de tous les résultats précédents.
Mon robot se bloque pendant l'initialisation, à la fois en Runtime et en Debug. La compilation est bonne.
Il y a une classe avec des membres statiques dans le code, probablement à cause d'eux. Tout fonctionnait bien avant. Mais maintenant, il signale une erreur pendant l'initialisation globale.
J'ai supprimé les membres statiques de la classe, elle fonctionne bien.
Mon robot se bloque pendant l'initialisation, à la fois en Runtime et en Debug. La compilation est bonne.
Il y a une classe avec des membres statiques dans le code, probablement à cause d'eux. Tout fonctionnait bien avant. Maintenant, il écrit une erreur pendant l'initialisation globale.
Suppression des éléments statiques dans la classe, lancée normalement.
Écrivez votre demande au Service Desk et joignez le conseiller expert (peut être un fichier ex5), s'il vous plaît.
Tout cela est génial !
Toutefois, veuillez rétablir l'onglet "Optimisation" - il est impossible de travailler sans analyse opérationnelle ! Les grands tableaux sont lents - faisons un filtre - montrons les 20 premiers pour chaque critère - ce n'est pas si gourmand en ressources( ?), mais cela aidera à voir le tableau. Et, ces milliards de passes - qui les fabrique ? Ce sont des unités dotées d'énormes capacités - vous parlez vous-même du caractère raisonnable de l'application de la génétique, et il n'y a pas de tels portmanteaux. Ainsi, plus de 10 000 passages est une rareté.
Triste.
Au moins, il a été possible de dresser un tableau à partir de données préliminaires, pendant que l'optimisation se poursuit.
Nous sommes en train de procéder à une importante mise à niveau des performances du testeur et de redéfinir les modes de charge lourde. Des améliorations majeures ont été apportées et de nouvelles méthodes d'accélération seront bientôt mises en œuvre.
La fenêtre de la liste des allées a décidé de s'afficher à la fin de l'erreur de calcul, afin de ne pas gaspiller des ressources vraiment importantes pour maintenir, retrier et afficher la liste des allées qui change constamment.
Il y a vraiment eu un énorme gaspillage de ressources et des ralentissements. Surtout quand il s'agit de centaines de milliers de lignes, de millions et de dizaines de millions de passages. Il n'y a aucun sens raisonnable à regarder un tas de données préliminaires avec les yeux.
Nous réalisons notre propre optimisation et effectuons des tests avec 100 millions de passages complets.
Évidemment, avec de tels chiffres, il est hors de question de refaire un tri en temps réel et d'afficher un tableau de 2-5-10-50 millions de valeurs. Il n'y a qu'une seule option : tout rassembler rapidement et économiquement, faire un tri final et fournir une vue de toute profondeur.
Parlez-nous en, et c'est tout.