Esta estrategia determina las señales de negociación basadas en el rango de fluctuación histórica de los precios. Calcula el diferencial entre los precios más altos y más bajos en un período determinado y forma un rango de fluctuación a través de una media móvil.
El indicador central de la estrategia es la fluctuación histórica de los precios.
Calcula la diferencia entre el precio más alto y el precio más bajo en el pasado de la raíz N de Bar, que se escribe como HL
Calcula el promedio de los precios más altos y más bajos en el pasado N raíz de Bar (avg ((H, L))
La tasa de fluctuación = HL / avg (H, L)
Donde N es el parámetro de “Volatility Length” ≠
Después de obtener la tasa de fluctuación, calcule la subida y bajada:
En la vía superior = cerrar actual + cerrar actual * tasa de fluctuación
Baja línea = cerrar actual - cerrar actual * fluctuación
La longitud media de las vías es el promedio de longitud de las vías.
Haga más cuando el precio rompa la vía; haga menos cuando el precio rompa la vía.
La señal de estabilidad se da según el parámetro “Exit Type”:
Cuando el tipo de salida es el MA de volatilidad, el precio vuelve a la posición de equilibrio de la línea media de la WMA;
Cuando Exit Type es un Range Crossover, el precio vuelve a la posición de equilibrio ascendente y descendente.
El riesgo puede reducirse con las siguientes medidas:
La estrategia puede ser optimizada en los siguientes aspectos:
Para encontrar la mejor combinación de parámetros, prueba los diferentes parámetros de Length.
Por ejemplo, cuando el precio se desvía, si el MACD también se desvía al mismo tiempo, la entrada se hace más.
Se puede optimizar para un trazado de pérdidas con elasticidad, en lugar de un simple rompimiento de pérdidas por intervalos.
Después de la salida de pérdidas, si la tendencia continúa, se pueden establecer condiciones de reingreso para volver a seguir la tendencia.
La posición de negociación puede ajustarse dinámicamente según la volatilidad del mercado.
En general, la estrategia es más adecuada para el comportamiento de la tendencia, para juzgar la dirección y la fuerza de la tendencia a través de los carriles y bajadas en la volatilidad, y para formar un intervalo de negociación más confiable con la línea media WMA, lo que genera puntos de venta y venta. Sin embargo, también hay algunos problemas, como el retraso en el juicio de la tendencia, el método de stop loss puede mejorarse, etc.
/*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))