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.
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
As vantagens desta estratégia incluem:
O indicador do canal de Donchian é simples e fácil de entender.
O mecanismo de confirmação dupla efetivamente filtra falsas fugas e evita ser preso.
O período de revisão do canal pode ser personalizado para se adaptar aos diferentes ambientes de mercado.
A opção de venda a descoberto responde às necessidades de diferentes investidores.
O código é limpo e fácil de compreender para desenvolvimento.
Há também alguns riscos com esta estratégia:
A dupla confirmação pode fazer com que algumas oportunidades comerciais sejam perdidas.
A configuração inadequada dos períodos de canal pode resultar em negociações excessivamente frequentes ou escassas.
Os longos períodos de detenção podem não permitir controlar eficazmente os riscos.
Os riscos adicionais decorrentes da venda a descoberto devem ser observados.
A sobreajuste do teste de regresso deve ser tomada com cuidado.
Soluções correspondentes:
Desativar a confirmação dupla ou encurtar o intervalo de confirmação.
Otimizar os parâmetros e selecionar os períodos de canalização adequados.
Estabelecer um limite razoável de stop loss/profit por perda comercial.
Desativar a venda a curto prazo, só a venda a longo prazo.
Avaliação robusta da estratégia em diferentes ambientes de mercado.
As oportunidades de melhoria incluem:
Ajustar dinamicamente o dimensionamento das posições com base na volatilidade.
Filtrar falhas baseadas em métricas de intensidade de ruptura.
Incorporar um mecanismo de trailing stop para seguir as tendências.
Combine outros indicadores para determinar a direcção da tendência e evitar perder importantes pontos de virada.
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.
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)