Tendência ATR Seguindo uma estratégia baseada no canal de desvio padrão

Autora:ChaoZhang, Data: 2024-01-05 16:34:27
Tags:

img

Resumo

Esta estratégia chamada ATR Trend Following Strategy é uma estratégia de negociação baseada na média de True Range (ATR) para stop loss e canal de desvio padrão para sinais de entrada.

Lógica de negociação

A estratégia usa o indicador ATR para definir o preço de stop loss. ATR reflete a volatilidade do mercado e pode ser usado para definir dinamicamente a distância de stop loss. A estratégia calcula o valor ATR com base no período de entrada do usuário ATR e multiplicador, e usa o valor ATR multiplicado pelo multiplicador como distância de stop loss. Especificamente, a fórmula de cálculo do trailing stop do ATR é:

ATR Line = Prior ATR Line ± nLoss (nLoss = nATRMultip * ATR value)  

If close > ATR Line, adjust ATR Line up to close - nLoss
If close < ATR Line, adjust ATR Line down to close + nLoss

A linha ATR pode, deste modo, ajustar-se dinamicamente com base na flutuação dos preços para atingir a tendência após o stop loss.

Além do ATR trailing stop, a estratégia também usa o canal de desvio padrão para determinar os sinais de entrada.

Middle Line = ATR Trailing Stop Line   
Upper Band = Middle Line + n * Standard Deviation
Lower Band = Middle Line - n * Standard Deviation

Vá longo quando o preço quebra a linha média para cima. Vá curto quando o preço quebra a linha média para baixo.

Vantagens

A maior vantagem desta estratégia é que utiliza o indicador ATR para definir o stop loss de forma dinâmica com base na volatilidade do mercado, permitindo uma tendência após o stop loss e um controlo eficaz do risco.

Além disso, a utilização de um canal de desvio padrão para os sinais de entrada evita a abertura frequente de posições devido a pequenas flutuações de preços.

Riscos e soluções

O principal risco é que, se a distância de stop loss for muito grande, não poderá controlar o risco de forma eficaz, mas se for muito pequena, pode ser facilmente interrompida pelo ruído do mercado.

Outro risco são os parâmetros de canal de desvio padrão inadequados, levando a uma frequência de entrada excessivamente alta/baixa.

Oportunidades de melhoria

A estratégia pode ser reforçada pelos seguintes aspectos:

  1. Otimizar o período de ATR e o multiplicador para obter um melhor efeito de stop loss.

  2. Otimizar os parâmetros do canal de desvio padrão para melhores sinais de entrada.

  3. Adicionar outros indicadores para filtragem, por exemplo, média móvel, padrões de velas, etc., para ajudar a avaliar a direção da tendência e melhorar a rentabilidade.

  4. Otimizar a lógica de entrada e saída, por exemplo, abrir posições apenas após confirmar o padrão de candelabro quando o preço atingir as faixas de canal.

Resumo

A estratégia atinge tendência após stop loss com base no indicador ATR e usa o canal de desvio padrão para sinais de entrada. Suas vantagens estão em uma boa capacidade de controle de risco para a negociação de tendência. Os riscos e melhorias também são claramente analisados. A estratégia vale mais testes e otimização e tem valor comercial prático.


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



Mais.