Il s'agit d'une stratégie de suivi de tendance qui combine l'analyse multi-temporelle et la gestion de la volatilité. Le noyau de la stratégie utilise un double croisement EMA pour la direction de la tendance, un indicateur RSI pour le filtrage de surachat / survente, incorpore une EMA à plus long terme pour la confirmation de la tendance globale et utilise un indicateur ATR pour une gestion dynamique des stops-loss et des objectifs de profit.
La logique de base du trading est composée des éléments clés suivants:
Il s'agit d'une tendance bien conçue suivant une stratégie qui atteint des caractéristiques de risque-rendement favorables grâce à l'analyse multi-temporelle et à la gestion de la volatilité. L'avantage principal réside dans la combinaison organique de plusieurs indicateurs techniques, assurant à la fois la fiabilité des transactions et un contrôle efficace des risques. Bien que certains risques potentiels existent, la performance globale de la stratégie a encore place à l'amélioration grâce à une optimisation et à un raffinement continus. Il est crucial de se concentrer sur l'optimisation des paramètres et la validation des tests antérieurs tout en mettant strictement en œuvre des mesures de contrôle des risques dans le trading en direct.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-26 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trend Following with ATR and MTF Confirmation", overlay=true) // Parameters emaShortPeriod = input.int(9, title="Short EMA Period", minval=1) emaLongPeriod = input.int(21, title="Long EMA Period", minval=1) rsiPeriod = input.int(14, title="RSI Period", minval=1) rsiOverbought = input.int(70, title="RSI Overbought", minval=50) rsiOversold = input.int(30, title="RSI Oversold", minval=1) atrPeriod = input.int(14, title="ATR Period", minval=1) atrMultiplier = input.float(1.5, title="ATR Multiplier", minval=0.1) takeProfitATRMultiplier = input.float(2.0, title="Take Profit ATR Multiplier", minval=0.1) // Multi-timeframe settings htfEMAEnabled = input.bool(true, title="Use Higher Timeframe EMA Confirmation?", inline="htf") htfEMATimeframe = input.timeframe("D", title="Higher Timeframe", inline="htf") // Select trade direction tradeDirection = input.string("Both", title="Trade Direction", options=["Both", "Long", "Short"]) // Calculating indicators emaShort = ta.ema(close, emaShortPeriod) emaLong = ta.ema(close, emaLongPeriod) rsiValue = ta.rsi(close, rsiPeriod) atrValue = ta.atr(atrPeriod) // Higher timeframe EMA confirmation htfEMALong = request.security(syminfo.tickerid, htfEMATimeframe, ta.ema(close, emaLongPeriod)) // Trading conditions longCondition = ta.crossover(emaShort, emaLong) and rsiValue < rsiOverbought and (not htfEMAEnabled or close > htfEMALong) shortCondition = ta.crossunder(emaShort, emaLong) and rsiValue > rsiOversold and (not htfEMAEnabled or close < htfEMALong) // Plotting EMAs plot(emaShort, title="EMA Short", color=color.green) plot(emaLong, title="EMA Long", color=color.red) // Trailing Stop-Loss and Take-Profit levels var float trailStopLoss = na var float trailTakeProfit = na // Exit conditions var bool exitLongCondition = na var bool exitShortCondition = na if (strategy.position_size != 0) if (strategy.position_size > 0) // Long Position trailStopLoss := na(trailStopLoss) ? close - atrValue * atrMultiplier : math.max(trailStopLoss, close - atrValue * atrMultiplier) trailTakeProfit := close + atrValue * takeProfitATRMultiplier exitLongCondition := close <= trailStopLoss or close >= trailTakeProfit strategy.exit("Exit Long", "Long", stop=trailStopLoss, limit=trailTakeProfit, when=exitLongCondition) else // Short Position trailStopLoss := na(trailStopLoss) ? close + atrValue * atrMultiplier : math.min(trailStopLoss, close + atrValue * atrMultiplier) trailTakeProfit := close - atrValue * takeProfitATRMultiplier exitShortCondition := close >= trailStopLoss or close <= trailTakeProfit strategy.exit("Exit Short", "Short", stop=trailStopLoss, limit=trailTakeProfit, when=exitShortCondition) // Strategy Entry if (longCondition and (tradeDirection == "Both" or tradeDirection == "Long")) strategy.entry("Long", strategy.long) if (shortCondition and (tradeDirection == "Both" or tradeDirection == "Short")) strategy.entry("Short", strategy.short) // Plotting Buy/Sell signals plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Plotting Trailing Stop-Loss and Take-Profit levels plot(strategy.position_size > 0 ? trailStopLoss : na, title="Long Trailing Stop Loss", color=color.red, linewidth=2, style=plot.style_line) plot(strategy.position_size < 0 ? trailStopLoss : na, title="Short Trailing Stop Loss", color=color.green, linewidth=2, style=plot.style_line) plot(strategy.position_size > 0 ? trailTakeProfit : na, title="Long Take Profit", color=color.blue, linewidth=2, style=plot.style_line) plot(strategy.position_size < 0 ? trailTakeProfit : na, title="Short Take Profit", color=color.orange, linewidth=2, style=plot.style_line) // Alerts alertcondition(longCondition, title="Buy Alert", message="Buy Signal Triggered") alertcondition(shortCondition, title="Sell Alert", message="Sell Signal Triggered") alertcondition(exitLongCondition, title="Long Exit Alert", message="Long Position Closed") alertcondition(exitShortCondition, title="Short Exit Alert", message="Short Position Closed")