Cette stratégie est développée sur la base de l'indicateur standard du canal de Donchian. Elle attend deux hauts plus élevés consécutifs (ou des bas plus bas) pour confirmation par défaut avant d'émettre des signaux de négociation, afin d'éviter d'être piégé par les fabricants de marché.
La stratégie prévoit également la possibilité de désactiver le mécanisme de double confirmation, de sorte qu'il puisse émettre des signaux de négociation immédiatement à la vue de nouveaux hauts ou de nouveaux bas.
Pour les personnes qui n'aiment pas les positions courtes, il existe également la possibilité d'exclure les positions courtes.
La stratégie est basée sur les bandes supérieures et inférieures de l'indicateur du canal de Donchian. La bande supérieure est le plus haut plus élevé au cours des n dernières barres, tandis que la bande inférieure est le plus bas plus bas au cours des n dernières barres.
La bande du milieu est la moyenne des bandes supérieure et inférieure et peut être utilisée pour mesurer la direction de la tendance.
Lorsque le prix dépasse la bande supérieure, la stratégie sera longue s'il n'y a pas de position longue existante.
Pour filtrer les fausses ruptures, l'option
Les avantages de cette stratégie sont les suivants:
L'indicateur du canal de Donchian est simple et facile à comprendre.
Le mécanisme de double confirmation filtre efficacement les fausses fuites et évite d'être piégé.
La période de révision des canaux est personnalisable pour s'adapter aux différents environnements du marché.
L'option de vente à découvert répond aux besoins de différents investisseurs.
Le code est propre et facile à comprendre pour un développement ultérieur.
Cette stratégie comporte également certains risques:
La double confirmation peut entraîner la perte de certaines opportunités commerciales.
Un mauvais réglage de la période de diffusion peut entraîner des échanges trop fréquents ou peu fréquents.
Des périodes de détention longues peuvent ne pas permettre de contrôler efficacement les risques.
Des risques supplémentaires liés aux ventes à découvert doivent être pris en compte.
Il faut être prudent avec le sur-ajustement du backtest.
Solution correspondante:
Désactiver la confirmation double ou raccourcir l'intervalle de confirmation.
Optimiser les paramètres et sélectionner les périodes de diffusion appropriées.
Le montant de l'opération est calculé à partir de la valeur de l'opération.
Désactiver la vente à découvert, aller long seulement.
Évaluer de manière robuste la stratégie dans différents environnements de marché.
Les possibilités d'amélioration sont les suivantes:
Ajustez dynamiquement la taille des positions en fonction de la volatilité.
Filtrez les fausses éruptions en fonction des mesures d'intensité de rupture.
Incorporer un mécanisme d'arrêt pour suivre les tendances.
Combinez d'autres indicateurs pour déterminer l'orientation de la tendance et éviter de manquer des points tournants majeurs.
Optimisez automatiquement les paramètres par apprentissage automatique.
Ces améliorations peuvent encore améliorer la stabilité et la rentabilité de la stratégie.
Il s'agit d'une stratégie simple mais efficace basée sur le mécanisme de confirmation double du canal de 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)