Cette stratégie est un système de négociation quantitatif basé sur de multiples indicateurs techniques, intégrant une moyenne mobile exponentielle (EMA), un indice de force relative (RSI) et un indice de direction moyen (ADX). La stratégie utilise les signaux croisés de l'EMA comme critères d'entrée principaux, combinés à l'ISR pour la confirmation de surachat/survente et à l'ADX pour l'évaluation de la force de la tendance, formant un système de décision de négociation complet. La stratégie comprend également un module de gestion des risques qui contrôle les niveaux de stop-loss et de prise de profit grâce à un ratio risque-rendement prédéfini.
La logique de base de la stratégie repose sur les éléments clés suivants:
Il s'agit d'une stratégie bien conçue avec une logique complète intégrant plusieurs indicateurs techniques. Grâce à l'intégration de l'EMA, du RSI et de l'ADX, la stratégie démontre de bonnes performances dans le suivi des tendances et le contrôle des risques. Bien qu'il existe des domaines d'optimisation, la stratégie a une bonne valeur pratique et une marge d'expansion.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-11 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Enhanced EMA + RSI + ADX Strategy", overlay=true) // Input parameters lenFast = input.int(9, title="Fast EMA Length", minval=1) lenSlow = input.int(21, title="Slow EMA Length", minval=1) rsiPeriod = input.int(14, title="RSI Period") adxPeriod = input.int(14, title="ADX Period") adxSmoothing = input.int(1, title="ADX Smoothing") adxThreshold = input.int(20, title="ADX Threshold") riskRewardRatio = input.float(2.0, title="Risk/Reward Ratio") // EMA Calculations fastEMA = ta.ema(close, lenFast) slowEMA = ta.ema(close, lenSlow) // RSI Calculation rsiValue = ta.rsi(close, rsiPeriod) // ADX Calculation [plusDI, minusDI, adxValue] = ta.dmi(adxPeriod, adxSmoothing) // Entry Conditions buyCondition = ta.crossover(fastEMA, slowEMA) and rsiValue < 60 and adxValue > adxThreshold sellCondition = ta.crossunder(fastEMA, slowEMA) and rsiValue > 40 and adxValue > adxThreshold // Entry logic if (buyCondition) strategy.entry("Buy", strategy.long) strategy.exit("Sell", from_entry="Buy", limit=close + (close - strategy.position_avg_price) * riskRewardRatio, stop=close - (close - strategy.position_avg_price)) if (sellCondition) strategy.close("Buy") // Plotting EMAs (thinner lines) plot(fastEMA, color=color.new(color.green, 0), title="Fast EMA", linewidth=1) plot(slowEMA, color=color.new(color.red, 0), title="Slow EMA", linewidth=1) // Entry and exit markers (larger shapes) plotshape(series=buyCondition, style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), size=size.normal, title="Buy Signal") plotshape(series=sellCondition, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.normal, title="Sell Signal") // Displaying price labels for buy/sell signals if (buyCondition) label.new(bar_index, low, text="Buy\n" + str.tostring(close), color=color.new(color.green, 0), style=label.style_label_down, textcolor=color.white) if (sellCondition) label.new(bar_index, high, text="Sell\n" + str.tostring(close), color=color.new(color.red, 0), style=label.style_label_up, textcolor=color.white) // Optional: Add alerts for entry signals alertcondition(buyCondition, title="Buy Alert", message="Buy signal triggered") alertcondition(sellCondition, title="Sell Alert", message="Sell signal triggered")