A Estratégia de Breakout do Canal Dinâmico é uma estratégia de seguimento de tendências. Ele usa o indicador do Canal Donchian para determinar dinamicamente os preços de compra e venda de breakout, combina o indicador ATR para definir pontos de stop loss e alcança a completa automação da geração de sinal comercial e saídas de stop loss.
O canal de Donchian é um indicador de canal dinâmico que forma bandas superiores e inferiores, calculando os preços mais altos e mais baixos durante um determinado período no passado.
Esta estratégia define o período do canal de Donchian em 20 dias. Quando o preço quebra o trilho superior, um sinal de compra é gerado, indicando que o mercado entrou em uma tendência de alta. Quando o preço cai abaixo do trilho inferior, um sinal de venda é gerado, indicando que o mercado entrou em uma tendência de queda.
O indicador ATR é a abreviatura de Average True Range, que reflete a amplitude média de flutuação de um determinado ativo durante um período recente.
Esta estratégia usa o indicador ATR de 20 dias para calcular o ponto de stop loss. Quanto maior o valor ATR, maior a flutuação do mercado, e mais distante o ponto de stop loss definido. Isso evita que o ponto de stop loss esteja muito perto e seja eliminado por pequenas flutuações do mercado.
Quando o preço atravessa a linha do meio do Canal de Donchian para cima, um sinal de compra é gerado. Quando o preço atravessa a linha do meio para baixo, um sinal de venda é gerado. Isso indica que o preço começou a atravessar este canal e entrar em uma nova rodada de tendência.
Ao mesmo tempo, combinado com o ponto de stop loss calculado pelo indicador ATR, quando a perda atingir o ponto de stop loss, a posição será activamente interrompida para controlar os riscos.
O canal de Donchian é um indicador de rastreamento de tendências. Ajustando dinamicamente a faixa do canal, esta estratégia pode rastrear automaticamente as mudanças nas tendências do mercado e gerar sinais de compra e venda em conformidade. Isso evita a subjetividade do julgamento manual e torna os sinais de negociação mais objetivos e confiáveis.
A estratégia contém regras longas e curtas, o que permite negociação bidirecional. Isso expande os ambientes de mercado onde a estratégia pode ser aplicada, permitindo rentabilidade em tendência ascendente e descendente.
O mecanismo de stop loss do indicador ATR pode controlar efetivamente a perda de uma única negociação. Isso é especialmente importante para a negociação quantitativa para garantir que as estratégias obtenham retornos positivos estáveis em eventos de alta probabilidade.
A estratégia do canal de Donchian tem algum risco de ser preso. Se o preço inverter e reentrar no canal sem uma perda de parada, podem ser incorridas perdas significativas. O mecanismo de perda de parada ATR nesta estratégia ajuda a mitigar esse risco.
Em reversões de tendência, o indicador do canal de Donchian gerará sinais errôneos. O usuário precisa prestar atenção às condições do mercado para evitar negociações às cegas quando ocorrem reversões de tendência significativas. Indicadores de julgamento de tendência podem ser adicionados para reduzir esse risco.
Os parâmetros do período do canal de Donchian e do ATR stop loss precisam ser otimizados, caso contrário, sinais incorretos excessivos podem ser gerados.
Os indicadores de avaliação da tendência, tais como as médias móveis, podem ser adicionados para evitar sinais errôneos em pontos de virada significativos da tendência.
Otimizar os parâmetros do canal de Donchian e do ATR para encontrar a melhor combinação.
Combinar outros indicadores de julgamento auxiliares, tais como padrões de candelabro e alterações no volume de negociação, para melhorar a precisão do sinal e reduzir transações de reversão desnecessárias.
A estratégia de ruptura dinâmica do canal localiza a direção da tendência através das bandas superior e inferior do canal de Donchian e gera sinais de negociação. O mecanismo de stop loss ATR controla o risco. Esta estratégia tem um alto grau de automação e é adequada para negociação quantitativa.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title = "dc", overlay = true) atrLength = input(title="ATR Length:", defval=20, minval=1) testStartYear = input(2018, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = input(2018, "Backtest Start Year") testEndMonth = input(12) testEndDay = input(31, "Backtest Start Day") testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testPeriod() => true //time >= testPeriodStart ? true : false dcPeriod = input(20, "Period") dcUpper = highest(close, dcPeriod)[1] dcLower = lowest(close, dcPeriod)[1] dcAverage = (dcUpper + dcLower) / 2 atrValue=atr(atrLength) useTakeProfit = na useStopLoss = na useTrailStop = na useTrailOffset = na Buy_stop = lowest(low[1],3) - atr(20)[1] / 3 plot(Buy_stop, color=red, title="buy_stoploss") Sell_stop = highest(high[1],3) + atr(20)[1] / 3 plot(Sell_stop, color=green, title="sell_stoploss") plot(dcLower, style=line, linewidth=3, color=red, offset=1) plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1) plot(dcAverage, color=yellow, style=line, linewidth=3, title="Mid-Line Average") strategy.entry("simpleBuy", strategy.long, when=(close > dcAverage) and cross(close,dcAverage)) strategy.close("simpleBuy",when=((close < dcAverage) and cross(close,dcAverage)) or ( close< Buy_stop)) strategy.entry("simpleSell", strategy.short,when=(close < dcAverage) and cross(close,dcAverage) ) strategy.close("simpleSell",when=((close > dcAverage) and cross(close,dcAverage)) or ( close > Sell_stop)) //strategy.exit("Exit simpleBuy", from_entry = "simpleBuy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset) //strategy.exit("Exit simpleSell", from_entry = "simpleSell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)