
Đây là một chiến lược giao dịch tự điều chỉnh dựa trên giá trung bình cân bằng khối lượng giao dịch ((VWAP) và tỷ lệ biến động Garman-Klass ((GKV)). Chiến lược này điều chỉnh VWAP bằng các bước sóng chênh lệch tiêu chuẩn bằng cách biến động tỷ lệ biến động, để thực hiện theo dõi thông minh về xu hướng thị trường. Khi giá phá vỡ đường đua, nhiều người mở vị trí, khi phá vỡ đường đua, vị trí bằng phẳng, tỷ lệ biến động càng lớn hơn để phá vỡ ngưỡng cao hơn, và tỷ lệ biến động càng nhỏ để phá vỡ ngưỡng thấp hơn.
Điểm mấu chốt của chiến lược này là kết hợp VWAP với tỷ lệ biến động GKV. Đầu tiên, tính VWAP làm trung tâm giá, sau đó sử dụng chênh lệch chuẩn của giá đóng cửa để xây dựng một đoạn sóng. Điều quan trọng là sử dụng công thức GKV để tính toán tỷ lệ biến động, xem xét bốn giá mở và đóng cửa, chính xác hơn so với tỷ lệ biến động truyền thống.
Chiến lược này thực hiện theo dõi động của thị trường bằng cách kết hợp VWAP với đổi mới tỷ lệ biến động GKV. Tính năng thích ứng của nó cho phép nó duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau. Mặc dù có một số rủi ro tiềm ẩn, chiến lược có triển vọng ứng dụng tốt với kiểm soát rủi ro hợp lý và tối ưu hóa liên tục.
/*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)