
Это адаптивная торговая стратегия, основанная на средневесовой цене (VWAP) и волатильности Гарман-Класса (GKV). Эта стратегия позволяет динамически корректировать стандартные диапазоны VWAP для разумного отслеживания рыночных тенденций. Когда цена пробивает вверх, она открывает больше позиций, а когда она пробивает вниз, она открывает меньше позиций.
В основе стратегии лежит сочетание VWAP с GKV-волатильностью. Сначала рассчитывается VWAP как центробежность, а затем используется стандартная разница в цене закрытия для построения полосы. Ключевым моментом является использование формулы GKV для расчета волатильности, которая учитывает четыре цены открытия и закрытия и является более точной, чем традиционная волатильность.
Стратегия обеспечивает динамическое отслеживание рынка путем объединения 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)