Template Starter : Croisement EMA sur BTCUSDT
Description
Ce template implémente une stratégie de croisement de moyennes mobiles exponentielles (EMA) sur le Bitcoin (BTCUSDT) via Binance.
Principe : - Quand l’EMA rapide (12 périodes) passe au-dessus de l’EMA lente (26 périodes), c’est un golden cross : on achète. - Quand l’EMA rapide passe en dessous de l’EMA lente, c’est un death cross : on vend.
Le backtest couvre la période du 1er janvier 2023 au 31 décembre 2024, avec un capital initial de 10 000 USDT et des données horaires.
Utilisation
- Connectez-vous à QuantConnect
- Create a new Python project in your course organization
- Copiez le contenu de
main.pydans le fichier principal du projet - Lancez un backtest pour observer les résultats
- Analysez les métriques : Sharpe Ratio, drawdown, nombre de trades
Concepts QC couverts
| Concept | Description | Ligne(s) |
|---|---|---|
AddCrypto |
Ajouter un actif crypto avec marché et résolution | Initialize |
Resolution.Hour |
Granularité des données (ici bougies horaires) | Initialize |
self.EMA(...) |
Créer un indicateur Moyenne Mobile Exponentielle | Initialize |
SetWarmUp |
Préchauffer les indicateurs avant de trader | Initialize |
SetHoldings |
Allouer un pourcentage du portefeuille à un actif | OnData |
Liquidate |
Vendre toute la position sur un actif | OnData |
Portfolio[symbol].Invested |
Vérifier si on détient une position | OnData |
SetBenchmark |
Définir un indice de référence pour comparer la performance | Initialize |
OnOrderEvent |
Recevoir les notifications d’exécution des ordres | OnOrderEvent |
Modifications suggérées
Voici des pistes pour améliorer et personnaliser cette stratégie :
Niveau 1 - Paramétrage
- Changer les périodes EMA : essayer (5, 20), (20, 50) ou (50, 200)
- Modifier la résolution :
Resolution.Dailyau lieu deResolution.Hour - Tester un autre actif : remplacer
"BTCUSDT"par"ETHUSDT"ou"SOLUSDT"
Niveau 2 - Filtres supplementaires
Ajouter un filtre RSI : ne pas acheter si RSI > 70 (suracheté), ne pas vendre si RSI < 30 (survendu)
self.rsi = self.RSI(self.btc, 14, Resolution.Hour) # Dans OnData : ajouter "and self.rsi.Current.Value < 70" a la condition d'achatAjouter un filtre de volume : ne trader que si le volume est supérieur à la moyenne
Implémenter un stop-loss à -5% pour limiter les pertes
Niveau 3 - Gestion de position
- Utiliser
SetHoldings(self.btc, 0.5)pour n’investir que 50% du capital - Trader sur plusieurs cryptos en même temps (BTC + ETH + SOL)
- Ajouter un trailing stop qui suit le prix à la hausse
Niveau 4 - Evaluation
- Comparer les résultats avec différents paramètres dans un tableau
- Analyser le Sharpe Ratio et le Maximum Drawdown de chaque variante
- Expliquer pourquoi certains paramètres fonctionnent mieux que d’autres