Dynamische Stop-Loss-Trailing-Trading-Strategie


Erstellungsdatum: 2023-10-09 16:59:57 zuletzt geändert: 2023-10-09 16:59:57
Kopie: 0 Klicks: 1077
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie basiert auf dem Indikator der durchschnittlichen realen Bandbreite (ATR), um eine dynamische Stop-Line zu setzen, die Veränderungen der Aktienpreise zu verfolgen und maximale Gewinne zu erzielen, während Stop-Loss-Schutz erreicht wird.

Strategieprinzip

Die Strategie wird in den folgenden Schritten umgesetzt:

  1. Die ATR-Periode wird mit dem Parameter nATRPeriod berechnet, wobei der Wert 5 als Default gilt.

  2. Die Stop-Line wird mit dem nATRMultip-Parameter berechnet, der 3,5 mal die Default-ATR ist.

  3. Wenn der Kurs der Aktie steigt, wird der Stop-Line-Wert auf den Kurs der Aktie minus den Stop-Loss-Wert angehoben, wenn er höher als die vorherige Stop-Loss-Linie ist; wenn der Kurs der Aktie sinkt, wird der Stop-Loss-Wert auf den Kurs der Aktie plus den Stop-Loss-Wert angehoben, wenn er niedriger als die vorherige Stop-Loss-Linie ist.

  4. Beurteilen, ob der Aktienpreis die Stop-Loss-Linie überschritten hat, was ein Kauf- oder Verkaufssignal auslöst;

  5. Nach dem Signal, die Stop-Line zu durchbrechen, gehen Sie in eine Über- oder Leerposition und platzieren Sie die Position, wenn Sie die Stop-Line erneut berühren.

Wenn der Kurs steigt, wird die Stop-Line ständig nach oben gedreht, um Gewinne zu sichern. Wenn der Kurs fällt, wird die Stop-Line ständig nach unten gedreht, um zu stoppen. Der ATR-Indikator kann die Schwankungen der Aktienpreise genauer widerspiegeln und die Stop-Line entsprechend der ATR-Dynamik anpassen.

Analyse der Stärken

  • Dynamische Anpassung der Stop-Line, zeitnahe Stop-Loss und Vermeidung von Verlusten
  • Die Stop-Line-Anpassung ist glatter und verhindert eine vorzeitige Stop-Line.
  • Der ATR-Indikator wird verwendet, um die neuesten Schwankungen zu berücksichtigen und eine vernünftigere Stop-Loss-Marge zu berechnen.
  • Das Tracking von Stop-Loss-Linien ermöglicht eine gute Gewinnschließung.

Risikoanalyse

  • Die Einstellung der ATR-Parameter erfordert Vorsicht. Zu kurze ATR-Perioden können zu starke Schwankungen der Stop-Line führen, und zu lange können die Preisschwankungen nicht rechtzeitig widerspiegeln
  • Die Stop-Loss-Margin-Parameter müssen je nach Aktienbewegungen eingestellt werden, und zu groß oder zu klein beeinflussen die Effektivität der Strategie.
  • Verlustverfolgung kann die Gewinnspanne verringern und die Verluste stoppen, bevor der Kurs wieder steigt
  • Häufige Positionsänderungen führen zu höheren Transaktionskosten

Die optimale Kombination von Parametern zur Ausgleichung von Stop-Loss und Tracking kann durch Parameteroptimierung, Anpassung der ATR-Zyklusparameter und der Stop-Loss-Marge gefunden werden. Es kann auch mit anderen technischen Indikatoren kombiniert werden, um die Markteinführungszeit zu filtern und unnötige Stop-Losses zu reduzieren.

Optimierungsrichtung

  • Optimierung der ATR-Zyklusparameter, um die Veränderung der Stop-Line näher an die Preisschwankungen zu bringen
  • Optimierung der Stop-Loss-Margin-Parameter, um die Stop-Loss-Rationalität zu verbessern
  • Hinzufügen von weiteren Indikatoren für die Filterzeit
  • Nur bei einer klaren Aufwärtstrend kann eine Überposition eingegangen werden.
  • Erwägen Sie eine Wiedereintrittsmechanik, um die Verluste zu vermeiden, die nach dem erwarteten weiteren Anstieg der Aktien anfallen werden.

Zusammenfassen

Die Strategie ermöglicht die Stop-Loss- und Profit-Locking-Methode durch die dynamische Anpassung der ATR-Stop-Line. Die Strategie ist besser an Aktienpreisfluktuationen angepasst und verhindert zu radikale oder konservative Stop-Losses als die feste Stop-Loss-Position. Die ATR-Messgröße macht die Anpassung der Stop-Loss-Line zielgerichteter.

Strategiequellcode
/*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)