ATR-Trend nach Strategie auf Basis des Standard-Abweichungskanals

Schriftsteller:ChaoZhang, Datum: 2024-01-05 16:34:27
Tags:

img

Übersicht

Diese Strategie mit dem Namen ATR Trend Following Strategy ist eine Trend-Folgende Handelsstrategie, die auf der Basis von Average True Range (ATR) für Stop Loss und Standard Deviation Channel für Einstiegssignale basiert.

Handelslogik

Die Strategie verwendet den ATR-Indikator, um den Stop-Loss-Preis festzulegen. ATR spiegelt die Volatilität des Marktes wider und kann verwendet werden, um die Stop-Loss-Distanz dynamisch festzulegen. Die Strategie berechnet den ATR-Wert basierend auf der Benutzerinput-ATR-Periode und dem Multiplikator und verwendet den ATR-Wert multipliziert mit dem Multiplikator als Stop-Loss-Distanz.

ATR Line = Prior ATR Line ± nLoss (nLoss = nATRMultip * ATR value)  

If close > ATR Line, adjust ATR Line up to close - nLoss
If close < ATR Line, adjust ATR Line down to close + nLoss

Auf diese Weise kann sich die ATR-Linie dynamisch anhand der Kursschwankungen anpassen, um einen Trend nach dem Stop-Loss zu erreichen.

Zusätzlich zum ATR-Trailing-Stop verwendet die Strategie auch den Standardabweichungskanal zur Bestimmung der Eingangssignale.

Middle Line = ATR Trailing Stop Line   
Upper Band = Middle Line + n * Standard Deviation
Lower Band = Middle Line - n * Standard Deviation

Gehen Sie lang, wenn der Preis die mittlere Linie nach oben bricht, und kurz, wenn der Preis die mittlere Linie nach unten bricht.

Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass sie den ATR-Indikator verwendet, um auf der Grundlage der Marktvolatilität den Stop-Loss dynamisch festzulegen, wodurch der Trend nach dem Stop-Loss und eine wirksame Risikokontrolle ermöglicht werden.

Darüber hinaus vermeidet die Verwendung eines Standard-Abweichungskanals für Eingangssignale häufiges Öffnen von Positionen aufgrund kleiner Kursschwankungen.

Risiken und Lösungen

Das Hauptrisiko besteht darin, dass, wenn die Stop-Loss-Distanz zu groß ist, das Risiko nicht effektiv kontrolliert werden kann, aber wenn es zu klein ist, kann es leicht durch Marktlärm gestoppt werden.

Ein weiteres Risiko besteht in unangemessenen Standardabweichungskanalparametern, die zu einer zu hohen/niedrigen Eingangsfrequenz führen.

Möglichkeiten zur Verbesserung

Die Strategie kann in folgenden Aspekten verbessert werden:

  1. Optimieren Sie die ATR-Periode und den Multiplikator, um einen besseren Stop-Loss-Effekt zu erzielen.

  2. Optimierung der Standardabweichungskanalparameter für bessere Eingangssignale.

  3. Hinzufügen anderer Indikatoren zur Filterung, z. B. gleitender Durchschnitt, Kerzenmuster usw., um die Trendrichtung zu beurteilen und die Rentabilität zu verbessern.

  4. Optimierung der Ein- und Ausstiegslogik, z. B. Eröffnung von Positionen erst nach Bestätigung des Kerzenmusters, wenn der Preis die Kanalbänder erreicht.

Zusammenfassung

Die Strategie erreicht einen Trend nach dem Stop-Loss basierend auf dem ATR-Indikator und verwendet einen Standard-Abweichungskanal für Einstiegssignale. Ihre Vorteile liegen in der guten Risikokontrolle für den Trendhandel. Risiken und Verbesserungen werden auch klar analysiert. Die Strategie ist weiteren Tests und Optimierungen wert und hat praktischen Handelswert.


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



Mehr