Langfristige Handelsstrategie auf Basis von SuperTrend

Schriftsteller:ChaoZhang, Datum: 2023-09-20 17:14:33
Tags:

Übersicht

Diese Strategie identifiziert lange Chancen mit Hilfe des SuperTrend-Indikators. Sie verwendet ATR und einen Multiplikator, um dynamische Unterstützungsniveaus für einen langen Einstieg zu bestimmen. Der Fokus liegt auf langen Trades.

Strategie Logik

  1. Die oberen und unteren Bands werden anhand der ATR-Periode, Multiplikator, berechnet.

  2. Der aktuelle Trend wird verfolgt, mit 1 für Aufwärtstrend und -1 für Abwärtstrend. Der Preisbruch über dem oberen Band wechselt den Trend von unten nach oben und erzeugt ein Kaufsignal. Der Bruch unter dem unteren Band wechselt von oben nach unten und erzeugt ein Verkaufssignal.

  3. Ein gleitender Durchschnitt wird als Trendfilter hinzugefügt. Kaufen Sie nur, wenn der Preis oberhalb des oberen Bandes über MA liegt. Verkaufen Sie nur, wenn der Preis unterhalb des unteren Bandes liegt. Dies vermeidet gefälschte Ausbrüche.

  4. Visuelle Helfer markieren Trends, Signale usw., um bei der Entscheidungsfindung zu helfen.

Analyse der Vorteile

Die Vorteile dieser Strategie:

  1. SuperTrend verfolgt dynamisch Preisänderungen und spiegelt Trendveränderungen zeitnah wider.

  2. Der ATR-Stop-Loss passt Stops anhand der Marktvolatilität an und hilft dabei, Gewinne zu erzielen.

  3. Der MA-Filter beseitigt falsche Signale aus Lärm in verschiedenen Märkten.

  4. Das visuelle Design präsentiert intuitiv die Strategie-Mechanik und die Marktlage.

  5. Nur eine Umkehr des Handelstrends macht ihn für langfristige Anlagen geeignet.

Risikoanalyse

Die wichtigsten Risiken sind:

  1. SuperTrend ist anfällig für Parameter. Häufige Bandanpassungen können zu Überhandel führen.

  2. In unruhigen Märkten können Stops häufig ausgelöst werden.

  3. Die Kosten für den Handel werden nicht berücksichtigt. Kleine Konten haben größere Auswirkungen.

  4. Keine Stop-Loss bedeutet ein hohes Abzugrisiko.

  5. Der Trendfilter kann einige Chancen verpassen.

Die Risiken können verringert werden, indem

  1. Optimierung der ATR-Parameter für eine niedrigere Frequenz.

  2. Hinzufügen einer gleichwertigen Balkenfilterung zur Vermeidung von Haltungen durch hohe Frequenz geringfügige Schwankungen.

  3. Implementierung von Stop Loss und Take Profit, um die Gewinne zu schützen.

  4. Anpassung der gleitenden Durchschnittsperiode an den Balancefiltereffekt.

  5. Optimierung des Geldmanagements zur Senkung der Auswirkungen auf die Handelskosten.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten verbessert werden:

  1. Verschiedene Preisquellen wie nahe, hoch usw. testen.

  2. Versuchen Sie andere dynamische Stop-Loss-Indikatoren wie Chandelier Exit.

  3. Zusätzliche Positionsgröße zur Optimierung der Kapitalverwertung.

  4. Um die Einträge zu verfeinern, sind Volatilitätsindikatoren einzubeziehen.

  5. Implementieren Sie Stop-Loss und Gewinn, um Risiken zu kontrollieren.

  6. Anpassung der Parameter für verschiedene Märkte.

  7. Erforschen Sie maschinelles Lernen für die Optimierung von Parametern.

  8. Kombination anderer Indikatoren zur Verbesserung der Filtergenauigkeit.

Schlussfolgerung

Diese Strategie verwendet SuperTrend mit dynamischen Stopps, um Trends zu bestimmen, und fügt einen MA-Filter hinzu, um lange Einträge zu identifizieren.


/*backtest
start: 2020-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("SuperTrend Long Strategy", overlay=true, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)

Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)

atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2

up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1 and close > ma
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0))

dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1 and close < ma
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0))

mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 70) : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 70) : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
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 = 9999, title = "To Year", minval = 999)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       

window()  => time >= start and time <= finish ? true : false

longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())

shortCondition = sellSignal
if (shortCondition)
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short, when = window())

buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)


Mehr