Estratégia de ruptura do Canal de Donchian

Autora:ChaoZhang, Data: 2023-09-19 21:47:41
Tags:

Resumo

Esta estratégia utiliza o indicador do canal de Donchian para negociar breakouts das faixas superior e inferior, permitindo a tendência de seguir operações em ações/futuros/cripto/forex, etc., pertencentes a estratégias de breakout de tendência de médio a longo prazo.

Estratégia lógica

  1. Calcular o máximo máximo e o mínimo mínimo durante um determinado período (por exemplo, 20 dias) para obter as faixas superior e inferior.

  2. A linha média é a média das faixas superior e inferior.

  3. Quando o preço fechar acima da faixa superior, determine que a tendência de alta começou, vá longo para entrar.

  4. Quando o preço for abaixo da linha média, tire lucro para sair.

  5. Pode fazer referência ao período de tempo do backtest para gerar sinais comerciais reais.

  6. Opcionalmente, a quebra da banda inferior também pode atuar como sinal de curto-circuito.

A estratégia determina o início da tendência por rupturas do canal, usa a linha média como saída de lucro, capturando tendências de médio a longo prazo.

Análise das vantagens

  1. O canal de Donchian é simples de calcular e implementar.

  2. A ruptura do canal de preços sinaliza mudança de tendência.

  3. A linha média como nível de lucro é razoavelmente definida.

  4. Regras claras, fáceis de executar.

  5. Pode ajustar de forma flexível os parâmetros do canal para diferentes produtos e prazos.

  6. Pode avaliar o desempenho comercial a longo prazo ou a curto prazo.

  7. Grande espaço de expansão, pode introduzir outros indicadores técnicos.

Análise de riscos

  1. A fuga do canal pode atrasar-se, arriscando perder oportunidades iniciais.

  2. Não considera a divergência antes da ruptura, pode gerar sinais falsos.

  3. O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.

  4. Um período de backtest inadequado corre o risco de sobreajuste.

  5. Falta de stop loss, precisa de ter cuidado com perdas aumentadas.

Orientações de otimização

  1. Teste e otimize os parâmetros do período do canal.

  2. A classificação dos instrumentos de dívida deve ser efetuada de acordo com o método de classificação do instrumento de dívida.

  3. Adicione filtros como indicadores de volume.

  4. Adicionar mecanismos de stop loss em movimento ou em atraso.

  5. Introduzir aprendizagem de máquina para prever a ruptura dos preços.

  6. Otimizar a gestão do dinheiro, definir o rácio de lucro, etc.

  7. Considerar a combinação de operações a longo/curto prazo ou de vários produtos.

Resumo

Esta estratégia usa o canal Donchian para determinar a direção da tendência, breakouts de negociação, uma tendência típica de médio a longo prazo seguindo a abordagem.


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-15 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2)
//stock strategy
strategy(title = "dc", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=.005)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100,  overlay = true, commission_type=strategy.commission.percent,commission_value=.25,default_qty_value=10000)


testStartYear = input(2000, "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, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)


testPeriod() =>
    true
    //time >= testPeriodStart  ? true : false

dcPeriod = 20

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=yellow, style=line, linewidth=1, title="Mid-Line Average")

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



Mais.