この戦略は,ボリューム・ウェイトド・平均価格 (VWAP) とガーマンクラス・ボラティリティ (GKV) をベースとした適応型取引戦略である.この戦略は,スマートな市場トレンド追跡を達成するために,ボラティリティを通じてVWAPの標準偏差帯を動的に調整する.価格は上部帯を超えるとロングポジションを開き,下部帯を下回るとポジションを閉じる.より高い波動性がより高いブレイクドレッシャーにつながり,より低い波動性がより低いドレッシャーにつながる.
戦略の核心は,VWAPとGKV波動性を組み合わせている.まずVWAPを価格ピボットとして計算し,その後閉値の標準偏差を使用してバンドを構築する.鍵は,波動性計算のためのGKV公式を使用しており,これは4つの価格ポイント (オープン,ハイ,ロー,クローズ) を考慮し,従来の波動性測定値よりも正確である.波動性は波動幅を動的に調整する - 波動性が増加するとバンドが広がり,ブレイクドレッシュルを上昇させる.波動性が低下するとバンドが狭くなって,ブレイクドレッシュルを低下させる.この適応メカニズムは誤ったブレイクドレッシュルを効果的に回避する.
この戦略は,VWAPとGKVの変動性の革新的な組み合わせを通じて動的市場追跡を達成する.その適応性性質は,異なる市場環境で安定したパフォーマンスを可能にします.いくつかの潜在的なリスクがある一方で,この戦略は適切なリスク管理と継続的な最適化によって良い応用見通しを示しています.
/*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)