Trend-Trading-Strategie basierend auf dem MACD-Indikator


Erstellungsdatum: 2024-02-02 11:32:48 zuletzt geändert: 2024-02-02 11:32:48
Kopie: 3 Klicks: 642
1
konzentrieren Sie sich auf
1617
Anhänger

Trend-Trading-Strategie basierend auf dem MACD-Indikator

Überblick

Der Kern der Strategie basiert auf einem Indikator, der in einem Artikel von Andrew Abraham in der September 1998-Kolumne der Trend-Trading-Zeitschrift TASC entwickelt wurde. Der Indikator nutzt die durchschnittliche reale Bandbreite der Schwankungen und die Preiskanäle, um die Richtung der Markttrends zu bestimmen, und filtert Handelssignale in Verbindung mit dem MACD-Indikator, um die mittleren und langen Trends zu erfassen.

Strategieprinzip

Die Strategie berechnet zunächst den gewichteten Moving Average des 21-Tage-Mittels der realen Bandbreite (ATR) als Basisbandbreite. Dann werden die Höchst- und Tiefstpreise der letzten 21 Tage berechnet, um den aktuellen K-Line-Abschlusspreis mit der oberen und unteren Grenze der Basisbandbreite zu vergleichen, um zu beurteilen, ob der Preis den Kanal durchbrochen hat, um die Richtung des Trends zu bestimmen.

Konkret definiert wird die Kanalobergrenze als der höchste Preis der letzten 21 Tage abzüglich der dreifachen ATR, und die Kanalobergrenze als der niedrigste Preis der letzten 21 Tage plus die dreifache ATR. Wenn der Schlusskurs über der Kanalobergrenze liegt, wird er als Bissendeckung beurteilt; wenn der Schlusskurs unter der Kanalobergrenze liegt, wird er als Bissendeckung beurteilt.

Die Strategie führt auch eine Filterung der MACD-Indikatoren ein, um die Richtung des Trends zu bestimmen. Ein Kaufsignal wird nur erzeugt, wenn die MACD-Säulen positiv sind, um einen Kaufpunkt zu vermeiden.

Strategische Vorteile

Die Strategie kombiniert Trendbeurteilung und Indikatorfilterung, um die Richtung der langen Trendlinie in den Märkten zu bestimmen und zu vermeiden, dass sie von kurzfristigen Marktschwankungen verführt wird. Die spezifischen Vorteile sind wie folgt:

  1. Benutzung von Preiskanälen, um Trends zu bestimmen und die Richtung der langen Linie zu bestimmen
  2. Die Benchmark kann sich dynamisch an Veränderungen anpassen
  3. MACD-Filter für mehr Entscheidungsgrundlagen und weniger Kauffehler
  4. Konfiguration von Parametern und Flexibilität bei der Anpassung der Strategiestile

Strategisches Risiko

Die Strategie ist mit Risiken verbunden, die sich hauptsächlich in folgenden Aspekten widerspiegeln:

  1. Der Preiskanal kann nicht vollständig ausgeschlossen werden.
  2. Die MACD-Indikatoren können ein Risiko für irreführende Signale darstellen
  3. Fehlende Einstellungen von Parametern können zu instabilen Strategien führen

Die Risiken können durch optimierte Parameter, strenge Position Sizing und rechtzeitige Verlustbefreiung verringert werden.

Richtung der Strategieoptimierung

Die Strategie kann vor allem in folgenden Bereichen optimiert werden:

  1. Versuche verschiedene Kombinationen von Parametern, um den optimalen Parameter zu finden

Verschiedene Kombinationen von Length-Parametern oder Multiplier-Parametern können getestet werden, um die Parameterkombination zu finden, die die optimale Rendite auf Basis der Rückmessdaten erzeugt.

  1. Filtersignal in Kombination mit anderen Indikatoren

Sie können auch andere Indikatoren wie RSI, KDJ und andere testen, um zu filtern, um zu sehen, ob die Rendite verbessert werden kann.

  1. Dynamische Anpassungsparameter

Die Parameter können dynamisch an die Marktlage angepasst werden, z. B. durch eine angemessene Erweiterung der Kanal-Range, wenn ein Trend sichtbar ist, und durch eine angemessene Verschärfung der Kanal-Range, wenn ein Schock auftritt.

Zusammenfassen

Die Strategie ist insgesamt eine relativ robuste Trendverfolgungsstrategie. Sie kombiniert die Methode der Preiskanal-Bestimmung der Trendrichtung mit der MACD-Indikator-Filter-Signal-Methode, um die langfristigen Trends in den Märkten effektiv zu beurteilen und stabile Erträge zu erzielen. Durch Parameteroptimierung, Risikomanagement und angemessene Korrektur kann die Strategie zu einem wichtigen Bestandteil eines quantitativen Handelssystems werden.

Strategiequellcode
/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
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/
// © melihtuna

//@version=1
strategy("Trend Trader Strategy with MACD", overlay=true)

// === Trend Trader Strategy ===
Length = input(21),
Multiplier = input(3, minval=1)
MacdControl = input(true, title="Control 'MACD Histogram is positive?' when Buy condition")
avgTR      = wma(atr(1), Length)
highestC   = highest(Length)
lowestC    = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = iff(close > hiLimit and close > loLimit, hiLimit,
        iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
pos =	iff(close > ret, 1,
	    iff(close < ret, -1, nz(pos[1], 0))) 
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(ret, color= blue , title="Trend Trader Strategy with MACD")

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2020, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

// === MACD ===
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdCond= MacdControl ? histLine[0] > 0 ? true : false : true

strategy.entry("BUY", strategy.long, when = window() and pos == 1 and macdCond)
strategy.entry("SELL", strategy.short, when = window() and pos == -1)