Esta estrategia utiliza el promedio móvil exponencial de 5 días (EMA) y las bandas de Bollinger (BB) para identificar oportunidades comerciales potenciales en el mercado. Cuando el precio se rompe por encima de la banda superior de Bollinger o por debajo de la banda inferior de Bollinger, y se cumplen condiciones específicas, la estrategia genera señales de compra o venta. La estrategia tiene como objetivo capturar movimientos significativos de precios en el mercado mientras utiliza niveles de stop loss y precio objetivo para gestionar el riesgo y maximizar los rendimientos.
El núcleo de esta estrategia es utilizar la EMA de 5 días y las bandas de Bollinger para determinar las tendencias y la volatilidad del mercado. Cuando el precio se rompe por encima de la banda superior de Bollinger y el máximo de las velas anteriores está por encima de la EMA de 5 días, la estrategia genera una señal de venta. Por el contrario, cuando el precio se rompe por debajo de la banda inferior de Bollinger y el mínimo de las velas anteriores está por debajo de la EMA de 5 días, la estrategia genera una señal de compra.
Una vez que se ingresa a una operación, la estrategia establece un nivel de stop loss y un nivel de precio objetivo. El stop loss se coloca en la dirección opuesta al precio de entrada para limitar las pérdidas potenciales. El nivel de precio objetivo se calcula sobre la base de un número fijo de puntos (por ejemplo, 1000 puntos) para bloquear las ganancias esperadas. Si el precio alcanza el nivel de stop loss o el nivel de precio objetivo, la estrategia cierra la operación y sale de la posición.
La estrategia de EMA y Bollinger Bands Breakout aprovecha dos indicadores técnicos comúnmente utilizados para capturar movimientos significativos de precios en el mercado. La estrategia tiene condiciones de entrada claras, medidas de gestión de riesgos y objetivos de ganancias, por lo que es fácil de entender e implementar. Sin embargo, el rendimiento de la estrategia puede verse influenciado por la volatilidad del mercado y las condiciones sin tendencia. Al introducir parámetros adaptativos, mecanismos de filtrado de señales y optimización de parámetros, la robustez y rentabilidad de la estrategia pueden mejorarse aún más.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Nifty Bank Strategy", overlay=true) // Parameters lengthEMA = 5 lengthBB = 20 multBB = 1.5 targetPoints = 1000 // Calculate 5-day EMA ema5 = ta.ema(close, lengthEMA) // Calculate Bollinger Bands (length 20, multiplier 1.5) basis = ta.sma(close, lengthBB) dev = multBB * ta.stdev(close, lengthBB) upperBB = basis + dev lowerBB = basis - dev // Define strategy variables var float entryPrice = na var float stopLoss = na var float targetPrice = na var bool inTrade = false var bool isLong = false var float triggerHigh = na var float triggerLow = na var float triggerClose = na if not inTrade // Short Entry Trigger Condition if low > ema5 and low > upperBB and high > upperBB triggerLow := low triggerHigh := high triggerClose := close label.new(bar_index, high, "Waiting for short trigger", color=color.yellow) // Long Entry Trigger Condition else if high < ema5 and high < lowerBB and low < lowerBB triggerHigh := high triggerLow := low triggerClose := close label.new(bar_index, low, "Waiting for long trigger", color=color.yellow) // Check for Short Entry if not inTrade and na(triggerClose) == false and close < triggerClose if low < triggerLow entryPrice := close stopLoss := triggerHigh targetPrice := entryPrice - targetPoints strategy.entry("Short", strategy.short) label.new(bar_index, high, "Short", color=color.red, style=label.style_label_down) inTrade := true isLong := false triggerLow := na triggerHigh := na triggerClose := na // Check for Long Entry if not inTrade and na(triggerClose) == false and close > triggerClose if high > triggerHigh entryPrice := close stopLoss := triggerLow targetPrice := entryPrice + targetPoints strategy.entry("Long", strategy.long) label.new(bar_index, low, "Long", color=color.green, style=label.style_label_up) inTrade := true isLong := true triggerLow := na triggerHigh := na triggerClose := na // Manage Short Trade if inTrade and not isLong if high >= stopLoss strategy.close("Short", comment="SL Hit") label.new(bar_index, high, "SL Hit", color=color.red, style=label.style_label_down) inTrade := false else if low <= targetPrice strategy.close("Short", comment="Target Hit") label.new(bar_index, low, "Target Hit", color=color.green, style=label.style_label_up) inTrade := false // Manage Long Trade if inTrade and isLong if low <= stopLoss strategy.close("Long", comment="SL Hit") label.new(bar_index, low, "SL Hit", color=color.red, style=label.style_label_down) inTrade := false else if high >= targetPrice strategy.close("Long", comment="Target Hit") label.new(bar_index, high, "Target Hit", color=color.green, style=label.style_label_up) inTrade := false // Plotting plot(ema5, color=color.orange, title="5-day EMA") plot(upperBB, color=color.red, title="Upper Bollinger Band") plot(lowerBB, color=color.purple, title="Lower Bollinger Band") // Plot trade entry and exit points plotshape(series=inTrade and isLong ? entryPrice : na, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal") plotshape(series=inTrade and not isLong ? entryPrice : na, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")