Estratégia de acompanhamento de tendência VWMA baseada em ângulo com trailing stop dinâmico

VWMA EMA MA PVSRA Angle BIAS
Data de criação: 2025-02-18 13:42:01 última modificação: 2025-02-18 13:42:01
cópia: 2 Cliques: 356
1
focar em
1617
Seguidores

Estratégia de acompanhamento de tendência VWMA baseada em ângulo com trailing stop dinâmico

Visão geral

Trata-se de uma estratégia de acompanhamento de tendências baseada em médias móveis volumetricamente ponderadas (VWMA) e médias móveis indexadas (EMA), combinando análise de ângulo de preço e mecanismo de parada de rastreamento dinâmico. A estratégia é baseada principalmente na monitorização de cruzamentos de VWMA e médias móveis rápidas, combinando condições angulares de movimentos de preços para determinar o momento de entrada e gerenciar o risco usando o rastreamento de parada percentual.

Princípio da estratégia

A lógica central da estratégia é baseada nos seguintes componentes principais:

  1. Usando o VWMA de 25 ciclos como indicador de tendência principal
  2. VWMA de 8 ciclos como linha de sinal rápido
  3. A utilização de EMA de 50 ciclos para determinar tendências de longo prazo
  4. Calcular o ângulo de 50 ciclos de EMA (configurado para um limiar de 45 graus)
  5. EMA de 200 ciclos opcional como filtro de desvio de mercado O sinal de entrada é acionado quando a média móvel rápida se cruza com a principal VWMA e o ângulo de preço atende às condições. A estratégia protege os lucros com um stop loss de 1% de rastreamento dinâmico.

Vantagens estratégicas

  1. Verificação de múltiplos prazos - a estratégia tem bom desempenho acima de H1 e em prazos M1
  2. Filtro de ângulo - reduz a falsa ruptura através da introdução de condições de ângulo de movimento de preços
  3. Gestão de riscos perfeita - percentual de rastreamento de perdas, proteção dinâmica de lucros
  4. Adaptabilidade - pode ser adaptada a diferentes condições de mercado através de parâmetros
  5. Confirmação de tendência completa - Confirmação de tendência cruzada com múltiplas médias móveis

Risco estratégico

  1. Mercado de turbulência com fraco desempenho - Falso sinal pode ocorrer com frequência no mercado horizontal
  2. Atraso no tempo de entrada - pode ter perdido algumas oportunidades no início da tendência devido ao uso de confirmação múltipla
  3. O M15 não funciona muito bem - deve ser evitado
  4. Sensibilidade de parâmetros - a escolha de um limite de ângulo e de um período de média móvel tem maior influência na performance da estratégia
  5. O rastreamento de perdas pode ser prematuro - pode levar a perdas prematuras em mercados com maior volatilidade

Direção de otimização da estratégia

  1. Introdução de um mecanismo de auto-adaptação da taxa de flutuação - percentual de stop loss de rastreamento de acordo com a dinâmica da taxa de flutuação do mercado
  2. Aumento do filtro de transação - Melhorar a qualidade do sinal através da confirmação de transação
  3. Método de cálculo do ângulo de otimização - Considere o uso de um ângulo de adaptação
  4. Adição de identificação de estado de mercado - desenvolvimento de mecanismos de identificação de mercado de tendências / turbulências
  5. Melhorar o mecanismo de saída - otimizar o tempo de saída em combinação com a configuração do preço e os indicadores de dinâmica

Resumir

Esta é uma estratégia de acompanhamento de tendências bem estruturada, que, através da análise angular e da combinação de múltiplas médias móveis, permite obter um melhor desempenho nas principais tendências. Apesar de existirem alguns problemas de atraso e sensibilidade de parâmetros, a estratégia ainda tem espaço para ser melhorada com a orientação de otimização recomendada.

Código-fonte da estratégia
/*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)