une stratégie commerciale basée sur la théorie des vagues d'Elliott - page 67

 
Probablement qu'en temps réel, de tels chiffres sont acceptables (bien qu'il n'y ait pas de limite à la perfection :), mais avec les tests historiques, d'après ce que je comprends, la situation est plutôt difficile, même avec un échantillon court. J'espère que vous ne me soupçonnez pas d'être un opposant à l'utilisation des calculs informatiques ? :). Après avoir lu le fil de discussion, j'ai eu l'impression qu'il serait souhaitable d'accélérer considérablement l'algorithme.

Bien sûr, il ne fait aucun doute que nous aimerions obtenir un algorithme plus rapide pour les calculs, en particulier pour les tests d'historique, mais d'un autre côté, cette méthodologie ne nécessite pas un multimillion d'exécutions sur le testeur, comme c'est le cas pour l'ajustement traditionnel sur les données historiques, que la plupart des utilisateurs de MT4 aiment utiliser assidûment attaquant les créateurs de ce produit (Donnez plus de pilules gourmandes !!!); o). Il faut se rendre compte qu'une exécution d'Expert Advisor, créé par cette méthodologie en termes d'applicabilité des résultats sera sciemment supérieure à l'EA optimisé par 10000000000 d'exécutions, dont son auteur est capable d'attendre les résultats pour toujours dans cette vie;o)))). Je le dis simplement en me basant sur mon expérience de la création d'un système de devinettes aléatoires décrit ci-dessus dans ce fil au tout début. L'optimisation d'un conseiller expert basée sur les méthodes de la statistique matricielle consiste principalement en une amélioration logique de l'algorithme avec un minimum de paramètres à ajuster (chaque paramètre a également une zone de variation limitée), mais pas en la recherche de certaines valeurs "optimales" de différents oscillateurs et de la moyenne mobile et de certains ratios trouvés sur le maximum global dans l'espace à n dimensions comme requis pour l'ajustement standard de l'histoire. Le résultat présenté dans les posts ci-dessus a probablement été obtenu en ne réalisant pas plus de cinquante exécutions complètes de l'algorithme sur l'historique disponible. Après chaque exécution, l'algorithme a été affiné et amélioré. Et en ce moment, je fais toujours la même chose. Je fais 2 ou 3 essais par jour, j'analyse les résultats et j'améliore l'algorithme. Je n'ai pas encore complètement débogué l'algorithme, mais j'ai déjà lancé la première version, plus ou moins fonctionnelle, sur le compte réel. Je n'ai pas encore effectué de transactions à ce sujet. Le conseiller expert attend une baisse de l'euro.
 
solandr, afin d'accélérer/optimiser le temps de test - avez-vous utilisé un indicateur personnalisé ou des tableaux contenant X,X^2, et ainsi de suite ?
 
Je n'utilise pas les indicateurs personnalisés car j'ai écrit que chaque appel de ceux-ci est pointé dans le journal du testeur. J'ai introduit un indicateur des niveaux de Murray dans le conseiller expert lui-même. Je n'ai pas encore inventé les tableaux qui accél èrent spécifiquement les calculs de l'Expert Advisor. Franchement, je ne sais pas ce que l'on peut inventer. Les informations sur le calcul des barres précédentes (bordures de canal) sont naturellement stockées dans des tableaux et ne sont pas recalculées sur une nouvelle barre. Je pense que j'ai pratiquement épuisé tout mon algorithme en termes de vitesse et que je ne serai pas en mesure de l'accélérer davantage. Mais je ne suis pas très clair sur les tableaux contenant X, X^2. Dans quelle mesure la recherche de valeurs sur un grand tableau de X,X^2 peut-elle réduire le temps de calcul (mise au carré) ? Avez-vous des données de comparaison de calcul ? Il serait intéressant d'y jeter un coup d'œil.
 
C'est-à-dire Y=A*X+B sur chaque nouvelle barre pour chaque nouveau canal ?

J'ai commencé à chercher et j'ai réalisé qu'il était possible d'optimiser l'EA. Le gain doit être de (N+1)/2 , où N est la longueur maximale du canal (votre version actuelle utilise 300 - donc le gain doit être de 150 fois).
 
Si je comprends bien, vous proposez d'organiser un tableau cubique, dont chaque ligne sera composée de quelques millions et dans lequel vous cherchez des réponses prêtes Y avec 3 paramètres différents A, X, B ? Ou est-ce que je ne comprends pas bien l'idée ?
 
Non, je propose juste de faire le calcul sur chaque barre une seule fois, et ensuite d'utiliser cette valeur N fois (un tableau est formé, sans doute :))
 
Comment cela est-il possible, si nous avons des canaux sur chaque barre qui bougent légèrement, changeant leurs limites ?
 
Je ne peux pas remplacer complètement l'algorithme (je dois encore faire un travail sérieux), mais je peux coller un peu d'un algorithme optimisé dans un algorithme normal. Cela signifie que tous les calculs préliminaires pour l'algorithme optimisé sont effectués mais que le canal est calculé de la manière habituelle. Voici le journal :
2006.07.04 23:04:37 ChannelStDev3 GBPCHF,M15 : Execute deinit()<br / translate="no"> 2006.07.04 23:04:37 ChannelStDev3 GBPCHF,M15 : Normal script time+optimization579 ms
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15 : a=-0.0001 b=2.2628 lastBar1 firstBar=105 StDev=0.001
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15 : 140 canaux répondant au critère ont été trouvés sur 1000 barres
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15 : Ils sont en 1 série
2006.07.04 23:04:36 ChannelStDev3 GBPCHF,M15 : initialisé
2006.07.04 23:04:35 ChannelStDev3 GBPCHF,M15 : chargé correctement
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15 : enlevé
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15 : désinitialisé
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15 : exécution de deinit()
2006.07.04 23:04:28 ChannelStDev GBPCHF,M15 : Temps de script normal 547 ms
2006.07.04 23:04:27 ChannelStDev GBPCHF,M15 : a=-0.0001 b=2.2628 lastBar1 firstBar=105 StDev=0.001
2006.07.04 23:04:27 ChannelStDev GBPCHF,M15 : 140 canaux correspondant au critère ont été trouvés sur 1000 barres


Ainsi, le temps de l'algorithme optimisé devrait être d'environ (579-547)=32 millisecondes. En gros, le gain est de 547/32=17 fois. Ce n'est certainement pas 500 fois comme je le supposais, il faut quand même vérifier. Peut-être n'ai-je pas pris en compte les procédures incompressibles qui prennent plus de temps que je ne le pensais. Je vais essayer de vérifier demain.
 
Mesurer les deux blocs de calculs séparément.
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15 : deinitialisé<br/ translate="no"> 2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15 : Execute deinit()
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15 : a=0.0071 b=146.7474 lastBar1 firstBar=50 StDev=0.1056
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15 : A trouvé 820 canaux répondant au critère sur 1000 barres
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15 : Ils sont en 8 séries
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15 : Temps de l'algorithme conventionnel390 ms
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15 : Temps de l'algorithme optimisé0 ms
2006.07.05 14:34:17 ChannelStDev3 EURJPY,M15 : initialisé
2006.07.05 14:34:15 ChannelStDev3 EURJPY,M15 : chargé avec succès


Il reste à voir si le bloc optimisé calculera correctement. En même temps, j'ai découvert que le travail avec des objets prend un temps considérable (presque un tiers de la variante non optimisée) - le dessin dans le backtest n'est pas souhaitable. Bien que
 
Refaites-le, avec l'impression
<br/ translate="no"> 14:54:04 ChannelStDev3 EURJPY,M15 : k=64 a=0.002 b=146.8379 sigma=-1370529.6008
14:54:04 ChannelStDev3 EURJPY,M15 : k=63 a=0.0025 b=146.829 sigma=-1348950.2071
14:54:04 ChannelStDev3 EURJPY,M15 : k=62 a=0.0029 b=146.8197 sigma=-1327370.2369
14:54:04 ChannelStDev3 EURJPY,M15 : k=61 a=0.0033 b=146.8105 sigma=-1305795.8008
14:54:04 ChannelStDev3 EURJPY,M15 : k=60 a=0.0038 b=146.8016 sigma=-1284233.323
14:54:04 ChannelStDev3 EURJPY,M15 : k=59 a=0.0042 b=146.7921 sigma=-1262664.9732
14:54:04 ChannelStDev3 EURJPY,M15 : k=58 a=0.0046 b=146.7844 sigma=-1241133.5221
14:54:04 ChannelStDev3 EURJPY,M15 : k=57 a=0.005 b=146.7769 sigma=-1219610.1431
14:54:04 ChannelStDev3 EURJPY,M15 : k=56 a=0.0055 b=146.7678 sigma=-1198064.4492
14:54:04 ChannelStDev3 EURJPY,M15 : k=55 a=0.0058 b=146.7611 sigma=-1176563.0841
14:54:04 ChannelStDev3 EURJPY,M15 : k=54 a=0.0062 b=146.754 sigma=-1155059.1345
14:54:04 ChannelStDev3 EURJPY,M15 : k=53 a=0.0066 b=146.7469 sigma=-1133558.635
14:54:04 ChannelStDev3 EURJPY,M15 : k=52 a=0.007 b=146.7398 sigma=-1112061.7881
14:54:04 ChannelStDev3 EURJPY,M15 : k=51 a=0.0073 b=146.7342 sigma=-1090593.6002
14:54:04 ChannelStDev3 EURJPY,M15 : k=50 a=0.0074 b=146.7327 sigma=-1069186.857
14:54:04 ChannelStDev3 EURJPY,M15 : k=49 a=0.0074 b=146.733 sigma=-1047808.1245
14:54:04 ChannelStDev3 EURJPY,M15 : k=48 a=0.0073 b=146.7346 sigma=-1026446.748
14:54:04 ChannelStDev3 EURJPY,M15 : k=47 a=0.0069 b=146.7404 sigma=-1005141.2611
14:54:04 ChannelStDev3 EURJPY,M15 : k=46 a=0.0064 b=146.7494 sigma=-983876.6836
14:54:04 ChannelStDev3 EURJPY,M15 : Temps d'algorithme optimisé 31 ms
14:54:05 ChannelStDev3 EURJPY,M15 : Temps d'algorithme ordinaire 875 ms
14:54:05 ChannelStDev3 EURJPY,M15 : Ils sont dans 6 séries
14:54:05 ChannelStDev3 EURJPY,M15 : Trouvé 824 canaux qui répondent aux critères, plus de 1000 barres
14:54:05 ChannelStDev3 EURJPY,M15 : a=0.0064 b=146.7494 lastBar1 firstBar=46 StDev=0.1044
14:54:05 ChannelStDev3 EURJPY,M15 : Execute deinit()
14:54:05 ChannelStDev3 EURJPY,M15 : deinitialisé
14:54:05 ChannelStDev3 EURJPY,M15 : supprimé


Problème avec sigma cependant :)
Raison: