Cette stratégie est un système de trading quantitatif qui combine les moyennes mobiles exponentielles (EMA) doubles avec l'oscillateur stochastique. Elle utilise des EMA de 20 périodes et 50 périodes pour déterminer les tendances du marché tout en utilisant l'oscillateur stochastique pour identifier les opportunités de trading dans les zones de surachat et de survente, obtenant un mélange parfait de tendance et de dynamique.
La logique de base se compose de trois composants: l'identification de la tendance, le timing d'entrée et le contrôle des risques. L'identification de la tendance repose principalement sur la position relative de l'EMA rapide (20 périodes) et de l'EMA lente (50 périodes), où une tendance haussière est confirmée lorsque la ligne rapide est au-dessus de la ligne lente, et vice versa. Les signaux d'entrée sont confirmés par des croisements de l'oscillateur stochastique, à la recherche de transactions à forte probabilité dans les zones d'achat et de survente.
Cette stratégie établit un système de trading complet en combinant des indicateurs de tendance et de dynamique. Ses principales forces résident dans son cadre logique clair et son contrôle strict des risques, bien que l'application pratique nécessite une optimisation des paramètres basée sur des conditions de marché spécifiques.
/*backtest start: 2024-12-06 00:00:00 end: 2025-01-04 08:00:00 period: 1h basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=6 strategy("EMA + Stochastic Strategy", overlay=true) // Inputs for EMA emaShortLength = input.int(20, title="Short EMA Length") emaLongLength = input.int(50, title="Long EMA Length") // Inputs for Stochastic stochK = input.int(14, title="Stochastic %K Length") stochD = input.int(3, title="Stochastic %D Smoothing") stochOverbought = input.int(85, title="Stochastic Overbought Level") stochOversold = input.int(15, title="Stochastic Oversold Level") // Inputs for Risk Management riskRewardRatio = input.float(2.0, title="Risk-Reward Ratio") stopLossPercent = input.float(1.0, title="Stop Loss (%)") // EMA Calculation emaShort = ta.ema(close, emaShortLength) emaLong = ta.ema(close, emaLongLength) // Stochastic Calculation k = ta.stoch(high, low, close, stochK) d = ta.sma(k, stochD) // Trend Condition isUptrend = emaShort > emaLong isDowntrend = emaShort < emaLong // Stochastic Signals stochBuyCrossover = ta.crossover(k, d) stochBuySignal = k < stochOversold and stochBuyCrossover stochSellCrossunder = ta.crossunder(k, d) stochSellSignal = k > stochOverbought and stochSellCrossunder // Entry Signals buySignal = isUptrend and stochBuySignal sellSignal = isDowntrend and stochSellSignal // Strategy Execution if buySignal strategy.entry("Buy", strategy.long) stopLoss = close * (1 - stopLossPercent / 100) takeProfit = close * (1 + stopLossPercent * riskRewardRatio / 100) strategy.exit("Take Profit/Stop Loss", from_entry="Buy", stop=stopLoss, limit=takeProfit) if sellSignal strategy.entry("Sell", strategy.short) stopLoss = close * (1 + stopLossPercent / 100) takeProfit = close * (1 - stopLossPercent * riskRewardRatio / 100) strategy.exit("Take Profit/Stop Loss", from_entry="Sell", stop=stopLoss, limit=takeProfit) // Plotting plot(emaShort, color=color.blue, title="Short EMA") plot(emaLong, color=color.red, title="Long EMA")