Esta estrategia genera señales comerciales basadas en el rango de volatilidad histórica del precio. Calcula la diferencia entre los precios más altos y más bajos durante un cierto período, y forma un rango de volatilidad utilizando promedios móviles. Las señales comerciales se activan cuando el precio rompe las bandas superiores o inferiores del rango. Pertenece a las estrategias de ruptura de tendencia.
El indicador principal es la volatilidad histórica del precio.
Calcular la diferencia entre los precios más altos y más bajos durante las últimas N barras, llamadas HL
Calcular la media de los precios más altos y más bajos en N barras, avg ((H, L)
La volatilidad se calcula en función de las variaciones de las emisiones de gases de efecto invernadero.
Donde N es el parámetro
Después de obtener la volatilidad, las bandas se calculan como:
Banda superior = cierre actual + cierre actual * Volatilidad
Bandas inferiores = cierre actual - cierre actual * Volatilidad
Las bandas son luego suavizadas por WMA con el período establecido como
Cuando el precio se rompe por encima de la banda superior, ir largo. Cuando el precio se rompe por debajo de la banda inferior, ir corto.
Las señales de salida se definen por
Si el tipo de salida es Volatilidad MA, salga cuando el precio vuelva a cruzar por debajo de WMA.
Si el tipo de salida es Range Crossover, salga cuando el precio vuelva a cruzar por debajo de las bandas.
Los riesgos pueden reducirse:
La estrategia puede mejorarse mediante:
Prueba diferentes valores de longitud para encontrar combinaciones óptimas.
Por ejemplo, cuando el precio se rompe por encima de la banda superior, compruebe si el MACD también cruza el oro.
Optimizando para paradas traseras en lugar de paradas sencillas.
Establecer reglas de reingreso para detectar tendencias de nuevo después de las paradas.
Ajustar dinámicamente los tamaños en función de la volatilidad del mercado.
Esta estrategia funciona bien para los mercados de tendencia en general mediante el uso de bandas basadas en la volatilidad para medir la fuerza de la tendencia y WMA para formar rangos de negociación confiables para las señales de ruptura.
/*backtest start: 2023-09-13 00:00:00 end: 2023-09-20 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © wbburgin //@version=5 strategy("Volatility Range Breakout Strategy [wbburgin]", shorttitle = "VRB Strategy [wbburgin]", overlay=true, pyramiding=20,max_bars_back=2000,initial_capital=10000) wma(float priceType,int length,float weight) => norm = 0.0 sum = 0.0 for i = 0 to length - 1 norm := norm + weight sum := sum + priceType[i] * weight sum / norm // This definition of volatility uses the high-low range divided by the average of that range. volatility(source,length) => h = ta.highest(source,length) l = ta.lowest(source,length) vx = 2 * (h - l) / (h + l) vx vm1 = input.int(100,"Average Length") volLen = input.int(100,"Volatility Length") vsrc = input.source(close,"Volatility Source") cross_type = input.source(close,"Exit Source") exit_type = input.string("Volatility MA",options=["Volatility MA","Range Crossover"],title="Exit Type") volatility = volatility(vsrc,volLen) highband1 = close + (close * volatility) lowband1 = close - (close * volatility) hb1 = wma(highband1,vm1,volatility) lb1 = wma(lowband1,vm1,volatility) hlavg = math.avg(hb1,lb1) upcross = ta.crossover(high,hb1) //Crossing over the high band of historical volatility signifies a bullish breakout dncross = ta.crossunder(low,lb1) //Crossing under the low band of historical volatility signifies a bearish breakout vlong = upcross vshort = dncross vlong_exit = switch exit_type == "Volatility MA" => ta.crossunder(cross_type,hlavg) exit_type == "Range Crossover" => ta.crossunder(cross_type,hb1) vshort_exit = switch exit_type == "Volatility MA" => ta.crossover(cross_type,hlavg) exit_type == "Range Crossover" => ta.crossover(cross_type,lb1) if vlong strategy.entry("Long",strategy.long) if vlong_exit strategy.close("Long") if vshort strategy.entry("Short",strategy.short) if vshort_exit strategy.close("Short") plot(hlavg,color=color.white,title="Weighted Volatility Moving Average") t = plot(hb1,color=color.new(color.red,50),title="Volatility Reversal Band - Top") b = plot(lb1,color=color.new(color.green,50),title="Volatility Reversal Band - Bottom") alertcondition(vlong,"Volatility Long Entry Signal") alertcondition(vlong_exit,"Volatility Long Exit Signal") alertcondition(vshort,"Volatility Short Entry Signal") alertcondition(vshort_exit,"Volatility Short Exit Signal") fill(t,b,color=color.new(color.aqua,90))