Stratégie de trading de rupture de choc VWAP dynamique à double écart type basée sur des statistiques quantitatives

VWAP SD VOL HL2
Date de création: 2025-01-06 16:31:36 Dernière modification: 2025-01-06 16:31:36
Copier: 2 Nombre de clics: 438
1
Suivre
1617
Abonnés

Stratégie de trading de rupture de choc VWAP dynamique à double écart type basée sur des statistiques quantitatives

Aperçu

La stratégie est une stratégie de rupture de tendance basée sur le VWAP (Volume Weighted Average Price) et les canaux d’écart type. Il construit une plage de fluctuation de prix dynamique en calculant le VWAP et les canaux d’écart type supérieur et inférieur pour capturer les opportunités de trading lorsque les prix augmentent. La stratégie s’appuie principalement sur les signaux de rupture de la bande d’écart type pour le trading, et fixe des objectifs de profit et des intervalles d’ordre pour contrôler les risques.

Principe de stratégie

  1. Calcul de l’indicateur de base :
  • Calculer le VWAP en utilisant le prix et le volume intraday HL2
  • Calculer l’écart type en fonction des fluctuations de prix
  • Définir 1,28 fois l’écart type des canaux supérieur et inférieur
  1. Logique de transaction :
  • Conditions d’entrée : Le prix traverse la piste inférieure puis monte vers la piste supérieure
  • Conditions de sortie : atteindre l’objectif de profit prédéfini
  • Définissez un intervalle de commande minimum pour éviter les transactions fréquentes

Avantages stratégiques

  1. Statistiques de base
  • Référence de pivot de prix basée sur VWAP
  • Utilisation de l’écart type pour mesurer la volatilité
  • Ajuster dynamiquement la plage de négociation
  1. Contrôle des risques
  • Fixez-vous des objectifs de profit fixes
  • Contrôler la fréquence des transactions
  • Les stratégies « long only » réduisent le risque

Risque stratégique

  1. Risque de marché
  • Une volatilité extrême peut conduire à de fausses cassures
  • Il est difficile de saisir avec précision le point de retournement de la tendance
  • Un déclin unilatéral entraîne des pertes plus importantes
  1. Risque lié aux paramètres
  • Sensibilité de réglage multiple de l’écart type
  • La définition des objectifs de profit doit être optimisée
  • Les intervalles de négociation affectent les performances

Direction d’optimisation

  1. Optimisation du signal
  • Ajouter un filtre de jugement de tendance
  • Confirmé par les changements dans le volume des échanges
  • Ajoutez d’autres indicateurs techniques pour vérifier
  1. Optimisation de la gestion des risques
  • Position stop loss définie dynamiquement
  • Ajustez les positions en fonction de la volatilité
  • Améliorer le mécanisme de gestion des commandes

Résumer

Il s’agit d’une stratégie de trading quantitative qui combine des principes statistiques et une analyse technique. Grâce à la coordination du VWAP et de la bande d’écart type, un système de négociation relativement fiable est construit. L’avantage principal de la stratégie réside dans sa base statistique scientifique et son mécanisme parfait de contrôle des risques, mais elle doit encore optimiser en permanence les paramètres et la logique de trading dans les applications pratiques.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5 
strategy("VWAP Stdev Bands Strategy (Long Only)", overlay=true)

// Standard Deviation Inputs
devUp1 = input.float(1.28, title="Stdev above (1)")
devDn1 = input.float(1.28, title="Stdev below (1)")

// Show Options
showPrevVWAP = input(false, title="Show previous VWAP close?")
profitTarget = input.float(2, title="Profit Target ($)", minval=0) // Profit target for closing orders
gapMinutes = input.int(15, title="Gap before new order (minutes)", minval=0) // Gap for placing new orders

// VWAP Calculation
var float vwapsum = na
var float volumesum = na
var float v2sum = na
var float prevwap = na // Track the previous VWAP
var float lastEntryPrice = na // Track the last entry price
var int lastEntryTime = na // Track the time of the last entry

start = request.security(syminfo.tickerid, "D", time)
newSession = ta.change(start)

vwapsum := newSession ? hl2 * volume : vwapsum[1] + hl2 * volume
volumesum := newSession ? volume : volumesum[1] + volume
v2sum := newSession ? volume * hl2 * hl2 : v2sum[1] + volume * hl2 * hl2

myvwap = vwapsum / volumesum
dev = math.sqrt(math.max(v2sum / volumesum - myvwap * myvwap, 0))

// Calculate Upper and Lower Bands
lowerBand1 = myvwap - devDn1 * dev
upperBand1 = myvwap + devUp1 * dev

// Plot VWAP and Bands with specified colors
plot(myvwap, style=plot.style_line, title="VWAP", color=color.green, linewidth=1)
plot(upperBand1, style=plot.style_line, title="VWAP Upper (1)", color=color.blue, linewidth=1)
plot(lowerBand1, style=plot.style_line, title="VWAP Lower (1)", color=color.red, linewidth=1)

// Trading Logic (Long Only)
longCondition = close < lowerBand1 and close[1] >= lowerBand1 // Price crosses below the lower band

// Get the current time in minutes
currentTime = timestamp("GMT-0", year(timenow), month(timenow), dayofmonth(timenow), hour(timenow), minute(timenow))

// Check if it's time to place a new order based on gap
canPlaceNewOrder = na(lastEntryTime) or (currentTime - lastEntryTime) >= gapMinutes * 60 * 1000

// Close condition based on profit target
if (strategy.position_size > 0)
    if (close - lastEntryPrice >= profitTarget)
        strategy.close("B")
        lastEntryTime := na // Reset last entry time after closing

// Execute Long Entry
if (longCondition and canPlaceNewOrder)
    strategy.entry("B", strategy.long)
    lastEntryPrice := close // Store the entry price
    lastEntryTime := currentTime // Update the last entry time

    // Add label for the entry
    label.new(bar_index, close, "B", style=label.style_label_down, color=color.green, textcolor=color.white, size=size.small)

// Optional: Plot previous VWAP for reference
prevwap := newSession ? myvwap[1] : prevwap[1]
plot(showPrevVWAP ? prevwap : na, style=plot.style_circles, color=close > prevwap ? color.green : color.red)