Verfolgung der Supertrend-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-26
Tags:

img

Übersicht

Dies ist eine Supertrend-Tracking-Strategie, die hauptsächlich Supertrend-Indikatoren mit verschiedenen Parameter-Einstellungen kombiniert, um einen Tracking-Effekt zu erzielen, und einen Filterindikator zur Risikokontrolle verwendet.

Strategieprinzip

Diese Strategie besteht hauptsächlich aus drei Gruppen von Supertrend-Indikatoren mit unterschiedlichen Parameter-Einstellungen. Die erste Gruppe ist der Haupt-Supertrend-Indikator, der die Standardparameter für die grundlegende Beurteilung von Markttrends verwendet. Die zweite Gruppe ist der stellvertretende Supertrend-Indikator, der eine empfindlichere Verfolgung von Preisänderungen durch Verringerung der ATR-Periode und Erhöhung des ATR-Multiplikators erreicht. Die dritte Gruppe ist der Filter-Supertrend-Indikator, der die ATR-Periode und den ATR-Multiplikator angemessen erhöht, um falsche Ausbrüche zu filtern.

Wenn der Haupt-Supertrend ein Kaufsignal ausgibt, wenn der stellvertretende Supertrend auch ein synchronisiertes Signal ausgibt und die Filter-Supertrend-Richtung nach oben ist, wird die Strategie einen Tracking-Kauf übernehmen. Wenn der Haupt-Supertrend ein Verkaufssignal ausgibt, wenn der stellvertretende Supertrend auch ein synchronisiertes Signal ausgibt und die Filter-Supertrend-Richtung nach unten ist, wird die Strategie einen Tracking-Sell übernehmen. Dies kann den Haupttrend erfassen, während der flexible stellvertretende Supertrend-Indikator verwendet wird, um kleinere Anpassungen zu verfolgen und rechtzeitig Ein- und Stop-Loss zu erzielen.

Vorteile

  1. Die Strategieidee ist einfach und klar, leicht verständlich, für Anfänger geeignet
  2. Die Einstellung der Strategieparameter ist angemessen, um die Marktlage wirksam zu verfolgen und Risiken zu kontrollieren
  3. Das Strategiesignal ist genauer und zuverlässiger mit einer höheren Gewinnrate
  4. Kombination verschiedener Parameterkombinationen zur Erzielung eines Tracking-Effekts
  5. Durch das Hinzufügen eines Filtermechanismus können falsche Signale wirksam gefiltert und Risiken kontrolliert werden

Risiken

  1. Systematische Risiken des Bestands selbst
  2. Der Supertrend-Indikator kann in einigen Märkten zurückbleiben
  3. Falsche Einstellungen der ATR-Parameter können zu Signalentfernungen führen
  4. Unzureichendes Handelsvolumen kann es schwierig machen, Verluste vollständig zu reduzieren

Hauptmaßnahmen zur Risikoprävention:

  1. Wählen Sie Aktien mit guter Liquidität und hohen Schwankungen
  2. Verhältnismäßig optimierte Parameter zur Verringerung der Verzögerungsgefahr
  3. Parameterprüfung und Optimierung zur Verbesserung der Signalgenauigkeit
  4. angemessene Erhöhung des Transaktionsvolumens zur Gewährleistung von Verlustkürzung

Optimierungsrichtlinien

  1. Versuche verschiedene Kombinationen von ATR-Perioden zur Optimierung des Tracking-Effekts
  2. Versuchen Sie, ATR durch andere Volatilitätsindikatoren zu ersetzen
  3. Erhöhen oder verringern Sie die Anzahl der Supertrend-Kombinationen, um den Effekt zu testen
  4. Versuchen Sie, mit anderen Indikatoren für die Signalfilterung Optimierung zu kombinieren
  5. Versuche verschiedene Stop-Loss-Methoden, um die optimale Lösung zu finden

Zusammenfassung

Die Gesamtidee dieser Strategie ist klar und einfach. Durch die Koordinierung mehrerer Gruppen von Supertrend-Indikatoren mit verschiedenen Parameter-Einstellungen realisiert sie das Tracking des Eingangs und die Risikokontrolle. Das Strategiesignal ist mit guter Live-Performance genauer. Es ist für Anfänger geeignet, es zu lernen, und kann auch als Vorlage für das Testen und Optimieren verschiedener Indikatoren und Parameter verwendet werden. Dies ist eine Supertrend-Strategie, die es wert ist, empfohlen zu werden.


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

//@version=4
strategy("Supertrend TEST 2 Strategy", overlay = true, format=format.price, precision=2)

Periods = input(title="ATR Period", type=input.integer, defval=4)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=4.7)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
tp=close
sl=close

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
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
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green )
plotshape(buySignal and showsignals ? up : na, title="Лонг", text="Лонг", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white )
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
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red )
plotshape(sellSignal and showsignals ? dn : na, title="Шорт", text="Шорт", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white )
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white

sPeriods=input(title="ATR Period", type=input.integer, defval=8)
sMultiplier=input(title="dop ATR Multiplier", type=input.float, step=0.1, defval=1.5)
satr2 = sma(tr, sPeriods)
satr= changeATR ? atr(sPeriods) : satr2
ssup=ohlc4-(sMultiplier*satr)
ssup1 = nz(ssup[1],ssup)
ssup := close[1] > ssup1 ? max(ssup,ssup1) : ssup
sdn=ohlc4+(sMultiplier*satr)
sdn1 = nz(sdn[1], sdn)
sdn := close[1] < sdn1 ? min(sdn, sdn1) : sdn
strend = 1
strend := nz(strend[1], strend)
strend := strend == -1 and close > sdn1 ? 1 : strend == 1 and close < ssup1 ? -1 : strend
sbuySignal = strend == 1 and strend[1] == -1
ssellSignal = strend == -1 and strend[1] == 1

fPeriods=input(title="ATR Period", type=input.integer, defval=10)
fMultiplier=input(title="filter ATR Multiplier", type=input.float, step=0.1, defval=5)
fatr2 = sma(tr, fPeriods)
fatr= changeATR ? atr(fPeriods) : fatr2
fup=ohlc4-(fMultiplier*fatr)
fup1 = nz(fup[1],fup)
fup := close[1] > fup1 ? max(fup,fup1) : fup
fdn=ohlc4+(fMultiplier*fatr)
fdn1 = nz(fdn[1], fdn)
fdn := close[1] < fdn1 ? min(fdn, fdn1) : fdn
ftrend = 1
ftrend := nz(ftrend[1], ftrend)
ftrend := ftrend == -1 and close > fdn1 ? 1 : ftrend == 1 and close < fup1 ? -1 : ftrend
fbuySignal = ftrend == 1 and ftrend[1] == -1
fsellSignal = ftrend == -1 and ftrend[1] == 1
tcolor=color.new(color.gray,50)
fdnPlot = plot(ftrend == 1 ? na : fdn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=tcolor)
fupPlot = plot(ftrend == 1 ? fup : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=tcolor)



if (strategy.position_size > 0)
	tp:=tp[1]
	sl:=up
	strategy.exit("Long_TP/SL","Long",limit=tp, stop=sl)
	
if (strategy.position_size < 0)
	tp:=tp[1]
	sl:=dn
	strategy.exit("Short_TP/SL","Short",limit=tp, stop=sl)



if ((buySignal and  ftrend==1) or (sbuySignal and trend==1 and  ftrend==1)) 
	tp:=close+(close-up)*0.382
    strategy.entry("Long", strategy.long,  limit=tp, comment=tostring(round(tp)))
if ((sellSignal and ftrend==-1) or (ssellSignal and trend==-1 and  ftrend==-1)) 
	tp:=close-(dn-close)*0.382
    strategy.entry("Short", strategy.short, limit=tp, comment=tostring(round(tp)))


Mehr