Estratégia de negociação de ruptura do intervalo de volatilidade

Autora:ChaoZhang, Data: 23 de janeiro de 2021
Tags:

Resumo

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.

Estratégia lógica

O indicador principal é a volatilidade histórica do preço.

  1. Calcular a diferença entre os preços mais altos e mais baixos ao longo dos últimos N bares, chamados HL

  2. Calcular a média dos preços mais altos e mais baixos em N barras, avg ((H, L)

  3. Volatilidade = HL/avg ((H, L)

Onde N é o parâmetro Duração de volatilidade.

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 Duração Média.

Quando o preço ultrapassa a faixa superior, vá longo.

Os sinais de saída são definidos por Tipos de saída:

  1. Se o Tipo de Saída for MA de Volatilidade, sair quando o preço cruzar novamente abaixo da WMA.

  2. Se o Tipo de Saída for Range Crossover, saia quando o preço cruzar de volta abaixo das faixas.

Vantagens

  • A volatilidade apanha os movimentos de tendência bem
  • A WMA torna as bandas mais estáveis e confiáveis
  • Os sinais de ruptura captam a tendência de mudanças oportunas
  • As saídas baseadas em WMA/bandas reduzem as perdas rapidamente
  • Muito espaço para ajustes de parâmetros para diferentes mercados

Riscos

  • Breakouts podem causar reversão de preços
  • Risco de grandes perdas em caso de reversão da tendência
  • A WMA às vezes atrasa na detecção de voltas de tendência
  • A otimização de parâmetros não é fácil, requer muita tentativa e erro
  • Maiores saques, necessidade de uma boa gestão dos riscos

Os riscos podem ser reduzidos:

  • Optimização dos parâmetros para bandas mais fiáveis
  • Adicionar outros indicadores para evitar problemas
  • Dimensões menores e melhor gestão dos riscos
  • Considerando reentrada

Orientações de otimização

A estratégia pode ser melhorada:

  1. Ajuste de parâmetros

Teste diferentes valores de comprimento para encontrar combinações ideais.

  1. Adição de outros indicadores

Por exemplo, quando o preço ultrapassa a faixa superior, verifique se o MACD também cruza em ouro.

  1. É melhor parar de perder

Otimizando para paradas traseiras em vez de simples paradas de interrupção de alcance.

  1. Reentrada

Definir regras de reentrada para detectar tendências novamente após paradas.

  1. Dimensão da posição

Ajustar dinamicamente os tamanhos com base na volatilidade do mercado.

Resumo

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))

Mais.