Des résultats complètement différents pour le même expert

 

Je suis très, très perplexe quant aux résultats que j'obtiens du backtester de Metatrader. J'espère que quelqu'un d'autre a eu des expériences similaires et qu'il a une idée de ce qui pourrait causer les miennes.

Un expert que j'ai développé a obtenu d'excellents résultats dans les backtests et à travers un large éventail de variations dans l'optimisation et les exécutions d'optimisation walkforward. Puis, soudainement, sans que j'aie fait consciemment de grands changements, les résultats sont devenus médiocres/marginaux. Puis, aujourd'hui encore, les résultats sont soudainement redevenus superbes.

J'ai maintenant des rapports de backtesting avec exactement le même expert, les mêmes dates, le même fichier de paramètres et des résultats totalement différents. J'ai fait de mon mieux pour m'assurer que les données sont les mêmes (en les reconstruisant à partir des données historiques téléchargées hier, j'ai encore obtenu des résultats très différents aujourd'hui).

La seule chose que j'ai trouvée qui pourrait être différente est l'écart. D'après ce que j'ai pu constater, MT4 suppose que le spread pendant toute la durée d'un backtesting aura été le même que le spread actuel. Une "caractéristique" plutôt étrange du système, mais pas l'explication de mes observations, car avec des spreads serrés aujourd'hui, les résultats étaient médiocres, alors qu'avec des spreads légèrement plus larges hier, les résultats étaient incroyablement bons.

Après ces expériences, je suis dans une position où je ne suis pas sûr de pouvoir me fier aux informations que je reçois du logiciel, et j'ai désespérément besoin d'une explication que je puisse utiliser pour éviter d'être trompé (dans un sens ou dans l'autre) à l'avenir.

Voici les graphiques des résultats médiocres et des résultats incroyablement bons pour des backtests avec le même expert, la même période (2011/1/1 à 2011/7/26) et les mêmes paramètres. Les transactions sont généralement ouvertes pendant des heures ou plus et n'utilisent pas de prises de bénéfices ou de pertes (toutes les entrées et sorties sont basées sur les états des indicateurs uniquement). Le nombre de transactions dans les deux séries est de 211 et 173. Il y a des pertes dans le deuxième graphique, mais le facteur de profit est très élevé.


 
Elroch:


J'ai maintenant des rapports de backtesting avec exactement le même expert, les mêmes dates, le même fichier de paramètres et des résultats totalement différents. J'ai fait de mon mieux pour m'assurer que les données sont les mêmes (en les reconstruisant à partir des données historiques téléchargées hier, j'ai encore obtenu des résultats très différents aujourd'hui).


Téléchargez à nouveau vos données, déconnectez votre terminal (je le fais en me connectant avec un numéro de compte invalide), supprimez votre historique et les données déjà stockées dans le terminal, importez vos données, M1 je suppose ? créez les autres périodes dont vous avez besoin en utilisant le convertisseur de période et importez-les ... vérifiez que vous avez les données dont vous avez besoin pour la période que vous voulez exécuter ... exécutez votre EA.
 
Merci, mais j'ai plus d'une fois construit les données à partir de 10 ans de données 1 minute téléchargées de la manière que vous suggérez, j'ai redémarré le logiciel plusieurs fois, j'ai stocké l'EA exact et les paramètres et j'ai toujours obtenu des résultats complètement différents lors d'une exécution ultérieure. Je suis toujours perplexe.
 

Elroch:

Un expert que j'ai développé a obtenu d'excellents résultats dans les backtests et sur un large éventail de variations dans les parcours d'optimisation et de walkforward.

Puis, soudainement, sans que j'aie fait consciemment de grands changements, les résultats sont devenus médiocres/marginaux.

Puis, aujourd'hui encore, les résultats sont soudainement redevenus superbes.

Le testeur utilise le spread ACTUEL. Votre EA est très sensible aux changements.
 
WHRoeder:
Le testeur utilise l'écart ACTUEL. Votre EA est très sensible aux changements.

Comme je l'ai mentionné, j'ai repéré cela mais, puisque j'ai obtenu des résultats médiocres sur l'exécution d'aujourd'hui avec un spread de 1,2 pips, ce n'est pas l'explication.
 

Si vos entrées et sorties ne sont réellement basées que sur les valeurs des indicateurs, que vous négociez des lots de taille modérée et que vous gagnez une bonne moyenne en pips/trade, il ne reste pas beaucoup d'options :

a) corrompre le fichier historique

b) quelque chose comme le hasard a été inclus

c) dépendant d'une variable globale (qui a été modifiée entre les deux tests).

d) certains paramètres du courtier ont pu être modifiés (peu probable).

Pourquoi ne pas exécuter le test en mode "every tick"? Cela vous montrera la qualité des données...

 

Les ticks psudo créés par le testeur de stratégie sont-ils créés de manière identique pour chaque test et les indicateurs utilisés par l'EA créent-ils des valeurs pour chaque tick de la dernière barre comme ils le feraient en situation réelle ?

 

Merci pour vos remarques intéressantes, zzueg.

(a) il semble infaisable qu'un fichier historique corrompu puisse expliquer la séquence des résultats de backtesting avec le même EA : c'est-à-dire des résultats médiocres, des résultats superbes, des résultats médiocres et des résultats superbes similaires sur une période allant jusqu'à vendredi de la semaine dernière, période pendant laquelle j'ai fait de nouvelles installations de metatrader, reconstruit toutes les données à partir de données téléchargées d'une minute supposées de haute qualité, etc.

(b) le problème avec toute explication due aux effets aléatoires (y compris les mauvaises données) est qu'il est très difficile de voir pourquoi cela devrait rendre les transactions constamment énormément meilleures.

(c) Pendant quelques jours, j'ai pensé que cela pouvait être un changement accidentel dans mon code. Mais aujourd'hui, lorsque j'ai obtenu des résultats incroyablement bons, j'ai immédiatement enregistré une copie de l'expert (source et ex4) et du fichier de paramètres. Mais le même expert et les mêmes paramètres ont donné des résultats médiocres lors d'une exécution ultérieure.

(d) Oui, je ne suis pas sûr qu'il y ait beaucoup d'éléments du courtier qui soient pertinents au-delà du spread. Ce sont tous des backtests plutôt que des transactions en direct, bien sûr, et les données ont été construites principalement à partir de 10 ans de données d'une minute téléchargées.

(e) Avec l'expert entrant et sortant des positions à l'ouverture de la barre et n'utilisant pas du tout de stops ou d'objectifs de profit (dans la version étudiée en tout cas), je comprends que les seules valeurs qui peuvent influencer les résultats sont l'ouverture, le haut, le bas et la fermeture des barres des graphiques de 5 minutes et plus (en fait, il arrive que même la fermeture ne soit pas pertinente : il y a plusieurs variantes du même indicateur utilisé, et celles-ci utilisent (H+L)/2 comme point de données, alors que l'entrée et la sortie se produisent à l'ouverture d'une barre, donc les données d'ouverture et l'écart comptent aussi. L'ouverture ou la fermeture d'une transaction dépend des valeurs des indicateurs sur les barres précédentes, pas sur la barre actuelle.

...mais par souci d'exhaustivité, j'ai fait un essai avec "tous les ticks". Les résultats étaient pratiquement identiques au précédent, avec une différence minime expliquée par la fermeture de la dernière transaction à la dernière barre d'une minute plutôt qu'à la dernière barre de 5 minutes.


SDC, je ne peux pas être sûr que chaque tick généré est le même, mais gardez à l'esprit les points que j'ai soulevés en réponse à zzueg au point (e) ci-dessus.
 

Je ne voulais pas dire que les résultats changent dans chaque mode de tick, je suis intéressé par le nombre d'erreurs graphiques non concordantes signalées.

Les écarts dans l'historique sont très peu probables car ils n'expliqueraient pas une telle différence avec une stratégie basée sur des indicateurs.

J'ai eu des problèmes similaires seulement avec des données corrompues, depuis que mon terminal est toujours hors ligne, je n'ai plus jamais eu ce genre de problème.

En ce qui concerne les variables globales, je voulais dire : avez-vous quelque chose comme GlobalVariableGet() dans votre code, ces variables ne sont pas limitées à l'environnement de test.

Enfin, pour avoir demandé à tout le monde : y a-t-il des erreurs dans le journal ?

@SDC, oui, les pseudo ticks sont générés de manière identique pour chaque exécution. D'après mon expérience, c'est loin d'être une précision de 90%, mais c'est toujours la même chose.

 

Merci encore pour vos observations. Je suis maintenant dans la situation intéressante d'avoir deux installations de metatrader qui donnent deux ensembles de résultats extrêmement différents (même lorsque je copie l'EA et les paramètres directement de l'une à l'autre et que j'exécute strategy tester sur les deux. Cela indiquerait les données, mais il est encore très difficile de voir comment cela pourrait l'expliquer pour les raisons évoquées. Je me demande quelle est la meilleure façon de voir quelles différences il pourrait y avoir.

Je viens de vérifier les journaux des deux exécutions sur les installations distinctes de metatrader et il n'y a pas d'erreurs dans les deux cas.

Il n'y a rien de tel que GlobalVariableGet() dans mon code. L'EA utilise 5 copies d'un seul indicateur personnalisé sur 4 cadres temporels différents, l'une d'entre elles ayant un paramètre différent des autres.

 

J'ai trouvé ce qui pourrait être une preuve cruciale, mais je ne comprends pas vraiment sa signification.

Sur l'installation qui donnait des résultats médiocres, je me suis déconnecté de la connexion à l'a/c du courtier en argent réel et je me suis reconnecté à l'a/c d'entraînement sur le même courtier. Après avoir fait cela (et rien d'autre) le testeur de stratégie a donné des résultats spectaculaires similaires à l'autre copie de metatrader (fonctionnant sur le même a/c de courtier d'entraînement). Par ailleurs, le courtier est Oanda.

Je ne sais pas comment le client metatrader gère les données historiques lorsqu'il passe d'un a/c à l'autre, mais le fait que toutes les anciennes données proviennent des mêmes données téléchargées d'une minute plutôt que du courtier rend très difficile pour moi de comprendre ce qui se passe ici (les transactions du début de l'année sont bien meilleures dans le backtest exécuté avec une connexion à l'a/c d'entraînement que lorsqu'il y a une connexion à l'a/c réel).