Strategie der ATR-Strailing-Stop-Bänder

Schriftsteller:ChaoZhang, Datum: 2023-10-19 12:42:26
Tags:

img

Übersicht

Der Kerngedanke dieser Strategie besteht darin, den Indikator Average True Range (ATR) zu verwenden, um eine anpassungsfähige Trailing Stop Loss-Linie zu setzen, um den Schutz von profitablen Positionen zu maximieren und gleichzeitig einen vorzeitigen Stop Loss zu vermeiden. Der ATR-Indikator kann die Volatilität des Marktes dynamisch erfassen und die Stop Loss-Distanz basierend auf der Marktvolatilität anpassen, um einen effektiven Stop Loss zu gewährleisten und gleichzeitig die Wahrscheinlichkeit, dass ein Stop Loss ausgelöst wird, zu minimieren.

Strategie Logik

Diese Strategie verwendet den N-Perioden-Durchschnitt des ATR-Indikators multipliziert mit einem Faktor als Basis-Stop-Loss-Distanz. Je größer der ATR-Wert, desto größer die Marktvolatilität, desto breiter ist die Stop-Loss-Distanz. Je kleiner der ATR-Wert, desto enger ist die Stop-Loss-Distanz. Dies ermöglicht eine dynamische Anpassung der Stop-Loss-Distanz basierend auf der Marktvolatilität.

Insbesondere wird in der Strategie folgende Kernlogik angewandt:

  1. Der ATR-Wert der ATR-Periode (nATRPeriode) wird berechnet.

  2. Die Basisstop-Loss-Distanz nLoss wird durch Multiplikation des ATR-Wertes mit einem Faktor (nATRMultip) ermittelt.

  3. Aktualisieren Sie die Stop-Loss-Linie xATRTrailingStop basierend auf der aktuellen Höchst-, Tief- und Stop-Loss-Linie der vorherigen Periode.

  4. Wenn der aktuelle Tiefpunkt die Stop-Loss-Linie der vorherigen Periode auslöst, bewegt sich die Stop-Loss-Linie bis unter den Tiefpunkt von nLoss-Distanz.

  5. Wenn der aktuelle Höchststand die Stop-Loss-Linie der vorherigen Periode auslöst, bewegt sich die Stop-Loss-Linie nach unten über den Höchststand um nLoss-Distanz.

  6. Wenn der Stop-Loss nicht ausgelöst wird, wird die Stop-Loss-Linie anhand der Entfernung des nahen Preises angepasst.

  7. Hinzufügen einer optionalen Wickenschutzabstand für eine weitere Optimierung der Stop-Loss-Linie.

  8. Zeichnen Sie Bollinger-Bänder, um die obere und untere Grenze der Stop-Loss-Linie zu visualisieren.

  9. Bestimmung der Positionsrichtung anhand der Farbe der Stop-Loss-Linie.

Die Strategie verwendet flexibel den ATR-Indikator, um die Anpassung der Stop-Loss-Linie an die Marktvolatilität zu ermöglichen und eine angemessene Stop-Loss-Distanz zu gewährleisten und gleichzeitig einen übermäßigen Stop-Loss zu vermeiden, der zu unnötigen Verlusten von Positionen führt.

Vorteile

Die Vorteile dieser Strategie:

  1. Verwenden Sie den ATR-Indikator, um die Stop-Loss-Distanz dynamisch an unterschiedliche Marktbedingungen anzupassen.

  2. Ein anpassbarer Multiplikator ermöglicht eine flexible Anpassung der Stop-Loss-Distanz.

  3. Die Addition von Bollinger Bands ermöglicht die Visualisierung der oberen und unteren Grenzen der Stop-Loss-Linie.

  4. Optionaler Wickenschutz vermeidet Whipsaw in verschiedenen Märkten.

  5. Kann als Trailing Stop Loss verwendet werden, um den Drawdown von profitablen Positionen zu maximieren.

  6. Strategie Logik ist klar und leicht zu verstehen mit wenigen optimierbaren Parametern.

  7. Anwendbar für mehrere Produkte und Zeitrahmen.

Risiken

Einige Risiken dieser Strategie sind zu beachten:

  1. Der ATR-Indikator reagiert langsam auf Marktschocks, was zu einer großen Stop-Loss-Distanz führt.

  2. Eine übermäßige Multiplikator-Einstellung vergrößert auch die Stop-Loss-Distanz und erhöht das Verlustrisiko.

  3. Der Wick-Schutz kann die Stop-Loss-Linie zu locker machen, wenn die Whipsaw zunimmt.

  4. Eintrittsregeln, die nicht berücksichtigt werden, können nicht als Eintritts-/Austrittsstrategie verwendet werden.

  5. Umfangreiche Tests und Optimierungen der für verschiedene Produkte und Zeitrahmen erforderlichen Parameter.

  6. Ein Stop-Loss-Breakout kann Verluste vergrößern und erfordert eine effektive Kapitalverwaltung.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Versuche verschiedene ATR-Perioden, um die Stoppverlustdistanz zu optimieren.

  2. Anpassen des Multiplikators auf das Gleichgewicht zwischen Stop-Loss-Distanz und Wahrscheinlichkeit.

  3. Optimieren Sie die Schutzdauer des Dochtes, um Whipsaw zu verhindern.

  4. Versuchen Sie, zusätzlich zu einem Stop-Loss Einstiegsbedingungen hinzuzufügen, um es zu einer Eintritts-/Austrittsstrategie zu machen.

  5. Hinzufügen eines Trendindikators, um die Stop-Loss-Distanz anhand des Trends anzupassen.

  6. Stoppverlust anpassen, basierend auf der Elliott-Wellen-Theorie.

  7. Die Risikopositionsgröße wird auf der Grundlage der Risikopositionsgröße angegeben, wenn die Risikopositionsgröße der Risikopositionsgröße angegeben wird.

Zusammenfassung

Diese Strategie nutzt die adaptive Eigenschaft des ATR-Indikators, um einen dynamischen Stop-Loss-Mechanismus zu entwerfen. Während sie den Stop-Loss gewährleistet, minimiert sie auch unnötige Stop-Loss-Trigger. Die Strategielogik ist einfach und klar und ermöglicht eine flexible Optimierung basierend auf den Bedürfnissen.


/*backtest
start: 2022-10-12 00:00:00
end: 2023-10-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v2.0 13/10/2014
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
// Modified by River to add Bands, and change color of Trailing Stop and add Wick Protection. Now turned into a Strategy for Backtesting Purposes.
// After backtesting, it seems clear that it functions well as a Trailing Stop, but not as an Entry/Exit strategy.
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stop Bands Strategy[R] ", overlay = true)
nATRPeriod = input(5)
nATRMultip = input(4)
length = input(30, "#Periods of Wick Protection", minval=2)
bType = input(0, "Max [1] or Avg Wick Protection [0]", minval=0, maxval=1)
avgupperwick = sma(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
maxupperwick = highest(close[1] <= open[1] ? high[1] - open[1] : high[1] - close[1], length)
avglowerwick = sma(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
maxlowerwick = highest(close[1] > open[1] ? open[1] - low[1] : close[1] - low[1], length)
upperwick = bType == 0 ? avgupperwick : maxupperwick
lowerwick = bType == 0 ? avglowerwick : maxlowerwick
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR 
upperband = iff(high < nz(upperband[1], 0) and high[1] < nz(upperband[1], 0), min(nz(upperband[1]), high + nLoss + upperwick), high + nLoss + upperwick)
lowerband = iff(low > nz(lowerband[1], 0) and low[1] > nz(lowerband[1], 0), max(nz(lowerband[1]), low - nLoss - lowerwick), low - nLoss - lowerwick) 
xATRTrailingStop = iff(low > nz(xATRTrailingStop[1], 0) and low[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), low - nLoss - lowerwick),
 iff(high < nz(xATRTrailingStop[1], 0) and high[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), high + nLoss + upperwick), 
//                        iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), high + nLoss + upperwick, iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), low - nLoss - lowerwick,0))))
 iff(low <= nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), upperband[1], iff(high >= nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), lowerband[1],0))))

pos =	iff(close[1] > nz(xATRTrailingStop[1], 0) and low <= nz(xATRTrailingStop[1], 0), 1,
 iff(close[1] < nz(xATRTrailingStop[1], 0) and high >= nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
color = pos == 1 ? red: pos == -1 ? green : blue 
plot(upperband, color=red, title="ATR Upper")
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop", linewidth=2)
plot(lowerband, color=green, title="ATR Lower")

longCondition = (color == green and color[1] == red)
if (longCondition)
    strategy.entry("Long", strategy.long)
longExitCondition = (color == red and color[1] == green)
if (longExitCondition)
    strategy.close("Long")

shortCondition = (color == red and color[1] == green)
if (shortCondition)
    strategy.entry("Short", strategy.short)
shortexitCondition = (color == green and color[1] == red)
if (shortexitCondition)
    strategy.close("Short")


Mehr