Super Trend tägliche Umkehrstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-22 16:22:28
Tags:

img

Übersicht

Die Super Trend Daily Reversal Strategy ist eine quantitative Handelsstrategie, die den Super Trend-Indikator verwendet, um Markttrends zu bestimmen, Preisdurchbruch und durchschnittlichen wahren Bereich kombiniert, um Stop-Loss zu berechnen, und den Preisänderungsrate-Indikator verwendet, um Super Trend-Signale zu filtern.

Strategie Logik

Der Kernindikator dieser Strategie ist der Super Trend-Indikator. Der Super Trend-Indikator basiert auf der Average True Range (ATR) und kann die Richtung der Markttrends klarer bestimmen.

Die Strategie verwendet den Preisänderungsrate (ROC) Indikator, um den Super Trend Indikator zu filtern, um ungültige Signale zu vermeiden.

Für den Stop-Loss bietet die Strategie zwei Stop-Loss-Methoden: festen Stop-Loss-Prozentsatz und ATR-basierten adaptive Stop-Loss.

Die Einstiegsbedingungen sind eine Umkehrung des Super Trend-Indikators und der Preisänderungsrate-Indikator geht den Filter. Die Ausgangsbedingungen sind, dass der Super Trend wieder umkehrt oder die Stop-Loss-Linie durchbricht. Die Strategie folgt dem Trend-Tracking-Prinzip und erlaubt nur eine Position in jeder Richtung.

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass der Super Trend-Indikator im Vergleich zu gewöhnlichen gleitenden Durchschnitten eine höhere Klarheit und Stabilität bei der Beurteilung der Trendrichtung aufweist, mit weniger Lärm. Darüber hinaus filtert der Preisänderungsindikator einige falsche Signale effektiv aus.

Der adaptive Stop-Loss-Mechanismus ATR ermöglicht es der Strategie auch, sich an ein breiteres Marktumfeld anzupassen.

Nach den Testergebnissen ist diese Strategie in einem Bullenmarkt außergewöhnlich erfolgreich. Die Gewinnrate ist bei langfristigen Trends von erheblicher Größe mit langen aufeinanderfolgenden profitablen Zyklen sehr hoch.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, eine Fehleinschätzung der Trendumkehr zu erwarten, die Umkehrsignale verpassen oder unnötige Umkehrsignale erzeugen kann.

Darüber hinaus kann ein zu breiter eingestellter Stop-Loss auch zu größeren Verlusten führen.

Um diesen Risiken entgegenzuwirken, kann der ATR-Berechnungszeitraum angemessen verkürzt oder der ATR-Stop-Loss-Multiplikator angepasst werden.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Anpassung der Parameter des Super Trend-Indikators zur Optimierung der ATR-Periode und ATR-Multiplikatoren, um die Super Trend-Linie glatter zu gestalten.

  2. Anpassung der Parameter des Preisänderungsindikators zur Optimierung des Zeitraums und der Wechselkursschwelle zur Verringerung falscher Signale.

  3. Versuchen Sie verschiedene Stop-Loss-Mechanismen wie Trailing-Stops oder optimieren Sie die Stop-Loss-Amplitude von festen Stops.

  4. Zusätzliche Beurteilungsindikatoren werden hinzugefügt, um die wichtigsten Unterstützungs-/Widerstandsfaktoren zu ermitteln und eine Fehleinschätzung von Trendumkehrungen zu vermeiden.

  5. Prüfen Sie die Einstellungen der Parameter und die Auswirkungen auf verschiedene Produkte, um die optimale Parameterkombination zu finden.

  6. Durchführung von Backtest-Optimierungen, um die besten Parameter-Einstellungen zu finden.

Schlussfolgerung

Insgesamt ist die Super Trend Daily Reversal Strategy eine relativ stabile und zuverlässige Trendfolgestrategie. Sie kombiniert den Super Trend-Indikator und den Preisänderungsrate-Indikator zur Filterung, der die Richtung mittelfristiger und langfristiger Trends effektiv identifizieren kann. Der adaptive Stop-Loss-Mechanismus ATR ermöglicht es auch, sich an die meisten Marktumgebungen anzupassen. Durch die weitere Optimierung der Parameter-Einstellungen und zusätzliche Beurteilungsindikatoren können die Stabilität und Rentabilität dieser Strategie verbessert werden.


/*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)

Mehr