EMA verstärkte SuperTrend-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-10-07 10:07:15
Tags:

Übersicht

Diese Strategie beurteilt die Kursentwicklungsrichtung, indem sie den ATR mit dem Preis vergleicht, kombiniert mit einem gleitenden Durchschnittsassistenten.

Strategieprinzip

Die wichtigsten Schritte dieser Strategie zur Bestimmung der Preisentwicklung sind:

  1. Berechnen Sie den ATR der letzten N Tage unter Verwendung der ATR-Berechnungsmethode von Wilder, die die aktuelle Marktvolatilität besser widerspiegeln kann.

  2. Berechnen Sie die oberen und unteren Bands anhand von ATR und ATK-Koeffizienten. Oberer Band = Preis - (atk x ATR); Unterer Band = Preis + (atk x ATR).

  3. Vergleichen Sie den Preis mit den oberen und unteren Bands, um die Trendrichtung zu bestimmen.

  4. Der gleitende Durchschnitt wird hier verwendet, um die Signalqualität zu bestimmen.

  5. Hinzufügen einer Stop-Loss-Strategie zur Risikokontrolle.

  6. Verwenden Sie Farbmarkierungen für den Strategiestatus, um das Urteilsvermögen zu unterstützen.

Diese Strategie nutzt die Vorteile der ATR voll aus, um schnell Preisentwicklungsänderungen zu erfassen und niedrige Abzugsraten zu erzielen.

Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. ATR kann schnell auf die neuesten Marktentwicklungen reagieren und dazu beitragen, Trendänderungen rechtzeitig zu erfassen.

  2. Die Pufferzone zwischen den oberen und unteren Bands kann die Wahrscheinlichkeit eines Stop-Loss-Ausbruchs und niedrigerer Drawdowns verringern.

  3. Klares Handelssignal: Range Breakouts sind qualitativ hochwertige Signale für lange und kurze Trends.

  4. Hohe Anpassbarkeit: ATR-Periode und Multiplikator können an unterschiedliche Marktumgebungen angepasst werden.

  5. Graphische Werkzeuge zeigen den Strategiestatus intuitiv an.

  6. Einfache Optimierung. Module wie bewegliche Stop-Loss, Filter können für weitere Optimierung hinzugefügt werden.

Im Allgemeinen hat diese Strategie herausragende Vorteile wie einen geringen Drawdown, was sie sehr gut für Trendfolgestrategien geeignet macht.

Risiken

Es gibt auch einige Risiken:

  1. Risiko einer Trendbestimmungsfehler; während der Preiskonsolidierung können falsche Signale auftreten.

  2. Ausgangspunktauswahlrisiko: Der Stop-Loss-Punkt muss vernünftig eingestellt werden, um einen vorzeitigen Ausgang zu vermeiden.

  3. Risiko für die Optimierung von Parametern. ATR-Periode und Multiplikator müssen wiederholt getestet und optimiert werden, unsachgemäße Einstellungen beeinträchtigen die Leistung.

  4. Hohe Handelsfrequenzrisiko: Die Handelsfrequenz kann bei extremer Marktvolatilität zu hoch sein.

  5. Mittelmäßiges Performance-Risiko: Die Performance kann in einigen Märkten ohne offensichtliche Trends unbefriedigend sein.

  6. Anpassung an das Risiko des Live-Handels, Anpassung an Schwankungen und Provisionen beim Live-Handel.

  7. Systematische Risiken: Es sollte die gesamte Systemrisikokontrolle in Betracht gezogen werden, anstatt sich nur auf diese Strategie zu verlassen.

Die Risiken können durch folgende Maßnahmen kontrolliert werden:

  1. Optimierung der ATR-Parameter zur Verbesserung der Genauigkeit.

  2. Verwendung einer mehrjährigen Analyse zur Ermittlung von Trends.

  3. Einbeziehung von Stop Loss, um Gewinne zu erzielen und Abzüge zu reduzieren.

  4. Filter hinzufügen, um die Handelsfrequenz zu steuern.

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

  6. Verschiedene Produkte testen, um das beste Anwendungsszenario zu finden.

  7. Umfassende Berücksichtigung aller Handelsrisiken im Live-Handel.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Wir können Filter wie gleitende Durchschnitte hinzufügen, um falsche Signale zu reduzieren.

  2. Optimierung der ATR-Parameter durch Prüfung verschiedener Zeiträume, um optimale Werte zu finden.

  3. Optimierung des Multiplikatorparameters zur Bestimmung der Empfindlichkeit der Signalerzeugung.

  4. Hinzufügen dynamischer Stop-Loss-Strategien basierend auf ATR oder Volatilität.

  5. Die Verwendung höherer Zeitrahmenindikatoren für die Analyse, um sporadische falsche Signale zu filtern.

  6. Einführung von Modellen für maschinelles Lernen wie RNN zur Verbesserung des Signalurteils.

  7. Anpassung der Parameter anhand der Produktmerkmale, z. B. Verwendung einer kürzeren ATR-Periode für flüchtige Bestände.

  8. Optimierung der Einstiegspunkte durch Verwendung von Breakout-Pullback-Ansätzen, um bessere Einträge zu finden.

  9. Kombination von Lautstärkenindikatoren zur Beurteilung der Signalstärke.

  10. Hinzufügen von Gewinnstrategien auf Basis von Trenddynamikindikatoren.

Schlussfolgerung

Im Allgemeinen ist diese Supertrend-Strategie sehr praktisch mit Vorteilen wie schneller Reaktion und geringem Drawdown. Es ist ein typisches Trendfolgensystem. Aber Risiken wie Urteilsfehler und Parameteroptimierung sollten beim Live-Handel beachtet werden und ein umfassendes Risikomanagement implementiert werden. Eine weitere Optimierung kann die Strategie robuster und profitabler in mehr Märkten machen.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic


//@version=4
strategy("SuperTrend STRATEGY", overlay=true)
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
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, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=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
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
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
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", 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()  => true
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    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)

//@version=3
//study(title="3 Moving Average Exponential", shorttitle="3 EMA", overlay=true)
//len1 = input(17, minval=1, title="Fast")
//len2 = input(72, minval=1, title="Medium")
len3 = input(305, minval=1, title="Slow")
//src1 = input(close, title="Source Fast")
//src2 = input(close, title="Source Medium")
src3 = input(close, title="Source Slow")
//out1 = ema(src1, len1)
//out2 = ema(src2, len2)
out3 = ema(src3, len3)
//plot(out1, title="EMA1", color=fuchsia)
//plot(out2, title="EMA2", color=orange)
plot(out3, title="EMA3", color=color.blue)

Mehr