
Ini adalah strategi perdagangan yang beradaptasi berdasarkan nilai rata-rata tertimbang volume transaksi (VWAP) dan volatilitas Garman-Klass (GKV). Strategi ini secara dinamis menyesuaikan band standard deviasi VWAP dengan volatilitas, untuk melakukan pelacakan cerdas terhadap tren pasar. Ketika harga menembus tren naik, lebih banyak posisi terbuka, dan posisi rata saat penembusan tren turun, semakin besar volatilitas menembus ambang batas, semakin kecil volatilitas menembus ambang batas.
Inti dari strategi ini adalah menggabungkan volatilitas VWAP dengan GKV. Pertama, VWAP dihitung sebagai pusat harga, dan kemudian menggunakan selisih standar dari harga penutupan untuk membangun band. Kuncinya adalah menggunakan rumus GKV untuk menghitung volatilitas, yang mempertimbangkan empat harga pembukaan dan penutupan, lebih akurat daripada volatilitas tradisional.
Strategi ini memungkinkan pelacakan dinamis pasar dengan menggabungkan VWAP dengan inovasi volatilitas GKV. Karakteristiknya yang dapat beradaptasi membuatnya dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar. Meskipun ada beberapa risiko potensial, dengan pengendalian risiko yang masuk akal dan pengoptimalan berkelanjutan, strategi ini memiliki prospek aplikasi yang baik.
/*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)