Stratégie de rupture du canal de Donchian

Auteur:ChaoZhang est là., Date: 14 septembre 2023 à 14 h 44
Les étiquettes:

La logique de la stratégie

La stratégie de rupture du canal de Donchian est une stratégie de suivi de tendance basée sur le canal de Donchian.

Les règles d'entrée sont les suivantes: aller long lorsque le prix dépasse le plus haut niveau au cours d'une période de réflexion (par exemple, 20 jours) et aller court lorsque le prix dépasse le plus bas niveau au cours d'une autre période de réflexion (par exemple, 10 jours).

Les règles de sortie sont les suivantes: les positions longues sont arrêtées au milieu ou à la partie inférieure du canal; les positions courtes sont arrêtées au milieu ou à la partie supérieure du canal.

Par exemple, la négociation de BTCUSDT avec les paramètres suivants:

  • Période de révision des entrées: 20 jours
  • Période d'examen de la perte à long terme: 10 jours
  • Stop loss à la bande médiane: Oui
  • Période de révision courte des entrées: 10 jours
  • Période d'examen de l'arrêt-perte court: 20 jours
  • Stop loss à la bande médiane: Oui

Les règles d'entrée et d'arrêt sont les suivantes:

  • Allez long lorsque le prix dépasse le plus haut de 20 jours
  • L'établissement doit déclarer la valeur de l'établissement à la valeur de l'établissement.
  • Passez court lorsque le prix tombe en dessous du plus bas de 10 jours
  • Les expositions à risque sont classées dans la catégorie des expositions à risque.

En ajustant dynamiquement les périodes de rétrospective, la stratégie peut être optimisée à travers les cycles du marché pour capturer les tendances avec une meilleure rentabilité/risque.

Les avantages

  • Les ruptures peuvent identifier la direction de la tendance dès le début
  • Arrêter les pertes proches du prix aide à gérer le risque
  • Des paramètres flexibles permettent une optimisation pour différents cycles

Les risques

  • Les éruptions sont sujettes aux fouets, il faut confirmer la validité.
  • Résultats de l'évaluation de la volatilité
  • Un mauvais réglage des paramètres pourrait entraîner un sur-échange ou des arrêts insuffisants

Résumé

La rupture de canal Donchian utilise des ruptures pour identifier les tendances, avec des points intermédiaires / bandes de canaux comme arrêts pour contrôler le risque. L'optimisation des périodes de rétrospective peut améliorer la capture de tendance dans les mouvements forts. Cependant, une prudence est nécessaire sur la validité de la rupture et les shakeouts.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Donchian Channel Strategy", overlay=true, default_qty_type= strategy.percent_of_equity, initial_capital = 1000, default_qty_value = 20, commission_type=strategy.commission.percent, commission_value=0.036)

//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()


Plus de