
A estratégia é um sistema de acompanhamento de tendências baseado em cruzamentos de médias móveis indexadas (EMA), combinando gerenciamento de posições dinâmicas e controle de risco. A estratégia usa sinais de cruzamentos de EMAs rápidas e lentas para identificar tendências de mercado, ao mesmo tempo em que ajusta dinamicamente a escala de negociação por meio de cálculos de risco percentual e usa travas móveis para proteger os lucros.
A lógica central da estratégia baseia-se em duas médias móveis indexadas de dois períodos diferentes (default 9 e 21). Quando um EMA rápido sobe e cruza um EMA lento, o sistema gera um sinal de multiplicação; quando um EMA rápido desce e cruza um EMA lento, o sistema se equilibra. A escala de cada transação é calculada dinamicamente com base na proporção de risco fixo para o capital total da conta (default 1%), além de definir um nível de parada baseado na proporção de risco para retorno e um percentual de stop loss móvel.
Trata-se de um sistema de negociação completo que combina métodos clássicos de análise técnica com modernos conceitos de gerenciamento de risco. A estratégia controla o risco através da gestão dinâmica de posições e do stop loss móvel, ao mesmo tempo em que captura oportunidades de tendência com a utilização de EMAs cruzadas. Embora existam algumas limitações inerentes, a robustez e adaptabilidade da estratégia pode ser ainda melhorada através da orientação de otimização recomendada.
/*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)