Trendfolgende Handelsstrategie basierend auf ATR und Standardabweichungskanälen


Erstellungsdatum: 2024-01-05 16:34:27 zuletzt geändert: 2024-01-05 16:34:27
Kopie: 0 Klicks: 931
1
konzentrieren Sie sich auf
1617
Anhänger

Trendfolgende Handelsstrategie basierend auf ATR und Standardabweichungskanälen

Überblick

Die Strategie, die als “ATR-Trend-Tracking-Strategie” bezeichnet wird, ist eine Handelsstrategie, die auf der Grundlage der durchschnittlichen tatsächlichen Schwankungsbreite (ATR) eine Stop-Loss-Einstellung vornimmt und den Zeitpunkt der Markteintritt anhand des Standard-Differenz-Kanals beurteilt. Die Strategie gilt für Finanzinstrumente mit deutlichen Trends wie Aktienindizes, Devisen und Waren.

Strategieprinzip

Die Strategie verwendet den ATR-Indikator, um den Stop-Loss-Preis einzustellen. Der ATR-Indikator spiegelt die Marktfluktuation wider und kann die Stop-Loss-Distanz dynamisch einstellen. Die Strategie berechnet den ATR-Wert durch Eingabe der ATR-Zyklen und der Multiplikatoren, die dann mit dem Multiplikator als Stop-Loss-Distanz multipliziert werden.

ATR线 = 前一日ATR线 ± nLoss(nLoss = nATRMultip * ATR值)

若收盘价 > ATR线,ATR线上调至收盘价 - nLoss 
若收盘价 < ATR线,ATR线下调至收盘价 + nLoss

Auf diese Weise kann die ATR-Linie dynamisch an die Preisschwankungen angepasst werden, um einen Trend-Tracking-Stopp zu ermöglichen.

Zusätzlich zu den ATR-Stopps verwendet die Strategie auch die Standarddeviance-Kanal, um die Markteintrittszeit zu bestimmen. Die Berechnungsformel für die Standarddeviance-Kanal lautet:

中线 = ATR止损线
上轨 = 中线 + n倍标准差
下轨 = 中线 - n倍标准差  

Wenn der Preis die Mittellinie von unten nach oben durchbricht, machen Sie mehr; wenn der Preis die Mittellinie von oben nach unten durchbricht, machen Sie weniger.

Strategische Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass der ATR-Indikator als Stop-Loss-Tool verwendet wird, um die Stop-Loss-Distanz dynamisch an die Marktfluktuation anzupassen, um Trend-Stopp-Loss zu ermöglichen und das Risiko effektiv zu kontrollieren.

Außerdem kann man mit Hilfe von Standard-Differenz-Kanälen die Zeit der Markteintrittsentscheidung nutzen, um häufige Börsengänge zu vermeiden, die durch geringe Preisschwankungen verursacht werden.

Risiken und Lösungen

Das Hauptrisiko dieser Strategie besteht darin, dass die Risiken nicht effektiv kontrolliert werden können, wenn die Stoppdistanz zu lang ist. Die Stoppdistanz über eine Stunde ist anfällig für Marktlärm. Für diese Risiken können die ATR-Zyklen und die ATR-Multiplikatoren angepasst werden, um die beste Kombination von Parametern zu finden.

Ein weiteres Risiko besteht darin, dass die Standard-Deviation-Channel-Parameter falsch eingestellt sind, was zu einer zu hohen oder zu niedrigen Häufigkeit der Positionöffnung führt. Die optimale Parameter können durch Parameteroptimierung gefunden werden.

Optimierungsrichtung

Die Strategie kann in folgenden Bereichen optimiert werden:

  1. ATR-Zyklen und Multiplikator-Optimierung. Die Anpassung dieser beiden Parameter ermöglicht bessere Stop-Loss-Effekte.

  2. Optimierung der Parameter der Standarddifferenzkanäle. Optimierung der Parameter der Kanäle, um bessere Markteinführungen zu erzielen.

  3. Filter für andere Indikatoren hinzufügen. Sie können Indikatoren wie beispielsweise Moving Averages und K-Line-Formen hinzufügen, um die Richtung des Trends zu bestimmen und die Gewinnrate zu verbessern.

  4. Optimierung der Positionsöffnung und der Positionslogik. Es kann festgelegt werden, dass der Preis die Standarddefizitkanal erreicht und erst nach erneuter Bestätigung der K-Linie geöffnet wird.

Zusammenfassen

Diese Strategie basiert auf dem ATR-Indikator, um Trend-Tracking-Stopps zu realisieren, und die Standard-Differenz-Kanal hilft bei der Entscheidung über die Markteintrittszeit. Der Vorteil der Strategie besteht darin, dass die Stop-Loss-Risiko-Kontrolle wirkt und für den Trendhandel geeignet ist. Die Risiken und Optimierungsrichtungen werden auch klar analysiert.

Strategiequellcode
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version = 2
strategy(title="Average True Range Strategy", overlay = true)
nATRPeriod = input(11) //Hur många perioder ATR är på
nATRMultip = input(0.5) //Hur många gånger nuvarande ATR multipliceras med
xATR = atr(nATRPeriod)
nLoss = nATRMultip * xATR
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 = 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))) 

stdev3 = 14*stdev(xATR, nATRPeriod)
band1 = xATRTrailingStop+stdev3 //Översta stdev bandet
band2 = xATRTrailingStop-stdev3 //Nedersta stdev bandet


// Datum och tid
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2013, title = "From Year", minval = 2013)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start 
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest slut
startTimeOk()  => true
initial_capital = 100000

take = close > xATRTrailingStop

if( startTimeOk() ) and (pos == 1)
//if (pos == 1) 
    strategy.entry("Long", strategy.long, comment = "KOP")
    strategy.exit("Long", when = take)
   
if( startTimeOk() ) and (pos == -1)
//if (pos == -1)
    strategy.entry("Short", strategy.short, comment = "SALJ")
   
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(xATRTrailingStop, color=red, title="ATR Trailing Stop") //Mittersta linjen som är triggerlinjen för köp/sälj
plot(band1, color=red)
plot(band2, color=blue)