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.
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.
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.
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.
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.
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)