Die Kernidee dieser Strategie besteht darin, die Glättungsphase des RSI-Indikators dynamisch zu gestalten und automatisch anhand der Korrelation zwischen Preis und Dynamik anzupassen, wodurch die Nützlichkeit des RSI-Indikators verbessert wird.
Die Strategie berechnet zuerst den Momentum des Preises, berechnet dann den Korrelationskoeffizienten zwischen Preis und Momentum. Wenn der Korrelationskoeffizient nahe an 1 liegt, bedeutet dies, dass Preis und Momentum stark positiv korreliert sind. Wenn der Korrelationskoeffizient nahe an -1 liegt, bedeutet dies, dass Preis und Momentum stark negativ korreliert sind.
Auf der Grundlage der Korrelation zwischen Preis und Momentum kann die Glättungsperiode des RSI-Indikators angepasst werden.
Nach Berechnung des Korrelationskoeffizienten zwischen Preis und Momentum verwendet sie eine lineare Kartierung, um den Korrelationskoeffizienten als endgültige RSI-Gleichungsphase auf den 20-50-Bereich abzubilden.
Dies ermöglicht es, die RSI-Parameter automatisch anhand der Marktbedingungen anzupassen. Wenn Preisänderungen stark mit Impulsänderungen korrelieren, wird ein kürzerfristiger RSI verwendet, um ihn empfindlicher zu machen. Wenn die Korrelation schwach ist, wird ein längerfristiger RSI verwendet, um die Auswirkungen von Lärm auf das Signal zu reduzieren.
Die Idee der dynamischen Anpassung des RSI-Gleichungszeitraums lohnt sich zu lernen, aber die spezifische Implementierung bietet viel Raum für Verbesserungen. Der Schlüssel besteht darin, die entscheidenden Faktoren zu identifizieren, die die Auswahl der RSI-Parameter beeinflussen, und sie in quantifizierbare Indikatoren umzuwandeln. Auch verlassen Sie sich nicht nur auf das Modell, empirische Optimierung der Parameterbereiche ist erforderlich. Insgesamt ist dies eine sehr innovative Idee mit praktischem Potenzial nach weiteren Optimierungen und Verbesserungen.
/*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")