Estrategia de seguimiento de tendencia VWMA basada en ángulos con stop dinámico

VWMA EMA MA PVSRA Angle BIAS
Fecha de creación: 2025-02-18 13:42:01 Última modificación: 2025-02-18 13:42:01
Copiar: 2 Número de Visitas: 356
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencia VWMA basada en ángulos con stop dinámico

Descripción general

Se trata de una estrategia de seguimiento de tendencias basada en las medias móviles ponderadas por volumen (VWMA) y las medias móviles indexadas (EMA), que combina análisis de ángulos de precios y un mecanismo de seguimiento dinámico de paradas. La estrategia se basa principalmente en el monitoreo de la intersección de VWMA con las medias móviles rápidas, al tiempo que combina las condiciones angulares del movimiento de los precios para determinar el momento de entrada y gestionar el riesgo con el seguimiento de paradas por porcentaje.

Principio de estrategia

La lógica central de la estrategia se basa en los siguientes componentes clave:

  1. Utilizando el VWMA de 25 ciclos como indicador de tendencia principal
  2. VWMA de 8 ciclos como línea de señal rápida
  3. El EMA de 50 ciclos determina tendencias más a largo plazo
  4. Calcula el ángulo del EMA de 50 ciclos (con un umbral de 45 grados)
  5. EMA de 200 ciclos opcional como filtro de desviación del mercado La señal de entrada se activa cuando la media móvil rápida se cruza con la VWMA principal y el ángulo de precio cumple con los requisitos. La estrategia protege los beneficios con un stop loss de seguimiento dinámico del 1%.

Ventajas estratégicas

  1. Verificación de múltiples marcos de tiempo: la estrategia funciona bien en los marcos de tiempo H1 y M1
  2. Filtrado de ángulo - reduce las falsas rupturas mediante la introducción de condiciones de ángulo de movimiento de precios
  3. Gestión de riesgos perfecta - Percentaje de seguimiento de pérdidas, protección dinámica de ganancias
  4. Adaptabilidad - puede adaptarse a diferentes condiciones de mercado mediante parámetros
  5. Confirmación de tendencias de forma adecuada - Confirmación de tendencias cruzada con múltiples medias móviles

Riesgo estratégico

  1. Los mercados convulsivos no funcionan bien - pueden generar falsas señales frecuentes en los mercados horizontales
  2. Retardo en el tiempo de entrada - es posible que se pierdan algunas oportunidades al comienzo de la tendencia debido al uso de múltiples confirmaciones
  3. El marco de tiempo M15 no es muy efectivo - debe evitarse su uso
  4. Sensibilidad de los parámetros - la elección de los umbrales de ángulo y el ciclo de las medias móviles tienen un mayor impacto en el rendimiento de la estrategia
  5. El seguimiento de las pérdidas puede ser prematuro - puede causar pérdidas prematuras en mercados con mucha volatilidad

Dirección de optimización de la estrategia

  1. Introducción de un mecanismo de adaptación de la volatilidad - Percentaje de stop loss de seguimiento ajustado a la volatilidad dinámica del mercado
  2. Aumento de filtro de volumen de transacción - mejora la calidad de la señal mediante la confirmación de volumen de transacción
  3. Método de cálculo de ángulos optimizados - Considere el uso de un umbral de ángulo adaptativo
  4. Adición a la identificación del estado del mercado - desarrollo de mecanismos de identificación de tendencias / turbulencias en el mercado
  5. Mecanismos de salida mejorados - Optimización de la hora de salida en combinación con la configuración del precio y los indicadores dinámicos

Resumir

Esta es una estrategia de seguimiento de tendencias bien estructurada que, mediante el análisis de ángulos y la combinación de múltiples medias móviles, permite obtener un mejor rendimiento en las tendencias principales. Aunque existen ciertos problemas de rezago y sensibilidad de parámetros, la estrategia aún tiene espacio para mejorar con la orientación de optimización recomendada.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-18 00:00:00
end: 2024-10-16 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("PVSRA Trailing Strategy with Angle Condition (40-50 degrees)", overlay=true)

// === INPUTS ===
priceData = input.source(close, title="Price Data")
maLength  = input.int(25, title="Moving Average Length", minval=2)
useBias   = input.bool(false, title="Long/Short just above/below 200 EMA")
useTrailing = input.bool(true, title="Use Trailing Stop")
trailPerc  = input.float(1.0, title="Trailing Stop Percentage", minval=0.1)
anglePeriod = input.int(14, title="Period for Angle Calculation", minval=1)

// === CÁLCULOS ===
maValue = ta.vwma(priceData, maLength)
maLong  = ta.ema(high, 50)
maShort = ta.ema(low, 50)
maFast  = ta.vwma(close, 8)
bias    = ta.ema(close, 200)
longBias  = useBias ? close > bias : true
shortBias = useBias ? close < bias : true

// === CÁLCULO DO ÂNGULO DA MÉDIA MÓVEL DE 50 ===
ma50 = ta.ema(close, 50)
angle = math.atan((ma50 - ma50[anglePeriod]) / anglePeriod) * (180 / math.pi)  // Converte radianos para graus

// === CONDIÇÃO DE ÂNGULO ===
validAngleL = angle >= 45
validAngleS = angle <= 45

// === PLOTS ===
plot(maValue, color=color.orange, title="Moving Average")
plot(maFast, color=color.green, title="Fast MA")
plot(ma50, color=color.blue, title="50 EMA")

plotshape(series=(strategy.position_size > 0) ? maValue : na,
     color=color.red, style=shape.circle, location=location.absolute,
     title="Long Stop")

plotshape(series=(strategy.position_size < 0) ? maValue : na,
     color=color.red, style=shape.cross, location=location.absolute,
     title="Short Stop")

// === CONDIÇÕES DE ENTRADA ===
enterLong  = close > maValue and ta.crossover(maFast, maValue) and close > maLong and longBias and validAngleL
enterShort = close < maValue and ta.crossunder(maFast, maValue) and close < maShort and shortBias and validAngleS

// === CONDIÇÕES DE SAÍDA ===
exitLong  = ta.crossunder(maFast, maValue) and strategy.position_size > 0
exitShort = ta.crossover(maFast, maValue) and strategy.position_size < 0

// === EXECUÇÃO DA ESTRATÉGIA ===
if (enterLong)
    strategy.entry("EL", strategy.long)

if (enterShort)
    strategy.entry("ES", strategy.short)

if (exitLong or exitShort)
    strategy.close_all()

// === TRAILING STOP ===
if (useTrailing and strategy.position_size > 0)
    trailPrice = close * (1 - trailPerc / 100)
    strategy.exit("Trailing Long", from_entry="EL", stop=trailPrice)

if (useTrailing and strategy.position_size < 0)
    trailPrice = close * (1 + trailPerc / 100)
    strategy.exit("Trailing Short", from_entry="ES", stop=trailPrice)