Esta estratégia gera sinais de negociação com base na faixa de volatilidade histórica do preço. Ele calcula a diferença entre os preços mais altos e mais baixos em um determinado período, e forma uma faixa de volatilidade usando médias móveis. Os sinais de negociação são acionados quando o preço atravessa as bandas superiores ou inferiores da faixa.
O indicador principal é a volatilidade histórica do preço.
Calcular a diferença entre os preços mais altos e mais baixos ao longo dos últimos N bares, chamados HL
Calcular a média dos preços mais altos e mais baixos em N barras, avg ((H, L)
Volatilidade = HL/avg ((H, L)
Onde N é o parâmetro
Após obter a volatilidade, as faixas são calculadas como:
Faixa superior = Fechamento corrente + Fechamento corrente * Volatilidade
Faixa inferior = Fechamento corrente - Fechamento corrente * Volatilidade
As bandas são então suavizadas pela WMA com o período definido como
Quando o preço ultrapassa a faixa superior, vá longo.
Os sinais de saída são definidos por
Se o Tipo de Saída for MA de Volatilidade, sair quando o preço cruzar novamente abaixo da WMA.
Se o Tipo de Saída for Range Crossover, saia quando o preço cruzar de volta abaixo das faixas.
Os riscos podem ser reduzidos:
A estratégia pode ser melhorada:
Teste diferentes valores de comprimento para encontrar combinações ideais.
Por exemplo, quando o preço ultrapassa a faixa superior, verifique se o MACD também cruza em ouro.
Otimizando para paradas traseiras em vez de simples paradas de interrupção de alcance.
Definir regras de reentrada para detectar tendências novamente após paradas.
Ajustar dinamicamente os tamanhos com base na volatilidade do mercado.
Esta estratégia funciona bem para mercados de tendências em geral, usando bandas baseadas em volatilidade para medir a força da tendência e WMA para formar intervalos de negociação confiáveis para sinais 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))