Estrategia de ruptura del impulso de Bollinger de múltiples períodos combinada con la estrategia de promedio móvil de Hull

VWMA HMA BB MTF RSI
Fecha de creación: 2024-11-29 17:00:00 Última modificación: 2024-11-29 17:00:00
Copiar: 0 Número de Visitas: 507
1
Seguir
1617
Seguidores

Estrategia de ruptura del impulso de Bollinger de múltiples períodos combinada con la estrategia de promedio móvil de Hull

Descripción general

La estrategia es un sistema de negociación basado en el análisis de múltiples marcos de tiempo, que combina la generación de señales de negociación de bandas de Bollinger, promedios móviles de Hull y promedios móviles ponderados. La estrategia funciona principalmente en el marco de tiempo de 1 hora, mientras que integra datos de mercado de tres períodos de tiempo de 5 minutos, 1 hora y 3 horas, para confirmar la oportunidad de negociación mediante la combinación de múltiples indicadores técnicos.

Principio de estrategia

La lógica central de la estrategia se basa en la confirmación cruzada de múltiples indicadores técnicos. La estrategia monitorea simultáneamente la relación de los precios con diferentes tipos de líneas medias en varios períodos de tiempo, incluidas las medias móviles ponderadas de 5 minutos (VWMA), las medias móviles ponderadas de 1 hora y las medias móviles de Hull de 3 horas (HMA). Cuando el precio está por encima de todos los indicadores de los períodos de tiempo, el sistema genera una señal múltiple cuando el precio se sale por encima de todos los indicadores; en cambio, cuando el precio está por debajo de todos los indicadores, el sistema genera una señal de vacío cuando el precio se sale por debajo de todos los indicadores.

Ventajas estratégicas

  1. El análisis de múltiples períodos de tiempo reduce el riesgo de falsas rupturas y aumenta la fiabilidad de las señales de negociación
  2. La configuración dinámica de stop-loss puede adaptarse a diferentes entornos del mercado
  3. La gestión de posiciones basada en intereses en las cuentas garantiza la racionalidad del uso de los fondos
  4. La elección de varios mecanismos de salida aumenta la adaptabilidad de la estrategia
  5. La interfaz gráfica ofrece una clara visualización de las señales de transacción para facilitar el análisis y el juicio
  6. Integración de varios indicadores técnicos avanzados para una mayor precisión en la toma de decisiones comerciales

Riesgo estratégico

  1. El uso de múltiples indicadores puede retrasar las señales de negociación
  2. En un mercado volátil pueden producirse frecuentes señales de ruptura falsas
  3. El Stop Loss Ratio fijo puede no ser adecuado para todos los entornos de mercado
  4. El procesamiento de datos con múltiples períodos de tiempo puede aumentar la complejidad de la ejecución de la estrategia
  5. El riesgo de deslizamiento puede ser mayor en mercados altamente volátiles.

Dirección de optimización de la estrategia

  1. Introducción de indicadores de volatilidad para ajustar dinámicamente los niveles de toma de ganancias y de stop loss
  2. Aumentar la capacidad de reconocimiento de entornos de mercado para usar diferentes configuraciones de parámetros en diferentes estados de mercado
  3. Mecanismos de filtración de señales optimizados para reducir los daños causados por falsas brechas
  4. El análisis del volumen de transacciones se añade para mejorar la fiabilidad de las señales de ruptura.
  5. Desarrollar mecanismos de optimización de parámetros adaptativos para mejorar la estabilidad de las estrategias

Resumir

La estrategia construye un sistema de negociación relativamente completo mediante la combinación de análisis de múltiples ciclos de tiempo y múltiples indicadores técnicos. La ventaja de la estrategia radica en la fiabilidad de la señal y la eficacia de la gestión de riesgos, pero también hay problemas como el retraso de la señal y la optimización de los parámetros.

Código Fuente de la Estrategia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("1H- 280, 2.7", overlay=true)


// Fetch the indicator values from different timeframes
vwma5 = request.security(syminfo.tickerid, "5", ta.wma(close, 233), lookahead = barmerge.lookahead_off)
vwma_hourly = request.security(syminfo.tickerid, "60", ta.wma(close, 89), lookahead = barmerge.lookahead_off)
hullma155_3h = request.security(syminfo.tickerid, "180", ta.hma(close, 155), lookahead = barmerge.lookahead_off)


// Calculate the deviation value
deviation = close * 0.032


// Initialize the signal variables
var float signalLine = na
var color lineColor = na


// Long Entry Conditions
longCondition_5min = close > vwma5
longCondition_hourly = close > vwma_hourly
longCondition_3h = close > hullma155_3h


// Short Entry Conditions
shortCondition_5min = close < vwma5
shortCondition_hourly = close < vwma_hourly
shortCondition_3h = close < hullma155_3h


// Long Entry
if longCondition_5min and longCondition_hourly and longCondition_3h
    signalLine := close + deviation
    lineColor := color.rgb(0, 255, 0, 1)


// Short Entry
if shortCondition_5min and shortCondition_hourly and shortCondition_3h
    signalLine := close - deviation
    lineColor := color.rgb(255, 0, 0, 1)


// Plotting the connecting line
plot(signalLine, title="Signal Line", color=lineColor, linewidth=1, style=plot.style_line)


// Colorize the signal line
bgcolor(signalLine > close ? color.rgb(0, 255, 0, 99) : color.rgb(255, 0, 0, 99), transp=90)



// Strategy settings
useTPSL = input(true, "Use TP/SL for closing long positions?")
useDownbreakOutbreak = input(false, "Use Downbreak and Outbreak for closing positions?")
useM7FClosing = input(false, "Use M7F Signal for closing positions?")


length1 = input.int(280, minval=1)
src = input(close, title="Source")
mult = input.float(2.7, minval=0.001, maxval=50, title="StdDev")


basis = ta.vwma(src, length1)
dev = mult * ta.stdev(src, length1)
upper = basis + dev
lower = basis - dev


offset = input.int(0, "Offset", minval = -500, maxval = 500)


length2 = input.int(55, minval=1)
src2 = input(close, title="Source")
hullma = ta.wma(2 * ta.wma(src2, length2 / 2) - ta.wma(src2, length2), math.floor(math.sqrt(length2)))


hullmacrosslower = ta.crossover(hullma, lower)
hullmacrossupper = ta.crossunder(hullma, upper)


breakout = ta.crossover(ohlc4, upper)
breakdown = ta.crossunder(ohlc4, upper)
outbreak = ta.crossover(ohlc4, lower)
downbreak = ta.crossunder(ohlc4, lower)


// Calculate position size and leverage
margin_pct = 1
leverage = 1
position_size = strategy.equity * margin_pct
qty = position_size / close / leverage


// Define take profit and stop loss levels
take_profit = 0.14
stop_loss = 0.06


// Opening a long position
if breakout
    strategy.entry("Long", strategy.long, qty, limit=close*(1+take_profit), stop=close*(1-stop_loss))


// Opening a short position
if downbreak
    strategy.entry("Short", strategy.short, qty, limit=close*(1-take_profit), stop=close*(1+stop_loss))


// Closing positions based on chosen method
if useTPSL
    // Using TP/SL for closing long positions
    if strategy.position_size > 0 and breakdown
        strategy.close("Long", comment="Breakdown")
else if useDownbreakOutbreak
    // Using Downbreak and Outbreak for closing positions
    if strategy.position_size > 0 and (breakdown or downbreak)
        strategy.close("Long", comment="Breakdown")
    if strategy.position_size < 0 and (outbreak or downbreak)
        strategy.close("Short", comment="Outbreak")
else if useM7FClosing
    // Using M7F Signal for closing positions
    if strategy.position_size > 0 and (signalLine < close)
        strategy.close("Long", comment="M7F Signal")
    if strategy.position_size < 0 and (signalLine > close)
        strategy.close("Short", comment="M7F Signal")


// Plotting entry signals
plotshape(hullmacrosslower, title="High Bear Volatility", style=shape.arrowup, text="^^^^^", color=color.rgb(75, 202, 79), location=location.belowbar)
plotshape(hullmacrossupper, title="High Bull Volatility", style=shape.arrowdown, text="-----", color=color.rgb(215, 72, 72), location=location.abovebar)
plotshape(breakout ? 1 : na, title="Breakout", style=shape.arrowup, text="", color=color.rgb(75, 202, 79), location=location.belowbar, size=size.tiny)
plotshape(breakdown ? 1 : na, title="Breakdown", style=shape.arrowdown, text="", color=color.rgb(201, 71, 71), location=location.abovebar, size=size.tiny)
plotshape(outbreak ? 1 : na, title="Outbreak", style=shape.arrowup, text="", color=color.rgb(0, 110, 255), location=location.belowbar, size=size.tiny)
plotshape(downbreak ? 1 : na, title="Downbreak", style=shape.arrowdown, text="", color=color.rgb(255, 111, 0), location=location.abovebar, size=size.tiny)