Les ressources ont été chargées... Je charge...

Stratégie de tendance adaptative du canal de Donchian

Auteur:ChaoZhang est là., Date: le 26 octobre 2023
Les étiquettes:

img

Résumé

Cette stratégie utilise l'indicateur Donchian Channel pour suivre de manière adaptative les tendances du marché pour le trading de tendance.

La logique de la stratégie

  1. Calculez le plus haut et le plus bas bas pour former le canal de Donchian.

  2. Ouvrir une position longue lorsque le prix dépasse la bande supérieure du canal ouvrir une position courte lorsque le prix dépasse la bande inférieure

  3. Après avoir ouvert des positions, le stop loss suit la ligne médiane du canal.

  4. Coupez les pertes et fermez les positions lorsque le prix retombe dans le canal.

Analyse des avantages

  1. La stratégie utilise le canal Donchian pour déterminer la direction de la tendance et capturer rapidement les écarts.

  2. L'utilisation de la ligne médiane du canal pour suivre le stop loss protège les bénéfices.

  3. L'objectif de profit est amplifié en fonction du pourcentage de profit défini par l'utilisateur.

  4. Il s'adapte aux différentes conditions du marché telles que la consolidation, la rupture, le recul, etc., et ajuste de manière flexible la taille des positions.

  5. Une logique de trading simple et claire, facile à comprendre et à maîtriser.

Analyse des risques

  1. La stratégie ne traite que des écarts et ne peut pas gérer efficacement la consolidation.

  2. Il existe un risque de faux signaux de rupture, d'autres indicateurs sont nécessaires pour la vérification.

  3. Les paramètres d'arrêt des pertes et de prise de bénéfices inappropriés peuvent entraîner une sortie prématurée ou un bénéfice insuffisant.

  4. Un mauvais réglage de la période du canal affecte l'exactitude des signaux de trading.

  5. Une dimensionnement excessif des positions amplifie les risques de fluctuation du marché.

  6. Il existe des risques d'interruption inattendus du robot, assurez-vous de la fiabilité du système.

Directions de renforcement

  1. Ajoutez des indicateurs de volume pour éviter de courir après de fausses fuites.

  2. Augmenter les filtres des indicateurs de tendance pour améliorer la précision du signal d'entrée.

  3. Optimiser les algorithmes de stop loss dynamiques et de prise de profit.

  4. Adapter la stratégie de dimensionnement des positions en fonction des conditions du marché en temps réel.

  5. Rechercher des données de nuit et de pré-commercialisation pour un meilleur calendrier d'entrée.

  6. Testez différentes périodes de paramètres pour trouver des combinaisons optimales.

  7. Ajouter la validation du modèle pour éviter un surajustement.

Conclusion

Dans l'ensemble, il s'agit d'une stratégie de suivi de tendance adaptative simple et pratique. Elle présente des avantages tels que la capture rapide des ruptures de tendance et la protection des bénéfices. Elle présente également des inconvénients tels que l'inefficacité pendant la consolidation et les pertes causées par de fausses ruptures. Les améliorations futures consistent à incorporer plus de filtrage de signaux, un stop loss / take profit dynamique, pour s'adapter à plus de conditions de marché.


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

//Noro
//2020

//@version=4
strategy(title = "Noro's Donchian Strategy", shorttitle = "Donchian str", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
tp = input(defval = 10, minval = 1, title = "Take profit")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
pclen = input(50, minval = 1, title = "Price Channel Length")
showll = input(true, defval = true, title = "Show lines")
showbg = input(false, defval = false, title = "Show Background")
showof = input(true, defval = true, title = "Show Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Price Channel
h = highest(high, pclen)
l = lowest(low, pclen)
center = (h + l) / 2
tpl = h * (100 + tp) / 100
tps = l * (100 - tp) / 100

//Lines
tpcol = showll ? color.lime : na
pccol = showll ? color.blue : na
slcol = showll ? color.red : na
offset = showof ? 1 : 0
plot(tpl, offset = offset, color = tpcol, title = "TP Long")
plot(h, offset = offset, color = pccol, title = "Channel High")
plot(center, offset = offset, color = slcol, title = "Cannel Center")
plot(l, offset = offset, color = pccol, title = "Channel Low")
plot(tps, offset = offset, color = tpcol, title = "TP Short")

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(bgcol, transp = 70)

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
mo = 0
mo := strategy.position_size != 0 ? 0 : high >= center and low <= center ? 1 : mo[1]
if h > 0
    strategy.entry("Long", strategy.long, lot, stop = h, when = strategy.position_size <= 0 and needlong and truetime and mo)
    strategy.exit("TP Long", "Long", limit = tpl, stop = center)
    strategy.entry("Short", strategy.short, lot, stop = l, when = strategy.position_size >= 0 and needshort and truetime and mo)
    strategy.exit("TP Short", "Short", limit = tps, stop = center)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Plus de