
Diese Strategie ist eine Tracking-Stopp-Strategie, die für die E-mini S&P500-Futures ((ES)) angewendet wird. Sie verwendet die 10-Tage-ATR als Referenz, um eine Stop-Line für Mehrköpfe und Leerköpfe mit 3x der ATR als Stop-Range einzurichten. Die Strategie beurteilt den Trend durch die Änderung der Richtung der ATR-Linie und erzeugt ein Einstiegssignal an einem Trendwendepunkt.
Diese Strategie verwendet hl2 als Preisquelle. Zuerst wird die 10-Tage-ATR berechnet und der Benutzer kann wählen, ob er die ATR mit der SMA-Methode oder der integrierten ATR-Funktion berechnet. Nachdem die ATR berechnet wurde, wird die 3-fache ATR als Spanne hinzugefügt.
Die Methode, um einen Trend zu bestimmen, ist, wenn der Preis die obere Grenze überschreitet, dann ist er oberwärts; wenn der Preis die untere Grenze überschreitet, dann ist er oberwärts. Wenn der Preis wieder in die Grenze zurückkehrt, wird der Trendwechsel bestätigt.
Nach dem Einstieg ist die Mehrkopf-Stopp-Linie auf die obere Grenze 1 Punkt nach unten und die Leerkopf-Stopp-Linie auf die untere Grenze 1 Punkt nach oben eingestellt, um einen scharfen Nachschubschutz zu gewährleisten.
Diese Strategie ist insgesamt eine allgemeinere Trend-Tracking-Strategie. Sie löst die Schwierigkeiten bei der Bestimmung des Stop-Loss-Bereichs und reduziert das Risiko durch die dynamische Anpassung der ATR. Gleichzeitig wird der Stop-Loss durch Gewinnschutz verfolgt.
/*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)