Estratégia de ruptura do Canal de Donchian

Autora:ChaoZhang, Data: 2024-02-26 14:55:04
Tags:

img

Resumo

A estratégia de ruptura do canal de Donchian é uma estratégia de tendência baseada em canais de preços.

Estratégia lógica

A estratégia primeiro calcula a média móvel da linha alta, baixa e média dos preços durante um determinado período. As bandas superior e inferior formam o canal de preços, enquanto a linha média fica no meio do canal. Quando o preço quebra acima da linha média, ele sinaliza uma tendência ascendente e vai longo. Quando o preço quebra abaixo da linha média, ele sinaliza uma tendência descendente e vai curto.

Em especial, a estratégia consiste nas seguintes etapas:

  1. Calcular o máximo máximo de 20 períodos, ou seja, dcUpper;
  2. Calcular o mínimo mínimo de 20 períodos, ou seja, dcLower;
  3. Calcular a média de dcUpper e dcLower para obter dcAverage, como linha média do canal;
  4. Plot dcUpper, dcLower, e dcAverage para formar o canal de Donchian;
  5. Ir longo quando o fechamento estiver acima da linha média dcAveragem e ir curto quando o fechamento estiver abaixo dcAveragem;
  6. Regras de saída: se o close estiver abaixo da faixa inferior dcMenos quando longo, fechar posição longa; se o close estiver acima da linha do meio dcMédia quando curto, fechar posição curta.

A lógica acima descreve o princípio básico de negociação da estratégia - capturar tendências por rupturas de preços e mudar de direção em pontos pivô.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Base teórica sólida - a utilização de canais de preços para determinar tendências é uma abordagem comprovada de análise técnica;
  2. Uma lógica simples e clara, fácil de compreender e implementar;
  3. Sistema baseado em breakout com muitas oportunidades de seguir tendências, estratégias de negociação quantitativas adequadas;
  4. Mecanismo de stop loss claro para limitar as perdas de transações individuais;
  5. Flexibilidade - os parâmetros podem ser ajustados para diferentes ambientes de mercado.

Análise de riscos

Há também alguns riscos:

  1. A alta frequência de negociação leva a custos e deslizamentos mais elevados;
  2. A colocação inadequada de um stop loss provoca perdas superiores ao stop loss;
  3. Os parâmetros inadequados conduzem a sinais ausentes ou falsos;
  4. As falhas da ruptura tardia da tendência resultam em perdas.

Soluções:

  1. Otimizar os parâmetros e controlar a frequência do comércio;
  2. Melhorar a lógica de stop loss para evitar perdas excessivas;
  3. Ensaiar em diferentes ambientes e ajustar os parâmetros;
  4. Adicione filtros para evitar falhas de ruptura de tendência tardia.

Orientações de otimização

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Adicionar métricas de estrutura de mercado para evitar a negociação contra as principais tendências;
  2. Aumentar a filtragem do sinal para garantir a validade da fuga e reduzir os falsos sinais;
  3. Incorporar métricas de volatilidade para avaliar a intensidade da ruptura;
  4. Aplicar análises de vários prazos ou de vários ativos para melhorar a robustez;
  5. Utilize o aprendizado de máquina para ajustar automaticamente os parâmetros adaptados aos mercados em mudança.

Conclusão

Em conclusão, a estratégia de breakout do canal Donchian é um sistema eficaz de seguimento de tendências, com base teórica sólida, lógica simples e capacidade de acompanhar tendências através de breakouts.


/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3

strategy(title = "dc", overlay = true)


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

plot(dcLower, style=line, linewidth=3, color=red, offset=1)
plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1)

plot(dcAverage, color=black, style=line, linewidth=3, title="Mid-Line Average")

strategy.entry("simpleBuy", strategy.long, when=close > dcAverage)
strategy.close("simpleBuy",when=close < dcLower)
    
strategy.entry("simpleSell", strategy.short,when=close < dcAverage)
strategy.close("simpleSell",when=close > dcAverage)
    



Mais.