Momentum-korrelierte RSI-Strategie


Erstellungsdatum: 2023-10-07 15:47:42 zuletzt geändert: 2023-10-07 15:47:42
Kopie: 0 Klicks: 751
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Kernidee der Strategie ist es, die Glatzephase des RSI-Indikators dynamisch zu gestalten und sich automatisch an die Korrelation zwischen Preis und Dynamik anzupassen, um die Funktionalität des RSI zu verbessern.

Strategieprinzip

Die Strategie berechnet zunächst die Dynamik des Preises und dann den Korrelationskoeffizienten zwischen Preis und Dynamik. Ein Korrelationskoeffizient nahe 1 zeigt eine hohe positive Korrelation zwischen Preis und Dynamik; ein Korrelationskoeffizient nahe 1 zeigt eine negative Korrelation zwischen Preis und Dynamik.

Je nach Preis- und Dynamikkorrelation kann die Länge der Glatzephase des RSI-Indikators angepasst werden. Wenn die Korrelation hoch ist, werden kürzere RSI-Phasen verwendet; wenn die Korrelation niedrig ist, werden längere RSI-Phasen verwendet.

Konkret setzt die Strategie die RSI-Zykluslänge auf einen Bereich, der standardmäßig 20-50 beträgt. Nach der Berechnung der entsprechenden Koeffizienten für Preis und Dynamik wird der entsprechende Koeffizient durch die Methode der linearen Kartierung auf den Bereich 20-50 als endgültige Linienzykluslänge des RSI abgebildet.

Dies ermöglicht die automatische Anpassung der Parameter des RSI-Indikators an die Marktlage. Wenn Preisänderungen und Dynamikänderungen stark miteinander verbunden sind, wird ein kürzerer RSI verwendet, um ihn empfindlicher zu machen. Wenn die Korrelation schwach ist, wird ein längerer RSI verwendet, um den Einfluss von Noise auf das Signal zu reduzieren.

Analyse der Stärken

  • Dynamische Anpassung der Parameter an Marktveränderungen
  • Vermeiden Sie die Einschränkungen der Verwendung von Fixperioden
  • Automatische Optimierung des Gleitzyklus ohne manuelle Auswahl der optimalen Parameter
  • Konfigurierbarer RSI-Zyklus-Bereich für verschiedene Sorten

Risikoanalyse

  • Die Relevanzberechnung selbst führt zu einer Verzögerung, die einen Preiswendepunkt verpassen könnte.
  • Der Fokus auf die Korrelation zwischen Preis und Dynamik ist zu einseitig und ignoriert andere Faktoren.
  • Der Standard-RSI-Zyklus kann nicht für alle Sorten geeignet sein und muss optimiert werden
  • RSI-Zyklen können in Kombination mit anderen Faktoren wie Volatilität berücksichtigt werden

Optimierungsrichtung

  • Versuchen Sie mit verschiedenen Related-Rechnungsmethoden, um die Rückstände zu reduzieren
  • Erwägen Sie, mehr Faktoren einzubeziehen, um den RSI-Zyklus zu bestimmen, anstatt sich nur auf die Korrelation zu verlassen
  • Rückprüfungen verschiedener Sorten zur Suche nach dem optimalen Standard-RSI-Zyklusbereich
  • Korrelationsfaktorgewichte können eingestellt werden, anstatt sich vollständig auf eine lineare Kartierung zu verlassen
  • Hinzufügen von Filterbedingungen, um die Verwendung von RSI-Zyklen zu vermeiden, die für bestimmte Marktbedingungen nicht geeignet sind

Zusammenfassen

Die Strategie mit der dynamischen Anpassung des RSI-Gleichungszyklus ist eine Idee, die es wert ist, gelernt zu werden, aber die konkrete Umsetzung hat noch viel zu verbessern. Die Schlüssel ist, die entscheidenden Faktoren zu finden, die die Auswahl der RSI-Parameter beeinflussen, und diese in quantifizierbare Indikatoren zu übersetzen. Gleichzeitig sollte man sich nicht vollständig auf Modelle verlassen, sondern die Parameterbereiche nach Erfahrung und Rückmeldung optimieren.

Strategiequellcode
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=5
strategy("Dynamic RSI Momentum", "DRM Strategy", process_orders_on_close = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50 )

// +++++++++++++++++++++
// ++      INPUT      ++ 
// +++++++++++++++++++++

// Momentum
len = input.int(10, "Momentum Length", 1,      group = "Dynamic RSI Momentum")
src = input.source(close, "Source",   group = "Dynamic RSI Momentum")

min_rsi = input.int(20, "Min RSI", group = "Dynamic RSI Momentum")
max_rsi = input.int(50, "Max RSI", group = "Dynamic RSI Momentum")

upLvl = input.float(70, "OverBought", 0, 100, group = "Dynamic RSI Momentum")
dnLvl = input.float(30, "OverSold",   0, 100, group = "Dynamic RSI Momentum")

// +++++++++++++++++++++
// ++   CALCULATION   ++ 
// +++++++++++++++++++++

// RMA Function
rmaFun(src, len) =>
    sma   = ta.sma(src, len) 
	alpha = 1/len
	sum   = 0.0
	sum  := na(sum[1]) ? sma : alpha * src + (1 - alpha) * nz(sum[1])

// RSI Function 
rsiFun(src, len) =>     
    100 - 100 / (1 + rmaFun(src - src[1] > 0 ? src - src[1] : 0, len) / 
                     rmaFun(src[1] - src > 0 ? src[1] - src : 0, len))

// Momentum
momVal = src - src[len]

// Calculation Price vs Momentum
corr  = ta.correlation(src, momVal, len)
corr := corr > 1 or corr < -1 ? float(na) : corr

rsiLen = 0
rsiLen := int(min_rsi + nz(math.round((1 - corr) * (max_rsi-min_rsi) / 2, 0), 0))

rsiMom = rsiFun(src, rsiLen)


// +++++++++++++++++++++
// ++    STRATEGY     ++ 
// +++++++++++++++++++++

long  = ta.crossover(rsiMom, dnLvl)
short = ta.crossunder(rsiMom, upLvl) 


// +++> Long <+++++
if long and not na(rsiMom)
    strategy.entry("Long", strategy.long)

// +++> Short <+++++
if short and not na(rsiMom)
    strategy.entry("Short", strategy.short)

// +++++++++++++++++++++
// ++      PLOT       ++ 
// +++++++++++++++++++++

plot(rsiMom, "Dynamic RSI Momentum", rsiMom < dnLvl ? color.green : rsiMom > upLvl ? color.red : color.yellow)

hline(50, "Mid Line", color.gray)

upperLine = hline(upLvl, "Upper Line", color.gray)
lowerLine = hline(dnLvl, "Lower Line", color.gray)
fill(upperLine, lowerLine, color.new(color.purple, 90), "Background Fill")