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 :

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 :

PYTHON
!pip install yfinance vectorbt

Une fois l’installation terminée, on peut importer les librairies dans notre script ou notebook.

PYTHON
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.

PYTHON
# 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

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 :

Nous allons maintenant créer une fonction qui génère les signaux d’entrée et de sortie en fonction du RSI.

PYTHON
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

Le tableau du haut correspond à une partie des signaux d’entrée, le tableau du bas correspond à une partie des signaux de sortie

Backtesting de la stratégie

Maintenant que nous avons nos signaux d’entrée et de sortie, nous pouvons lancer le backtest avec VectorBT.

PYTHON
# 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.

PYTHON
# Affichage des statistiques clés
print(pf.stats())

# Visualisation des courbes 
pf.plot(width=800, height=600).show()
Affichage des statistiques clés

Affichage des statistiques clés

Visualisation des courbes

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.

PYTHON
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 !