Trendverfolgungs- und Trailing Stop-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-17 11:19:06
Tags:

img

Übersicht

Die Trend Tracking Trailing Stop Strategie ist eine quantitative Handelsstrategie, die Trendbeurteilungsindikatoren und Trailing Stop Mechanismen kombiniert.

Strategieprinzipien

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.

Analyse der Vorteile

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.

Risikoanalyse

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.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Versuchen Sie andere Trendbeurteilungsindikatoren wie DMI und KDJ in Kombination mit dem Supertrend-Indikator, um ein Mehrfaktor- Beurteilungssystem zu bilden, das die Beurteilungsgenauigkeit verbessern kann.

  2. 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.

  3. Einführung von Sentiment-Indikatoren, um RSI-Indikatoren für die Signalfilterung zu ersetzen.

  4. 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.

Schlussfolgerung

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")





Mehr