En la carga de los recursos... Cargando...

Estrategia de ruptura de Bollinger Momentum de varios plazos con media móvil Hull

El autor:¿ Qué pasa?, Fecha: 2024-11-29 17:00:00
Las etiquetas:VWMAHMA- ¿ Qué?FFT más largoIndicador de riesgo

img

Resumen general

Esta estrategia es un sistema de negociación basado en análisis de marcos de tiempo múltiples, que combina bandas de Bollinger, promedio móvil de Hull y promedio móvil ponderado para generar señales de negociación. La estrategia opera principalmente en el marco de tiempo de 1 hora mientras integra datos de mercado de períodos de 5 minutos, 1 hora y 3 horas. Utiliza múltiples indicadores técnicos para confirmar oportunidades comerciales e implementa mecanismos dinámicos de stop-loss y take-profit, ajustando automáticamente los tamaños de las posiciones basados en el capital de la cuenta para un control eficaz del riesgo.

Principios de estrategia

La lógica central se basa en la confirmación cruzada de múltiples indicadores técnicos. La estrategia supervisa las relaciones de precios con varios promedios móviles en múltiples marcos de tiempo, incluidos VWMA de 5 minutos, VWMA de 1 hora y HMA de 3 horas. Las señales largas se generan cuando el precio se rompe por encima del umbral superior mientras está por encima de todos los indicadores de marco de tiempo; por el contrario, las señales cortas ocurren cuando el precio se rompe por debajo del umbral inferior mientras está por debajo de todos los indicadores. La estrategia incorpora cálculos de desviación para establecer umbrales dinámicos de entrada y salida, mejorando la flexibilidad comercial.

Ventajas estratégicas

  1. El análisis de marcos de tiempo múltiples reduce los riesgos de ruptura falsa y mejora la fiabilidad de la señal
  2. Las opciones dinámicas de stop loss y take profit se adaptan a las diferentes condiciones del mercado
  3. El tamaño de las posiciones basado en el capital de la cuenta garantiza una utilización racional del capital
  4. Los mecanismos de salida múltiples proporcionan adaptabilidad a la estrategia
  5. La interfaz gráfica ofrece una visualización clara de las señales comerciales para el análisis
  6. La integración de múltiples indicadores técnicos maduros mejora la precisión de las decisiones de negociación

Riesgos estratégicos

  1. Los indicadores múltiples pueden dar lugar a señales de negociación retrasadas
  2. Posibilidad de false breakouts frecuentes en diferentes mercados
  3. Los coeficientes fijos de stop-loss y take-profit pueden no adaptarse a todas las condiciones de mercado
  4. El procesamiento de datos en marcos de tiempo múltiples puede aumentar la complejidad de la estrategia
  5. Riesgo de deslizamiento elevado en mercados volátiles

Direcciones de optimización

  1. Introducir indicadores de volatilidad para los ajustes dinámicos de stop-loss y take-profit
  2. Añadir reconocimiento de condiciones de mercado para la adaptación de parámetros
  3. Optimizar el filtrado de señales para reducir las pérdidas de fallas de ruptura
  4. Incorporar análisis de volumen para mejorar la fiabilidad de la señal de ruptura
  5. Desarrollar mecanismos de optimización de parámetros adaptativos para mejorar la estabilidad

Resumen de las actividades

La estrategia construye un sistema comercial relativamente completo a través del análisis de múltiples marcos de tiempo y múltiples indicadores técnicos. Sus fortalezas se encuentran en la fiabilidad de la señal y la gestión efectiva del riesgo, aunque enfrenta desafíos con el retraso de la señal y la optimización de parámetros. A través de la mejora y optimización continua, la estrategia muestra potencial para mantener un rendimiento estable en varias condiciones de mercado.


/*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)


Relacionados

Más.