Super Trend Tägliche Umkehrstrategie


Erstellungsdatum: 2024-02-22 16:22:28 zuletzt geändert: 2024-02-22 16:22:28
Kopie: 0 Klicks: 724
1
konzentrieren Sie sich auf
1617
Anhänger

Super Trend Tägliche Umkehrstrategie

Überblick

Die Super Trend Daily Reversal Strategy ist eine quantitative Trading-Strategie, bei der der Super Trend-Indikator verwendet wird, um die Marktentwicklung zu beurteilen, die Stop-Loss-Berechnung in Kombination mit dem Preisbruch und der durchschnittlichen realen Schwankungsbreite zu berechnen und die Super Trend-Signal durch die Filterung der Preisänderungsrate zu filtern. Die Strategie ist für die Tageslinie und höhere Zeiträume geeignet und kann für Märkte wie Kryptowährungen und Aktien verwendet werden.

Strategieprinzip

Der Kern der Strategie ist der Super Trend Indicator. Der Super Trend Indicator basiert auf der durchschnittlichen realen Schwankungsbreite (ATR) und kann die Richtung der Marktentwicklung klarer bestimmen.

Die Strategie wird durch die Verwendung von Rate of Change (ROC) zur Filterung von Supertrend-Indikatoren unterstützt, um unwirksame Signale zu vermeiden. Nur wenn die Preisschwankungen groß sind, werden Supertrend-Signale eingeschaltet, ansonsten nicht.

In Bezug auf Stop-Loss bietet die Strategie zwei Arten von Stop-Loss: ein festes Stop-Loss-Verhältnis und ein automatisches Verringern von Stop-Loss auf Basis von ATR. Fixed Stop-Loss ist einfach und direkt, ATR-Stop-Loss kann den Stop-Loss-Bereich an die Marktvolatilität anpassen.

Die Eintrittsbedingungen sind, dass der Supertrend sich umkehrt und die Preisänderungsrate durch den Filter geht. Die Ausstiegsbedingungen sind, dass der Supertrend sich erneut umkehrt oder die Stop-Loss-Linie durchbricht. Die Strategie folgt dem Prinzip des Trend-Trackings und erlaubt nur einen Handel pro Richtung.

Analyse der Stärken

Der größte Vorteil dieser Strategie besteht darin, dass die Trendrichtung mit Hilfe der Supertrend-Indikatoren mit höherer Klarheit und Stabilität beurteilt werden kann, und die Geräusche im Vergleich zum normalen Moving Average geringer sind. Zusätzlich filtert die Strategie einige falsche Signale durch die Einbeziehung der Preisänderungsrate.

Die ATR-Selbstschutzmethode ermöglicht es der Strategie, sich an die breitere Marktumgebung anzupassen. Die Stop-Loss-Methode wird automatisch erweitert, wenn die Volatilität zunimmt, um den Gewinn zu maximieren.

Nach den Testergebnissen zeigte sich, dass die Strategie in einem Bullenmarkt hervorragend funktioniert. Die Gewinnrate ist hoch in einem langen Trend mit einer großen Menge und einer langen Gewinnperiode.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass ein Trend umgekehrt wird, was dazu führen kann, dass ein Umkehrsignal verpasst oder ein unnötiges Umkehrsignal erzeugt wird. Dies geschieht normalerweise, wenn der Preis in der Nähe von wichtigen Unterstützungs- oder Widerstandsbereichen wiederholt quergerichtet wird.

Darüber hinaus kann eine zu locker eingestellte Stop-Loss-Einstellung zu einer Vergrößerung der Verluste führen. Die ATR-Stopps werden an die Volatilität des Marktes angepasst, so dass die Stop-Loss-Einstellungen bei Markteinbrüchen möglicherweise breiter sind.

Angesichts der oben genannten Risiken kann der ATR-Berechnungszyklus entsprechend verkürzt oder der Multiplikator des ATR-Stopps angepasst werden. Zusätzliche Indikatoren können auch verwendet werden, um wichtige Widerstandsbereiche zu identifizieren, um zu verhindern, dass diese Bereiche falsche Signale abgeben.

Optimierungsrichtung

Die Strategie kann in folgenden Bereichen optimiert werden:

  1. Anpassung der Parameter der Supertrend-Indikatoren, Optimierung der ATR-Zyklen und ATR-Modalitäten, um die Supertrend-Linie zu glätten.

  2. Anpassung der Parameter der Preisänderungsrate, Optimierung der Perioden und der Veränderungsrate-Temperature zur Verringerung der Falschsignale.

  3. Versuchen Sie mit verschiedenen Stop-Mechanismen, z. B. Stop-Tracking, oder optimieren Sie die Stop-Rate für den festen Stop.

  4. Erhöhung der zusätzlichen Beurteilungskennzahlen, Identifizierung der wichtigen Unterstützungswiderstände und Vermeidung von Trendwende-Fehlern.

  5. Testen Sie die Parameter-Einstellungen und -Effekte verschiedener Sorten, um die optimale Kombination zu finden.

  6. Optimierung der Rückmessung, um die optimale Parameter-Einstellung zu finden.

Zusammenfassen

Die Supertrend-Durchschlagstrategie ist insgesamt eine stabilere und zuverlässigere Trendverfolgungsstrategie. Sie wird in Kombination mit dem Supertrend-Indikator und dem Preisänderungsindikator gefiltert, um die Richtung der mittleren und langen Trendlinie effektiv zu identifizieren. Die ATR-Selbstschutzmechanik ermöglicht es auch, sich an die meisten Marktumgebungen anzupassen. Die Stabilität und Profitabilität der Strategie können durch weitere Optimierung der Parameter-Einstellungen und die Erhöhung der Beurteilungsindikatoren verbessert werden.

Strategiequellcode
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Super Trend Daily BF 🚀", overlay=true, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
_1 = input(false,  "════════ Test Period ═══════")
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Super Trend /////////////
_2 = input(false,  "══════ Super Trend ══════")
length = input(title="ATR Period", type=input.integer, defval=3)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=1.3)

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

///////////// Rate Of Change ///////////// 
_3 = input(false,  "══════ Rate of Change ══════")
source = close
roclength = input(30, "ROC Length",  minval=1)
pcntChange = input(6, "ROC % Change", minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

///////////////  Strategy  /////////////// 
long = dir == 1 and dir[1] == -1 and isMoving()
short = dir == -1 and dir[1] == 1 and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

/////////////// Dynamic ATR Stop Losses ///////////////
_4 = input(false,  "════════ Stop Loss ═══════")
SL_type = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inp = input(6.0, title='Fixed Stop Loss %') / 100
atrLkb = input(20, minval=1, title='ATR Stop Period')
atrMult = input(1.5, step=0.25, title='ATR Stop Multiplier') 
atr1 = atr(atrLkb)

longStop1 = 0.0
longStop1 :=  short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop1[1]
shortStop1 = 0.0
shortStop1 := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop1[1]

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop = SL_type == "Fixed" ? long_sl : longStop1, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop = SL_type == "Fixed" ? short_sl : shortStop1, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(isMoving() ? dir == 1 ? color.lime : color.red : color.white , transp=80)