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