Il s’agit d’une stratégie de trading adaptative basée sur le prix moyen pondéré en volume d’achat (VWAP) et le taux de volatilité de Garman-Klass (GKV). La stratégie permet de suivre intelligemment les tendances du marché en ajustant dynamiquement la bande de décalage standard du VWAP en fonction de la volatilité.
Le cœur de la stratégie est de combiner le VWAP avec le taux de volatilité du GKV. La clé est d’utiliser la formule GKV pour calculer le taux de volatilité, qui prend en compte les quatre prix d’ouverture et de clôture, de manière plus précise que le taux de volatilité traditionnel. Le taux de volatilité ajuste dynamiquement la largeur de la bande - lorsque le taux de volatilité augmente, la bande s’élargit, augmentant le seuil de rupture; lorsque le taux de volatilité diminue, la bande devient étroite, réduisant le seuil de rupture. Ce mécanisme d’adaptation est efficace pour éviter les fausses ruptures.
La stratégie permet de suivre la dynamique du marché en combinant l’innovation de la volatilité VWAP et GKV. Ses caractéristiques d’adaptation lui permettent de maintenir une performance stable dans différents environnements de marché. Bien qu’il existe des risques potentiels, la stratégie a de bonnes perspectives d’application grâce à une maîtrise raisonnable des risques et une optimisation continue.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Adaptive VWAP Bands with Garman Klass Volatility", overlay=true)
// Inputs
length = input.int(25, title="Volatility Length")
vwapLength = input.int(14, title="VWAP Length")
vol_multiplier = input.float(1,title="Volatility Multiplier")
// Function to calculate Garman-Klass Volatility
var float sum_gkv = na
if na(sum_gkv)
sum_gkv := 0.0
sum_gkv := 0.0
for i = 0 to length - 1
sum_gkv := sum_gkv + 0.5 * math.pow(math.log(high[i]/low[i]), 2) - (2*math.log(2)-1) * math.pow(math.log(close[i]/open[i]), 2)
gcv = math.sqrt(sum_gkv / length)
// VWAP calculation
vwap = ta.vwma(close, vwapLength)
// Standard deviation for VWAP bands
vwapStdDev = ta.stdev(close, vwapLength)
// Adaptive multiplier based on GCV
multiplier = (gcv / ta.sma(gcv, length)) * vol_multiplier
// Upper and lower bands
upperBand = vwap + (vwapStdDev * multiplier)
lowerBand = vwap - (vwapStdDev * multiplier)
// Plotting VWAP and bands
plot(vwap, title="VWAP", color=color.blue, linewidth=2)
plot(upperBand, title="Upper Band", color=color.green, linewidth=1)
plot(lowerBand, title="Lower Band", color=color.red, linewidth=1)
var barColor = color.black
// Strategy: Enter long above upper band, go to cash below lower band
if (close > upperBand)
barColor := color.green
strategy.entry("Long", strategy.long)
else if (close < lowerBand)
barColor := color.fuchsia
strategy.close("Long")
barcolor(barColor)