Estratégia de tendência do canal Donchian de confirmação dupla

Autora:ChaoZhang, Data: 22-12-2023 10:55:06
Tags:

img

Resumo

Esta estratégia é desenvolvida com base no indicador padrão do Canal de Donchian. Espera por duas altas (ou baixas) consecutivas para confirmação por padrão antes de emitir sinais de negociação, a fim de evitar ser expulso por falsificações de market makers.

A estratégia também prevê a opção de desativar o mecanismo de confirmação dupla, de modo a que possa emitir sinais de negociação imediatamente após a observação de novos máximos ou mínimos.

Para as pessoas que não gostam de curto, existe também a opção de excluir posições curtas.

Estratégia lógica

A estratégia é baseada nas faixas superior e inferior do indicador do Canal de Donchian. A faixa superior é a maior alta nos últimos n bares, enquanto a faixa inferior é a menor baixa nos últimos n bares.

A faixa do meio é a média das faixas superior e inferior, e pode ser usada para medir a direção da tendência.

Quando o preço ultrapassa a faixa superior, a estratégia será longa se não houver uma posição longa existente.

Para filtrar falhas, a opção esperar por confirmação dupla está habilitada por padrão.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. O indicador do canal de Donchian é simples e fácil de entender.

  2. O mecanismo de confirmação dupla efetivamente filtra falsas fugas e evita ser preso.

  3. O período de revisão do canal pode ser personalizado para se adaptar aos diferentes ambientes de mercado.

  4. A opção de venda a descoberto responde às necessidades de diferentes investidores.

  5. O código é limpo e fácil de compreender para desenvolvimento.

Análise de riscos

Há também alguns riscos com esta estratégia:

  1. A dupla confirmação pode fazer com que algumas oportunidades comerciais sejam perdidas.

  2. A configuração inadequada dos períodos de canal pode resultar em negociações excessivamente frequentes ou escassas.

  3. Os longos períodos de detenção podem não permitir controlar eficazmente os riscos.

  4. Os riscos adicionais decorrentes da venda a descoberto devem ser observados.

  5. A sobreajuste do teste de regresso deve ser tomada com cuidado.

Soluções correspondentes:

  1. Desativar a confirmação dupla ou encurtar o intervalo de confirmação.

  2. Otimizar os parâmetros e selecionar os períodos de canalização adequados.

  3. Estabelecer um limite razoável de stop loss/profit por perda comercial.

  4. Desativar a venda a curto prazo, só a venda a longo prazo.

  5. Avaliação robusta da estratégia em diferentes ambientes de mercado.

Oportunidades de melhoria

As oportunidades de melhoria incluem:

  1. Ajustar dinamicamente o dimensionamento das posições com base na volatilidade.

  2. Filtrar falhas baseadas em métricas de intensidade de ruptura.

  3. Incorporar um mecanismo de trailing stop para seguir as tendências.

  4. Combine outros indicadores para determinar a direcção da tendência e evitar perder importantes pontos de virada.

  5. Optimização automática de parâmetros através de aprendizagem de máquina.

Estas melhorias podem melhorar ainda mais a estabilidade e a rentabilidade da estratégia.

Conclusão

Trata-se de uma estratégia simples, mas eficaz, baseada no mecanismo de confirmação dupla do canal Donchian.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Donchian Channels", shorttitle="DC", overlay=true, initial_capital=10000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_every_tick=true)
length = input(20, minval=1)
lower = lowest(length)
upper = highest(length)
basis = avg(upper, lower)
bool inShortPos = false
bool inLongPos = false
bool wait4confirmation = input(true, title="Wait for double confirmation?")
bool doShort = input(true, title="Include short positions")

plot(basis, "Basis", color=#FF6D00)
u = plot(upper, "Upper", color=#2962FF)
l = plot(lower, "Lower", color=#2962FF)
fill(u, l, color=color.rgb(33, 150, 243, 95), title="Background")

//if(inShortPos == false and inLongPos == false)
if(not inLongPos and upper > upper[1])
    if(wait4confirmation)
        if(not inLongPos and upper > upper[1] and upper[1] > upper[2])
            strategy.close("Short", true)
            strategy.entry("Buy", true)
    else
        strategy.close("Short", true)
        strategy.entry("Buy", true)
else
    if(not inShortPos and lower < lower[1])
        if(wait4confirmation)
            if(not inShortPos and lower < lower[1] and lower[1] < lower[2])
                strategy.close("Buy", true)
                if(doShort)
                    strategy.entry("Short", true)
        else
            strategy.close("Buy", true)
            if(doShort)
                strategy.entry("Short", true)

Mais.