ATR-basierte Trailing Stop-Strategie für ES

Schriftsteller:ChaoZhang, Datum: 2024-01-12 14:52:23
Tags:

img

Übersicht

Diese Strategie ist eine auf die E-mini S&P500-Futures (ES) angewandte Trailing-Stop-Strategie. Sie verwendet den 10-Tage-ATR als Referenz und setzt den Stop-Loss-Bereich auf 3 mal ATR, um lange und kurze Stop-Linien zu definieren. Die Strategie beurteilt den Trend anhand der Richtungsänderung der ATR-Linien und erzeugt Eintrittssignale an Wendepunkten des Trends. Einmal eingegeben, passt sie die Stop-Loss-Linien in Echtzeit an, um die Preisbewegung zu verfolgen und Gewinne zu schützen.

Strategie Logik

Die Strategie verwendet hl2 als Preisquelle. Zuerst berechnet sie den 10-Tage-ATR und lässt den Benutzer zwischen der Verwendung der SMA-Methode oder der integrierten ATR-Funktion zur Berechnung des ATR wählen.

Die Methode, um den Trend zu beurteilen, ist, wenn der Preis die obere Grenze überschreitet, ist er lang; wenn der Preis die untere Grenze überschreitet, ist er kurz. Wenn der Preis in die Bandbreite zurückkehrt, bestätigt er die Trendumkehr. Zu diesem Zeitpunkt erzeugt er, wenn er von kurz auf lang gedreht wird, ein langes Eintrittssignal; wenn er von lang auf kurz gedreht wird, erzeugt er ein kurzes Eintrittssignal.

Nach dem Eintritt wird die lange Stop-Loss-Linie auf die obere Grenze minus 1 Tick und die kurze Stop-Loss-Linie auf die untere Grenze plus 1 Tick gesetzt, um den Gewinn zu schützen.

Vorteile

  1. Die Verwendung von ATR kann sich automatisch an Veränderungen der Marktvolatilität anpassen und die Wahrscheinlichkeit, dass ein Stop-Loss ausgelöst wird, verringern.
  2. Die Trendverfolgungsmethode ist einfach und wirksam, um Risiken von Höhen und Tiefen zu vermeiden.
  3. Trailing-Stops verhindern, dass profitable Trades zurückgegeben werden.

Risikoanalyse

  1. Eine unsachgemäße Einstellung der ATR-Parameter kann dazu führen, dass der Stop-Loss-Bereich zu groß oder zu klein ist.
  2. Eine drastische Veränderung der Volatilität des Basiswerts kann zu einem abnormalen Stop-Loss-Trigger führen.
  3. WENN man den Trend nicht verfolgt, ist man vielleicht zu konservativ.

Optimierungsrichtlinien

  1. Überlegen Sie, ATR-Parameter in Kombination mit Volatilitätsmetriken zu optimieren.
  2. Verschiedene Trailing Stop-Algorithmen wie Prozentsatz-Trailing Stops usw. testen.
  3. Filtern Sie Eintrittssignale in Kombination mit Trendindikatoren, um falsche Trendsignale zu vermeiden.

Schlussfolgerung

Im Allgemeinen ist dies eine robuste Trendfollowing-Strategie. Sie löst das Problem der Bestimmung des Stop-Loss-Bereichs und reduziert die Risiken, indem die Stopps dynamisch basierend auf ATR angepasst werden. Gleichzeitig sperren die Trailing-Stops Gewinne. Aber es gibt immer noch Raum für die Optimierung von Parametern wie ATR-Perioden, Stop-Algorithmen usw. Mit weiteren Tests und Tunings kann diese Strategie zu einer Trendfollowing-Strategie mit hoher Robustheit werden.


/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("ATR Based Trailing Stop Strategy on ES! [v4]", overlay=true)

// Given ATR study
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Entry logic based on trend change
longCondition = trend == 1 and trend[1] == -1
shortCondition = trend == -1 and trend[1] == 1

if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)

// Trailing stop loss logic
// For long positions, trail 1 point below the up plot
longStopPrice = up - 1

// For short positions, trail 1 point above the dn plot
shortStopPrice = dn + 1

strategy.exit("Trailing Stop Long", "Long", trail_offset=longStopPrice)
strategy.exit("Trailing Stop Short", "Short", trail_offset=shortStopPrice)


Mehr