Suivre la tendance avec le MACD et le canal de Donchian

Auteur:ChaoZhang est là., Date: 2023-11-15 11h37 et 37 min
Les étiquettes:

img

Résumé

Cette stratégie combine l'indicateur du canal de Donchian et l'indicateur MACD pour déterminer la tendance. Il appartient à une stratégie de suivi de tendance typique. Il va long lorsque le prix dépasse la bande supérieure et MACD montre la croix dorée, et court lorsque le prix dépasse la bande inférieure et MACD montre la croix de mort.

La logique de la stratégie

  1. Calculer l'indicateur MACD, y compris la ligne rapide, la ligne lente et l'histogramme.

  2. Calculez les bandes supérieure et inférieure du canal de Donchian. La bande supérieure est le prix le plus élevé sur N jours, la bande inférieure est le prix le plus bas sur N jours.

  3. Lorsque le prix franchit la bande supérieure, et que la ligne rapide MACD traverse au-dessus de la ligne lente, allez long.

  4. Lorsque le prix franchit la bande inférieure, et que la ligne rapide MACD traverse la ligne lente, passez à la courte.

  5. L'indicateur ATR est utilisé pour calculer le stop loss pour cette stratégie, qui est fixé à la valeur ATR multipliée par un coefficient du prix actuel.

  6. Fermez la position lorsque le signal de marche arrière apparaît.

Analyse des avantages

Cette stratégie combine des indicateurs de jugement de tendance et des indicateurs de canal, qui peuvent suivre efficacement les tendances. L'indicateur MACD juge la tendance et l'élan des prix. Le canal Donchian juge la direction. Le stop loss ATR limite la perte par transaction.

Les avantages sont les suivants:

  1. La stratégie est simple avec peu de paramètres, facile à mettre en œuvre.

  2. Il peut ouvrir une position le long de la tendance et saisir les opportunités de tendance dans le temps.

  3. L'ATR contrôle le risque.

  4. Le retrait peut être contrôlé dans une certaine mesure.

Analyse des risques

Il y a aussi des risques:

  1. Des paramètres incorrects du canal de Donchian peuvent provoquer de faux signaux.

  2. Des paramètres MACD incorrects peuvent également entraîner des signaux en retard.

  3. Un réglage de stop loss trop large peut entraîner une perte accrue.

  4. Un revirement brusque du marché peut entraîner d'énormes pertes.

  5. La stratégie a tendance à dépasser les limites.

Les solutions:

  1. Optimisez les paramètres, sélectionnez les stocks avec précaution.

  2. Arrêt de perte strict, arrêt de perte à la traîne.

  3. Ajustez correctement la taille de la position.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Optimiser les paramètres MACD pour améliorer la sensibilité.

  2. Optimiser l'algorithme de stop loss pour le rapprocher du prix.

  3. Ajouter un mécanisme de dimensionnement de la position en fonction de la force de la tendance.

  4. Ajoutez des filtres pour éviter les faux signaux.

  5. Ajouter des critères de sélection pour les instruments de négociation.

  6. Ajouter le jugement de la période de négociation.

Résumé

En résumé, il s'agit d'une stratégie typique de suivi des tendances. Il combine le canal Donchian pour la direction de la tendance et le MACD pour la force de la tendance. Il peut suivre la tendance efficacement et contrôler le risque. En optimisant les paramètres, le stop loss, la taille de la position, etc., la stabilité et la rentabilité peuvent être encore améliorées. La stratégie convient aux investisseurs qui nécessitent une grande précision dans le jugement de la tendance.


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1h
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/
// © Robrecht99

//@version=5
strategy("Trend Following with Donchian Channels and MACD", overlay=false, margin_long=100, margin_short=100, pyramiding=3)

// MACD //
fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")

fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below)))
plot(macd, title="MACD", color=col_macd)
plot(signal, title="Signal", color=col_signal)

// Donchian Channels //

Length1 = input.int(title="Length Upper Channel", defval=50, minval=1, group="Donchian Channels Inputs")
Length2 = input.int(title="Length Lower Channel", defval=50, minval=1, group="Donchian Channels Inputs")
h1 = ta.highest(high[1], Length1)
l1 = ta.lowest(low[1], Length2)
fillColor = input.color(color.new(color.purple, 95), title = "Fill Color", group = "Donchian Channels Inputs")
upperColor = input.color(color.new(color.orange, 0), title = " Color Upper Channel", group = "Donchian Channels Inputs", inline = "upper")
lowerColor = input.color(color.new(color.orange, 0), title = " Color Lower Channel", group = "Donchian Channels Inputs", inline = "lower")
u = plot(h1, "Upper", color=upperColor)
l = plot(l1, "Lower", color=upperColor)
fill(u, l, color=fillColor)

//ATR and Position Size //
strategy.initial_capital = 50000
length = input.int(title="ATR Period", defval=14, minval=1, group="ATR Inputs")
risk = input(title="Risk Per Trade", defval=0.01, group="ATR Inputs")
multiplier = input(title="ATR Multiplier", defval=2, group="ATR Inputs")
atr = ta.atr(length)
amount = (risk * strategy.initial_capital / (multiplier * atr))

// Buy and Sell Conditions //

entrycondition1 = ta.crossover(macd, signal)
entrycondition2 = macd > signal
entrycondition3 = macd and signal > hist
sellcondition1 = ta.crossover(signal, macd)
sellcondition2 = signal > macd
sellcondition3 = macd and signal < hist

// Buy and Sell Signals //

if (close > h1 and entrycondition2 and entrycondition3)
    strategy.entry("long", strategy.long, qty=amount)
    stoploss = close - atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (sellcondition1 and sellcondition2 and sellcondition3)
    strategy.close(id="long")

if (close < l1 and sellcondition2 and sellcondition3)
    strategy.entry("short", strategy.short, qty=amount)
    stoploss = close + atr * 4
    strategy.exit("exit sl", stop=stoploss, trail_offset=stoploss)
if (entrycondition1 and entrycondition2 and entrycondition3)
    strategy.close(id="short")

Plus de