Stratégie de suivi de tendance VWMA basée sur l'angle avec stop suiveur dynamique

VWMA EMA MA PVSRA Angle BIAS
Date de création: 2025-02-18 13:42:01 Dernière modification: 2025-02-18 13:42:01
Copier: 2 Nombre de clics: 356
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance VWMA basée sur l’angle avec stop suiveur dynamique

Aperçu

Il s’agit d’une stratégie de suivi de tendance basée sur les moyennes mobiles pondérées en volume (VWMA) et les moyennes mobiles indicielles (EMA), combinant l’analyse des angles de prix et un mécanisme de suivi dynamique des arrêts de perte. La stratégie consiste principalement à déterminer le moment d’entrée en jeu en surveillant l’intersection des VWMA avec les moyennes mobiles rapides, tout en combinant les conditions angulaires du mouvement des prix, et à gérer le risque en utilisant le suivi des arrêts en pourcentage.

Principe de stratégie

La logique fondamentale de la stratégie repose sur les éléments clés suivants :

  1. Utilisation de la VWMA à 25 cycles comme indicateur principal de tendance
  2. Le VWMA à 8 cycles comme ligne de signal rapide
  3. L’utilisation d’EMA à 50 cycles pour déterminer les tendances à plus long terme
  4. Calculer l’angle de l’EMA de 50 cycles (défini comme une barre de 45 degrés)
  5. EMA à 200 cycles en option comme filtre de déviation du marché Les signaux d’entrée sont déclenchés lorsque la moyenne mobile rapide se heurte à la VWMA principale et que l’angle de prix est satisfaisant. La stratégie protège les bénéfices avec un stop-loss de suivi dynamique de 1%.

Avantages stratégiques

  1. Vérification sur plusieurs périodes - la stratégie a bien fonctionné au-dessus de H1 et sur les périodes M1
  2. Filtrage d’angle - réduit les faux sauts en introduisant des conditions d’angle de mouvement des prix
  3. Gestion des risques - suivi des pertes en pourcentage et protection dynamique des bénéfices
  4. Adaptabilité - peut être ajustée par paramètres pour s’adapter à différentes conditions de marché
  5. Confirmation de tendance suffisante - confirmation de tendance croisée avec des moyennes mobiles multiples

Risque stratégique

  1. Faible rendement des marchés en choc - Faux signaux peuvent être fréquents dans les marchés horizontaux
  2. Délai d’entrée - certaines opportunités de début de tendance peuvent être manquées en raison de l’utilisation de plusieurs confirmations
  3. M15 est une période de temps peu efficace - évitez de l’utiliser
  4. Sensitivité des paramètres - le choix des seuils d’angle et des périodes de moyenne mobile a un impact significatif sur la performance de la stratégie
  5. Le suivi des arrêts peut entraîner une sortie prématurée - dans les marchés plus volatiles, cela peut entraîner des arrêts prématurés

Orientation de l’optimisation de la stratégie

  1. Introduction d’un mécanisme d’adaptation à la volatilité - pourcentage de stop loss suivi en fonction de la dynamique de la volatilité du marché
  2. Augmentation des filtres de trafic - amélioration de la qualité du signal par la confirmation du trafic
  3. Méthode de calcul de l’angle optimisé - Considérer l’utilisation d’un seuil d’angle adaptatif
  4. Adhésion à l’identification de l’état du marché - développer un mécanisme d’identification des tendances / chocs du marché
  5. Amélioration des mécanismes de sortie - optimisation du moment de sortie en combinant la forme des prix et les indicateurs dynamiques

Résumer

Il s’agit d’une stratégie de suivi de tendance bien structurée qui, grâce à l’analyse d’angle et à la combinaison de multiples moyennes mobiles, permet de mieux performer dans les principales tendances. Bien qu’il existe un certain retard et des problèmes de sensibilité aux paramètres, la stratégie peut être améliorée par une orientation d’optimisation recommandée.

Code source de la stratégie
/*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)