
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.
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.
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:
Die Strategie ist mit Risiken verbunden, die sich hauptsächlich in folgenden Aspekten widerspiegeln:
Die Risiken können durch optimierte Parameter, strenge Position Sizing und rechtzeitige Verlustbefreiung verringert werden.
Die Strategie kann vor allem in folgenden Bereichen optimiert werden:
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.
Sie können auch andere Indikatoren wie RSI, KDJ und andere testen, um zu filtern, um zu sehen, ob die Rendite verbessert werden kann.
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.
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.
/*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)