SuperTrend-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-10-13 17:03:55
Tags:

Übersicht

Die SuperTrend-Strategie ist eine Trend-folgende Strategie, die auf der Berechnung des durchschnittlichen wahren Bereichs basiert. Sie verwendet ATR, um Stop-Loss-Linien festzulegen und die Trendrichtung zu bestimmen, indem beurteilt wird, ob der Preis die Stop-Loss-Linien durchbricht und somit Handelssignale erzeugt.

Strategie Logik

Die Strategie berechnet zunächst den Durchschnittlichen Wahren Bereich (ATR) über einen bestimmten Zeitraum. Dann verwendet sie den ATR-Wert multipliziert mit einem Skalierungsfaktor, um die lange Stop-Loss-Linie und die kurze Stop-Loss-Linie zu berechnen. Die spezifische Berechnung ist wie folgt:

atr = mult * atr(length)

longStop = hl2 - atr 

shortStop = hl2 + atr

Wo Länge der Zeitraum ist, für den ATR berechnet wird, und Mult der Skalierungsfaktor für ATR ist.

Nach der Berechnung der Stop-Loss-Linien beurteilt die Strategie weiterhin, ob der Preis die Stop-Loss-Line des vorherigen Balkens durchbricht, um die Trendrichtung zu bestimmen:

dir := dir == -1 and close > shortStopPrev ? 1 :  
         dir == 1 and close < longStopPrev ? -1 : dir

Wenn die lange Stop-Loss-Linie gebrochen wird, gilt der Trend als bullisch.

Gemäß der Änderung der Trendrichtung werden Kauf- und Verkaufssignale erzeugt:

buySignal = dir == 1 and dir[1] == -1

sellSignal = dir == -1 and dir[1] == 1 

Schließlich werden entsprechende Handelsmaßnahmen ergriffen, wenn Kauf- oder Verkaufssignale erscheinen.

Vorteile

  1. Die Verwendung von ATR zur Berechnung von Stop-Loss-Linien kann Marktlärm effektiv filtern und zuverlässigere Trendsignale erfassen.

  2. Die Strategie hat nur wenige Parameter, die leicht zu verstehen und zu bedienen sind.

  3. Der Einsatz eines Stop-Loss-Line-Breakouts zur Bestimmung der Trendrichtung kann die Risiken effektiv kontrollieren und den Stop-Loss rechtzeitig beenden.

  4. Konfigurierbar für den Handel mit nur langen oder zwei Richtungen, um unterschiedlichen Handelsstilen gerecht zu werden.

  5. Sie kann in jedem Zeitrahmen und für verschiedene Handelsinstrumente verwendet werden.

Risiken

  1. In den Märkten mit unterschiedlichen Kursbereichen kann der ATR höher gezogen werden, was zu einem breiteren Stop-Loss und mehr falschen Signalen führt.

  2. Die optimale Kombination der Parameter ist unsicher. ATR-Periode und Multiplikator müssen basierend auf den Marktbedingungen optimiert werden.

  3. Der optimale Zeitrahmen für jedes Handelsinstrument ist unbekannt und muss getestet werden.

  4. Der beste Einstiegszeitpunkt ist unklar und es gibt eine gewisse Verzögerung.

  5. Es besteht die Gefahr, nicht auf dem Markt zu sein, wenn der Trend schwach ist.

  6. Es besteht die Gefahr, dass ein Stop-Loss getroffen wird.

Erweiterung

  1. Andere Indikatoren wie MACD, RSI können zur Filtration eingesetzt werden, um falsche Signale in den verschiedenen Märkten zu vermeiden.

  2. Maschinelles Lernen oder genetische Algorithmen können verwendet werden, um die optimalen Parametermengen zu finden.

  3. Die Parameteroptimierung kann für jedes Instrument durchgeführt werden, um die beste ATR-Periode und den besten Multiplikator zu finden.

  4. Volumenindikatoren können verwendet werden, um einen besseren Eintrittszeitpunkt zu bestimmen und einen vorzeitigen Eintritt zu vermeiden.

  5. Überlegen Sie, ob Sie Verriegelungsstrategien verwenden, um Positionen zu halten, wenn Sie nicht auf dem Markt sind.

  6. Die Stop-Loss-Breite kann mit Trendstärke-Indikatoren entspannt und optimiert werden.

Schlussfolgerung

Die SuperTrend-Strategie verwendet dynamische Stop-Loss-Linien, die von ATR berechnet werden, um Trendänderungen zu erkennen, wenn ein Preisbruch auftritt. Es ist ein relativ zuverlässiges und risikokontrolliertes Trendfolgensystem. Die Strategie ist einfach zu bedienen und auf verschiedene Instrumente anwendbar, aber Parameter und Regeln müssen für eine bessere Leistung auf verschiedenen Märkten optimiert werden. Die Kombination mit anderen technischen Indikatoren und Strategien kann die Handelsergebnisse weiter verbessern. Im Allgemeinen basiert SuperTrend auf wissenschaftlich fundierten Konzepten und ist für weitere Forschung und Anwendung durch Händler wert.


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

//@version=4
// strategy("SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000)

LongOnly = input(title="Long Only ?", type=input.bool, defval=true)
length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true)

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2019, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2020, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

////////////////////////////////////////////////////////////////////////////////


atr = mult * atr(length)

longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : 
   dir == 1 and close < longStopPrev ? -1 : dir

longColor = color.green
shortColor = color.red


plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)

plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)

if LongOnly
    if buySignal and time_cond
        strategy.entry("Long", strategy.long, comment="Long")
    
    if(sellSignal and time_cond)
        strategy.close("Long")
else
    if buySignal and time_cond
        strategy.entry("Long", strategy.long, comment="Long")
    else
        strategy.cancel("Long")
    
    
    if sellSignal and time_cond
        strategy.entry("Short", strategy.short, comment="Short")
    else
        strategy.cancel("Short")

if not time_cond
    strategy.close_all()


Mehr