Il s'agit d'une stratégie de négociation adaptative basée sur le prix moyen pondéré par volume (VWAP) et la volatilité de la classe Garman (GKV). La stratégie ajuste dynamiquement les bandes d'écart type de VWAP grâce à la volatilité pour atteindre un suivi intelligent des tendances du marché. Elle ouvre des positions longues lorsque le prix dépasse la bande supérieure et ferme des positions lorsqu'il dépasse la bande inférieure, avec une volatilité plus élevée conduisant à des seuils de rupture plus élevés et une volatilité plus faible conduisant à des seuils plus bas.
Le noyau de la stratégie combine le VWAP avec la volatilité du GKV. Il calcule d'abord le VWAP comme le pivot de prix, puis construit des bandes en utilisant l'écart type des prix de clôture. La clé est d'utiliser la formule GKV pour le calcul de la volatilité, qui prend en compte quatre points de prix (ouverture, hauteur, basseur, fermeture) et est plus précise que les mesures de volatilité traditionnelles.
La stratégie réalise un suivi dynamique du marché grâce à une combinaison innovante de volatilité VWAP et GKV. Sa nature adaptative permet une performance stable dans différents environnements de marché.
/*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)