Estratégia de acompanhamento de tendências com base em ATR e índice de volatilidade


Data de criação: 2024-01-04 15:31:34 última modificação: 2024-01-04 15:31:34
cópia: 1 Cliques: 590
1
focar em
1621
Seguidores

Estratégia de acompanhamento de tendências com base em ATR e índice de volatilidade

Visão geral

A estratégia usa a amplitude real média (ATR) e o índice de volatilidade (CHOP) como principais indicadores técnicos para identificar e acompanhar a tendência. Quando o índice entra em declínio, a combinação da direção da tendência serve como sinal de entrada; quando o índice entra novamente na área de banda, tome uma posição de parada ou parada de saída.

Princípio da estratégia

  1. Utilize o ATR para calcular o tamanho do casco, construir o canal de Ripple e determinar a direção da tendência de preços.
  2. Aplicar o indicador CHOP para determinar se o mercado é adequado para a negociação, que combina o preço máximo, o preço mínimo e o ATR, indicando que o mercado está flutuando devagar quando está na faixa de 38.2-61.8; caso contrário, indica que o mercado está flutuando muito e não é adequado para a negociação.
  3. Quando o indicador CHOP quebra a trajectória superior de 61.8 para baixo, o preço entra em uma tendência de queda, e se o EMA rápido de curto prazo também mostra a liderança do preço, o preço faz um curto; ao contrário, quando o CHOP quebra a trajectória inferior de 38.2 para cima e o preço do EMA curto prazo sobe, faz mais.
  4. Usar uma estratégia de stop loss para parar ou parar quando o preço reentrar na zona de 38.2-61.8 da CHOP.

Análise de vantagens estratégicas

A estratégia, combinada com o discernimento de tendências e o controle da volatilidade, permite capturar tendências de preços e controlar o risco, uma estratégia de acompanhamento de tendências relativamente estável.

  1. A aplicação do canal Ripple construído pelo ATR permite um acompanhamento eficaz da tendência dos preços.
  2. O indicador CHOP é usado para avaliar a volatilidade do mercado e evitar erros de negociação em situações de alta volatilidade.
  3. Combinado com uma rápida EMA para determinar a direção de uma tendência de curto prazo, evita-se uma operação inversa.
  4. A estratégia de stop loss controla a perda individual.

Análise de Riscos

Os principais riscos da estratégia são:

  1. Em situações de choque, o canal ATR e o indicador CHOP podem gerar sinais errados. Os parâmetros podem ser adequadamente ajustados para eliminar os sinais errados.
  2. Um único conjunto de indicadores técnicos não pode evitar completamente os prejuízos e requer intervenção humana para determinar as grandes tendências.
  3. A posição de stop loss é muito relaxada e a perda individual pode ser excessiva. A amplitude de stop loss deve ser apropriadamente reduzida.

Direção de otimização da estratégia

A estratégia pode ser melhorada em vários aspectos:

  1. A adição de outros indicadores auxiliares para determinar o sinal, como a forma da linha K, o volume de transação, etc., aumenta a precisão do sinal.
  2. Optimizar os parâmetros do ATR e do CHOP para melhor capturar as flutuações de preços.
  3. Configure a posição de parada de perda dinâmica para que o espaço de parada seja maior e a perda seja mais rápida.
  4. Depois de julgar a tendência em grande escala, a largura de suspensão de perda apropriada para obter mais lucro na tendência.

Resumir

A estratégia integra indicadores técnicos comuns, é simples e prática. Com a otimização do ajuste de parâmetros, pode-se obter bons efeitos de acompanhamento. Mas ainda é necessário avaliar as grandes tendências manualmente e não pode ser totalmente automatizada. Pode ser usada como uma ferramenta de decisão auxiliar e também pode ser usada como referência para outras estratégias.

Código-fonte da estratégia
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 00:00:00
period: 1d
basePeriod: 1h
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/
// © sharatgbhat

//@version=4
strategy("Weis Chop Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500)
maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float)
// strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating = input(defval=false, type=input.bool, title="Oscillating")
normalize = input(defval=false, type=input.bool, title="Normalize")
vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close / methodvalue

currclose = float(na)
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = int(na)
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol / barcount : vol

plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume")

length = input(14, minval=1)
ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length)
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(ci, "CHOP", color=#2962FF, offset = offset)
band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background")

MomentumBull = close>ema(close,8)
MomentumBear = close<ema(close,8)
Tradecon = crossunder(ci,61.8)

if (MomentumBull and directionIsUp and Tradecon)
	strategy.entry("Buy", strategy.long)
if (MomentumBear and directionIsDown and Tradecon )
    strategy.entry("Sell", strategy.short)
    strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10)
    strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)