“Mimicking the herd invites regression to the mean.”
Charlie Munger
Vous aussi, vous commencez à en avoir assez des backtests à base de moyennes mobiles ? Si on regarde le site pour l’instant, on pourrait croire qu’il n’y a que cela qui existe. Qu’à cela ne tienne, aujourd’hui, nous allons changer un peu et voir ce que peut donner le Machine Learning dans sa forme la plus basique possible : la régression linéaire. Spoiler : on est un peu trop dans le basique 🙂
Prérequis
Sans surprise, il faut avoir vu la regréssion linéaire : Machine Learning niveau 0 : la régression linéaire
Nous allons backtester franchement dans cet article, et faire appels aux notions les plus récentes que l’on ait vu :
- Un backtest récent avec toute la base nécessaire : Backtest de l’opportuniste : inversion de croisements de moyennes mobiles
- Les points de sorties les plus récents : Points de sortie, SSJ-1 : le Trailing Stop, ou stop suiveur
- Pour éprouver un peu les backtests : Un dangereux ennemi : l’overfitting
- Notions de risque, pour juger de la qualité de la stratégie : Gestion du risque 101 : Levier simple, Drawdown et Margin Call
Stratégie
La stratégie que nous allons utiliser sera basée sur quelques caractéristiques de la régression linéaire, qui ont été expliqués dans l’article correspondant :
- la régression linéaire cherche à modéliser une courbe (ici les cotations) sous la forme d’une droite
- la qualité de la modélisation est indiquée par le coefficient de détermination R²
- la pente de la droite détermine la force du mouvement montant
A ces quelques principes il faut ajouter quelques choix empiriques concernant la stratégie. Vous avez tout à fait le choix d’expérimenter plusieurs types de configurations qui pourraient être différentes des miennes (n’hésitez pas à les partager dans les commentaires le cas échéant), mais cette fois, je vais viser plutôt court terme / moyen terme :
- J’aimerais des positions de quelques mois maximum
- la période pour la régression ne doit pas être trop grande du coup
- comme on vise des configurations linéaires, un stop suiveur devrait être adapté, malgré la possibilité de faux signaux
Nous testerons sur le CAC, et j’utiliserai :
- une période 20 jours (environ 1 mois) pour le calcul de la régression
- un stop suiveur de 4%, qui me parait ni trop faible, ni trop fort
- un coefficient de détermination de 0.90 minimum pour garantir qu’on est bien en train de suivre une droite
- une pente de +10 : ce qui fait 200 points par mois, si le drawdown n’est pas trop moche, c’est très acceptable comme performance.
Exécution
Voici la courbe du CAC sur la période de test :
Et le résultat de notre backtest :
Quoi ! C’est ça le Machine Learning ? On entend partout que c’est le futur de l’informatique, le renouveau de la technologie, et à la première utilisation concrète, c’est la catastrophe !!! Effectivement, c’est pas fameux dans ce premier test. Néanmoins, nous pouvons remarquer quelques points positifs :
- la stratégie esquive plutôt bien la période de forte baisse jusqu’à 2012
- Les petites marches semblent indiquer que les stop suiveurs montent, mais qu’ils sont touchés trop tôt dans la phase de montée
Essayons de modifier le stop suiveur, qui a l’air un peu bas, et passons à 10%. On va voir si la stratégie peut capter les mouvements plus gros, car rappelons le, elle est censée nous permettre de suivre une configuration de courbe linéaire :
Au moins, cette fois, nous sommes positifs. Sauf que nous avons mis des stops suiveurs de 10% et au final les trades gagnants font à peine 2-3%. Nous finissons sur une performance totale de 8% sur 8 ans, ce qui fait moins de 1% annualisé en intérêts composés. Autant dire qu’avec un Alpha comme celui-ci, nous ne sommes pas prêt de mettre cette stratégie en live.
Amélioration
A priori, au vu des ces backtests, il y a un problème dans notre approche, mais nous pouvons remarquer quelques points :
- nous n’arrivons pas à suivre les gros mouvements correctement, mais nous esquivons les périodes de fortes baisses.
- Aussi, nous détectons les montées, mais notre manière de sortir est incorrecte
Du coup, je vais faire quelques modifications tenant compte de ces observations : plutôt que d’essayer de capter des gros mouvements, nous utiliserons plutôt la régression linéaire juste comme un indicateur d’achat, sans chercher capter la tendance.
Et pour éviter de subir un retournement, nous viserons court terme : comme je garde une période de régression de 20 jours, je vais utiliser un Stop Loss et un Take Profit de 3% chacun. C’est une performance mensuelle acceptable. Résultat :
C’est un peu mieux. Nous sommes à 12% total sans levier, et un drawdown relativement faible, ce qui n’est pas fondamentalement mauvais. Il y a cependant un petit check à faire avant de creuser…
Overfitting
J’espère que vous avez bien lu l’article sur l’overfitting, car nous allons devoir l’appliquer ici.
Nous avons vu plusieurs configurations qui ne fonctionnent pas du tout, mais en changeant le concept de la stratégie, nous arrivons finalement à obtenir une performance positive pas trop moche. Il faut vérifier si ce n’est pas un coup de chance, et je vais juste modifier la période de régression à 19 jours :
Bon ben je pense que la messe est dite. On divise par 10 la performance, on multiplie quasiment par 3 le drawdown, alors qu’on a juste enlevé un point sur le calcul de la droite de régression… Si on y ajoute les stratégies du début qui ne fonctionnaient pas, ça commence à faire beaucoup d’éléments qui pèsent négativement dans la balance.
Je pense que nous pouvons le dire officiellement : utiliser la régression linéaire directement sur la courbe pour essayer de suivre une tendance ne fonctionne pas !
Ceux qui le souhaitent pourront essayer de creuser, mais nous avons également vu que même dans les rares cas de performances positives, nous sommes vraisemblablement en overfitting.
En revanche, le petit point positif, c’est qu’à priori ça fonctionne pas mal comme filtre, et c’est peut-être de cette façon que nous devrions l’utiliser dans l’avenir. Ca nous fait une nouvelle arme de plus dans notre arsenal, et finalement ce n’est pas si mal ! 🙂