Die Ressourcen sind geladen. Beförderung...

Die ATR-Strategie wird eingestellt.

Schriftsteller:ChaoZhang, Datum: 2023-10-09 16:59:57
Tags:

Übersicht

Diese Strategie setzt eine dynamische Stop-Loss-Linie auf der Grundlage des Indikators Average True Range (ATR), um Kursänderungen zu verfolgen, um Stop-Loss zu schützen und gleichzeitig den Gewinn zu maximieren.

Strategie Logik

Die Strategie wird hauptsächlich durch folgende Schritte umgesetzt:

  1. Berechnung des ATR-Indikators, der ATR-Period wird durch den Parameter nATRPeriod festgelegt, Standardwert 5

  2. Berechnung der Stop-Loss-Linie auf der Grundlage des ATR-Werts, wobei die Stop-Loss-Größe durch den Parameter nATRMultip festgelegt wird, Standardwert 3,5 mal der ATR;

  3. Wenn der Preis steigt, wenn er höher als die vorherige Stop-Loss-Linie ist, wird die Stop-Loss-Linie auf den Preis abzüglich der Stop-Loss-Größe angepasst; wenn der Preis fällt, wenn er niedriger als die vorherige Stop-Loss-Linie ist, wird die Stop-Loss-Linie auf den Preis plus die Stop-Loss-Größe angepasst;

  4. Beurteilen, ob der Preis die Stop-Loss-Linie durchbricht, wenn er durchbricht, senden Kauf- oder Verkaufssignale;

  5. Eintritt in Long- oder Short-Positionen auf der Grundlage der Signalbrechung der Stop-Loss-Linie und schließt Positionen, wenn der Preis die Stop-Loss-Linie erneut berührt.

Wenn der Preis steigt, bewegt sich die Stop-Loss-Linie kontinuierlich nach oben, um Gewinne zu erzielen. Wenn der Preis fällt, bewegt sich die Stop-Loss-Linie kontinuierlich nach unten, um Verluste zu stoppen. Der ATR-Indikator kann die Kursschwankungen genauer widerspiegeln. Die dynamische Anpassung der Stop-Loss-Linie basierend auf ATR kann überaggressive oder überkonservative Stop-Loss vermeiden.

Analyse der Vorteile

  • Dynamische Anpassung der Stop-Loss-Linie für einen zeitnahen Stop-Loss, um eine Verlusterweiterung zu vermeiden
  • Die Anpassung der Stop-Loss-Linie ist relativ reibungslos, um einen vorzeitigen Stop-Loss zu vermeiden.
  • Verwenden Sie den ATR-Indikator, um eine vernünftigere Stop-Loss-Größe auf der Grundlage der letzten Volatilität zu berechnen
  • Trail Stop-Loss-Linie, um effektiv Gewinne zu erzielen

Risikoanalyse

  • Die Einstellung des ATR-Parameters muss vorsichtig erfolgen, zu kurze ATR-Periode kann zu einer übermäßigen Schwankung der Stop-Loss-Linie führen, zu lange kann die Preisänderung in der Zeit nicht widerspiegeln
  • Die Stop-Loss-Größe muss entsprechend der spezifischen Aktienvolatilität festgelegt werden, zu hohe oder zu geringe Werte beeinflussen die Strategieleistung
  • Trailing-Stop-Loss kann die Gewinnspanne verringern, indem der Gewinn vor einem weiteren Preisanstieg gestoppt wird
  • Häufige Positionsanpassungen können zu höheren Handelskosten führen

Parameter können optimiert werden, indem die ATR-Periode und die Stop-Loss-Größe angepasst werden, um das optimale Gleichgewicht zwischen Stop-Loss und Trailing zu finden.

Optimierungsrichtlinien

  • Optimieren Sie den ATR-Periodenparameter, damit Änderungen der Stop-Loss-Linie den Kursschwankungen näher folgen
  • Optimieren Sie den Stop-Loss-Größenparameter für einen vernünftigeren Stop-Loss
  • Hinzufügen anderer Indikatoren zum Filtern des Eintragzeitpunkts
  • Gehen Sie nur lang, wenn ein offensichtlicher Aufwärtstrend auftritt
  • Überlegen Sie, einen Wiedereintrittsmechanismus hinzuzufügen, um an Aktien mit Stop-Loss teilzunehmen, bei denen jedoch ein anhaltender Anstieg erwartet wird

Zusammenfassung

Die Strategie realisiert Stop-Loss und Profit-Taking während des Halts durch dynamische ATR-Trailing-Stop-Loss-Linie. Im Vergleich zu festen Stop-Loss-Punkten passt sie sich besser an Preisschwankungen an und vermeidet übermäßig aggressiven oder übermäßig konservativen Stop-Loss. Der ATR-Indikator macht die Stop-Loss-Linie-Anpassung zielgerichteter. Aber Parameter und Wiedereintrittsstrategien müssen weiter optimiert werden, um unnötige Stopps zu reduzieren und die Gewinnmarge zu erweitern. Insgesamt ist dies eine gute dynamische Trailing-Stop-Loss-Idee, die weitere Forschung und Anwendung wert ist.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@okadoke
////////////////////////////////////////////////////////////
// Based on Average True Range Trailing Stops Strategy by HPotter
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
////////////////////////////////////////////////////////////
strategy(title="ATR Trailing Stops Strategy", shorttitle="ATRTSS", overlay = true, 
  initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0)
  
nATRPeriod      = input(5, "ATR Period")
nATRMultip      = input(3.5, "ATR Multiplier")
useShorts       = input(false, "Test w/Shorts?")
daysBackMax     = input(defval = 360, title = "Max Days Back to Test", minval = 0)
daysBackMin     = input(defval = 0, title = "Min Days Back to Test", minval = 0)
msBackMax       = 1000 * 60 * 60 * 24 * daysBackMax
msBackMin       = 1000 * 60 * 60 * 24 * daysBackMin

xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
xATRTrailingStop = na
xATRTrailingStop := 
 iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
  iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), 
   iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) 
                       
pos = na 
pos := 
 iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, 
  iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
        
color = pos == -1 ? red: pos == 1 ? green : blue 
plot(xATRTrailingStop, color=color, title="ATR Trailing Stop")

isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin)))

buy     = crossover(close, xATRTrailingStop)
sell    = crossunder(close, xATRTrailingStop)

strategy.entry("LONG", long=true, when=buy and isWithinTimeBounds)
strategy.close("LONG", when=sell and isWithinTimeBounds)
strategy.entry("SHORT", long=false, when=useShorts and sell and isWithinTimeBounds)
strategy.close("SHORT", when=useShorts and buy and isWithinTimeBounds)



Mehr