“La seule façon d’être suivi, c’est de courir plus vite que les autres.”
Francis Picabia
Stratégie
Voici donc notre premier backtest. La stratégie que nous allons utiliser est très basique : le suivi de moyenne mobile. Si vous n’êtes pas au fait des moyennes mobiles et que vous n’avez pas lu l’article les traitant, je ne peux que vous inviter à le faire : Analyse Technique niveau 0 : la moyenne mobile simple.
L’implémentation de la stratégie :
- Nous allons calculer une moyenne mobile de période t
- Chaque jour, si on a pas de position ouverte, on ouvre une position d’achat si le cours est supérieur à la moyenne mobile ou une position de vente si il est inférieur.
- Chaque jour, si on a une position d’achat ouverte et que le cours est inférieur à la moyenne mobile on ferme la position, et vice versa pour une position de vente ouverte.
Nous remarquons que nous sommes donc toujours en position, et qu’à chaque croisement entre le cours et la moyenne mobile, nous fermons la position en cours et ouvrons une nouvelle position en sens inverse.
Biais
Dans l’article sur les principes du backtesting, j’ai évoqué le problème du look-ahead bias, la vision dans le futur.
Ici, nous sommes dans un cas de vision dans le futur : pour déterminer le croisement de la moyenne mobile, et savoir si je reste ou si je change de position, j’utilise le cours de clôture du jour pour calculer ma moyenne mobile. Et ensuite, j’exécute mes ordres potentiels au cours de clôture du jour. Sauf que dans la vraie vie, au moment où j’ai le cours de clôture, je ne peux plus traiter à cette valeur.
Pour corriger ce biais, on pourrait utiliser le jour de clôture du jour pour les calculs de moyenne mobile et les signaux de la stratégie. En revanche, il faudrait exécuter les ordres en ouverture ou en clôture du lendemain, et là il n’y aurait plus de vision dans le futur.
Néanmoins, pour un besoin de simplicité, je vais utiliser les 5 minutes de Fixing en clôture, et partir du principe que c’est suffisant pour faire le calcul de la stratégie. J’admets aussi que la différence entre le cours au début de Fixing et à la clôture est minime. j’ai donc en effet un look-ahead bias, mais dont l’impact est quand même très limité. C’est pour ça qu’on va admettre que c’est quand même viable pour avoir une idée correcte des performances de la stratégie.
Déroulement
Pour ce backtest, nous utiliserons le même ensemble de données que pour l’article des moyennes mobiles, à savoir les cotations historiques journalières du CAC40 sur 5 ans, pris sur Yahoo Finance : CAC405Y
C’est un indice majeur, sur une période plutôt récente, venant de Yahoo, on peut donc sereinement partir du principe que les données sont correctes.
Configuration
Pour un nouveau test sur une valeur unique, je lance le GoingStrikerBot, et je choisis Backtester. Ma plateforme permet de faire des backtests multiples, mais nous n’utiliserons pas cette fonctionnalité dans cet article.
Ceci nous amène sur la fenêtre de configuration du backtest où nous allons rentrer tous les éléments relatifs à notre stratégie et notre backtest :
Plusieurs étapes pour cela :
- Tout d’abord, je choisis l’environnement (Unstable, Testing, Stable) : cercle rouge
- Il faut ensuite déterminer les paramètres d’exécution : cercle bleu. On a dit qu’on l’appliquait sur les données 5 ans en arrière, pour le CAC40. Le code utilisé, “CAC40.INDEX”, est personnel et me permet de définir facilement les valeurs sur lesquelles je veux travailler. Yahoo l’identifie comme “^FCHI”.
- On configure ensuite la stratégie en elle même : cercle vert. Le suivi de moyenne mobile, je l’ai appelé SMARide, parce qu’on ride la SMA. 🙂
- Il faut enfin définir les paramètres de la stratégie : cercle gris. Pour SMARide, il n’y a qu’à définir la période de la moyenne mobile que l’on veut utiliser, dans le champ “SMA Period” juste en dessous. On va tester avec 200 pour ce test, car il est communément admis que c’est une moyenne mobile significative de la tendance de fond.
- On lance avec le bouton Launch. Et quand le moteur a fini de mouliner, il affiche un petit récapitulatif de l’opération qu’il vient de faire, dans la partie Result en bas : cercles noirs
Voilà, on a lancé notre backtest, mais en l’état, on ne sait pas exactement ce qui s’est passé, et quelles sont les performances. C’est ce que les divers boutons du bas vont nous permettre de savoir.
Résultats
Trades
Sur la plateforme, le bouton “See trades grid” permet de les voir sous forme de liste :
Ca commence plutôt bien. Le premier trade permet de profiter de la pente montante de la fin 2013, permettant de réaliser un gain de 5% en 10 mois environ. Pas énormissime, mais déjà positif. En revanche, après ça se gâte un peu… Courant juillet 2014, on voit que le système a généré pleins de trades perdants à une journée d’intervalle… C’est le problème des moyennes mobiles : elles lissent le cours, et quand le cours s’en approche, il n’est pas impossible qu’il zig-zag autour. Ceci est très parlant si on zoom sur la courbe avec la moyenne mobile :
Malheureusement, à cause de ces zigzag, la performance finale est très impactée. On peut copier la liste des trades dans Excel, et en extraire des informations, et nous verrons rapidement que la performance est très négative. Il y a bien quelques bons trades profitant d’une tendance établie, mais beaucoup trop de “faux trades” qui s’ouvrent et se ferment négativement à cause de zig-zag autour de la moyenne mobile.
Portefeuille
Le bouton “See Compound Valuations Grid” permet de voir la valeur du portefeuille au fur et à mesure des trades passés pour chacun des jours de notre backtest :
En revanche, c’est pas forcément le plus pratique, et avoir un graphique de la valorisation du portefeuille est quand même plus parlant, et on peut obtenir ça avec le bouton “See Compound Valuations Chart” :
Et voilà, on voit d’un rapide coup d’œil que c’est une catastrophe. On remarque quelques trades positifs qui donnent des petits sursauts au portefeuille, mais qui est ensuite plombé par tous les zigzags autour de la moyenne mobile. Et là je n’ai même pas pris en compte les coûts de transactions. Le suivi de moyenne mobile est donc une stratégie absolument pas utilisable tel quel. C’est valable pour une période 200, comme pour les autres périodes. Vous pouvez essayer de backtester d’autres périodes. Le problème des zigzags et du lissage sera toujours beaucoup trop impactant par rapport aux tendances de fond qu’on a réussi à attraper. De plus, comme c’est une moyenne, elle réagit en retard. Au moment où un signal est généré, le renversement s’est déjà fait depuis plusieurs jours, donc il est possible qu’on ait raté la majeure partie du mouvement.
Désolé tout le monde. Tout ce gros et bel article pour montrer quelque chose qui au final ne fonctionne pas du tout. En revanche c’est une stratégie très facile à implémenter, et plutôt sensé de premier abord. Et malheureusement, il y a des sites d’analyse technique qui présente les moyennes mobiles, et expliquent par exemple que le suivi de la moyenne mobile 200 est une super stratégie. Et pour prouver leurs dires, il montre un magnifique screenshot d’un moment où le cours est bien au dessus de la moyenne mobile. Vous avez maintenant la preuve que c’est beaucoup trop simple pour fonctionner sur le long terme. Mais bon, trouver des choses qui ne fonctionnent pas, c’est aussi une réussite (cf. citation d’introduction). On finira bien par tomber sur ce qui fonctionne.
Ping :Backtest moyennes mobiles, Gear Secundo : les croisements – AutoQuant