Der Kern dieser Strategie basiert auf dem Indikator, der in dem Artikel
Die Strategie berechnet zunächst den 21-tägigen gewichteten gleitenden Durchschnitt des durchschnittlichen wahren Bereichs (ATR) als Basisvolatilitätsbereich. Dann berechnet sie die höchsten und niedrigsten Preise in den letzten 21 Tagen. Durch den Vergleich des aktuellen Schlusskurses mit den oberen und unteren Grenzen des Basisbereichs wird beurteilt, ob der Preis aus dem Kanal bricht, um die Trendrichtung zu bestimmen.
Insbesondere wird die obere Kanalgrenze als der höchste Preis in den letzten 21 Tagen abzüglich 3-facher Basis-ATR definiert, und die untere Kanalgrenze ist der niedrigste Preis in den letzten 21 Tagen plus 3-facher Basis-ATR. Wenn der Schlusskurs über der oberen Grenze liegt, signalisiert dies einen Aufwärtstrend. Wenn der Schlusskurs unter der unteren Grenze liegt, signalisiert er einen Bärentrend.
Bei der Bestimmung der Trendrichtung führt diese Strategie auch den MACD-Indikator zur Filterung ein. Sie erzeugt nur Kaufsignale, wenn das MACD-Histogramm positiv ist, um fehlende Kaufmöglichkeiten zu vermeiden.
Diese Strategie kombiniert Trendbestimmung und Indikatorfilterung, wodurch die mittelfristige und langfristige Markttrendrichtung wirksam ermittelt werden kann, ohne von kurzfristigen Schwankungen in die Irre geführt zu werden.
Die Strategie birgt außerdem einige Risiken, vor allem in den folgenden Aspekten:
Diese Risiken können durch Optimierung der Parameter, strenge Positionsgröße und zeitnahen Stop-Loss reduziert werden.
Die Strategie kann in folgenden Hauptbereichen optimiert werden:
Testen Sie verschiedene Kombinationen von Länge oder Multiplikator, um die Parameterkombination zu finden, die die höchste Rendite basierend auf dem Backtest liefert.
Test, der RSI, KDJ und andere Indikatoren umfasst, um Signale zu filtern und die Rentabilität zu verbessern.
Anpassung der Parameter dynamisch an die Marktbedingungen, z. B. angemessene Erweiterung des Kanalbereichs, wenn der Trend stark ist, oder Verengung des Bereichs, wenn der Markt stärker an den Bereich gebunden ist.
Zusammenfassend ist dies eine insgesamt robuste Trendfolgestrategie. Durch die Kombination von Preiskanal-Trendbestimmung und MACD-Filterung kann es mittelfristige Trends effektiv identifizieren und stabile Renditen erzielen. Mit Parameteroptimierung, Risikomanagement und entsprechenden Anpassungen kann diese Strategie zu einem integralen Bestandteil eines 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)