Dans cet article, je te montre comment backtester facilement une stratégie de trading, étape par étape, sans compliquer les choses. L'objectif d'un backtest est simple : savoir si une stratégie est réellement profitable avant de risquer ton argent en réel. À la fin de cet article, tu sauras tous les éléments nécessaires pour juger une stratégie :
- Performance globale
- Courbe de capital (equity curve)
- Ratios clés
- Drawdown
- Et bien plus encore
Installer les bibliothèques
Si ce n’est pas déjà fait, commence par installer les librairies nécessaires via pip. Ouvre ton terminal (ou Anaconda Prompt / VS Code) et tape :
!pip install yfinance vectorbt
Une fois l’installation terminée, on peut importer les librairies dans notre script ou notebook.
import yfinance as yf
import vectorbt as vbt
Récupération et préparation des données de marché
Maintenant, nous pouvons récupérer les données de marché sur lesquelles notre stratégie sera testée. Dans cet exemple, nous allons travailler sur Bitcoin (BTC) avec un timeframe de 5 minutes.
# Actif à analyser
ticker = "BTC-USD"
# Téléchargement des données (10 derniers jours en 5 minutes)
data = yf.download(
tickers=ticker,
period="10d",
interval="5m"
)
# Nettoyage des colonnes (suppression du multi-index)
data.columns = data.columns.droplevel(1)
# Extraction des prix OHLC
open_price = data["Open"]
high_price = data["High"]
low_price = data["Low"]
close_price = data["Close"]
print(close)
On extrait les prix OHLC séparément pour simplifier la création de la stratégie par la suite. Les données de clôture ressemblent à ceci par exemple. Il s’agit tout simplement du prix à la clôture de chaque bougie.
Prix des clôture du BTCUSD
Passage à la stratégie
L’objectif de cette stratégie est volontairement simple afin de bien comprendre le fonctionnement du backtest :
- Si le RSI est inférieur à 30 → on achète
- Si le RSI est supérieur à 70 → on vend
Nous allons maintenant créer une fonction qui génère les signaux d’entrée et de sortie en fonction du RSI.
def strategy(rsi_indicator):
entries = (rsi_indicator.rsi < 30)
exits = (rsi_indicator.rsi > 70)
return entries, exits
# Génération des signaux
entries, exits = strategy(RSI)
# Vérification des signaux
print(entries)
print(exits)
Le tableau du haut correspond à une partie des signaux d’entrée, le tableau du bas correspond à une partie des signaux de sortie
- rsi_indicator.rsi → correspond aux valeurs du RSI
- entries → signal True lorsque le RSI passe sous 30 (achat)
- exits → signal True lorsque le RSI passe au-dessus de 70 (vente)
Backtesting de la stratégie
Maintenant que nous avons nos signaux d’entrée et de sortie, nous pouvons lancer le backtest avec VectorBT.
# Backtesting de la stratégie
pf = vbt.Portfolio.from_signals(
close=close, # Prix de clôture
entries=entries, # Signaux d'achat
exits=exits, # Signaux de vente
init_cash=100_000, # Capital initial
freq='5m' # Fréquence des données
)
# Résultats
pf.stats()
Afficher les résultats du backtest
Une fois le backtest terminé, il est temps de voir concrètement comment ta stratégie aurait performé. VectorBT te permet d’obtenir facilement toutes les statistiques importantes et de visualiser la courbe de capital.
# Affichage des statistiques clés
print(pf.stats())
# Visualisation des courbes
pf.plot(width=800, height=600).show()
Affichage des statistiques clés
Visualisation des courbes
Pour mieux comprendre le comportement de ta stratégie, tu peux également afficher le RSI. Cela te permet de voir quand le RSI atteint les zones de survente (<30) ou de surachat (>70), et donc quand tes signaux d’achat et de vente se déclenchent.
RSI.plot(title='RSI 14', width=600, height=200).show()
N’hésite pas à t’inscrire pour recevoir des insights et conseils sur le trading algorithmique. À bientôt !
ACCÈS MEMBRES
Accès à la newsletter et contenus exclusifs.