Supertrend-Handelsstrategie auf der Grundlage von ATR- und MA-Kombination

Schriftsteller:ChaoZhang, Datum: 2023-12-01 16: 40:27
Tags:

img

Übersicht

Die Supertrend-Handelsstrategie ist eine Trendfolgestrategie, die auf der Grundlage von Average True Range (ATR) und Moving Average (MA) basiert. Sie beinhaltet die Vorteile sowohl des Trend-Tracking als auch des Breakout-Handels, um die zwischengeschaltete Trendrichtung zu identifizieren und Handelssignale basierend auf Trendänderungen zu generieren.

Die Hauptidee hinter dieser Strategie ist es, lang oder kurz zu gehen, wenn der Preis durch den Supertrend-Kanal bricht, was auf eine Trendumkehr hinweist.

Wie diese Strategie funktioniert

Die Berechnung des Supertrends umfasst mehrere Schritte:

  1. Berechnen Sie den ATR. Der ATR spiegelt die durchschnittliche Volatilität über einen bestimmten Zeitraum wider.
  2. Berechnen Sie die Mittellinie auf der Grundlage des höchsten Höchst- und des niedrigsten Tiefstands. Die Mittellinie wird wie folgt berechnet: (Höchsthöchst + Tiefsttief) /2
  3. Berechnen Sie den oberen und unteren Kanal auf der Grundlage von ATR und ATR-Multiplikator, der vom Händler festgelegt wurde. Der obere Kanal wird berechnet als: Mittellinie + (ATR × Multiplikator). Der untere Kanal wird berechnet als: Mittellinie - (ATR × Multiplikator).
  4. Vergleichen Sie den Schlusskurs mit dem oberen / unteren Kanal, um die Trendrichtung zu bestimmen. Wenn der Schlusskurs über dem oberen Kanal liegt, ist der Trend aufwärts. Wenn der Schlusskurs unter dem unteren Kanal liegt, ist der Trend abwärts.
  5. Ein Ausbruch über oder unter dem Kanal erzeugt umgekehrte Handelssignale. Zum Beispiel signalisiert ein Ausbruch über dem oberen Kanal einen langen Eintritt, während ein Ausbruch unter dem unteren Kanal einen kurzen Eintritt signalisiert.

Der Vorteil dieser Strategie besteht darin, dass sie sowohl Trendfolgung als auch Trendumkehrtechniken kombiniert. Sie identifiziert den wichtigsten Trend und ist gleichzeitig in der Lage, Umkehrmöglichkeiten rechtzeitig zu erfassen. Darüber hinaus hilft der Stop-Loss/Take-Profit-Mechanismus bei der Kontrolle von Risiken.

Stärken

Die Supertrend-Strategie weist folgende Stärken auf:

1. Durchschnittliche Entwicklung verfolgen

Der Supertrend-Kanal wird auf der Grundlage des ATR berechnet, der den mittleren Kursschwankungsbereich effektiv widerspiegelt.

2. Umkehrungen rechtzeitig erfassen

Preisbrechungen aus dem Kanal erzeugen schnell Handelssignale, so dass wichtige Trendumkehrungen rechtzeitig erfasst werden können.

3. Stop-Loss und Profit nehmen

Die Strategie setzt vordefinierte Stop-Loss- und Gewinnniveaus für den automatischen Ausstieg mit Risikokontrolle. Dies reduziert das Risiko eines übermäßigen Stop-Loss erheblich und ermöglicht eine bessere Trendverfolgung.

4. Einfach umzusetzen

Die Strategie verwendet hauptsächlich grundlegende Indikatoren wie MA und ATR. Dies macht sie für den Live-Handel ziemlich einfach zu verstehen und umzusetzen.

**5. Hohe Kapitaleffizienz **

Die Supertrend-Strategie sorgt durch die Verfolgung von Zwischentrends und die Kontrolle einzelner Schwankungen insgesamt für eine hohe Kapitaleffizienz.

Risikoanalyse

Die Supertrend-Strategie weist auch einige mögliche Schwächen auf:

1. Unterdurchschnittliche Marktleistung

Die Strategie konzentriert sich auf den mittelfristigen bis langfristigen Trendhandel.

2. Empfindlich für die Parameteroptimierung

Die für die ATR-Periode und den Multiplikator gewählten Werte haben relativ große Auswirkungen auf die Strategieleistung.

3. Verzögerungsprobleme können auftreten

Es kann Probleme mit der Berechnung des Supertrend-Kanals geben, die zu einer zeitlosen Signalgenerierung führen.

4. Strenges Stop-Loss-Management erforderlich

In extremen Marktbedingungen kann eine unzureichend hohe Stop-Loss-Zulassung oder ein unzureichendes Risikomanagement zu hohen Verlusten führen.

Verbesserungsbereiche

Es gibt weitere Möglichkeiten, diese Supertrend-Strategie zu optimieren:

1. Kombination mehrerer ATR-Perioden

Die Kombination der ATR-Werte über verschiedene Zeiträume wie 10 Tage und 20 Tage bildet einen zusammengesetzten Indikator, der dazu beiträgt, die Empfindlichkeit und Verzögerungsprobleme zu verbessern.

2. Hinzufügen von Stop-Loss-Modulen

Durch das Hinzufügen anspruchsvollerer Stop-Loss-Mechanismen wie Triple-Stop-Loss, Volatility-Stop-Loss und Sequential-Stop-Loss könnten die Risikokontrolle und die Reduktion von Drawdowns gestärkt werden.

3. Optimierung der Parameter

Die Optimierung der Werte für ATR-Periode, Multiplikator und andere Inputs durch quantitative Methoden würde die Strategieleistung weiter steigern.

4. Integration von Modellen für maschinelles Lernen

Schließlich kann die Integration von Modellen für maschinelles Lernen die automatisierte Trenderkennung und Signalgenerierung ermöglichen, wodurch die Abhängigkeit von subjektiven Entscheidungen verringert und die Systemstabilität verbessert wird.

Schlussfolgerung

Die Supertrend-Handelsstrategie identifiziert mittlere Trendrichtung mithilfe von MA- und ATR-Indikatoren und erzeugt Trade-Ein- und Ausstiegssignale um Trendumkehrungen mit automatisierter Stop-Loss/Take-Profit-Implementierung.

Allerdings bestehen auch einige Mängel in Bezug auf unzureichende Reichweite Markt Eroberung und Verzögerungsprobleme. Weitere Optimierungen können über mehrere Dimensionen erforscht werden, einschließlich der Verwendung von zusammengesetzten ATR, Stärkung Stop-Loss-Module, Tuning-Parameter und die Integration von Machine-Learning-Modellen. Diese Verbesserungen werden wahrscheinlich die Stabilität und Effizienz der Supertrend-Strategie verbessern.


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

//@version=3
strategy("Supertrend V1.0 - Buy or Sell Signal",overlay=true)
Factor=input(3, minval=1,maxval = 100)
Pd=input(7, minval=1,maxval = 100)
//Calculating ATR
atrLength = input(title="ATR Length:",  defval=14, minval=1)
Stop_Loss_Factor = input(1.5, minval=0,step=0.01)
factor_profit = input(1.0, minval=0,step=0.01)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 10, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2016, title = "From Year", minval = 2009)
ToMonth   = input(defval = 4, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 10, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2039, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


// Calculate ATR
atrValue=atr(atrLength)
decimals = abs(log(syminfo.mintick) / log(10)) 
Atr = atrValue
if(decimals == 5)
    Atr := atrValue * 10000
if(decimals == 4)
    Atr := atrValue * 1000
if(decimals == 3)
    Atr := atrValue * 100
if(decimals == 2)
    Atr := atrValue * 10


//VJ2 Supertrend

Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))

TrendUp = 0.0
TrendUp:=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown = 0.0
TrendDown:=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn

Trend = 0.0
Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = 0.0
Tsl := Trend==1? TrendUp: TrendDown

linecolor = Trend == 1 ? green : red

plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend")

plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0)
//plot(Trend==1 and Trend[1]==-1,color = linecolor, style = circles, linewidth = 3,title="Trend")

plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0)
plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0)




//Strategy 
Trend_buy = Trend == 1 
Trend_buy_prev = Trend[1] == -1
algo_buy_pre = Trend_buy and Trend_buy_prev
algo_buy = algo_buy_pre == 1 ? 1 : na
Trend_sell= Trend == -1 
Trend_sell_prev = Trend[1] == 1
algo_sell_pre = Trend_sell and Trend_sell_prev
algo_sell = algo_sell_pre == 1 ? 1:na

strategy.entry("Long1", strategy.long, when= window() and algo_buy==1)

strategy.entry("Short1", strategy.short, when=window() and algo_sell==1)

bought = strategy.position_size > strategy.position_size 
sold = strategy.position_size < strategy.position_size 

longStop = Stop_Loss_Factor * valuewhen(bought, Atr, 0) 
shortStop = Stop_Loss_Factor * valuewhen(sold, Atr, 0) 
longProfit = factor_profit * longStop 
shortProfit = factor_profit * shortStop 


if(decimals == 5) 
    longStop := longStop *100000 
    longProfit := longProfit *100000 
if(decimals == 4) 
    longStop := longStop * 10000 
    longProfit := longProfit * 10000 
if(decimals == 3) 
    longStop := longStop * 1000 
    longProfit := longProfit * 1000 
if(decimals == 2) 
    longStop := longStop * 100 
    longProfit := longProfit *100 
if(decimals == 5) 
    shortStop := shortStop * 100000 
    shortProfit := shortProfit * 100000 
if(decimals == 4) 
    shortStop := shortStop * 10000 
    shortProfit := shortProfit * 10000 
if(decimals == 3) 
    shortStop := shortStop * 1000 
    shortProfit := shortProfit * 1000 
if(decimals == 2) 
    shortStop := shortStop * 100 
    shortProfit := shortProfit * 100 

strategy.exit("Exit Long", from_entry = "Long1", loss =longStop, profit = longProfit) 
strategy.exit("Exit Short", from_entry = "Short1", loss =shortStop, profit = shortProfit) 


Mehr