Esta es una estrategia de negociación adaptativa basada en el precio promedio ponderado por volumen (VWAP) y la volatilidad de la clase Garman (GKV). La estrategia ajusta dinámicamente las bandas de desviación estándar de VWAP a través de la volatilidad para lograr un seguimiento inteligente de la tendencia del mercado.
El núcleo de la estrategia combina VWAP con la volatilidad GKV. Primero calcula VWAP como el pivote de precios, luego construye bandas utilizando la desviación estándar de los precios de cierre. La clave es usar la fórmula GKV para el cálculo de volatilidad, que considera cuatro puntos de precio (abierto, alto, bajo, cerrado) y es más precisa que las medidas de volatilidad tradicionales. La volatilidad ajusta dinámicamente el ancho de la banda: cuando aumenta la volatilidad, las bandas se ensanchan, elevando los umbrales de ruptura; cuando disminuye la volatilidad, las bandas se estrechan, reduciendo los umbrales de ruptura.
La estrategia logra un seguimiento dinámico del mercado a través de una combinación innovadora de volatilidad de VWAP y GKV. Su naturaleza adaptativa permite un rendimiento estable en diferentes entornos de mercado.
/*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)