Estrategia de trading con bandas de desviación de VWAP y filtro de volatilidad

VWAP ATR 偏差带 波动性过滤
Fecha de creación: 2025-04-07 11:57:02 Última modificación: 2025-04-07 11:57:10
Copiar: 0 Número de Visitas: 510
2
Seguir
319
Seguidores

Estrategia de trading con bandas de desviación de VWAP y filtro de volatilidad Estrategia de trading con bandas de desviación de VWAP y filtro de volatilidad

Descripción general

La estrategia de negociación de filtro de fluctuación de la banda de desviación VWAP es un sistema de negociación intradiario basado en el promedio ponderado por volumen de transacción (VWAP) y el canal de diferencia estándar. La estrategia utiliza VWAP como punto de referencia central para los precios, combina las formas invertidas H1/H2 y L1/L2 de Al Brooks y filtra el entorno de baja volatilidad a través del filtro de fluctuación ATR para formar un marco estructurado para la toma de decisiones comerciales.

Principio de estrategia

La estrategia se basa en los siguientes componentes clave:

  1. Calculación del VWAP fijado para cada día de negociación: Reinicie el cálculo de VWAP al comienzo de cada día de negociación, asegurándose de que los puntos de referencia de los precios estén estrechamente relacionados con la actividad de negociación del día. La estrategia utiliza la diferencia estándar para crear bandas de volatilidad por encima y por debajo de la VWAP, configuradas de forma predeterminada como el doble de la diferencia estándar.

  2. La entrada de la señal de disparo

    • Entrada múltiple ((H1/H2): cuando el precio abre por debajo de la banda de desviación de la diferencia estándar 2 veces más baja, pero el cierre está por encima de esta banda de desviación, y al mismo tiempo tiene suficiente intensidad múltiple ((calculado a través de la posición de cierre dentro del intervalo de barras)).
    • L1/L2: cuando el precio de apertura es superior al doble de la banda de desviación de la diferencia estándar superior, pero el cierre es inferior a esta banda de desviación, al mismo tiempo que tiene suficiente intensidad de la cabeza vacía.
  3. Filtros de fluctuación

    • El uso de ATR ((14) para medir la volatilidad del mercado
    • Saltar la señal de negociación cuando el rango de diferencia estándar es demasiado pequeño (< 3 veces el ATR) para evitar una entrada errónea en un entorno de baja volatilidad
  4. Ajustes para detener la pérdida

    • Múltiple cabeza: Punto bajo de la columna de la señal menos la zona de amortiguamiento
    • Cabeza en blanco: el punto más alto de la columna de la señal más la zona de amortiguamiento
  5. Estrategias para salir ganando

    • Se pueden configurar diferentes lógicas de salida independientemente para la dirección de múltiples espacios
    • Las opciones incluyen: regresar a VWAP, alcanzar un objetivo de banda de desviación específica o desactivar la ganancia automática
  6. Mecanismo de salida segura

    • Activa la salida de seguridad cuando aparezcan una serie de columnas invertidas
    • Multicapa: X columnas vaginales seguidas
    • Cabeza en blanco: X columnas solares en línea

La estrategia implementa un completo mecanismo de cálculo de la intensidad de la señal para evaluar la calidad de cada señal mediante el cálculo de la posición relativa del precio de cierre en el rango de los puntos altos y bajos. La señal de entrada solo se considera válida cuando la intensidad de la señal alcanza el umbral mínimo (el 0.7 por defecto).

Ventajas estratégicas

Después de analizar el código en profundidad, la estrategia tiene las siguientes ventajas:

  1. Ingreso basado en la estructura del mercadoLa estrategia no es simplemente seguir la oscilación de los precios, sino buscar una reversión específica de los precios cerca de la zona de desviación, lo que significa que las transacciones se realizan siguiendo la ventaja estadística de la media regresora.

  2. Mecanismo de filtración múltipleFiltración de señales de negociación en múltiples niveles a través de filtros de volatilidad, requisitos de intensidad de la señal y configuraciones de precios específicas, lo que reduce significativamente las señales engañosas.

  3. Gestión de riesgos flexibleLa estrategia ofrece una variedad de herramientas de control de riesgo, incluyendo paradas cerradas basadas en columnas de señales, objetivos de ganancias ajustables y mecanismos de salida segura, que permiten a los comerciantes ajustar los parámetros de riesgo según las diferentes condiciones del mercado.

  4. Configuración de varios espacios independientes: La estrategia permite a los operadores configurar independientemente las condiciones de entrada y salida de las operaciones de varios y de los vacíos, lo que es muy valioso para optimizar el rendimiento en los mercados con preferencias direccionales.

  5. Ayudas visualesLa estrategia incluye una gran cantidad de opciones de visualización, como VWAP, banda de desviación y zonas de baja volatilidad de alto brillo, para ayudar a los comerciantes a entender mejor el estado del mercado y las señales potenciales.

  6. La sesión está programada para VWAP.VWAP se recalcula cada día de negociación para garantizar que los puntos de referencia de precios estén siempre relacionados con la actividad actual del mercado y evitar el problema de usar puntos de referencia obsoletos.

  7. Enfoque en la calidad de la señalLa estrategia se centra en señales de inversión de alta calidad, no solo en el cruce mecánico de precios con bandas de desviación, a través de la medición de la intensidad de la señal.

Riesgo estratégico

A pesar de la buena concepción de la estrategia, existen los siguientes riesgos potenciales:

  1. Riesgo de reversión en el mercado de tendencias: Como una estrategia basada en la regresión de la media, en un mercado de fuerte tendencia puede desencadenar frecuentemente señales de contratiempo, lo que provoca un alto continuo. Solución: En un entorno de fuerte tendencia, puede desactivar el comercio en dirección contraria o aumentar las condiciones de filtración.

  2. Sensibilidad de los parámetrosEl rendimiento de la estrategia depende en gran medida de varios parámetros clave, como el multiplicador de la diferencia estándar, el tamaño de la parada y el umbral de intensidad de la señal. La solución: realizar una optimización integral de los parámetros y un análisis de sensibilidad para encontrar un conjunto de parámetros sólidos en diferentes condiciones de mercado.

  3. Falta de tiempo para filtrarLa estrategia no tiene en cuenta las características de las horas de negociación, lo que puede generar señales engañosas en momentos de especial volatilidad como la apertura o cierre del mercado. Solución: Añadir filtros de tiempo para evitar negociar en momentos de mercado específicos.

  4. Riesgo de pérdidas fijasLa solución: Considere el uso de una parada dinámica basada en el ATR para que la parada se adapte a la volatilidad del mercado actual.

  5. Falta de filtro de volumen de las transaccionesLa estrategia: Aunque se utiliza VWAP, no se filtra directamente los entornos de bajo volumen de transacciones, lo que puede conducir a una señal no confiable cuando la liquidez es insuficiente. Solución: Añadir condiciones de desvalorización del volumen de transacciones para garantizar que se negocie solo en entornos con suficiente liquidez.

  6. La hora de la salida segura: Un número fijo de columnas invertidas puede desencadenar una salida segura prematuramente, o no reaccionar lo suficientemente rápido cuando realmente se necesita una salida. Solución: Considere un mecanismo de salida segura dinámica que combine la amplitud de las fluctuaciones de precios con el número de columnas.

Dirección de optimización de la estrategia

Basado en el análisis de código, las siguientes son las posibles direcciones de optimización:

  1. Diferenciación dinámica con multiplicador: La estrategia actual utiliza un estándar de diferencia fijo de 2 veces como condición de entrada. Se puede considerar ajustar este múltiplo según la dinámica de la volatilidad del mercado, utilizando un múltiplo más grande en mercados de alta volatilidad y un múltiplo más pequeño en mercados de baja volatilidad, para adaptarse a diferentes entornos de mercado.

  2. Agregar un filtro de tiempoFiltrar las transacciones por períodos de tiempo específicos, evitando los períodos de volatilidad como los horarios de apertura, cierre y almuerzo, o centrándose en períodos de negociación eficientes.

  3. Análisis integrado de la estructura del mercadoEn el análisis de tendencias de los marcos de tiempo más altos, solo se puede operar en la dirección que coincide con una tendencia más grande o se pueden usar condiciones de filtración más estrictas en las señales de contratrend.

  4. Mecanismos de salida de seguridad optimizados: La salida segura actual se basa en un número fijo de columnas invertidas. Se puede considerar la posibilidad de combinar la amplitud del movimiento de precio, como para desencadenar una salida cuando el retiro del precio supera el porcentaje específico del movimiento de máxima ganancia después de la entrada.

  5. Confirmación del volumen de la transacciónA la hora de la formación de la señal de entrada, se añade la condición de confirmación de volumen de transacción, para asegurar que la señal esté acompañada de suficiente participación en el mercado y mejorar la fiabilidad de la señal.

  6. Implementación de la gestión de pérdidas dinámicas: sustitución de los puntos fijos para detener el deterioro por el deterioro dinámico basado en el ATR, o la implementación de la función de detener el movimiento para proteger los beneficios obtenidos.

  7. Añadir ganancias y pérdidas a los filtrosEn el caso de las inversiones en el mercado de divisas, el objetivo potencial se calcula como la proporción entre el objetivo potencial y el stop loss antes de la entrada, y solo se ejecutan las operaciones con un margen de ganancia y pérdida suficiente.

  8. Integración de efectos estacionales y calendarios: Analizar y aprovechar los patrones estacionales y los efectos del calendario en un mercado específico para aumentar el comercio en períodos estadísticamente más favorables o reducir el comercio en períodos desfavorables.

Estas optimizaciones pueden mejorar la solidez y la rentabilidad de las estrategias, especialmente su adaptabilidad a diferentes entornos de mercado.

Resumir

La estrategia de comercio de bandas de desviación VWAP con filtración de volatilidad es un sistema de comercio intradiario bien diseñado que combina varios conceptos clave del análisis técnico. Utiliza VWAP como punto de referencia central de los precios, calcula las bandas de desviación a través de la diferencia estándar y captura las oportunidades de comercio cuando los precios rebotan desde estas bandas. La ventaja central de la estrategia reside en su mecanismo de filtración multicapa y su sistema de gestión de riesgos flexible, lo que la permite adaptarse a diferentes entornos de mercado.

A pesar de la existencia de algunos riesgos potenciales, como el riesgo de reversión en mercados de fuerte tendencia y la sensibilidad de los parámetros, estos pueden mitigarse mediante una optimización adicional. Las direcciones de optimización incluyen el ajuste dinámico de los múltiplos de las bandas de desviación, la adición de filtros de tiempo, la integración de un análisis de marcos de tiempo más altos y la mejora de la gestión de pérdidas.

En general, se trata de un marco estratégico de base sólido, adecuado para que los operadores experimentados lo puedan personalizar y mejorar aún más. Al ser optimizado para mercados específicos y estilos de negociación, tiene el potencial de ser una herramienta de negociación diaria confiable, especialmente en un entorno de mercado con volatilidad moderada y tendencias de retorno a la media.

Código Fuente de la Estrategia
/*backtest
start: 2025-03-30 00:00:00
end: 2025-03-31 20:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("VWAP Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1, initial_capital=2000)

// === Inputs ===
src = input.source(hlc3, "Source")
stopPoints = input.float(20.0, "Stop Buffer (Points from Signal Bar High/Low)", step=0.25)

exitModeLong = input.string("VWAP", "Long Exit Rule", options=["VWAP", "Deviation Band", "None"])
exitModeShort = input.string("VWAP", "Short Exit Rule", options=["VWAP", "Deviation Band", "None"])
targetLongDeviation = input.float(2.0, "Long Target Deviation", step=0.1)
targetShortDeviation = input.float(2.0, "Short Target Deviation", step=0.1)

enableSafetyExit = input.bool(true, "Enable Safety Exit")
numOpposingBars = input.int(3, "Opposing Bars for Safety Exit", minval=1)

allowLongs = input.bool(true, "Allow Long Trades")
allowShorts = input.bool(true, "Allow Short Trades")

minStrength = input.float(0.7, "Minimum Signal Strength (0-1)", step=0.05)

showVWAP = input.bool(true, "Show VWAP")
showBands = input.bool(true, "Show Entry Bands")
showLowVolZones = input.bool(true, "Highlight Low Vol Zones")

// === VWAP Session Logic ===
var float sumSrc = na
var float sumVol = na
var float sumSrcSqVol = na

newSession = ta.change(time("D"))
if newSession or na(sumSrc)
    sumSrc := 0.0
    sumVol := 0.0
    sumSrcSqVol := 0.0

sumSrc += src * volume
sumVol += volume
sumSrcSqVol += math.pow(src, 2) * volume

vwap = sumSrc / sumVol
variance = (sumSrcSqVol / sumVol) - math.pow(vwap, 2)
stdev = math.sqrt(variance)

// === Deviation Bands ===
bandEntryMult = 2.0
entryUpper = vwap + stdev * bandEntryMult
entryLower = vwap - stdev * bandEntryMult

targetUpperLong = vwap + stdev * targetLongDeviation
targetLowerShort = vwap - stdev * targetShortDeviation

// === ATR-Based Volatility Filter ===
atrVal = ta.atr(14)
isVolTooLow = stdev * 2 < atrVal * 3
bgcolor(showLowVolZones and isVolTooLow ? color.new(color.orange, 85) : na, title="Low Volatility Zone")

// === Signal Strength Calculations ===
barRange = high - low
bullStrength = barRange > 0 ? (close - low) / barRange : 0
bearStrength = barRange > 0 ? (high - close) / barRange : 0

// === Entry Triggers with Strength Filter ===
isH1H2 = open < entryLower and close > entryLower and bullStrength >= minStrength
isL1L2 = open > entryUpper and close < entryUpper and bearStrength >= minStrength

plotshape(isH1H2, title="H1/H2", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.tiny)
plotshape(isL1L2, title="L1/L2", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.tiny)

// === Signal Bar Stop Tracking ===
var float signalLow = na
var float signalHigh = na

// === Entry Logic ===
longCondition = allowLongs and isH1H2 and strategy.position_size == 0 and not isVolTooLow
shortCondition = allowShorts and isL1L2 and strategy.position_size == 0 and not isVolTooLow

if longCondition
    strategy.entry("Long", strategy.long)
    signalLow := low

if shortCondition
    strategy.entry("Short", strategy.short)
    signalHigh := high

// === Reset Signal Bar Info
if strategy.position_size == 0
    signalLow := na
    signalHigh := na

// === Apply Signal-Bar-Based Stop
if strategy.opentrades > 0
    if strategy.position_size > 0 and not na(signalLow)
        strategy.exit("Long SL", from_entry="Long", stop=signalLow - stopPoints)
    if strategy.position_size < 0 and not na(signalHigh)
        strategy.exit("Short SL", from_entry="Short", stop=signalHigh + stopPoints)

// === Target Exits (Independent per side)
exitLongVWAP = strategy.position_size > 0 and exitModeLong == "VWAP" and high >= vwap
exitLongDev  = strategy.position_size > 0 and exitModeLong == "Deviation Band" and high >= targetUpperLong
exitShortVWAP = strategy.position_size < 0 and exitModeShort == "VWAP" and low <= vwap
exitShortDev  = strategy.position_size < 0 and exitModeShort == "Deviation Band" and low <= targetLowerShort

if exitModeLong != "None" and (exitLongVWAP or exitLongDev)
    strategy.close("Long", comment="Target Exit")

if exitModeShort != "None" and (exitShortVWAP or exitShortDev)
    strategy.close("Short", comment="Target Exit")

// === Safety Exit
bullishBar(i) => close[i] > open[i]
bearishBar(i) => close[i] < open[i]

bullCount = 0
bearCount = 0
for i = 0 to numOpposingBars - 1
    bullCount += bullishBar(i) ? 1 : 0
    bearCount += bearishBar(i) ? 1 : 0

exitSafetyLong = enableSafetyExit and strategy.position_size > 0 and bearCount == numOpposingBars
exitSafetyShort = enableSafetyExit and strategy.position_size < 0 and bullCount == numOpposingBars

if exitSafetyLong
    strategy.close("Long", comment="Safety Exit")

if exitSafetyShort
    strategy.close("Short", comment="Safety Exit")

// === Plotting ===
plot(showVWAP ? vwap : na, color=color.blue, title="VWAP")
pUpper = plot(showBands ? entryUpper : na, color=color.green, title="Upper Entry Band")
pLower = plot(showBands ? entryLower : na, color=color.red, title="Lower Entry Band")
fill(pUpper, pLower, color=color.new(color.gray, 85))