# [REFERENCE QC] Code a copier dans main.py QC Lab (non executable ici)
# Ce code est à copier dans QuantConnect Lab (main.py)
# Il ne peut PAS être exécuté dans ce notebook Jupyter local
from AlgorithmImports import *
class MovingAverageCrossover(QCAlgorithm):
"""
Moving Average Crossover Strategy
Buy when fast MA crosses above slow MA
Sell when fast MA crosses below slow MA
"""
def Initialize(self):
"""Initialize algorithm: set dates, cash, assets, indicators"""
# Set backtest period
self.SetStartDate(2015, 1, 1)
self.SetEndDate(2024, 12, 31)
# Set initial capital
self.SetCash(100000)
# Add SPY (S&P 500 ETF) with daily resolution
self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol
# Create moving average indicators
self.fast = self.SMA(self.symbol, 50) # Fast MA: 50 days
self.slow = self.SMA(self.symbol, 200) # Slow MA: 200 days
# Log initialization
self.Debug(f"Algorithm initialized: {self.StartDate} to {self.EndDate}")
def OnData(self, data):
"""Event handler called on each data slice (daily here)"""
# Wait until slow MA is ready (needs 200 data points)
if not self.slow.IsReady:
return
# Get current indicator values
fast_value = self.fast.Current.Value
slow_value = self.slow.Current.Value
# Trading logic
if fast_value > slow_value:
# Fast MA above slow MA: bullish signal
if not self.Portfolio.Invested:
self.SetHoldings(self.symbol, 1.0) # Invest 100% of portfolio
self.Debug(f"{self.Time}: BUY - Fast MA ({fast_value:.2f}) > Slow MA ({slow_value:.2f})")
else:
# Fast MA below slow MA: bearish signal
if self.Portfolio.Invested:
self.Liquidate(self.symbol) # Sell all holdings
self.Debug(f"{self.Time}: SELL - Fast MA ({fast_value:.2f}) < Slow MA ({slow_value:.2f})")<< Sommaire QC | Suivant : QC-Py-02-Platform-Fundamentals >>
QC-Py-01 : Configuration et Premier Backtest QuantConnect
[QC CLOUD] Ce notebook utilise QuantBook / AlgorithmImports et necessite un environnement QuantConnect Cloud. Les cellules de code ne sont pas executables localement.
Durée estimée : 45 minutes
Objectifs d’apprentissage : 1. Créer un compte QuantConnect gratuit (free tier) 2. Découvrir l’interface QuantConnect Lab dans le cloud 3. Exécuter votre premier backtest cloud avec une stratégie Moving Average 4. Comprendre l’architecture LEAN Engine 5. [OPTIONNEL] Installer LEAN CLI pour développement local
Prérequis : - Connaissance de base de Python - Compréhension élémentaire des marchés financiers - Navigateur web moderne
[REFERENCE QC Cloud] Ce notebook illustre du code QuantConnect a executer dans l’IDE Cloud (https://www.quantconnect.com/research). L’environnement local ne dispose pas de QuantBook ni de l’historical data feed. Pour executer : cloner le projet QC associe, ouvrir
research.ipynb, executer cellule par cellule.
IMPORTANT - Mode d’emploi de ce notebook
Ce notebook est un support de cours a lire ici (GitHub ou Jupyter local). Ne l’uploadez pas dans QuantConnect Lab - il n’est pas concu pour y etre execute.
Pour votre projet QC : copiez un
main.pydepuisprojects/oupartner-course-quant-trading/templates/dans votre projet QC Lab, puis cliquez Backtest.
1. Introduction : Qu’est-ce que QuantConnect ?
Une plateforme cloud-first pour le trading algorithmique
QuantConnect est une plateforme de trading algorithmique qui combine : - Un moteur de backtesting open-source (LEAN Engine) - Une infrastructure cloud pour exécuter vos stratégies - Des données de marché historiques gratuites (Equity, Crypto, Forex) - Un IDE en ligne (QuantConnect Lab) avec notebooks et éditeur de code - La possibilité de déployer en paper trading et live trading
Architecture cloud-first vs local
| Approche | Avantages | Inconvénients |
|---|---|---|
| Cloud (recommandé) | - Setup immédiat - Données gratuites - Backtests rapides - Pas de configuration |
- Dépend d’internet - Free tier limité (8h/mois) |
| Local (LEAN CLI) | - Contrôle total - GPU pour ML/DL - Données custom - Debugging avancé |
- Configuration Docker - Téléchargement données - Plus complexe |
Dans ce notebook : Nous privilégions l’approche cloud pour un démarrage rapide. L’installation locale est présentée en section 5 (optionnelle).
Objectifs de ce notebook
À la fin de ce notebook, vous aurez : - Un compte QuantConnect fonctionnel - Exécuté votre premier backtest dans le cloud - Compris le cycle de vie d’un algorithme QuantConnect - Une vision claire de l’architecture LEAN Engine
2. Création de votre compte QuantConnect (10 min)
Étape 2.1 : S’inscrire gratuitement
- Visitez https://www.quantconnect.com/signup
- Créez un compte avec votre email
- Confirmez votre email (vérifiez votre boîte de réception)
- Connectez-vous au QuantConnect Lab
Free tier vs Paid tiers
| Fonctionnalité | Free Tier | Team ($20/mois) | Organization ($50/mois) |
|---|---|---|---|
| Backtesting | 8h calcul/mois | 80h calcul/mois | 200h calcul/mois |
| Paper trading | Illimité | Illimité | Illimité |
| Données | US Equity, Crypto, Forex (2010+) | + Alternative data | + Options, Futures |
| Live trading | Non | Oui | Oui |
| GPU | Non | Oui | Oui |
| Collaborateurs | 1 | 3 | 10 |
Note : Le free tier est largement suffisant pour cette série de notebooks. Nous fournirons des workarounds pour les fonctionnalités payantes (ex: NewsAPI gratuit pour sentiment analysis).
Tour de l’interface QuantConnect Lab
Une fois connecté, vous verrez :
- Left Panel : Explorateur de fichiers, projets, bibliothèques
- Center Panel : Éditeur de code (Python/C#) ou notebook Jupyter
- Right Panel : Console de logs, résultats de backtests
- Top Bar : Boutons “Backtest”, “Research”, “Optimize”, “Deploy”
Astuce : QuantConnect Lab supporte deux modes : 1. Algorithm mode : Fichiers .py ou .cs pour stratégies 2. Research mode : Notebooks Jupyter pour exploration de données
Créer votre premier projet
- File → New Project
- Nom :
My First Strategy - Langage : Python
- Template :
Basic Template Algorithm
Vous verrez un fichier main.py avec une structure de base. Nous allons le remplacer dans la section 3.
3. Premier backtest cloud : Moving Average Crossover (15 min)
Stratégie : Moving Average Crossover
La stratégie Moving Average Crossover est un classique du trading algorithmique :
Principe : - Calculer deux moyennes mobiles : rapide (50 jours) et lente (200 jours) - Signal d’achat : Quand la moyenne rapide croise au-dessus de la moyenne lente - Signal de vente : Quand la moyenne rapide croise en-dessous de la moyenne lente
Asset : SPY (ETF S&P 500)
Période : 2020-2023 (4 ans de données)
Code complet de l’algorithme
Copiez ce code dans votre projet QuantConnect Lab (main.py) :
Résultat du Backtest QC Cloud — MovingAverageCrossover
| Métrique | Valeur |
|---|---|
| Période | 2015-01-01 → 2024-12-31 (2516 jours trading) |
| Ordres exécutés | 9 |
| Profit net | 132.273% |
| Sharpe Ratio | 0.387 |
| CAGR | 8.786% |
| Max Drawdown | 33.600% |
| Win Rate | 50% |
| Capital final | $232,273.37 |
Résultat du Backtest QC Cloud (BT c80ed35291a7cb18a9305726d061e2f6, projet 31995975)
Sharpe CAGR MaxDD Trades 0.387 8.786% 33.6% 9
Explication ligne par ligne
Imports
from AlgorithmImports import *- Importe toutes les classes QuantConnect (QCAlgorithm, indicators, etc.)
Classe principale
class MovingAverageCrossover(QCAlgorithm):- Toutes les stratégies héritent de
QCAlgorithm - Cette classe expose les méthodes de lifecycle (Initialize, OnData)
Initialize() : Configuration de l’algorithme
def Initialize(self):
self.SetStartDate(2020, 1, 1)
self.SetEndDate(2023, 12, 31)
self.SetCash(100000)- SetStartDate/SetEndDate : Période de backtest
- SetCash : Capital initial ($100,000)
self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol- AddEquity : Ajoute un actif (ici SPY, ETF S&P 500)
- Resolution.Daily : Données journalières (vs Minute, Hour)
self.fast = self.SMA(self.symbol, 50)
self.slow = self.SMA(self.symbol, 200)- SMA : Simple Moving Average (moyenne mobile simple)
- Périodes : 50 jours (rapide) et 200 jours (lente)
- LEAN met à jour automatiquement ces indicateurs à chaque nouvelle donnée
OnData() : Logique de trading
def OnData(self, data):
if not self.slow.IsReady:
return- OnData : Appelé à chaque nouvelle donnée (ici une fois par jour)
- IsReady : L’indicateur SMA(200) a besoin de 200 points de données avant d’être valide
if fast_value > slow_value:
if not self.Portfolio.Invested:
self.SetHoldings(self.symbol, 1.0)- fast_value > slow_value : Signal haussier (golden cross)
- Portfolio.Invested : Vérifie si on détient déjà l’actif
- SetHoldings(symbol, 1.0) : Investir 100% du capital dans l’actif
else:
if self.Portfolio.Invested:
self.Liquidate(self.symbol)- fast_value < slow_value : Signal baissier (death cross)
- Liquidate : Vendre toutes les positions sur l’actif
Lancer le backtest dans QuantConnect Lab
- Coller le code ci-dessus dans
main.pyde votre projet - Cliquer sur “Backtest” en haut à droite
- Attendre 10-30 secondes (le backtest s’exécute sur le cloud)
- Analyser les résultats dans le panneau de droite
Analyser les résultats
Vous verrez plusieurs graphiques et métriques :
Equity curve : - Courbe de votre capital au fil du temps - Comparaison avec le benchmark (SPY buy-and-hold)
Métriques clés :
| Métrique | Description | Valeur typique |
|---|---|---|
| Sharpe Ratio | Rendement ajusté au risque (plus élevé = mieux) | 0.5 - 2.0 |
| Drawdown | Perte maximale depuis un pic (plus bas = mieux) | 10-30% |
| Total Return | Rendement total sur la période | 20-60% |
| Win Rate | Pourcentage de trades gagnants | 30-60% |
Questions à se poser : - Notre stratégie bat-elle le buy-and-hold (SPY) ? - Le Sharpe ratio est-il supérieur à 1 ? - Le drawdown maximum est-il acceptable (<30%) ? - Combien de trades ont été exécutés ?
Note importante : Cette stratégie simple est à but pédagogique. En conditions réelles, elle nécessiterait du risk management (stop-loss, position sizing), de l’optimisation de paramètres, et des tests sur plusieurs périodes.
4. Architecture LEAN Engine (10 min)
Composants de l’écosystème LEAN
LEAN (Lean Engine for Algorithmic Networks) est le moteur open-source qui fait tourner QuantConnect. Voici son architecture :
flowchart TD
A["VOTRE ALGORITHME<br/>(Python/C#, hérite de QCAlgorithm)"] --> E["LEAN ENGINE"]
E --> DM["Data Manager"]
DM --> AM["Algorithm Manager"]
AM --> PM["Portfolio Manager"]
DF["Data Feeds"] --> E
EQ["Events Queue"] --> E
BI["Brokerage Interface"] --> E
Composants LEAN en détail
| Composant | Rôle |
|---|---|
| LEAN Engine | Orchestrateur principal, gère le flux événementiel |
| Data Manager | Charge et distribue les données de marché (historiques ou temps réel) |
| Algorithm Manager | Exécute votre algorithme (Initialize, OnData, etc.) |
| Portfolio Manager | Gère les positions, le cash, les ordres |
| Data Feeds | Sources de données (fichiers CSV, APIs, brokers) |
| Brokerage Interface | Connexion au broker pour live trading (IB, TD Ameritrade, etc.) |
| API Cloud | Endpoints REST pour déployer/monitorer des algos |
Lifecycle d’un algorithme : QCAlgorithm
Voici les méthodes principales que vous pouvez surcharger :
class MyAlgorithm(QCAlgorithm):
def Initialize(self):
"""Called once at start - setup dates, cash, assets, indicators"""
pass
def OnData(self, data):
"""Called on each new data slice (bar, tick, etc.)"""
pass
def OnOrderEvent(self, orderEvent):
"""Called when an order is filled/cancelled"""
pass
def OnEndOfDay(self, symbol):
"""Called at end of each trading day"""
pass
def OnEndOfAlgorithm(self):
"""Called once at end - cleanup, final logs"""
passModèle événementiel
LEAN fonctionne en mode événementiel (event-driven) :
- Chargement des données : LEAN charge les données de marché (historiques ou temps réel)
- Boucle temporelle : Pour chaque timestamp (ex: chaque jour à 16h pour Resolution.Daily)
- Appel OnData : Votre algorithme reçoit les nouvelles données via
OnData(data) - Décisions de trading : Vous décidez d’acheter/vendre (SetHoldings, Liquidate, etc.)
- Exécution ordres : LEAN simule l’exécution (slippage, commissions)
- Mise à jour portfolio : Les positions et le cash sont mis à jour
- Répéter jusqu’à la fin de la période
Avantages du modèle événementiel : - Même code pour backtest et live trading - Gestion naturelle du temps (pas de “look-ahead bias”) - Facile d’intégrer plusieurs sources de données
Diagramme de flux
START
↓
Initialize()
↓
Load historical data (2020-2023)
↓
FOR each day in [2020-01-01 → 2023-12-31]:
↓
OnData(data) ← Your trading logic here
↓
Execute orders (if any)
↓
Update portfolio (positions, cash)
↓
OnEndOfDay() [optional]
↓
NEXT day
↓
OnEndOfAlgorithm()
↓
Generate results (charts, metrics)
↓
END
5. [OPTIONNEL] Installation LEAN CLI local (5 min)
Cette section est pour les utilisateurs avancés qui souhaitent développer en local avec VSCode et Docker.
Pourquoi développer en local ?
| Avantage | Description |
|---|---|
| GPU | Entraîner des modèles Deep Learning en local |
| Custom data | Utiliser vos propres données (CSV, APIs) |
| Debugging | Debugger Python/C# avec votre IDE préféré |
| Offline | Développer sans internet |
| Contrôle total | Pas de limites de temps de calcul |
Prérequis
Avant de commencer, assurez-vous d’avoir : - Python 3.11+ installé - Docker Desktop installé et en cours d’exécution - Git pour cloner le repository CoursIA
Étape 1 : Installer LEAN CLI
Le LEAN CLI est l’outil officiel pour développer en local.
# Installation LEAN CLI (à exécuter dans un terminal)
# Décommentez et exécutez si vous voulez tester
# !pip install leanÉtape 2 : Authentification QuantConnect
Pour synchroniser avec le cloud (optionnel), connectez-vous :
# Authentification (à exécuter dans un terminal)
# Vous devrez entrer votre User ID et API Token
# (Obtenables dans Account → API Access sur quantconnect.com)
# !lean loginÉtape 3 : Initialiser un workspace
Créez un dossier de travail pour vos algorithmes locaux :
# Initialiser un workspace LEAN (à exécuter dans un terminal)
# !lean initCela crée la structure suivante :
lean-workspace/
├── lean.json # Configuration LEAN
├── data/ # Données de marché locales
├── results/ # Résultats de backtests
└── projects/ # Vos algorithmes
Étape 4 : Créer un projet Python
# Créer un nouveau projet (à exécuter dans un terminal)
# !lean project-create --language python MyFirstStrategyCela crée un fichier projects/MyFirstStrategy/main.py avec un template de base.
Étape 5 : Télécharger des données (optionnel)
Pour backtester en local, vous devez télécharger les données de marché :
# Télécharger données US Equity (gratuit, ~5 Go)
# Avertissement : Cela peut prendre 30-60 minutes
# !lean data download --dataset us-equity --start 20200101 --end 20231231Étape 6 : Exécuter un backtest local
# Backtest local (à exécuter dans un terminal)
# !lean backtest MyFirstStrategyLe backtest s’exécute dans un conteneur Docker. Les résultats sont dans results/MyFirstStrategy/.
Référence complète
Pour plus de détails sur l’installation locale, consultez : - GETTING-STARTED.md dans ce repository - Documentation LEAN CLI officielle
Note : Le développement cloud est recommandé pour cette série de notebooks. L’installation locale est un bonus pour les utilisateurs avancés.
Conclusion
Récapitulatif
Dans ce notebook, vous avez :
✅ Créé un compte QuantConnect gratuit (free tier)
✅ Découvert l’interface QuantConnect Lab dans le cloud
✅ Exécuté votre premier backtest avec une stratégie Moving Average Crossover sur SPY (2020-2023)
✅ Compris l’architecture LEAN Engine : - Composants (Data Manager, Algorithm Manager, Portfolio Manager) - Lifecycle (Initialize → OnData → OnEndOfAlgorithm) - Modèle événementiel (event-driven)
✅ (Optionnel) Découvert LEAN CLI pour développement local
Prochaines étapes
Dans le prochain notebook QC-Py-02-Platform-Fundamentals, vous allez : - Approfondir le cycle de vie QCAlgorithm (Initialize, OnData, OnEndOfDay) - Comprendre la gestion des Securities (actions, options, futures) - Créer une stratégie Moving Average Crossover plus robuste avec logging et gestion d’erreurs - Explorer les méthodes de trading (MarketOrder, LimitOrder, StopMarketOrder)
Ressources complémentaires
Documentation QuantConnect : - Documentation officielle - LEAN Engine GitHub - Algorithm Examples
Livre recommandé : - Hands-On AI Trading with Python, QuantConnect, and AWS (Jared Broad et al., 2025)
Communauté : - QuantConnect Forum - LEAN Discussions
CoursIA : - README principal QuantConnect - GETTING-STARTED.md
Félicitations ! Vous avez franchi la première étape du trading algorithmique avec QuantConnect. Dans les prochains notebooks, vous construirez des stratégies de plus en plus sophistiquées, en intégrant Machine Learning, Deep Learning, et Reinforcement Learning.
Prêt pour la suite ? Rendez-vous dans QC-Py-02-Platform-Fundamentals.ipynb !