
Die Strategie basiert auf der Entwicklung eines relativ starken (RSI) Indikators und nutzt die Überkauf-Überverkauf-Prinzipien des RSI-Indikators für einen bidirektionalen Durchbruch. Eine Überkauf-Überkauf-Operation, wenn der RSI-Indikator die festgelegte Überkauf-Linie überschreitet, ist eine typische Umkehr-Handelsstrategie, wenn der RSI-Indikator die festgelegte Überverkauf-Linie unterbricht.
Der RSI-Indikator wird anhand von Benutzereingaben berechnet, einschließlich der Länge des RSI-Zyklus, der Überkauf- und der Überverkauf-Termine.
Die Position der Überkauf- bzw. der Überverkaufszone wird anhand des positiven Verhältnisses der RSI-Kurve zur Überkauf- bzw. zur Überverkaufszone beurteilt.
Wenn der RSI-Indikator von der Überverkaufszone aus die entsprechende Wertminderungsgrenze durchbricht, wird die Position in die entgegengesetzte Richtung eröffnet. Zum Beispiel, wenn die Überkaufszone von der Überkaufszone aus über die Überkaufszone hinausgeht, wird angenommen, dass sich der Kurs umgekehrt hat, und dann wird eine Position aufgenommen.
Nach der Eröffnung der Position, setzen Sie eine Stop-Loss-Stop-Linie. Verfolgen Sie die Stop-Loss-Stop-Situation, und wenn die Bedingungen erfüllt sind, legen Sie die Position aus.
Die Strategie bietet auch die Option, die EMA als Filter zu nutzen. Der Kurs kann nur dann eine Position eröffnen, wenn der RSI ein weiteres Short-Signal auslöst und die EMA durchbricht.
Die Strategie bietet außerdem die Möglichkeit, nur in einem bestimmten Handelszeitraum zu handeln. Der Benutzer kann den Handel nur in einem bestimmten Zeitraum einrichten und nach einer bestimmten Zeit den Handel beenden.
Risikolösung:
Diese Strategie kann in folgenden Bereichen optimiert werden:
Optimieren Sie die RSI-Parameter, um die beste Kombination aus verschiedenen Varianten zu finden. Sie können die optimale Überkauf-Überverkauf-Schwelle durch Rückverfolgung finden.
Versuchen Sie, verschiedene Indikatoren zu ersetzen oder mit dem RSI zu kombinieren, um ein stärkeres Urteilssignal zu bilden. Zum Beispiel MACD, KD, Brin-Band usw.
Optimierung von Stop-Loss-Strategien zur Steigerung der Strategie-Stabilität. Die Strategie kann entweder mit einem freien Stop-Loss basierend auf der Marktfluktuation eingestellt werden oder mit einer Stop-Loss-Funktion, die den Verlust verfolgt.
Optimieren Sie die EMA-Filterparameter oder testen Sie andere Indikatorfilter, um eine weitere Verschleierung zu vermeiden.
Hinzufügen von Modulen zur Trendbeurteilung und Vermeidung von umgekehrten Kursen oder umgekehrten Kursen
Verschiedene Parameter für die Zeiträume des Handels werden getestet, um zu bestimmen, welche für die Strategie geeignet sind und welche vermieden werden sollten.
Die RSI-Doppel-Breakout-Strategie hat eine klare Gesamtkonzeption und nutzt das klassische RSI-Überkauf-Überverkauf-Prinzip für den Umkehrhandel. Sie kann sowohl die Umkehrmöglichkeiten der Überkauf-Überverkaufszone nutzen als auch das Risiko durch EMA-Filterung und Stop-Loss-Stop kontrollieren. Durch die Optimierung von Parametern und Moduloptimierung kann ein großer Raum für eine stabilere und zuverlässige Umkehrstrategie geschaffen werden.
/*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)