
Die Trend-Tracking-Mobilstop-Strategie ist eine quantitative Handelsstrategie, die eine Kombination aus Trend-Bestimmer und einem mobilen Stop-Mechanismus umfasst. Die Strategie verwendet Supertrend-Bestimmer, um die aktuelle Trendrichtung zu bestimmen, und nutzt die mobile Stop-Line, um Preisänderungen in Echtzeit zu verfolgen, um Trend-Tracking und Risikokontrolle zu ermöglichen.
Die Strategie berechnet zunächst den Supertrend-Indikator, um zu beurteilen, ob sich der aktuelle Trend in einem Aufwärtstrend befindet oder in einem Abwärtstrend. Der Supertrend-Indikator kombiniert den ATR-Indikator mit einem Mittelpunkt, um die Richtung des Trends genauer zu beurteilen. Wenn der Supertrend-Indikator als Aufwärtstrend beurteilt wird, erzeugt er ein Kaufsignal; wenn er als Abwärtstrend beurteilt wird, erzeugt er ein Verkaufssignal.
Wenn ein Kaufsignal erzeugt wird, eröffnet die Strategie eine zusätzliche Position; gleichzeitig berechnet sie in Echtzeit eine bewegliche Stop-Line, die mit dem Mittelpunkt abzüglich des Wertes des ATR-Indikators berechnet wird. Solange der aktuelle Schlusskurs über der Stop-Line liegt, verschiebt sich die Stop-Line in Echtzeit und bleibt immer in einer vernünftigen Stop-Position.
Die Strategie kombiniert die ADX- und RSI-Indikatoren, um unpassende Handelssignale zu filtern. Die Position wird nur dann aufgenommen, wenn die ADX größer ist als die eingestellte Schwelle und der RSI auf einem vernünftigen Niveau ist.
Der größte Vorteil dieser Strategie besteht darin, dass sie die Richtung des Trends gut erfassen und den Trend verfolgen kann. Der Supertrend-Indikator ist genauer als der einfache Moving Average und kann schnell den Wendepunkt bestimmen. Gleichzeitig kann der mobile Stop-Loss-Mechanismus die Stop-Loss-Position automatisch anpassen, die Gewinne maximieren und das Risiko effektiv kontrollieren.
Außerdem kann die Strategie mit den ADX- und RSI-Indikatoren für die Filterung von Fehlhandlungen in Zeiten großer Marktvolatilität vermieden werden. Die ADX-Indikatoren garantieren eine ausreichende Tendenz und die RSI-Indikatoren vermeiden Überkauf und Überverkauf, wodurch die Gewinnwahrscheinlichkeit erhöht wird.
Das größte Risiko dieser Strategie besteht in der Wahrscheinlichkeit, dass Trends falsch beurteilt werden und Supertrend-Indikatoren falsche Signale senden. Obwohl Supertrend-Indikatoren im Vergleich zu einfachen Moving Averages besser sind, ist es unumgänglich, dass sie in komplexen Situationen falsch beurteilt werden.
Darüber hinaus kann die falsche Einstellung der Strategieparameter ein gewisses Risiko mit sich bringen. Zum Beispiel führt die Einstellung der ATR-Parameter über die Generalversammlung zu einer zu radikalen Einstellung der Stop-Loss-Linie. Die falsche Einstellung der Parameter für ADX und RSI kann auch zu verpassten Handelschancen führen oder die Wahrscheinlichkeit eines falschen Handels erhöhen.
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Versuchen Sie, andere Trends zu beurteilen, wie DMI, KDJ und andere, mit Supertrend-Indikatoren kombiniert, um einen mehrfachen Mehrfacher-Behandlungssystem zu bilden, kann die Genauigkeit der Beurteilung verbessern.
Hinzugefügt wurde ein Adaptive Parameter-Optimierungsmodul basierend auf maschinellem Lernen, so dass ATR-Parameter, ADX-Parameter, RSI-Parameter usw. an den Markt in Echtzeit angepasst werden können, anstatt auf einfache Festwerte.
Die Einführung von alternativen RSI-Indikatoren wie Emotions-Indikatoren filtert die Signale. RSI-Indikatoren sind nicht ideal, um komplexe Situationen zu beurteilen, während soziale Emotions-Indikatoren die Markthälte besser beurteilen können.
Positionsverwaltungsmodul hinzugefügt, um die Positionsgröße dynamisch anzupassen, je näher die Stop-Line dem aktuellen Preis ist. Je weiter von der Stop-Line entfernt, desto größer kann die Position angepasst werden, um den Gewinnraum zu erhöhen.
Die Trend-Tracking-Strategie, die sich auf die Kombination von Trendanalyse, mobile Stop-Loss-Strategien und Multifaktor-Filterung stützt, ist eine ausgereifte quantitative Strategie, die Risiken streng kontrolliert und gleichzeitig Trends erfasst. Die Strategie hat noch viel Optimierungsmöglichkeiten und sollte weiter untersucht und verbessert werden, um sie an komplexe 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")