RSI und Breakout-Strategie für gleitende Durchschnitte

Schriftsteller:ChaoZhang, Datum: 2024-01-24 14:31:01
Tags:

img

Übersicht

Die RSI- und Moving Average Breakout-Strategie ist eine quantitative Strategie, die sowohl den RSI-Indikator als auch die gleitenden Durchschnittslinien nutzt, um Handelschancen zu bestimmen.

Strategie Logik

  1. Berechnung des RSI-Indikators und der einfachen gleitenden Durchschnittslinien auf der Grundlage benutzerdefinierter Parameter.

  2. Wenn der RSI über die Überverkaufslinie (Standard 30) überschreitet, wird ein Long-Signal erzeugt, wenn der Preis unter dem LONG-Ausgangsgleichschnitt liegt.

  3. Wenn der RSI unterhalb der Überkauflinie (Standard 70) überschreitet, wird ein Kurzsignal erzeugt, wenn der Preis über dem SHORT-Ausgangsgleichschnitt liegt.

  4. Benutzer können wählen, ob sie Signale anhand einer Trend-Durchschnittslinie filtern möchten.

  5. Die Ausgänge werden durch die LANGEN und SHORT-Ausgänge der gleitenden Durchschnittslinien bestimmt.

Analyse der Vorteile

  1. Das Design mit zwei Indikatoren verbessert die Genauigkeit, da zwei wichtige Marktfaktoren berücksichtigt werden.

  2. Nutzt das Merkmal des RSI für die Mittelumkehrung, um Wendepunkte zu lokalisieren.

  3. Zusätzlicher Filter mit gleitenden Durchschnitten erhöht die logische Strenge, um Höhen und Tiefen zu vermeiden.

  4. Anpassbare Parameter ermöglichen Optimierungen für verschiedene Produkte und Zeitrahmen.

  5. Einfache Logik macht es leicht zu verstehen und zu ändern.

Risikoanalyse

  1. Whipsaws sind bei RSI üblich. Der Dichte-Indikator könnte helfen.

  2. Der RSI neigt dazu, in größeren Zeitrahmen zu versagen, die Parameter können angepasst werden oder zusätzliche Indikatoren können helfen.

  3. Bewegliche Durchschnittswerte haben einen Verzögerungseffekt, Längen können verkürzt werden oder Indikatoren wie MACD können helfen.

  4. Es sollten aufgrund der Grundlogik mehr Indikatoren eingeführt werden, um Signale zu validieren.

Optimierungsrichtlinien

  1. Optimierung der RSI-Parameter oder Einführung des Dichteindikators zur Verringerung falscher Signale.

  2. Trend- und Volatilitätsindikatoren wie DMI und BOLL einbeziehen, um Trends und Unterstützungen zu lokalisieren.

  3. Einführung des MACD zur Ersetzung oder Ergänzung der Beurteilungen des gleitenden Durchschnitts.

  4. Fügen Sie mehr logische Bedingungen an Eingangssignale, um ungünstige Ausbrüche zu vermeiden.

Schlussfolgerung

Die RSI- und Moving Average Breakout-Strategie kombiniert die Überkauf-Überverkaufserkennung von RSI und die Trendbestimmung von Moving Averages, um theoretisch auf Mittelumkehrmöglichkeiten zu profitieren.


/*backtest
start: 2024-01-16 00:00:00
end: 2024-01-23 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Global Market Signals: RSI Strategy.
//@version=4
strategy("GMS: RSI Strategy", overlay=true)

LongShort = input(title="Long Only or Short Only or Both?", type=input.string, defval="Both", options=["Both", "Long Only", "Short Only"])
RSILength = input(title="RSI Length", type = input.integer ,defval=14)
RSIUpper = input(title="Upper Threshold", type = input.float ,defval=70)
RSILower = input(title="Lower Threshold", type = input.float ,defval=30)
LongExit = input(title="Long Exit SMA Length", type = input.integer ,defval=5)
ShortExit = input(title="Short Exit SMA Length", type = input.integer ,defval=5)
AboveBelow = input(title="Trend SMA Filter?", type=input.string, defval="Above", options=["Above", "Below", "Don't Include"])
TrendLength = input(title="Trend SMA Length", type = input.integer ,defval=200)


//Long Side

if LongShort =="Long Only" and AboveBelow == "Above"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Long Only" and AboveBelow == "Below"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Long Only" and AboveBelow == "Don't Include"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Above"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close>sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Below"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit) and close<sma(close,TrendLength))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
if LongShort =="Both" and AboveBelow == "Don't Include"
    strategy.entry("LONG", true, when = rsi(close,RSILength)<RSILower and close< sma(close,LongExit))
    strategy.close("LONG", when = close>sma(close,LongExit))
    
    
//SHORT SIDE

if LongShort =="Short Only" and AboveBelow == "Above"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Short Only" and AboveBelow == "Below"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Short Only" and AboveBelow == "Don't Include"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Above"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close>sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Below"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit) and close<sma(close,TrendLength))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
if LongShort =="Both" and AboveBelow == "Don't Include"
    strategy.entry("SHORT", false, when = rsi(close,RSILength)>RSIUpper and close> sma(close,ShortExit))
    strategy.close("SHORT", when = close<sma(close,ShortExit))
    
    
    
    
    
    
   





Mehr