Exécution

Le backtest contre le réel : où passe la différence

Presque toute stratégie se comporte moins bien en réel qu'en simulation, et l'écart est habituellement attribué à la malchance ou à un changement de conditions. Les deux explications sont disponibles et les deux sont généralement fausses : l'écart a des sources mécaniques, et on peut les énumérer.

· 11 min de lecture

L'écart n'est pas du bruit

Quand une stratégie testée sous-performe en réel, la première hypothèse offerte est que le marché a changé. Cette hypothèse est infalsifiable à court terme et donc inutile, et elle est aussi généralement inutile au sens propre, parce que la différence entre une simulation et un relevé de compte a des causes qui n'exigent absolument pas que le marché ait changé.

Le cadrage utile est qu'un backtest est un modèle, et que tout modèle diffère de la réalité en des endroits précis. La question n'est pas de savoir si le modèle était faux mais où, et cette question-là a des réponses qu'on peut aller vérifier plutôt que supposer.

Il y a six sources récurrentes, et en pratique l'essentiel de l'écart sur une stratégie donnée vient d'une ou deux d'entre elles. Identifier lesquelles est un exercice de diagnostic, et il vaut la peine d'être fait avant de conclure quoi que ce soit sur le fait que l'idée de fond marche ou non.

Le marché n'a pas forcément changé. Un backtest est un modèle, et les modèles diffèrent de la réalité en des endroits précis qu'on peut aller vérifier.

Source une : les exécutions que vous n'auriez pas eues

La plus courante et la plus grosse. Une simulation suppose typiquement qu'un ordre posé à un prix est exécuté quand le marché touche ce prix. En réalité, toucher un prix signifie que quelqu'un y a traité, pas que vous l'avez fait : votre ordre attend dans une file derrière tous ceux qui ont posé à ce niveau plus tôt, et le marché peut toucher, exécuter le début de la file, et repartir sans vous atteindre.

Cela affecte les stratégies de façon asymétrique et dans la pire direction possible. Vos trades gagnants, où le prix a touché votre niveau puis s'est éloigné, sont exactement ceux où la file n'a peut-être pas été vidée. Vos trades perdants, où le prix a touché puis traversé, sont ceux qui se sont certainement exécutés. La simulation vous donne les deux ; la réalité vous donne le second de façon fiable et le premier parfois.

Le diagnostic est simple : comptez la proportion de vos exécutions simulées survenues à un niveau que le marché a seulement touché plutôt que traversé. Si elle est élevée, c'est votre écart principal, et la correction honnête est d'exiger que le marché traverse votre niveau d'une certaine marge avant de compter une exécution.

Source deux : l'écart de cotation non modélisé

Beaucoup de simulations tournent sur une série de prix unique, typiquement le prix de clôture de chaque intervalle, et entrent et sortent à ce prix. Mais il n'existe pas de prix unique : il y a un achat et une vente, et vous achetez à l'un et vendez à l'autre. Utiliser un milieu ou une clôture pour les deux côtés retire un coût entier de chaque aller-retour.

L'ampleur de cette omission est proportionnelle à la fréquence de trading de la stratégie, ce qui explique qu'elle détruise les stratégies à haute fréquence et touche à peine celles à long horizon. Une stratégie qui prend une position par mois peut absorber l'omission ; une stratégie qui en prend vingt par jour ne peut pas, et la différence de résultat entre les deux est entièrement un artefact du choix de modélisation.

La correction est de modéliser les deux côtés explicitement : acheter à la vente, vendre à l'achat, en utilisant l'écart réel qui existait à l'époque plutôt qu'une valeur typique. Là où l'historique d'écarts n'est pas disponible, utiliser une constante prudente vaut infiniment mieux que n'en utiliser aucune, parce qu'aucune est une hypothèse de zéro et zéro est la seule valeur certainement fausse.

Source trois : les frais appliqués incomplètement

Les erreurs de modélisation des frais sont courantes et elles vont presque toujours dans le même sens. La version fréquente consiste à appliquer un taux unique à chaque trade quand la structure réelle distingue les ordres qui apportent de la liquidité de ceux qui en prennent, et à supposer que vos ordres se comportent comme la catégorie la moins chère plus souvent qu'ils ne le font.

Il y a aussi le coût de financement des positions à effet de levier, qui n'est pas un frais de trading et ne figure pas dans un barème. Une simulation d'une stratégie qui garde des contrats d'un jour sur l'autre sans tenir compte des paiements périodiques de financement mesure autre chose que ce que le compte aurait fait, et l'omission se cumule avec la durée de détention.

La correction est arithmétique et vaut la peine d'être faite avec précision : appliquer le bon taux par type d'ordre selon ce que chaque ordre était réellement, et ajouter les coûts périodiques de toute position gardée à travers les intervalles auxquels ils sont prélevés. C'est la source la moins intéressante de l'écart et l'une des plus faciles à éliminer.

Source quatre : l'information que vous n'aviez pas

Le biais d'anticipation est le subtil et il se cache dans du code ordinaire. Tout calcul qui utilise l'information d'une barre pour décider à l'intérieur de cette barre utilise le futur, et la version classique consiste à décider à l'ouverture d'une période à partir d'une valeur calculée sur sa clôture.

Il entre aussi par la révision des données. Certaines séries sont corrigées après publication, et une série téléchargée aujourd'hui contient ces corrections ; une stratégie testée sur la série corrigée disposait d'une connaissance que personne n'avait à l'époque. Cela touche les entrées fondamentales et macro bien plus que les prix, mais les séries de prix ne sont pas immunisées là où une place a republié des données.

Le test de l'anticipation est de faire tourner la stratégie d'une façon qui ne peut structurellement pas voir le futur : traiter les données une observation à la fois, en prenant chaque décision avec seulement ce qui la précédait. Si les résultats s'effondrent, vous aviez de l'anticipation, et l'ampleur de l'effondrement est exactement la part de votre résultat faite d'information dont vous ne disposiez pas.

Décider à l'ouverture d'une période à partir d'une valeur calculée sur sa clôture est l'anticipation classique. Elle est invisible dans un tableur et fatale dans un résultat.

Source cinq : les survivants sur lesquels vous avez testé

Une stratégie testée sur les actifs qui existent aujourd'hui a été testée sur un ensemble sélectionné pour avoir survécu. Les actifs qui furent listés, traités, puis disparus sont absents de vos données, et la stratégie n'a jamais eu à les gérer, ce qui flatte le résultat exactement du montant que ces échecs auraient coûté.

Dans les actifs numériques cet effet est inhabituellement grand, parce que le taux d'échec des actifs listés est élevé et que les disparitions ne sont pas graduelles. Une stratégie qui traite un univers large et n'a été testée que sur l'univers actuel porte un optimisme intégré qui n'est visible nulle part dans ses statistiques.

La correction exige des données historiques incluant les actifs retirés et morts, ce qui est plus difficile à obtenir et vaut la peine de l'être si votre stratégie traite un ensemble large. Pour une stratégie qui traite un petit nombre d'actifs gros et anciens, l'effet est plus faible, et savoir dans quelle situation vous êtes est plus utile que de supposer l'une ou l'autre.

Source six : les choix que vous avez faits en testant

La dernière source n'est pas une erreur de modélisation mais une erreur statistique, et c'est la plus difficile à voir. Chaque paramètre essayé puis rejeté, chaque variante testée puis abandonnée, chaque plage de dates regardée, est un test, et le meilleur résultat d'un grand nombre de tests dépasse la vérité d'un montant qui croît avec le nombre de tests.

Le mécanisme est le même que celui qui fabrique les motifs de calendrier, et il n'exige aucune malhonnêteté. Quelqu'un qui essaie cent variantes et garde la meilleure n'a pas triché ; il a simplement produit un chiffre qui reflète la recherche autant que la stratégie, et le résultat réel revient vers ce que la stratégie seule produit.

La défense est de garder des données de côté et de compter. Réservez une période que la stratégie n'a jamais touchée, testez la version finale dessus une seule fois, et traitez ce chiffre unique comme l'estimation. Et tenez le compte du nombre de variantes essayées, parce que ce compte est la mesure de l'optimisme à attendre et c'est un chiffre que personne ne note.

Laquelle est la vôtre

Une séquence de diagnostic utile, par ordre d'ampleur typique. Vérifiez d'abord les exécutions : quelle proportion dépendait d'un niveau touché plutôt que traversé. Vérifiez ensuite si les deux côtés de l'écart ont été modélisés. Vérifiez ensuite l'arithmétique des frais, ce qui est rapide. Ces trois-là représentent l'essentiel de l'écart sur la plupart des stratégies actives.

Puis les trois plus difficiles. Testez l'anticipation en traitant séquentiellement. Demandez-vous si votre univers d'actifs a été sélectionné sur la survie. Et comptez les variantes essayées, honnêtement, y compris celles abandonnées à la première minute.

L'ordre compte parce que les trois premières sont corrigeables et les trois dernières ne le sont pour l'essentiel pas. Une stratégie dont l'écart vient de l'arithmétique des frais peut être réparée ; une stratégie dont le résultat vient de deux cents variantes essayées ne peut pas être réparée, seulement réestimée, et la réestimation est le chiffre qui a toujours été vrai.

À quoi sert un backtest corrigé

Le but de retirer ces six sources n'est pas de produire un chiffre qui colle à la performance réelle, parce qu'il ne collera pas. Le but est de produire un chiffre qui ne soit pas systématiquement optimiste, pour que les comparaisons entre stratégies aient un sens et que la décision d'allouer du capital se prenne sur autre chose qu'un artefact.

Un backtest corrigé change aussi ce que vous apprenez d'une divergence en réel. Si la simulation était honnête sur les exécutions, l'écart et les frais, et que les résultats réels diffèrent quand même substantiellement, c'est une information authentique sur un changement de conditions, ce qui est exactement le signal que la version non corrigée ne pouvait jamais vous donner puisqu'elle allait de toute façon diverger.

C'est le vrai coût d'un backtest optimiste. Il ne se contente pas de surestimer le résultat ; il détruit votre capacité à détecter quand quelque chose a réellement mal tourné, parce qu'un écart permanent et inexpliqué rend chaque nouvel écart banal.

La pratique qui l'attrape le plus tôt

Faites tourner la stratégie en réel à une taille assez petite pour que le résultat n'ait pas d'importance, assez longtemps pour accumuler un nombre de trades significatif, et comparez chaque trade individuel à ce que la simulation disait que ce trade aurait été. Pas l'agrégat, les trades individuels.

La comparaison est bien plus informative que l'agrégat parce qu'elle localise la différence. Si les entrées correspondent et pas les sorties, c'est un problème. Si les exécutions correspondent et que le coût par trade est constamment plus élevé, c'en est un autre. L'agrégat vous dit qu'un écart existe ; la comparaison trade par trade vous dit où il habite.

La plupart des gens sautent cette étape parce qu'elle n'a rien d'excitant et qu'elle retarde le déploiement. C'est aussi la seule étape qui distingue une erreur de modélisation réparable d'une idée qui ne marche pas, et confondre les deux coûte cher dans les deux sens : abandonner une idée saine, ou passer à l'échelle une idée cassée.

Questions fréquentes

Pourquoi ma stratégie fait-elle toujours moins bien en réel ?

Généralement ni la malchance ni un changement de marché. Six sources mécaniques produisent l'écart : des exécutions que vous n'auriez pas eues, un écart de cotation non modélisé, une arithmétique des frais incomplète, du biais d'anticipation, un univers d'actifs sélectionné sur la survie, et le nombre de variantes essayées avant de garder la meilleure.

Quelle est la cause la plus courante ?

Les exécutions supposées. Les simulations exécutent typiquement un ordre posé quand le marché touche son prix, mais toucher signifie que quelqu'un y a traité, pas que vous l'avez fait. Vos trades gagnants sont exactement ceux où la file n'a peut-être pas été vidée ; vos perdants se sont certainement exécutés.

Pourquoi l'écart de cotation compte-t-il autant ?

Beaucoup de simulations utilisent une seule série de prix et entrent et sortent à ce prix, retirant un coût entier de chaque aller-retour. L'ampleur est proportionnelle à la fréquence de trading, ce qui explique que l'omission détruise les stratégies à haute fréquence et touche à peine celles à long horizon.

Qu'est-ce que le biais d'anticipation exactement ?

Utiliser une information qui n'était pas disponible au moment de la décision. La version classique consiste à décider à l'ouverture d'une période à partir d'une valeur calculée sur sa clôture. Il entre aussi par les séries révisées qui contiennent des corrections que personne n'avait à l'époque.

Comment tester le biais d'anticipation ?

Faites tourner la stratégie de sorte qu'elle ne puisse structurellement pas voir le futur : traitez une observation à la fois, chaque décision avec seulement ce qui la précédait. Si les résultats s'effondrent, vous aviez de l'anticipation, et l'ampleur de l'effondrement est la part du résultat faite d'information indisponible.

Qu'est-ce que le biais du survivant en crypto ?

Tester sur les actifs qui existent aujourd'hui revient à tester sur un ensemble sélectionné pour avoir survécu. Les actifs listés, traités puis disparus sont absents, donc la stratégie n'a jamais eu à les gérer. L'effet est inhabituellement grand ici parce que le taux d'échec est élevé et les disparitions brutales.

Le nombre de variantes essayées compte-t-il vraiment ?

Oui, et c'est la source la plus difficile à voir. Le meilleur résultat d'un grand nombre de tests dépasse la vérité d'un montant croissant avec le nombre de tests, sans aucune malhonnêteté. La défense est une période réservée testée une fois, et un compte honnête des variantes essayées.

Comment trouver d'où vient mon écart ?

Tradez en réel à une taille sans importance et comparez chaque trade individuel à ce que la simulation disait qu'il serait. L'agrégat vous dit qu'un écart existe ; la comparaison trade par trade le localise, distinguant une erreur de modélisation réparable d'une idée qui ne marche pas.

Ouvrir un compte Tous les articles