Esta é uma estratégia de seguimento de tendências que combina análise de vários prazos e gerenciamento de volatilidade. O núcleo da estratégia usa duplo crossover EMA para a direção da tendência, indicador RSI para filtragem de sobrecompra / sobrevenda, incorpora EMA de maior prazo para confirmação geral da tendência e utiliza indicador ATR para gerenciamento dinâmico de stop-loss e alvo de lucro. Através do uso coordenado de vários indicadores técnicos, a estratégia garante a confiabilidade do sinal e o controle eficaz do risco.
A lógica básica de negociação consiste nos seguintes componentes principais:
Esta é uma tendência bem concebida seguindo uma estratégia que atinge características favoráveis de risco-recompensa através de análise de vários prazos e gestão de volatilidade. A principal vantagem reside na combinação orgânica de múltiplos indicadores técnicos, garantindo a confiabilidade da negociação e o controle eficaz do risco. Embora existam alguns riscos potenciais, o desempenho geral da estratégia ainda tem espaço para melhoria através de otimização e refinamento contínuos. É crucial se concentrar na otimização de parâmetros e validação de backtesting, enquanto implementa rigorosamente medidas de controle de risco na negociação ao vivo.
/*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")