Handelsstrategie für RSI-SRSI mit mehreren Zeitrahmen

Schriftsteller:ChaoZhang, Datum: 2024-02-18 16:13:50
Tags:

img

Übersicht

Diese Handelsstrategie kombiniert die technischen Indikatoren Relative Strength Index (RSI) und Stochastic Relative Strength Index (Stochastic RSI), um Handelssignale zu generieren.

Name der Strategie

Handelsstrategie für RSI-SRSI mit mehreren Zeitrahmen

Strategie Logik

Die Strategie beurteilt überkaufte und überverkaufte Bedingungen auf der Grundlage von RSI-Werten. RSI unter 30 gilt als überverkauftes Signal und RSI über 70 gilt als überkauftes Signal. Der stochastische RSI-Indikator beobachtet die Schwankung der RSI-Werte. Stochastischer RSI unter 5 ist überverkauft und stochastischer RSI über 50 ist überkauft.

Die Strategie beinhaltet auch den Preistrend der Kryptowährung in höheren Zeitrahmen (z. B. wöchentlich). Nur wenn der höheren Zeitrahmen RSI über einer Schwelle liegt (z. B. 45), werden Long-Signale ausgelöst. Dies filtert nicht anhaltende Überverkaufssignale aus, wenn der Gesamttrend nach unten geht.

Um gefälschte Signale zu vermeiden, müssen die Kauf- und Verkaufssignale für eine Reihe von Perioden (z. B. 8 Balken) bestätigt werden, bevor ein tatsächliches Handelssignal erzeugt wird.

Vorteile

  • Klassische technische Analysemethode mit RSI zur Ermittlung von Überkauf-/Überverkaufswerten
  • Der Stochastische RSI wird für die Aufnahme von Umkehrungen des RSI verwendet.
  • Anwendet mehrere Zeitrahmen-Techniken, um falsche Signale zu filtern und die Qualität zu verbessern

Risiken und Lösungen

  • RSI, der zu falschen Signalen neigt
    • Kombination anderer Indikatoren zur Filterung falscher Signale
    • Anwendung von Trendbestätigungstechniken
  • Eine falsche Schwellung kann zu viele Signale erzeugen.
    • Optimieren Sie die Parameter, um die beste Kombination zu finden
  • Signale benötigen eine Bestätigungszeit
    • Bilanzbestätigungszeiten - Falschsignale filtern, ohne Chancen zu verpassen

Verbesserungsbereiche

  • Für stärkere Signale mehr Indikatorkombinationen testen
    • z.B. MACD-Indikator enthalten
  • Verwenden Sie Methoden des maschinellen Lernens, um optimale Parameter zu finden
    • z.B. genetische Algorithmen/evolutionäre Algorithmen für die automatisierte Optimierung
  • Hinzufügen von Stop-Loss-Strategien zur Steuerung von Einzelhandelsrisiken
    • Stop-Loss setzen, wenn der Preis das Unterstützungsniveau durchbricht

Schlussfolgerung

Die Strategie stützt sich hauptsächlich auf die beiden klassischen technischen Indikatoren, RSI und Stochastic RSI, um Handelssignale zu generieren. Darüber hinaus hilft die Einführung der Trendbestätigung aus höheren Zeitrahmen, gefälschte Signale effektiv zu filtern und die Signalqualität zu verbessern. Eine weitere Leistungsverbesserung kann durch Optimierung von Parametern, Hinzufügen von Stop Loss und anderen Mitteln erzielt werden. Die Logik ist einfach und leicht zu verstehen.


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI and Stochatic Strategy", overlay=true, use_bar_magnifier = false)


/////// Inputs ///////////////

// RSI and SRSI
rsiLength = input(14, title="RSI Length") 
stochLength = input(14, title="Stochastic Length")
kSmooth = input(3, title="K Smooth")
dSmooth = input(3, title="D Smooth")


//////// thresholds ///////////////
st_low = input(5, title="Low SRSI") // stochastic RSI low -- prepare to sell
st_hi = input(50, title="High SRSI") // stochastic RSI high -- prepare to buy
diff = input(5, title="difference") // minimum change in RSI
// inval_diff = input(12, title="difference") // invalidation difference: change in the oposite direction that invalidates rsi falling/rising
rsi_low = input(30, title="Low RSI") // RSI considered low
rsi_hi = input(60, title="High RSI") // RSI considered high
rsi_ht_hi = input(45, title="High higher time frame RSI") // RSI in higher time frame considered high


/// buy trigger duration 
tr_dur = input(8, title="Trigger duration")
low_dur = input(20, title="Monitoring last low")


///////////////// Higher time frame trend ///////////////////
// higher time frame resolution
res2 = input.timeframe("W", title="Higher time-frame")
// Input for the ticker symbol, default is an empty string
// For instance we could monitor BTC higher time frame trend
symbol = input("BTC_USDT:swap", "Input Ticker (leave empty for current)")

// Determine the symbol to use
inputSymbol = symbol == "" ? syminfo.tickerid : symbol
//////////////////////////////////////////////////////////

// Calculate RSI //
rsi = ta.rsi(close, rsiLength)

// Calculate Stochastic RSI //
rsiLowest = ta.lowest(rsi, stochLength)
rsiHighest = ta.highest(rsi, stochLength)
stochRsi = 100 * (rsi - rsiLowest) / (rsiHighest - rsiLowest)

// Apply smoothing
K = ta.sma(stochRsi, kSmooth)
D = ta.sma(K, dSmooth)

// Higher time Frame RSI
cl2 = request.security(inputSymbol, res2, close)
rsi2 = ta.rsi(cl2, 14)

// SRSI BUY/SELL signals 
sell_stoch = (ta.lowest(K, tr_dur) < st_low) or (ta.highest(rsi, tr_dur) < rsi_low)
buy_stoch = ((ta.lowest(K, tr_dur) > st_hi) or (ta.lowest(rsi, tr_dur) > rsi_hi)) and (rsi2 > rsi_ht_hi)

 // valitation / invalidation sell signal
ll = ta.barssince(not sell_stoch)+1
sell_validation = (ta.highest(rsi, ll)>rsi[ll]+diff and rsi < rsi[ll]) or (rsi < rsi[ll]-diff)

// valitation / invalidation buy signal
llb = ta.barssince(not buy_stoch)+1
buy_validation = (ta.lowest(rsi, llb)<rsi[llb]-diff and rsi > rsi[llb]) or (rsi > rsi_hi and rsi - rsi[tr_dur] > 0)

sell_signal = sell_stoch and sell_validation
buy_signal = buy_stoch and buy_validation 

// Define the start date for the strategy
startYear = input(2019, "Start Year")
startMonth = input(1, "Start Month")
startDay = input(1, "Start Day")

// Convert the start date to Unix time
startTime = timestamp(startYear, startMonth, startDay, 00, 00)

// Define the end date for the strategy
endYear = input(2030, "End Year")
endMonth = input(1, "End Month")
endDay = input(1, "End Day")

// Convert the end date to Unix time
endTime = timestamp(endYear, endMonth, endDay, 00, 00)


if true
    if buy_signal
        strategy.entry("buy", strategy.long, comment = "Buy")
    if sell_signal
        strategy.close("buy", "Sell")

Mehr