
La estrategia es un sistema de seguimiento de tendencias basado en el cruce de las medias móviles (EMA) del índice, que combina la gestión de posiciones dinámicas y el control de riesgos. La estrategia utiliza señales cruzadas de EMA rápidas y lentas para identificar tendencias en el mercado, mientras que ajusta dinámicamente el tamaño de las transacciones mediante el cálculo del riesgo porcentual y utiliza paros móviles para proteger los beneficios.
La lógica central de la estrategia se basa en las medias móviles indexadas de dos períodos diferentes (el 9 y el 21 por defecto). Cuando el EMA rápido sube por encima del EMA lento, el sistema genera múltiples señales; cuando el EMA rápido desciende por encima del EMA lento, el sistema se estabiliza. La escala de cada operación se calcula de forma dinámica en función de la proporción de riesgo fijo del capital total de la cuenta (el 1% por defecto), al tiempo que se establece un nivel de parada y un porcentaje de stop loss móvil basado en la proporción de riesgo de retorno.
Se trata de un sistema de negociación completo que combina los métodos clásicos de análisis técnico con las modernas ideas de gestión de riesgos. La estrategia controla el riesgo a través de la gestión dinámica de posiciones y el stop loss móvil, al tiempo que aprovecha la captura de oportunidades de tendencia en el cruce de EMAs. Aunque existen algunas limitaciones inherentes, se puede mejorar aún más la solidez y adaptabilidad de la estrategia mediante la orientación de optimización 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)