Bandes d'écart VWAP et stratégie de trading avec filtre de volatilité

VWAP ATR 偏差带 波动性过滤
Date de création: 2025-04-07 11:57:02 Dernière modification: 2025-04-07 11:57:10
Copier: 0 Nombre de clics: 510
2
Suivre
319
Abonnés

Bandes d’écart VWAP et stratégie de trading avec filtre de volatilité Bandes d’écart VWAP et stratégie de trading avec filtre de volatilité

Aperçu

La stratégie utilise le VWAP comme point de référence central pour les prix, en combinant les modèles de retournement H1/H2 et L1/L2 d’Al Brooks et en filtrant les environnements à faible volatilité à travers le filtre ATR pour former un cadre de décision de transaction structuré. La stratégie prend le temps de revenir en arrière après que les prix ont franchi le canal de déviation standard, tout en définissant des arrêts de perte basés sur les modèles de signaux et une variété de méthodes de gain flexible, y compris le retour au VWAP et le biais de déviation de la cible.

Principe de stratégie

Les principes de base de cette stratégie reposent sur les éléments clés suivants:

  1. Calcul du VWAP fixé pour chaque jour de transaction: Réglez le calcul du VWAP au début de chaque jour de négociation, en veillant à ce que les points de référence des prix soient étroitement liés à l’activité de négociation de la journée. La stratégie utilise le décalage standard pour créer une bande de volatilité au-dessus et en dessous du VWAP, avec un décalage standard de 2 fois par défaut.

  2. Signal de déclenchement d’entrée

    • H1/H2: lorsque le prix d’ouverture est inférieur à 2 fois la zone de déviation de la différence standard, mais que la clôture est supérieure à cette zone de déviation, tout en ayant une intensité suffisante de plusieurs têtes (calculée par la position de clôture dans la barre).
    • Entrée en position vide ((L1/L2)): lorsque le prix d’ouverture est supérieur à 2 fois la bande de déviation du décalage standard supérieur, mais que la clôture est inférieure à cette bande de déviation, tout en ayant une force de tête vide suffisante.
  3. Filtre à fluctuation

    • Utilisation de l’ATR 14 pour mesurer la volatilité du marché
    • Sautez le signal de transaction lorsque la plage d’écart-type est trop petite (moins de 3 fois l’ATR) pour éviter une entrée erronée dans un environnement à faible volatilité
  4. Réglages de stop-loss

    • Plusieurs têtes: bas de la colonne de signal moins zone de coupe
    • tête vide: point de pointe de la colonne de signalisation plus zone de protection contre les pertes
  5. Stratégies pour gagner

    • Différentes logiques de sortie peuvent être configurées indépendamment pour les directions multifonctions
    • Les options comprennent: revenir au VWAP, atteindre un objectif de bande de déviation spécifique ou désactiver les gains automatiques
  6. Mécanisme de sortie sécurisée

    • Trigger la sortie de sécurité lorsque le nombre de colonnes inversées est prédéterminé
    • Plusieurs têtes: X colonnes consécutives
    • Tête vide: X colonnes de soleil en série

La stratégie met en œuvre un mécanisme complet de calcul de l’intensité du signal, qui évalue la qualité de chaque signal en calculant la position relative du prix de clôture dans la plage des hauts et des bas. Un signal d’entrée n’est considéré comme valide que lorsque l’intensité du signal atteint la barre la plus basse (la valeur par défaut est de 0,7).

Avantages stratégiques

Après une analyse approfondie du code, la stratégie présente les avantages suivants:

  1. Entrée basée sur la structure du marchéLa stratégie consiste à ne pas simplement suivre les fluctuations des prix, mais à rechercher des retournements spécifiques de prix à proximité de la zone de déviation, ce qui signifie que les transactions sont effectuées en fonction de l’avantage statistique de la moyenne de retour.

  2. Mécanisme de filtrage multipleLe filtrage des signaux de négociation à plusieurs niveaux par des filtres de volatilité, des exigences d’intensité de signal et des modèles de prix spécifiques, réduisant considérablement les signaux trompeurs.

  3. Une gestion des risques soupleLa stratégie fournit une variété d’outils de contrôle du risque, y compris des arrêts serrés basés sur des piliers de signaux, des objectifs de profit réglables et des mécanismes de sortie sûrs, permettant aux traders d’ajuster les paramètres de risque en fonction des différentes conditions du marché.

  4. Configuration multi-espace indépendante: La stratégie permet aux traders de configurer indépendamment les conditions d’entrée et de sortie des transactions multi-têtes et à tête creuse, ce qui est très précieux pour optimiser les performances dans les marchés à préférence directionnelle.

  5. Aides visuellesLa stratégie comprend de nombreuses options de visualisation, telles que VWAP, un affichage des bandes de déviation et un éclairage des zones de basse volatilité, pour aider les traders à mieux comprendre l’état du marché et les signaux potentiels.

  6. La séance est fixée à VWAP: le VWAP est recalculé chaque jour de négociation, pour s’assurer que la référence de prix est toujours liée à l’activité actuelle du marché et éviter le problème de l’utilisation d’une référence obsolète.

  7. Mettre l’accent sur la qualité du signal: La stratégie se concentre sur des signaux de retournement de haute qualité par le calcul de l’intensité du signal, et non seulement sur des croisements mécaniques entre les bandes de prix et de déviation.

Risque stratégique

Malgré la bonne conception de cette stratégie, les risques potentiels sont les suivants:

  1. Risques de retournement dans les marchés tendanciels: en tant que stratégie basée sur la régression des moyennes, il est possible de déclencher fréquemment des signaux de contre-courant dans un marché en forte tendance, entraînant des arrêts continus.

  2. Paramètre SensibilitéLa performance de la stratégie dépend fortement de plusieurs paramètres clés tels que le multiplicateur de la différence standard, la taille de l’arrêt et la limite d’intensité du signal. La solution: effectuer une optimisation complète des paramètres et une analyse de sensibilité pour trouver des ensembles de paramètres robustes dans différentes conditions de marché.

  3. Le manque de filtrage du tempsLa stratégie ne prend pas en compte les caractéristiques des périodes de négociation et peut générer des signaux trompeurs pendant les périodes de volatilité particulièrement élevée, telles que les ouvertures ou les fermetures du marché. Solution: Ajouter un filtre temporel pour éviter de négocier à des périodes spécifiques du marché.

  4. Risque de stop-loss fixeLa solution: envisager l’utilisation d’un stop dynamique basé sur l’ATR pour adapter le stop à la volatilité du marché actuel.

  5. Manque de filtrage du volume des transactionsStratégie: Bien que VWAP soit utilisé, il n’y a pas de filtrage direct des environnements à faible volume de transactions, ce qui peut entraîner des signaux non fiables en cas de manque de liquidité. Solution: Ajouter des conditions de dépréciation du volume de transactions pour assurer la négociation uniquement dans des environnements suffisamment liquides.

  6. La question du moment de la sortie sûreLa solution: envisager un mécanisme d’exit de sécurité dynamique combinant l’amplitude des fluctuations des prix et le nombre de piliers.

Orientation de l’optimisation de la stratégie

En se basant sur l’analyse du code, voici quelques pistes d’optimisation possibles:

  1. Déviation dynamique avec multiplicateur: La stratégie actuelle utilise un facteur de déclenchement de l’entrée fixé à 2 fois l’écart-type. On peut envisager d’ajuster ce facteur en fonction de la dynamique de la volatilité du marché, en utilisant un facteur plus grand dans les marchés à forte volatilité et un facteur plus petit dans les marchés à faible volatilité, pour s’adapter à différents environnements de marché.

  2. Ajout d’un filtre temporelFiltrer les transactions pour des périodes spécifiques, en évitant les périodes de volatilité telles que les heures d’ouverture, de fermeture et de déjeuner, ou en se concentrant sur des périodes de trading particulièrement efficaces.

  3. Analyse intégrée de la structure du marché: joindre une analyse de tendance à une période plus longue, ne négocier que dans la direction correspondant à la plus grande tendance, ou utiliser des conditions de filtrage plus strictes sur les signaux de contre-tendance.

  4. Optimiser les mécanismes de sortie sécuriséeLes retraits sécurisés actuels sont basés sur un nombre fixe de piles inversées. Des retraits peuvent être envisagés en combinaison avec l’ampleur du mouvement des prix, par exemple en déclenchant un retrait lorsque le retrait des prix dépasse un certain pourcentage du mouvement le plus avantageux après l’entrée.

  5. Confirmation de la quantité ajoutée: ajouter des conditions de confirmation de volume au moment de la formation du signal d’entrée, afin de s’assurer que le signal est accompagné d’une participation suffisante sur le marché et d’améliorer la fiabilité du signal.

  6. Gestion dynamique des pertes: remplacement des arrêts de points fixes par des arrêts dynamiques basés sur l’ATR, ou mise en œuvre d’un arrêt mobile pour protéger les bénéfices déjà réalisés.

  7. Ajoutez le filtrage des pertes et des gains: Calculez le ratio de cible potentielle par rapport au stop loss avant l’entrée, et n’exécutez que les transactions qui présentent un rapport profit/perte suffisant.

  8. Intégration des effets saisonniers et du calendrier: analyser et exploiter les modèles saisonniers et les effets du calendrier de certains marchés pour augmenter les transactions pendant les périodes statistiquement plus favorables ou réduire les transactions pendant les périodes défavorables.

Ces optimisations peuvent améliorer la solidité et la rentabilité des stratégies, en particulier leur adaptabilité à différents environnements de marché.

Résumer

La stratégie de négociation de bandes d’écart et de filtrage de la volatilité VWAP est un système de négociation intraday bien conçu qui combine plusieurs concepts clés de l’analyse technique. Il utilise le VWAP comme point de référence central des prix, calcule les bandes d’écart par le biais de l’écart standard et capture les opportunités de négociation lorsque les prix rebondissent de ces bandes. Le principal avantage de la stratégie réside dans son mécanisme de filtrage à plusieurs niveaux et son système de gestion des risques flexible, qui lui permet de s’adapter à différents environnements de marché.

Bien que certains risques potentiels existent, tels que le risque de renversement et la sensibilité des paramètres dans les marchés à forte tendance, ceux-ci peuvent être atténués par une optimisation supplémentaire. Les orientations d’optimisation comprennent l’ajustement dynamique du multiplicateur de la bande de déviation, l’ajout d’un filtre de temps, l’intégration d’une analyse à plus long terme et l’amélioration de la gestion des pertes.

Dans l’ensemble, il s’agit d’un cadre stratégique solide qui peut être personnalisé et amélioré par les traders expérimentés. En s’optimisant pour des marchés et des styles de négociation spécifiques, il a le potentiel d’être un outil de day trading fiable, en particulier dans un environnement de marché volatile et avec une tendance à la rétrogradation des valeurs moyennes.

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