Strategie mit dem MACD und dem Donchian Channel

Schriftsteller:ChaoZhang, Datum: 2023-11-15 11:37:37
Tags:

img

Übersicht

Diese Strategie kombiniert den Donchian Channel-Indikator und den MACD-Indikator, um den Trend zu bestimmen. Es gehört zu einer typischen Trendfolgestrategie. Es geht lang, wenn der Preis das obere Band durchbricht und der MACD zeigt ein goldenes Kreuz, und geht kurz, wenn der Preis das untere Band durchbricht und der MACD zeigt ein Todeskreuz. Der ATR-Indikator wird zur Berechnung des Stop-Loss verwendet.

Strategie Logik

  1. Berechnung des MACD-Indikators einschließlich der schnellen Linie, der langsamen Linie und des Histogramms.

  2. Berechnen Sie die oberen und unteren Donchian Channel Bands. Das obere Band ist der höchste Preis über N Tage, das untere Band ist der niedrigste Preis über N Tage.

  3. Wenn der Preis das obere Band durchbricht und die MACD-Schnelllinie über die langsame Linie geht, gehen Sie lang.

  4. Wenn der Preis das untere Band durchbricht und die MACD-Schnelllinie unterhalb der langsamen Linie kreuzt, gehen Sie kurz.

  5. Die Risikopositionen werden in den folgenden Kategorien berechnet:

  6. Schließen Sie die Position, wenn ein Rückwärtssignal angezeigt wird.

Analyse der Vorteile

Diese Strategie kombiniert Trendbeurteilungsindikatoren und Kanalindikatoren, die Trends effektiv verfolgen können. Der MACD-Indikator beurteilt den Preistrend und die Dynamik. Der Donchian-Kanal beurteilt die Richtung. Der ATR-Stop-Loss begrenzt den Verlust pro Handel.

Die Vorteile sind:

  1. Die Strategie ist einfach, mit wenigen Parametern, einfach umzusetzen.

  2. Es kann eine Position entlang des Trends eröffnen und Trendchancen rechtzeitig erfassen.

  3. ATR-Stoppverlust steuert das Risiko.

  4. Der Abzug kann bis zu einem gewissen Grad kontrolliert werden.

Risikoanalyse

Es gibt auch einige Risiken:

  1. Die falsche Einstellung des Donchian-Kanals kann zu falschen Signalen führen.

  2. Bei fehlerhaften MACD-Parametern kann es auch zu verzögerten Signalen kommen.

  3. Eine zu breite Stop-Loss-Einstellung kann zu einem erweiterten Verlust führen.

  4. Eine starke Umkehrung des Marktes kann zu großen Verlusten führen.

  5. Die Strategie neigt dazu, zu viel zu handeln.

Lösungen:

  1. Optimieren Sie die Parameter, wählen Sie die Bestände vorsichtig aus.

  2. Strenger Stop-Loss, hinterläufiger Stop-Loss.

  3. Richten Sie die Positionsgröße richtig ein.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimierung der MACD-Parameter zur Verbesserung der Empfindlichkeit.

  2. Optimieren Sie den Stop-Loss-Algorithmus, damit er näher am Preis liegt.

  3. Hinzufügen eines Positionsgrößenmechanismus entsprechend der Trendstärke.

  4. Fügen Sie Filter hinzu, um falsche Signale zu vermeiden.

  5. Hinzufügen von Auswahlkriterien für Handelsinstrumente.

  6. Hinzufügen von Beurteilung der Handelszeit.

Zusammenfassung

Zusammenfassend ist dies eine typische Trendfolgestrategie. Sie kombiniert Donchian Channel für die Trendrichtung und MACD für die Trendstärke. Sie kann dem Trend effektiv folgen und das Risiko kontrollieren. Durch die Optimierung von Parametern, Stop Loss, Positionsgrößen usw. können die Stabilität und Rentabilität weiter verbessert werden.


/*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")

Mehr