
Se trata de una estrategia de negociación adaptativa basada en el precio promedio ponderado por volumen de transacción (VWAP) y la volatilidad de Garman-Klass (GKV). La estrategia ajusta dinámicamente el rango de diferencia estándar del VWAP para permitir un seguimiento inteligente de las tendencias del mercado. Cuando el precio se abre más posiciones cuando se rompe la trayectoria, y más posiciones cuando se rompe la trayectoria, la mayor volatilidad aumenta el umbral de ruptura y la menor volatilidad disminuye el umbral de ruptura.
El núcleo de la estrategia es combinar la volatilidad VWAP con la GKV. Primero se calcula el VWAP como el centro del precio, y luego se construye un segmento utilizando la diferencia estándar del precio de cierre. La clave está en usar la fórmula GKV para calcular la volatilidad, que considera los cuatro precios de apertura y cierre, con mayor precisión que la volatilidad tradicional.
La estrategia permite el seguimiento dinámico del mercado mediante la combinación de VWAP con la innovación de la tasa de volatilidad de GKV. Su característica de adaptabilidad le permite mantener un rendimiento estable en diferentes entornos de mercado. Aunque existen algunos riesgos potenciales, la estrategia tiene buenas perspectivas de aplicación con un control razonable del riesgo y una optimización continua.
/*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)