Estratégia de ruptura de impulso com parada de volatilidade

Autora:ChaoZhang, Data: 2023-11-13 17:20:51
Tags:

img

Resumo

Esta é uma estratégia de seguimento de tendências baseada em breakout e stop de volatilidade. A estratégia identifica a direção da tendência por quebra de preço da linha de stop loss dinâmica. Ela entra no comércio quando o preço penetra a linha de stop loss e usa a linha de stop loss para rastrear tendências e bloquear lucros. A estratégia visa capturar tendências de médio e longo prazo enquanto controla o risco com paradas dinâmicas.

Estratégia lógica

A estratégia utiliza o indicador de parada de volatilidade para determinar a direção da tendência e rastrear a perda de parada.

  1. Calcular o ATR (Range verdadeiro médio) do preço
  2. Obter linha de stop loss multiplicando ATR com um coeficiente de stop loss
  3. Quando o preço sobe, registro preço mais alto, linha de stop loss é o preço mais alto menos ATR * coeficiente
  4. Quando o preço desce, registro preço mais baixo, linha de stop loss é o preço mais baixo mais ATR * coeficiente

A linha de stop loss flutua para cima e para baixo com o preço, formando um canal dinâmico.

Quando o preço penetra a linha de stop loss, ele sinaliza uma inversão de tendência.

  • Quando o preço quebra acima da linha de stop loss, vá longo
  • Quando o preço quebra abaixo da linha de stop loss, vá curto

Após a abertura da posição, a estratégia segue a linha stop loss:

  • Para longo, stop loss é o preço mais alto menos ATR * coeficiente
  • Em resumo, stop loss é o preço mais baixo mais ATR * coeficiente

Quando o preço atingir a linha de stop loss novamente, a posição será fechada.

Desta forma, a estratégia pode seguir as tendências em tempo útil, controlando o risco com paradas.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Pode captar inversões de tendência em tempo útil e seguir a tendência
  2. Utiliza o stop loss dinâmico para ajustar a posição stop com base na volatilidade do mercado
  3. Atualizações de stop loss com tendência para bloquear lucros máximos
  4. Cavalga a tendência para alcançar lucros significativos
  5. Controla eficazmente o risco e evita perdas enormes

Análise de riscos

Há também alguns riscos a considerar:

  1. A posição de paragem pode ser ativada com frequência durante os mercados variáveis
  2. Precisa de definir o coeficiente de stop loss adequado, muito pequeno pode ser muito sensível
  3. As taxas de negociação podem consumir os lucros com negociações frequentes
  4. Pode perder alguns lucros na fase inicial das tendências
  5. Risco quando o stop loss estiver muito longe do preço

Soluções:

  1. Otimizar o coeficiente de perda de parada através de backtest para encontrar o melhor parâmetro
  2. Usar prazos mais longos para reduzir a frequência de negociação
  3. Adicionar filtro para evitar excesso de negociação
  4. Permitir alguma flexibilidade na distância de parada, mas não muito grande

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Otimizar o coeficiente de stop loss para encontrar a melhor combinação de parâmetros
  2. Adicionar filtros para evitar whipssaws no mercado variando
  3. Combinar vários prazos para a verificação do sinal
  4. Otimizar o dimensionamento da posição, aumentar gradualmente o tamanho
  5. Considere o ajuste dinâmico do prazo
  6. Combinar com os fundamentos das ações para captar as principais tendências

Resumo

Em geral, esta estratégia de ruptura de momento com parada de volatilidade é um sistema de tendência muito prático. Pode capturar oportunidades de reversão de tendência e seguir a tendência, controlando o risco efetivamente com paradas dinâmicas. Com ajuste adequado dos parâmetros, pode alcançar um bom retorno durante os mercados de tendência. Mas algumas questões precisam ser abordadas, como paradas excessivamente sensíveis, alta frequência de negociação, etc. Outras otimizações podem transformá-lo em uma estratégia de negociação quantitativa eficiente e robusta.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-11-12 00:00:00
period: 3m
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/
//@version=4
strategy(shorttitle='Volatility Stop Strategy',title='Volatility Stop Strategy (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h
// Best time frame 2H

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


//Entry 


strategy.entry(id="long", long = true, when = crossover(close, vStop) and window())

//Exit
strategy.close("long", when = crossunder(close, vStop))

plot(vStop,"Vstop", color.black, linewidth=2)


Mais.