Estratégia de acompanhamento da tendência do canal Donchian

Autora:ChaoZhang, Data: 2023-11-06 15:52:56
Tags:

img

Resumo

A estratégia de rastreamento de tendências do canal de Donchian é uma estratégia de rastreamento de tendências baseada no indicador do canal de Donchian.

Estratégia lógica

A estratégia define primeiro o intervalo de tempo de backtesting e, em seguida, define as regras de entrada longa e curta.

Para posições longas, abrir longs quando o preço ultrapassar a faixa superior do Canal de Donchian; fechar longs quando o preço ultrapassar a faixa inferior.

Para posições curtas, abrir curto quando o preço ultrapassa a faixa inferior do Canal de Donchian; fechar curto quando o preço ultrapassa a faixa superior.

A estratégia também incorpora o indicador ATR para definir o mecanismo de saída de stop loss.

O valor da posição em risco deve ser calculado de acordo com o método de cálculo da posição em risco, em conformidade com o método de cálculo da posição em risco.

A estratégia também traça as bandas superior e inferior do Canal de Donchian e a linha de stop loss ATR para formar um sistema de negociação completo.

Vantagens

  • Use o canal Donchian para determinar a direção da tendência, com alguma capacidade de rastreamento da tendência.

  • O parâmetro do canal de Donchian é ajustável, permitindo a otimização de parâmetros para encontrar a melhor combinação de parâmetros.

  • O mecanismo de stop loss com ATR pode controlar eficazmente os riscos.

  • As regras de negociação longas e curtas são simples e fáceis de entender, adequadas para iniciantes.

  • A estrutura do código é clara e fácil de compreender e modificar.

Riscos

  • O Canal de Donchian pode ter algumas trocas de serras durante as flutuações de preços de gama.

  • A configuração inadequada do intervalo de perda de travagem ATR pode causar perda de travagem demasiado larga ou demasiado sensível.

  • As posições longas e curtas podem ser demasiado concentradas, exigindo regras de dimensionamento das posições.

  • A estratégia deve ser testada para aplicabilidade em diferentes produtos, com otimização de parâmetros independentes.

  • Os custos de negociação também devem ser considerados, os parâmetros podem precisar de ajustamento em ambientes de alto custo.

Oportunidades de melhoria

  • Otimizar os parâmetros do período do canal de Donchian para encontrar a melhor combinação de parâmetros.

  • Tente diferentes coeficientes ATR para encontrar o intervalo de perda de parada ideal.

  • Tente introduzir stop loss de trailing em cima do stop loss ATR para bloquear os lucros.

  • Ajustar o rácio posição longa/curta com base nas condições de mercado.

  • Teste a robustez dos parâmetros em diferentes produtos para encontrar parâmetros genéricos.

  • Estudo incorporando o MACD e outros filtros para melhorar a estabilidade.

  • Teste a adaptabilidade dos parâmetros em diferentes ambientes de custos de negociação.

Resumo

Em resumo, esta é uma estratégia de rastreamento de tendências relativamente simples que se concentra na aplicação do canal de Donchian. A vantagem reside em sua simplicidade e facilidade de compreensão, tornando-a adequada para fins de aprendizado, mas os parâmetros e riscos ainda precisam de otimização adicional.


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 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/
// © kriswaters

//@version=4
strategy("Donchian Channels Strategy by KrisWaters", overlay=true ) 

// Date filter
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2017, title = "From Year", minval = 1900)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// Strategy Settings
canEnterLong = input(true, title="Can Enter Long Position")
canEnterShort = input(false, title="Can Enter Short Position")

showLongChannel = input(true, title="Show Donchian Long Channels")
showShortChannel = input(false , title="Show Donchian Short Channels")

useAtrAsStopRule = input(false, title="Enable ATR Stop Rule") 

// DonCcian Channel Lengths
longUpperLength = input(20, minval=1)
longLowerLength = input(10, minval=1)

shortUpperLength = input(10, minval=1)
shortLowerLength = input(20, minval=1)

// Donchian indicator calculations
longUpperValue = highest(high,longUpperLength)
longLowerValue = lowest(low,longLowerLength)

shortUpperValue = highest(high,shortUpperLength)
shortLowerValue = lowest(low,shortLowerLength)

// Plot Donchian Channels
uLong = plot(showLongChannel ? longUpperValue : na, color=color.green, offset=1)
lLong = plot(showLongChannel ? longLowerValue : na, color=color.green, offset=1)

uShort = plot(showShortChannel ? shortUpperValue : na, color=color.red, offset=1)
lShort = plot(showShortChannel ? shortLowerValue : na, color=color.red, offset=1)

// Styling
fill(uLong,lLong, color=color.green, transp=95, title="Long Arkaplan")
fill(uShort,lShort, color=color.red, transp=95, title="Short Arkaplan")

// Stop-loss value calculations
atrMultiplier = 2.0
atrValue = atr(20)
longStopValue = open - (atrMultiplier*atrValue)
shortStopValue = open + (atrMultiplier*atrValue)

// Plot stop-loss line
plot(useAtrAsStopRule ? longStopValue : na, color=color.red, linewidth=2, offset=1)
plot(useAtrAsStopRule ? shortStopValue : na, color=color.red, linewidth=2, offset=1)

// Long and Short Position Rules
if canEnterLong and na(longUpperValue) != true and na(longLowerValue) != true and window()
    strategy.entry("Long", true, stop=longUpperValue)
    strategy.exit("Long Exit", "Long", stop=useAtrAsStopRule ? max(longLowerValue,longStopValue) : longLowerValue)
    
if canEnterShort and na(shortUpperValue) != true and na(shortLowerValue) != true and window()
    strategy.entry("Short", false, stop=shortLowerValue)
    strategy.exit("Short Exit", "Short", stop=useAtrAsStopRule ? min(shortUpperValue,shortStopValue) : shortUpperValue)
    


Mais.