Die Trend Tracking Trailing Stop Strategie ist eine quantitative Handelsstrategie, die Trendbeurteilungsindikatoren und Trailing Stop Mechanismen kombiniert.
Die Strategie berechnet zunächst den Supertrend-Indikator, um zu beurteilen, ob der aktuelle Trend nach oben oder unten ist. Der Supertrend-Indikator enthält den ATR-Indikator und den Drehpunkt, um die Trendrichtung genauer zu bestimmen. Wenn der Supertrend-Indikator einen Aufwärtstrend beurteilt, wird ein Kaufsignal generiert. Beurteilt er einen Abwärtstrend, wird ein Verkaufssignal generiert.
Wenn ein Kaufsignal generiert wird, wird die Strategie eine Long-Position eröffnen. Gleichzeitig berechnet sie eine Trailing-Stop-Line in Echtzeit. Die Berechnungsmethode dieser Stop-Line ist der Drehpunkt minus der ATR-Indikatorwert. Solange der aktuelle Schlusskurs höher ist als diese Stop-Line, bewegt sich die Stop-Line in Echtzeit nach oben und hält eine angemessene Stop-Loss-Position. Wenn der Preis durch die Stop-Line bricht, wird die Position mit einem Stop-Loss geschlossen.
Die Strategie beinhaltet auch die Indikatoren ADX und RSI, um ungeeignete Handelssignale zu filtern.
Der größte Vorteil dieser Strategie besteht darin, dass sie die Trendrichtung gut erfassen und die Trendverfolgung erreichen kann. Der Supertrend-Indikator ist genauer als einfache gleitende Durchschnitte und kann schnell Wendepunkte bestimmen. Gleichzeitig kann der Trailing-Stop-Mechanismus die Stop-Level automatisch anpassen, um die Gewinnverriegelung zu maximieren und die Risiken effektiv zu kontrollieren.
Darüber hinaus werden die Indikatoren ADX und RSI der Filtrationsstrategie hinzugefügt, um Fehler in Zeiten hoher Marktvolatilität zu vermeiden.
Das größte Risiko dieser Strategie besteht darin, dass die Trendbeurteilung falsch geht und der Supertrend-Indikator ein falsches Signal ausgibt. Obwohl der Supertrend-Indikator einfachen gleitenden Durchschnitten überlegen ist, ist es unvermeidlich, dass bei komplexen Marktbedingungen Fehleinschätzungen auftreten. Zu diesem Zeitpunkt ist es notwendig, sich auf Stop-Loss-Mechanismen zu verlassen, um Verluste zu kontrollieren.
Darüber hinaus können unsachgemäße Einstellungen von Strategieparametern auch Risiken darstellen. Zum Beispiel führt ein zu großer ATR-Parameter zu übermäßig aggressiven Stop-Loss-Line-Anpassungen. unsachgemäße Einstellungen der ADX- und RSI-Parameter können auch Handelschancen verpassen oder die Wahrscheinlichkeit falscher Trades erhöhen. Dies erfordert umfangreiche historische Rückprüfung, um die optimalen Parameter zu finden.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Versuchen Sie andere Trendbeurteilungsindikatoren wie DMI und KDJ in Kombination mit dem Supertrend-Indikator, um ein
Erhöhung des auf maschinellem Lernen basierenden adaptiven Parameteroptimierungsmoduls, so dass der ATR-Parameter, der ADX-Parameter, der RSI-Parameter usw. anstelle von festen Werten dem Echtzeitmarkt angepasst werden können.
Einführung von Sentiment-Indikatoren, um RSI-Indikatoren für die Signalfilterung zu ersetzen.
Erhöhen Sie das Positionsgrößenmanagementmodul. Entsprechend dem Abstand zwischen der Stopplinie und dem aktuellen Preis, passen Sie die Positionsgröße dynamisch an. Je weiter weg von der Stopplinie, desto größer kann die Positionsgröße angemessen erhöht werden, um das Gewinnpotenzial zu verbessern.
Die Trend Tracking Trailing Stop Strategie setzt umfassend Methoden wie Trendanalyse, Trailing Stops und Multi-Faktor-Filterung ein. Während sie Trends erfasst, kontrolliert sie Risiken streng und ist eine reifere quantitative Strategie. Es gibt immer noch großes Potenzial für die Optimierung dieser Strategie, um sie an komplexere Marktumgebungen anzupassen.
/*backtest start: 2023-01-16 00:00:00 end: 2024-01-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bendre ADX Sup Trend", overlay = true) /////////////////////////// // SuperTrend + Pivot Point ////////////////////////// src = input(close, title="EMA Source") PPprd = input(defval = 2, title="Pivot Point Period") AtrFactor=input(defval = 2, title = "ATR Factor") AtrPd=input(defval = 18, title = "ATR Period") StartDate = input(timestamp("1 Dec 2022"), title="Start Date") EndDate = input(timestamp("12 Jan 2023"), title="End Date") var float ph = na var float pl = na ph := ta.pivothigh(PPprd, PPprd) pl :=ta.pivotlow(PPprd, PPprd) float center = na center := center[1] // float lastpp = ph ? ph : pl ? pl : 0.0 float lastpp = na(ph) ? na(pl) ? na : pl : ph if lastpp > 0 if na(center) center := lastpp else center := (center * 2 + lastpp) / 3 Up = center - (AtrFactor * ta.atr(AtrPd)) Dn = center + (AtrFactor * ta.atr(AtrPd)) var float TUp = na var float TDown = na Trend = 0 TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1) Trailingsl = Trend == 1 ? TUp : TDown // Lines linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na plot(Trailingsl, color = linecolor , linewidth = 2, title = "PP SuperTrend") bsignalSSPP = close > Trailingsl ssignalSSPP = close < Trailingsl /////// // ADX ////// lenADX = 14 th = 14 TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1]))) DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0 DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.max(nz(low[1])-low, 0): 0 SmoothedTrueRange = 0.0 SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/lenADX) + TrueRange SmoothedDirectionalMovementPlus = 0.0 SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/lenADX) + DirectionalMovementPlus SmoothedDirectionalMovementMinus = 0.0 SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/lenADX) + DirectionalMovementMinus DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100 DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100 DX = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100 ADX = ta.sma(DX, lenADX) ////// // MA ///// lenMA = 21 srcMA = input(close, title="Source") // offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) offsetMA = input(0, title="Offset") outMA = ta.sma(srcMA, lenMA) // // RSI // length = input( 14 ) overSold = input( 30 ) overBought = input( 65 ) price = close vrsi = ta.rsi(price, length) // Buy - Sell Entries buy = bsignalSSPP and outMA < close and ADX > th sell = ssignalSSPP if (buy and vrsi > overBought) // .order // Tuned version strategy.entry("Buy", strategy.long) // strategy.close("Sell", "close Sell") if (sell) and (strategy.position_size > 0) // strategy.entry("Sell", strategy.short) strategy.close("Buy", "Close Buy") // if(sell and vrsi < overSold ) // strategy.entry("Sell", strategy.short) // if(buy) and (strategy.position_size > 0) // strategy.close("Sell", "close Sell")