
La estrategia de entrada doble entre EMAs y bandas de Bollinger es un sistema de negociación cuantitativa que combina el seguimiento de tendencias y las rupturas de volatilidad. La estrategia utiliza principalmente las cruces de las medias móviles de los índices (EMA) para juzgar la tendencia del mercado, mientras que las bandas de Bollinger (Bollinger Bands) se utilizan para identificar oportunidades de ruptura potenciales.
EMA cruzado: la estrategia utiliza EMA de 12 y 26 ciclos para determinar la dirección de la tendencia. Cuando el EMA rápido (de 12 ciclos) atraviesa el EMA lento (de 26 ciclos), se produce una señal de multiplicación; a la inversa, se produce una señal de diferenciación.
Brines: La estrategia utiliza 55 ciclos, con un Brines de 0.9 de diferencia estándar. Cuando el precio rompe la vía, si ya se encuentra en una tendencia múltiple, se ofrece una oportunidad de entrada adicional.
Logía de entrada:
La lógica de salida:
Ajustes para detener el daño:
Gestión de riesgos:
Análisis multidimensional: combina la estrategia de seguimiento de tendencias (EMA) y la estrategia de ruptura de la volatilidad (banda de Brin) para mejorar la fiabilidad de las señales de negociación.
Mecanismo de entrada flexible: además de las principales señales de cruce de EMA, el uso de la brecha de la banda de Brin ofrece oportunidades adicionales de entrada, lo que aumenta la adaptabilidad de la estrategia.
Gestión de riesgo dinámica: utiliza ATR para establecer paros y ajustar el tamaño de las posiciones, lo que permite que la estrategia se adapte mejor a la volatilidad en diferentes condiciones de mercado.
Percepción del estado del mercado: para juzgar el estado del mercado a través de la banda de Brin, se puede optar por suspender la negociación en condiciones desfavorables, reduciendo el riesgo.
Optimización de la gestión de fondos: un control más preciso de los fondos mediante la gestión del riesgo porcentual y el ajuste dinámico del tamaño de las posiciones ATR.
Alta personalización: Se pueden ajustar varios parámetros, como el ciclo EMA, la configuración de la banda de Brin y el multiplicador ATR, para que la estrategia se adapte a diferentes variedades de operaciones y entornos de mercado.
Riesgo de reversión de la tendencia: El rendimiento es bueno en mercados de tendencia fuerte, pero puede haber frecuentes falsas señales de ruptura en mercados convulsivos.
Riesgo de exceso de transacciones: la ruptura de la banda de Brin puede causar demasiadas señales de transacción, aumentando los costos de las transacciones.
Riesgo de deslizamiento: en mercados altamente volátiles, los precios de entrada y salida pueden estar muy alejados de las expectativas.
Sensibilidad de parámetros: la estrategia puede ser sensible a los cambios en los parámetros, como el ciclo EMA, la configuración de la banda de Brin, etc., que requieren una optimización y retroalimentación cuidadosas.
Dependencia del entorno del mercado: las estrategias pueden no funcionar de manera consistente en diferentes períodos de mercado y en entornos de fluctuación.
Riesgo de gestión de fondos: Aunque se utiliza la gestión de riesgos porcentual, es posible que se produzca un retiro de cuentas más grande en caso de pérdidas continuas.
Análisis de múltiples marcos de tiempo: Introducción de confirmaciones de tendencias de períodos más largos, como las EMA de las líneas de circunferencia o lunares, para reducir las falsas señales.
Filtración de la volatilidad: ajustar los parámetros de las bandas de Brin o suspender la negociación en un entorno de baja volatilidad para evitar el exceso de negociación en el mercado horizontal.
Añadir un indicador de dinámica, como el RSI o el MACD, para confirmar la intensidad de la tendencia y las posibles señales de reversión.
Optimización de los mecanismos de salida: Considere el uso de objetivos de ganancias dinámicas basados en ATR o de seguimiento de stop loss para un mejor bloqueo de ganancias.
Clasificación de estados de mercado: Desarrollar un sistema de clasificación de entornos de mercado que utilice diferentes configuraciones de parámetros en diferentes estados de mercado.
Optimización de aprendizaje automático: utiliza algoritmos de aprendizaje automático para ajustar dinámicamente los parámetros de la estrategia para adaptarse a las diferentes condiciones del mercado.
Análisis de correlación: en el caso de operaciones con varias variedades, se debe tener en cuenta la correlación entre variedades para optimizar las características de riesgo-beneficio de la cartera de inversión en su conjunto.
Introducción de factores fundamentales: para acciones o mercancías, considere agregar indicadores fundamentales relevantes para mejorar la calidad de la señal de entrada.
La estrategia de doble entrada de EMA cruzada con Brines es un sistema de negociación cuantitativo que combina la idea de seguimiento de tendencias y rupturas de volatilidad. Captura las principales tendencias a través de la cruz de EMA y utiliza las rupturas de Brines para proporcionar oportunidades adicionales de entrada, mientras que utiliza un método de gestión de riesgos dinámico para optimizar la utilización de los fondos. La ventaja de la estrategia radica en su método de análisis multidimensional y su gestión de riesgos flexible, pero también enfrenta riesgos de negociación como reversión de tendencias y exceso.
La estrategia aún tiene mucho espacio para ser optimizada a través de análisis de múltiples marcos de tiempo, filtrado de fluctuaciones y adición de indicadores de dinámica. En particular, la introducción de algoritmos de aprendizaje automático y un sistema de clasificación de estados de mercado podría mejorar significativamente la adaptabilidad y la estabilidad de la estrategia. Sin embargo, en la aplicación real, aún se requiere una evaluación exhaustiva y pruebas de avance, y un ajuste detallado de los parámetros según la variedad de transacciones y el entorno del mercado.
En general, se trata de un marco de estrategias de comercio cuantitativo de diseño razonable y con potencial. Mediante la optimización continua y la gestión cuidadosa, tiene el potencial de convertirse en un sistema de comercio robusto, adecuado para los inversores que buscan controlar el riesgo al mismo tiempo que capturan tendencias.
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover with BB Double Entry", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=100)
// Input parameters
fastLength = input.int(12, "Fast EMA Length")
slowLength = input.int(26, "Slow EMA Length")
atrPeriod = input.int(14, "ATR Period")
atrMultiplier = input.float(1.0, "ATR Multiplier")
useATRStopLoss = input.bool(true, "Use ATR Stop Loss")
stopLossDays = input.int(5, "Number of days for stop loss", minval=1, maxval=50)
riskPerTrade = input.float(3.0, "Risk per trade (%)", minval=0.1, maxval=5, step=0.1)
bbRiskPerTrade = input.float(1.5, "Risk for BB breakout trade (%)", minval=0.1, maxval=5, step=0.1)
// Bollinger Bands parameters
bbLength = input.int(55, "BB Length")
bbMult = input.float(0.9, "BB Standard Deviation")
useBBPauseResume = input.bool(false, "Use BB for Pause/Resume trading")
// Backtesting dates
startDate = input(timestamp("2020-01-01"), "Start Date")
endDate = input(timestamp("9999-12-31"), "End Date")
// Calculate EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// Calculate ATR
atr = ta.atr(atrPeriod)
// Calculate Bollinger Bands
bbBasis = ta.sma(close, bbLength)
bbDev = bbMult * ta.stdev(close, bbLength)
bbUpper = bbBasis + bbDev
bbLower = bbBasis - bbDev
// Define trading conditions
longCondition = ta.crossover(fastEMA, slowEMA)
shortCondition = ta.crossunder(fastEMA, slowEMA)
bullish = fastEMA > slowEMA
bearish = fastEMA < slowEMA
// Bollinger Bands breakout
bbBreakout = close > bbUpper and close[1] <= bbUpper[1]
// Calculate lowest low for stop loss
lowestLow = ta.lowest(low, stopLossDays)
// Variables to store entry price and stop loss
var float entryPrice = na
var float stopLoss = na
var bool inPosition = false
var bool pauseTrading = false
// Entry logic
entryConditions = (longCondition or (bbBreakout and bullish)) and
(not useBBPauseResume or close > bbBasis) and
not pauseTrading
if entryConditions and not inPosition
entryPrice := close
atrStopLoss = close - (atr * atrMultiplier)
lowStopLoss = lowestLow
stopLoss := useATRStopLoss ? atrStopLoss : lowStopLoss
riskAmount = strategy.equity * (riskPerTrade / 100)
positionSize = riskAmount / (close - stopLoss)
strategy.entry("Long", strategy.long, qty=positionSize)
inPosition := true
pauseTrading := false
alert("BUY," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(positionSize), alert.freq_once_per_bar_close)
// Additional entry on BB breakout
if inPosition and bbBreakout and bullish and (not useBBPauseResume or close > bbBasis)
bbRiskAmount = strategy.equity * (bbRiskPerTrade / 100)
bbPositionSize = bbRiskAmount / (close - stopLoss)
strategy.entry("Long_BB", strategy.long, qty=bbPositionSize)
alert("ADD," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(bbPositionSize), alert.freq_once_per_bar_close)
// Exit logic
if shortCondition or (useBBPauseResume and inPosition and close < bbBasis)
if shortCondition
strategy.close_all(comment="EMA Crossdown")
inPosition := false
pauseTrading := false
alert("SELL," + syminfo.ticker + ",Reason=EMA_Crossdown", alert.freq_once_per_bar_close)
else if useBBPauseResume
strategy.close_all(comment="Close under BB basic")
pauseTrading := true
alert("SELL," + syminfo.ticker + ",Reason=Below_BB_Basic", alert.freq_once_per_bar_close)
entryPrice := na
stopLoss := na
// Resume trading if price closes above BB basic
if useBBPauseResume and pauseTrading and close > bbBasis
pauseTrading := false
alert("RESUME," + syminfo.ticker, alert.freq_once_per_bar_close)
// Stop loss
if strategy.position_size > 0
strategy.exit("Stop Loss", "Long", stop=stopLoss)
strategy.exit("Stop Loss", "Long_BB", stop=stopLoss)
if close <= stopLoss
alert("SELL," + syminfo.ticker + ",Reason=Stop_Loss", alert.freq_once_per_bar_close)
// Plotting
plot(fastEMA, color=color.new(color.blue, 0), title="Fast EMA")
plot(slowEMA, color=color.new(color.red, 0), title="Slow EMA")
plot(bbUpper, color=color.new(color.green, 50), title="BB Upper")
plot(bbLower, color=color.new(color.green, 50), title="BB Lower")
plot(bbBasis, color=color.new(color.yellow, 50), title="BB Basic")
plot(strategy.position_size > 0 ? stopLoss : na, color=color.red, style=plot.style_cross, linewidth=2, title="Stop Loss")
// Alert conditions
alertcondition(entryConditions, title="Buy Alert", message="Buy {{ticker}}")
alertcondition(bbBreakout and inPosition and bullish and (not useBBPauseResume or close > bbBasis), title="Add Position Alert", message="Add Position {{ticker}}")
alertcondition(shortCondition, title="Sell Alert (EMA)", message="Sell {{ticker}} (EMA crossdown)")
alertcondition(useBBPauseResume and inPosition and close < bbBasis, title="Pause Alert", message="Pause trading {{ticker}} (Close under BB basic)")
alertcondition(useBBPauseResume and pauseTrading and close > bbBasis, title="Resume Alert", message="Resume trading {{ticker}} (Close above BB basic)")