Estratégia de negociação de acompanhamento de tendências com base em canais de ATR e desvio padrão


Data de criação: 2024-01-05 16:34:27 última modificação: 2024-01-05 16:34:27
cópia: 0 Cliques: 931
1
focar em
1617
Seguidores

Estratégia de negociação de acompanhamento de tendências com base em canais de ATR e desvio padrão

Visão geral

Esta estratégia, denominada estratégia de acompanhamento de tendências ATR, é uma estratégia de negociação de acompanhamento de tendências baseada em um stop loss baseado na amplitude real média de flutuação (ATR) e usa o canal de diferença padrão para determinar o momento de entrada no mercado. A estratégia se aplica a produtos financeiros com tendências evidentes, como índices de ações, divisas e mercadorias.

Princípio da estratégia

A estratégia usa o indicador ATR para definir o preço de parada. O indicador ATR reflete a volatilidade do mercado e pode definir dinamicamente a distância de parada. A estratégia calcula o valor do ATR inserindo o ciclo ATR e o múltiplo, e depois multiplica o múltiplo como a distância de parada.

ATR线 = 前一日ATR线 ± nLoss(nLoss = nATRMultip * ATR值)

若收盘价 > ATR线,ATR线上调至收盘价 - nLoss 
若收盘价 < ATR线,ATR线下调至收盘价 + nLoss

Assim, a linha ATR pode se ajustar dinamicamente de acordo com as flutuações de preços, permitindo um stop loss de acompanhamento de tendência.

Além de ATR stop loss, a estratégia também usa o canal de diferença padrão para determinar o tempo de entrada no mercado. A fórmula de cálculo do canal de diferença padrão é:

中线 = ATR止损线
上轨 = 中线 + n倍标准差
下轨 = 中线 - n倍标准差  

Faça mais quando o preço atravessa a linha média de baixo para cima; faça menos quando o preço atravessa a linha média de cima para baixo.

Vantagens estratégicas

A maior vantagem desta estratégia é que, usando o indicador ATR como uma ferramenta de stop loss, é possível ajustar dinamicamente a distância de stop loss de acordo com a volatilidade do mercado, permitindo o stop loss de acompanhamento de tendências e o controle efetivo do risco.

Além disso, combinado com o tempo de entrada em mercado do canal de diferenciação padrão, pode evitar a abertura frequente de posições devido a pequenas oscilações de preços.

Riscos e soluções

O principal risco desta estratégia é que o risco não pode ser controlado efetivamente se a distância de parada for muito longa; a distância de parada é fácil de ser interrompida pelo ruído do mercado. Para esse risco, o ciclo ATR e o múltiplo ATR podem ser ajustados para encontrar a melhor combinação de parâmetros.

Outro risco é que os parâmetros do canal de desvio padrão não sejam configurados corretamente, o que pode levar a uma frequência de abertura de posição muito alta ou muito baixa. Os parâmetros mais ótimos podem ser encontrados através da otimização dos parâmetros.

Direção de otimização

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

  1. Otimizar o ciclo e o múltiplo do ATR. Ajustar esses dois parâmetros pode obter um melhor efeito de parada de perda.

  2. Optimizar os parâmetros do canal de desvios padrão. Optimizar os parâmetros do canal para obter melhores efeitos de entrada no mercado.

  3. Adicionar filtros de outros indicadores. Pode-se adicionar indicadores como a média móvel, a forma de linha K, auxiliando a direção da tendência e aumentando a taxa de ganho.

  4. Optimizar a lógica de abertura e paz de posição. Pode-se definir que o preço toque o canal de diferença padrão e abra a posição somente depois de confirmar novamente a forma da linha K.

Resumir

Esta estratégia baseia-se no indicador ATR para realizar stop loss de acompanhamento de tendências e auxiliar a hora de entrada no mercado com o canal de diferença padrão. A vantagem da estratégia é que o controle de risco de stop loss é bom e adequado para negociação de tendências.

Código-fonte da estratégia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version = 2
strategy(title="Average True Range Strategy", overlay = true)
nATRPeriod = input(11) //Hur många perioder ATR är på
nATRMultip = input(0.5) //Hur många gånger nuvarande ATR multipliceras med
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop =  iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
                     iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
                      iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos = iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), -1,
	   iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), 1, nz(pos[1], 0))) 

stdev3 = 14*stdev(xATR, nATRPeriod)
band1 = xATRTrailingStop+stdev3 //Översta stdev bandet
band2 = xATRTrailingStop-stdev3 //Nedersta stdev bandet


// Datum och tid
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2013, title = "From Year", minval = 2013)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start 
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest slut
startTimeOk()  => true
initial_capital = 100000

take = close > xATRTrailingStop

if( startTimeOk() ) and (pos == 1)
//if (pos == 1) 
    strategy.entry("Long", strategy.long, comment = "KOP")
    strategy.exit("Long", when = take)
   
if( startTimeOk() ) and (pos == -1)
//if (pos == -1)
    strategy.entry("Short", strategy.short, comment = "SALJ")
   
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(xATRTrailingStop, color=red, title="ATR Trailing Stop") //Mittersta linjen som är triggerlinjen för köp/sälj
plot(band1, color=red)
plot(band2, color=blue)