# [REFERENCE QC] Code a copier dans main.py QC Lab (non executable ici)
class MomentumIndicatorsAlgorithm(QCAlgorithm):
"""
Demonstration des indicateurs de momentum.
RSI, MACD, Stochastic, CCI.
"""
def Initialize(self):
self.SetStartDate(2015, 1, 1)
self.SetEndDate(2024, 12, 31)
self.SetCash(100000)
symbol = self.AddEquity("SPY", Resolution.Daily).Symbol
self.symbol = symbol
# === MOMENTUM INDICATORS ===
# RSI - Relative Strength Index
# Mesure la vitesse et le changement des mouvements de prix
# MovingAverageType.Wilders = lissage original de Wilder
self.rsi = self.RSI(symbol, 14, MovingAverageType.Wilders, Resolution.Daily)
# MACD - Moving Average Convergence Divergence
# Params: fast period (12), slow period (26), signal period (9)
# Composants: MACD line, Signal line, Histogram
self.macd = self.MACD(symbol, 12, 26, 9, MovingAverageType.Exponential, Resolution.Daily)
# Stochastic Oscillator
# Compare le prix de cloture a la plage high-low sur la periode
# Params: fast K period (14), slow K period (3), slow D period (3)
self.stoch = self.STO(symbol, 14, 3, 3, Resolution.Daily)
# Commodity Channel Index
# Mesure la variation du prix par rapport a la moyenne statistique
self.cci = self.CCI(symbol, 20, MovingAverageType.Simple, Resolution.Daily)
# Warmup pour la plus longue periode (MACD slow = 26)
self.SetWarmup(30)
def OnData(self, data):
if self.IsWarmingUp:
return
# Verifier que les indicateurs sont prets
if not (self.rsi.IsReady and self.macd.IsReady and self.stoch.IsReady and self.cci.IsReady):
return
# Recuperer les valeurs
rsi_value = self.rsi.Current.Value
# MACD expose plusieurs composants
macd_line = self.macd.Current.Value # MACD line
signal_line = self.macd.Signal.Current.Value # Signal line
histogram = macd_line - signal_line # Histogram (difference)
# Stochastic expose %K et %D
stoch_k = self.stoch.StochK.Current.Value # Fast %K
stoch_d = self.stoch.StochD.Current.Value # Slow %D (signal)
cci_value = self.cci.Current.Value
# Log hebdomadaire
if self.Time.weekday() == 0:
self.Debug(f"\n{self.Time.date()} - MOMENTUM INDICATORS:")
self.Debug(f" RSI(14): {rsi_value:.2f}")
self.Debug(f" MACD: Line={macd_line:.4f}, Signal={signal_line:.4f}, Hist={histogram:.4f}")
self.Debug(f" Stochastic: %K={stoch_k:.2f}, %D={stoch_d:.2f}")
self.Debug(f" CCI(20): {cci_value:.2f}")
# Exemple de logique de trading
# Achat: RSI survente + MACD bullish cross
rsi_oversold = rsi_value < 30
macd_bullish = histogram > 0 and self.macd.Fast.Current.Value > self.macd.Slow.Current.Value
if rsi_oversold and macd_bullish and not self.Portfolio[self.symbol].Invested:
self.SetHoldings(self.symbol, 1.0)
self.Debug(f"{self.Time.date()}: BUY SIGNAL - RSI oversold + MACD bullish")
print("MomentumIndicatorsAlgorithm defini")
print("\nIndicateurs de momentum:")
print(" - RSI(symbol, period, maType, resolution)")
print(" - MACD(symbol, fast, slow, signal, maType, resolution)")
print(" - STO(symbol, kPeriod, kSmooth, dPeriod, resolution)")
print(" - CCI(symbol, period, maType, resolution)")