Esta estratégia é um sistema de seguimento de tendências baseado em crossovers de média móvel exponencial (EMA), incorporando dimensionamento dinâmico de posição e gestão de risco.
A lógica central baseia-se em dois EMAs com períodos diferentes (default 9 e 21). Um sinal de entrada longo é gerado quando o EMA rápido cruza acima do EMA lento, enquanto as posições são fechadas quando o EMA rápido cruza abaixo do EMA lento.
Este é um sistema de negociação completo que combina métodos clássicos de análise técnica com conceitos modernos de gerenciamento de riscos. A estratégia controla o risco através de dimensionamento dinâmico de posição e trailing stops, enquanto captura oportunidades de tendência usando crossovers EMA. Embora existam algumas limitações inerentes, as direções de otimização sugeridas podem melhorar ainda mais a robustez e a adaptabilidade da estratégia. A estratégia é particularmente adequada para negociação de tendência de longo prazo com risco controlado.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bitcoin Exponential Profit Strategy", overlay=true) // User settings fastLength = input.int(9, title="Fast EMA Length", minval=1) slowLength = input.int(21, title="Slow EMA Length", minval=1) riskPercent = input.float(1, title="Risk % Per Trade", step=0.1) / 100 rewardMultiplier = input.float(2, title="Reward Multiplier (R:R)", step=0.1) trailOffsetPercent = input.float(0.5, title="Trailing Stop Offset %", step=0.1) / 100 // Calculate EMAs fastEMA = ta.ema(close, fastLength) slowEMA = ta.ema(close, slowLength) // Plot EMAs plot(fastEMA, color=color.blue, title="Fast EMA") plot(slowEMA, color=color.red, title="Slow EMA") // Account balance and dynamic position sizing capital = strategy.equity riskAmount = capital * riskPercent // Define Stop Loss and Take Profit Levels stopLossLevel = close * (1 - riskPercent) takeProfitLevel = close * (1 + rewardMultiplier * riskPercent) // Trailing stop offset trailOffset = close * trailOffsetPercent // Entry Condition: Bullish Crossover if ta.crossover(fastEMA, slowEMA) positionSize = riskAmount / math.max(close - stopLossLevel, 0.01) // Prevent division by zero strategy.entry("Long", strategy.long, qty=positionSize) strategy.exit("TakeProfit", from_entry="Long", stop=stopLossLevel, limit=takeProfitLevel, trail_offset=trailOffset) // Exit Condition: Bearish Crossunder if ta.crossunder(fastEMA, slowEMA) strategy.close("Long") // Labels for Signals if ta.crossover(fastEMA, slowEMA) label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up) if ta.crossunder(fastEMA, slowEMA) label.new(bar_index, high, "SELL", color=color.red, textcolor=color.white, style=label.style_label_down)