Estratégia de ruptura do Canal de Donchian

Autora:ChaoZhang, Data: 2024-01-29 11:51:08
Tags:

img

Resumo

A estratégia de ruptura do canal Donchian é uma estratégia de tendência. Ela forma um canal de preços calculando os preços mais altos e mais baixos durante um determinado período de tempo e usa os limites do canal como sinais de compra e venda.

Estratégia lógica

Esta estratégia usa o indicador do canal de Donchian para determinar as tendências de preços e calcular os pontos de entrada e saída. O canal de Donchian consiste em um trilho superior, trilho inferior e trilho médio. O trilho superior é o preço mais alto em um determinado período, o trilho inferior é o preço mais baixo e o trilho médio é o preço médio.

Os comprimentos dos períodos de entrada e saída podem ser configurados independentemente. Quando o preço atravessa o trilho inferior para cima, ele vai longo. Quando o preço atravessa o trilho superior para baixo, ele vai curto. O ponto de saída é quando o preço toca o trilho correspondente novamente. O trilho médio também pode ser usado como uma linha de stop loss.

Além disso, a estratégia também define um ponto de lucro. O preço de lucro para posições longas é o preço de entrada multiplicado por (1 + porcentagem de lucro), e vice-versa para posições curtas.

Em resumo, ao julgar a tendência, esta estratégia garante espaço suficiente para definir paradas e obter lucros.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Lógica clara do sinal e geração de sinal simples/confiável.
  2. O indicador do canal de Donchian é insensível às flutuações de preços, o que ajuda a captar a tendência.
  3. Parâmetros de canal personalizáveis para atender a diferentes ativos e prazos.
  4. As funções de stop loss/take profit integradas controlam eficazmente o risco.
  5. Alto potencial de lucro para ativos voláteis como criptomoedas.

Análise de riscos

Os riscos desta estratégia incluem:

  1. Incapaz de evitar completamente os riscos de grandes oscilações de preços, apesar do stop loss.
  2. A configuração inadequada dos parâmetros pode conduzir a um excesso de negociação, aumentando os custos.
  3. Insensivel às flutuações de preços, pode perder algumas oportunidades comerciais.

Para atenuar os riscos acima referidos:

  1. Dimensão adequada das posições e diversificação dos ativos para controlar o risco global.
  2. Otimizar parâmetros para encontrar a melhor combinação, possivelmente usando aprendizado de máquina.
  3. Incorporar indicadores adicionais para determinar a fiabilidade do sinal.

Orientações de otimização

Esta estratégia pode ser melhorada nas seguintes dimensões:

  1. Testar e otimizar mais combinações de parâmetros para encontrar os valores ideais.
  2. Incorporar modelos de aprendizagem automática para identificar automaticamente parâmetros ótimos, por exemplo, utilizando aprendizagem por reforço.
  3. Combine outros indicadores como médias móveis e volume para determinar a tendência e a confiabilidade do sinal.
  4. Desenvolver estratégias de stop loss mais avançadas, por exemplo, trailing stop loss, Chandelier Exit, etc., para melhor controlar os riscos.
  5. Expandir a estratégia para mais classes de ativos para encontrar o melhor ajuste.

Conclusão

Em conclusão, a estratégia de ruptura do canal Donchian fornece sinais claros e riscos controláveis para a negociação de tendências. É especialmente adequado para ativos voláteis como criptomoedas com grande potencial de lucro. Há também possibilidades de otimizar ainda mais parâmetros e incorporar outros indicadores, que são vias para melhorias futuras. Com inovações contínuas, esta estratégia tem o potencial de se tornar uma importante estratégia de negociação algorítmica para criptomoedas.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © algotradingcc
// Strategy testing and optimisation for free trading bot 

//@version=4
strategy("Donchian Channel Strategy [for free bot]", overlay=true )

//Long optopns
buyPeriodEnter = input(10, "Channel Period for Long enter position")
buyPeriodExit = input(10, "Channel Period for Long exit position")
isMiddleBuy = input(true, "Is exit on Base Line? If 'no' - exit on bottom line")
takeProfitBuy = input(2.5, "Take Profit (%) for Long position")
isBuy = input(true, "Allow Long?")

//Short Options
sellPeriodEnter = input(20, "Channel Period for Short enter position")
sellPeriodExit = input(20, "Channel Period for Short exit position")
isMiddleSell = input(true, "Is exit on Base Line? If 'no' - exit on upper line")
takeProfitSell = input(2.5, "Take Profit (%) for Short position")
isSell = input(true, "Allow Short?")

// Test Start
startYear = input(2005, "Test Start Year")
startMonth = input(1, "Test Start Month")
startDay = input(1, "Test Start Day")
startTest = timestamp(startYear,startMonth,startDay,0,0)

//Test End
endYear = input(2050, "Test End Year")
endMonth = input(12, "Test End Month")
endDay = input(30, "Test End Day")
endTest = timestamp(endYear,endMonth,endDay,23,59)

timeRange = time > startTest and time < endTest ? true : false

// Long&Short Levels
BuyEnter = highest(buyPeriodEnter)
BuyExit = isMiddleBuy ? ((highest(buyPeriodExit) + lowest(buyPeriodExit)) / 2): lowest(buyPeriodExit)

SellEnter = lowest(sellPeriodEnter)
SellExit = isMiddleSell ? ((highest(sellPeriodExit) + lowest(sellPeriodExit)) / 2): highest(sellPeriodExit)

// Plot Data
plot(BuyEnter, style=plot.style_line, linewidth=2, color=color.blue, title="Buy Enter")
plot(BuyExit, style=plot.style_line, linewidth=1, color=color.blue, title="Buy Exit", transp=50)
plot(SellEnter, style=plot.style_line, linewidth=2, color=color.red, title="Sell Enter")
plot(SellExit, style=plot.style_line, linewidth=1, color=color.red, title="Sell Exit", transp=50)

// Calc Take Profits
TakeProfitBuy = 0.0
TakeProfitSell = 0.0
if strategy.position_size > 0
    TakeProfitBuy := strategy.position_avg_price*(1 + takeProfitBuy/100)
    
if strategy.position_size < 0
    TakeProfitSell := strategy.position_avg_price*(1 - takeProfitSell/100)

// Long Position    
if isBuy and timeRange
    strategy.entry("Long", strategy.long, stop = BuyEnter, when = strategy.position_size == 0) 
    
strategy.exit("Long Exit", "Long", stop=BuyExit, limit = TakeProfitBuy, when = strategy.position_size > 0)

// Short Position
if isSell and timeRange
    strategy.entry("Short", strategy.short, stop = SellEnter, when = strategy.position_size == 0) 
    
strategy.exit("Short Exit", "Short", stop=SellExit, limit = TakeProfitSell, when = strategy.position_size < 0)

// Close & Cancel when over End of the Test
if time > endTest
    strategy.close_all()
    strategy.cancel_all()


Mais.