“I didn’t fail the test. I just found 100 ways to do it wrong.”
Benjamin Franklin
Définition
Le backtest, c’est vraiment le nerf de la guerre d’un modèle prédictif ou d’un système d’analyse technique automatisé. Le backtest, venant de “back”, voulant dire “arrière” et “test”, voulant dire… ben “test”, est le fait d’appliquer un modèle ou une stratégie sur des données du passé. C’est basé sur le fait que si les performances dans le passé sont très bonnes et sans biais, alors il y a de fortes chances que ces performances dans le futur soient également bonnes. Évidemment, il n’y a aucune garantie, mais je pense que pour le futur, on préfère tous miser sur quelque chose qui a fait ses preuves dans le passé.
Le problème des biais est assez complexe, et a plutôt tendance à intervenir sur des stratégies un peu complexes, je n’entrerais donc pas dans les détails ici, mais ce sera le sujet de plusieurs autres articles. Il peut être de plusieurs sortes :
- par exemple utiliser énormément de paramètres pour maximiser les performances de notre ensemble de données de backtest, ce que l’on appelle l’overfitting. Il y a de très fortes chances de trouver une configuration qui fournit une très bonne performance dans cet ensemble de données spécifique, mais qui aura peu de chance de fonctionner dès lors qu’on modifie un peu cette configuration.
- ou encore utiliser des données pour le calcul qu’on aura pas encore en situation réel. Par exemple une stratégie qui “OK, j’achète si je dépasse la valeur moyenne de la semaine” ne peut pas fonctionner, car on aura jamais la valeur moyenne de la semaine avant d’avoir passé cette semaine. C’est le problème de la vision dans le futur, ou Look-ahead bias.
Ceux-ci sont les principaux, mais il y a encore d’autres moyens de biaiser son backtest, et donc de limiter l’efficacité de notre stratégie ou de notre modèle en situation réelle.
Prérequis
Pour un backtest correct, il vous faut :
- Une plateforme de backtest
- Des données du passé sur lesquelles travailler
Plateforme
La plateforme utilisée a une importance relative. Elle dépendra des besoins que vous avez. Pour des backtests simples, la plupart des plateformes existantes feront l’affaire. Elles vont surtout se différencier par les rapports de backtest et les informations fournies : nombres de trades gagnants / perdants, pourcentage, valeur du portefeuille, Sharpe ratio… Nous développerons au fur et à mesure de nos backtests les éléments importants à prendre en compte.
Je n’ai pas de conseil particulier à ce sujet. Il y a des clients lourds fournis avec certains brokers comme ProRealTime, ou MetaTrader qui possèdent ces fonctionnalités. Il y a également des sites comme Quantopian ou QuantConnect qui vous permettent d’avoir une plateforme de backtest en ligne. Il faut faire attention cependant aux backtests “enjolivés”. Certains vendeurs peu scrupuleux vont vous faire la démonstration de backtests avec leur plateforme qui auront des performances superbes, dans le but de vous faire croire que c’est leur plateforme qui permet de faire des supers modèles et des stratégies ultra performantes. Je ne vise personne directement, je dis juste d’être un peu critique, “there is no such thing as a free lunch“.
Personnellement, je n’avais pas envie de payer un abonnement régulier à une plateforme, et je ne voulais pas avoir de doutes sur les implémentations faites. Sur une plateforme tierce, on a malheureusement pas accès à tout le code source, ce qui peut être problématique pour retrouver pourquoi on obtient pas tel ou tel résultat attendu. C’est pourquoi j’ai utilisé mon passé de développeur et créé ma propre plateforme, le GoingStrikerBot. Les connaisseurs reconnaitront peut être le nom (oui, c’est à vous que je parle les fans de One Piece :)) C’est lui que j’utiliserais pour tous mes articles et tutoriaux, mais tous les principes implémentés ici peuvent être utilisés dans n’importe quelle plateforme.
Données
Pour un bon backtest, il faut de bonnes données. Imaginez le scénario suivant :
- Le jour J, votre modèle prédit une montée et provoque un achat à 100€ en clôture par exemple.
- Le surlendemain, à J+2 donc, le cours passe à 105€ conformément aux prédictions du modèle.
- Sauf que si le cours du lendemain, à J+1, est 1€ pour une erreur de donnée, c’est la catastrophe dans le backtest.
Le problème de Data Quality est une problématique majeure dans les systèmes financiers, et ce sujet aussi sera l’objet d’un article dédié.
Principe
Le principe du backtest est simple :
- On parcourt chaque jour du plus ancien au plus récent
- Pour chaque jour, on regarde si notre modèle / stratégie nous indique un signal d’achat / vente, et on ouvre une position le cas échant.
- Ce même jour, si on a des positions ouvertes, on regarde si notre modèle / stratégie nous indique de fermer la position.
Résultats
Trades
Comme indiqué précédemment, le but du backtest est de générer des trades que nous espérons positifs. Il est donc nécessaire d’avoir un moyen de voir tous les trades effectués, à quelle date d’ouverture et de fermeture, à quel valeur…
Portefeuille
Avoir une liste de trades sous forme de liste est nécessaire pour nous donner une idée des résultats et ça peut nous donner une très bonne idée des performances de la stratégie. Un petit passage dans Excel et il est possible de créer toutes sortes de rapports, ou de formules qui pourraient nous intéresser si tenté que notre backtest nous a fourni suffisamment d’informations sur les trades.
En revanche ce n’est pas forcément le plus pratique. L’autre méthode pour connaître les performances est de simuler la valeur d’un portefeuille au fur et à mesure du temps, comme si on l’avait géré en passant les ordres générés par notre backtest. Nous omettrons volontairement les coûts de transaction pour des besoins de simplicité, mais il est assez facile de les prendre en compte tout simplement en impactant légèrement la performance de chaque position.
Pour une gestion complexe de portefeuille, avec prise en compte du risque, il est important de définir des règles de Money Management. C’est un sujet complexe qui lui aussi sera l’objet d’un autre article. Dans un premier temps, avoir une somme allouée que l’on utilise pleinement pour chaque trade est acceptable. On remarque d’ailleurs que cela génère des intérêts composés, ce qui est très intéressant pour notre backtest, et on peut voir comme ça plus facilement qu’avec la liste des trades. La règle de calcul de la valeur du portefeuille est très simple :
à chaque jour J où on ferme une position, Valeur (portefeuille) = Valeur_veille (portefeuille) * Performance (position fermée)
Dans cet article, j’ai mentionné pas mal de choses qui auront droit à leurs articles propres, mais cet article correspond au minimum possible pour effectuer un backtest correct. Tous les futurs backtests auront la même base, avec des éléments en plus au fur et à mesure (filtres, gestion des drawdown, stratégies plus complexes…) Mais il était important de détailler le principe pour que je puisse le considérer comme acquis de votre coté pour les prochaines fois.
Ping :Backtest moyennes mobiles, Gear Secundo : les croisements – AutoQuant
Ping :Définition de modèles et stratégies : les points de sorties (Stop Loss et Take Profit) – AutoQuant