RSI-Umkehrungs-Breakout-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-08 12:11:03
Tags:

img

Übersicht

Diese Strategie basiert auf dem Relative Strength Index (RSI) Indikator und nutzt die überkauften/überverkauften Prinzipien des RSI, um Breakout-Trades zu machen. Es geht lang, wenn der RSI über die überkaufte Schwelle bricht und geht kurz, wenn der RSI unter die überverkaufte Schwelle bricht. Es ist eine typische durchschnittliche Umkehrhandelsstrategie.

Strategie Logik

  1. Die RSI-Indikatorparameter werden auf der Grundlage von Benutzereingaben festgelegt, einschließlich der RSI-Periode, der überkauften und der überverkauften Schwelle.

  2. Der RSI ist in der Überkauf- oder Überverkaufszone, und zwar anhand seiner Position gegenüber den Schwellenwerten.

  3. Wenn der RSI aus der überkauften/überverkauften Zone bricht und die entsprechende Schwellenlinie überschreitet, machen Sie Trades in entgegengesetzte Richtung. Zum Beispiel, wenn der RSI über die überkaufte Linie aus der überkauften Zone bricht, gilt der Markt als umgekehrt, gehen Sie an diesem Punkt lang. Wenn der RSI unter die überverkaufte Linie aus der überverkauften Zone bricht, gilt der Markt als umgekehrt, gehen Sie hier kurz.

  4. Nach dem Eintritt setzen Sie den Stop-Loss und nehmen Sie Gewinnlinien ein.

  5. Die Strategie bietet auch die Möglichkeit, die EMA als Filter zu verwenden.

  6. Der Handel wird nur innerhalb bestimmter Zeitrahmen erlaubt, die Positionen werden am Ende des Zeitrahmens geschlossen.

Analyse der Vorteile

  • Verwendet klassische RSI-Breakthrough-Prinzipien mit guten Backtest-Ergebnissen.

  • Flexible Schwellenwerte für Überkauf/Überverkauf für verschiedene Produkte.

  • Der optionale EMA-Filter verhindert übermäßige Whipsaw-Trades.

  • Unterstützt SL/TP zur Verbesserung der Stabilität.

  • Unterstützt einen Zeitrahmenfilter, um ungeeignete Zeiträume zu vermeiden.

  • Unterstützt sowohl Long als auch Short, um beiderseitige Kursschwankungen voll auszunutzen.

Risikoanalyse

  • RSI-Divergenz tritt häufig auf, allein auf RSI angewiesen kann ungenaue Signale erzeugen.

  • Die falsche Einstellung der Schwellenwerte führt zu zu häufigen oder fehlenden Geschäften.

  • Schlechte SL/TP-Einstellungen verursachen übermäßige Aggressivität oder übermäßige Konservativität.

  • Bei falschen EMA-Filter-Einstellungen können gültige Trades verfehlt oder gute Signale ausgefiltert werden.

Risikolösungen:

  • Optimierung der RSI-Parameter für verschiedene Produkte.

  • Kombination mit Trendindikatoren zur Ermittlung von Abweichungen.

  • Testen und Optimieren der SL/TP-Parameter.

  • Test und Optimierung der EMA-Parameter.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen verbessert werden:

  1. Optimieren Sie die RSI-Parameter, um die besten Einstellungen für verschiedene Produkte durch ausführliche Rückprüfung zu finden.

  2. Versuchen Sie, verschiedene Indikatoren mit dem RSI zu kombinieren oder zu ersetzen, um robustere Signale zu erzeugen, z. B. MACD, KD, Bollinger Bands usw.

  3. Optimieren Sie Stop-Loss- und Gewinnstrategien, um die Stabilität zu verbessern.

  4. Optimieren Sie die EMA-Filterparameter oder experimentieren Sie mit anderen Filtern, um Whipsaws besser zu vermeiden.

  5. Hinzufügen von Trendfiltermodulen, um den Handel gegen den primären Trend zu vermeiden.

  6. Testen Sie verschiedene Zeitrahmen, um die besten Handelssitzungen für diese Strategie zu finden.

Zusammenfassung

Die RSI-Umkehr-Breakout-Strategie hat eine klare Logik, die auf klassischen Überkauf-/Überverkaufsprinzipien basiert. Sie zielt darauf ab, mit geeigneten Risikokontrollfiltern die mittlere Umkehr an den Extremen zu erfassen. Es besteht ein gutes Potenzial, sie durch Parameter-Tuning und modulare Verbesserungen in eine stabile Strategie zu verwandeln. Es lohnt sich, sie zu optimieren und im Live-Handel anzuwenden.


/*backtest
start: 2023-10-08 00:00:00
end: 2023-11-07 00:00:00
period: 1h
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/
// © REV0LUTI0N

//@version=4

strategy("RSI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

// Strategy Backtesting
startDate  = input(timestamp("2021-10-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("9999-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true
// Strategy

Length = input(12, minval=1)
src = input(close, title="Source")
overbought = input(70, minval=1)
oversold = input(30, minval=1)
xRSI = rsi(src, Length)
    
rsinormal = input(true, title="Overbought Go Long & Oversold Go Short")
rsiflipped = input(false, title="Overbought Go Short & Oversold Go Long")

// EMA Filter
noemafilter = input(true, title="No EMA Filter")
useemafilter = input(false, title="Use EMA Filter")
ema_length = input(defval=15, minval=1, title="EMA Length")
emasrc = input(close, title="Source")
ema = ema(emasrc, ema_length)
plot(ema, "EMA", style=plot.style_linebr, color=#cad850, linewidth=2)

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (xRSI > overbought and close > ema and time_cond and timetobuy and rsinormal and useemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI < oversold and close < ema and time_cond and timetobuy and rsinormal and useemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI < oversold and close > ema and time_cond and timetobuy and rsiflipped and useemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI > overbought and close < ema and time_cond and timetobuy and rsiflipped and useemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI > overbought and time_cond and timetobuy and rsinormal and noemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI < oversold and time_cond and timetobuy and rsinormal and noemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI < oversold and time_cond and timetobuy and rsiflipped and noemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI > overbought and time_cond and timetobuy and rsiflipped and noemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    



Mehr