Stratégie RSI corrélée au momentum


Date de création: 2023-10-07 15:47:42 Dernière modification: 2023-10-07 15:47:42
Copier: 0 Nombre de clics: 751
1
Suivre
1617
Abonnés

Aperçu

L’idée centrale de cette stratégie est de rendre le cycle de ralentissement de l’indicateur RSI dynamique, s’ajustant automatiquement en fonction de la corrélation entre le prix et la dynamique, améliorant ainsi la praticité de l’indicateur RSI.

Principe de stratégie

La stratégie commence par calculer la dynamique du prix, puis le coefficient de corrélation entre le prix et la dynamique. Un coefficient de corrélation proche de 1 indique une forte corrélation entre le prix et la dynamique; un coefficient de corrélation proche de 1 indique une forte corrélation entre le prix et la dynamique.

La longueur des cycles de l’indicateur RSI peut être ajustée en fonction de la corrélation entre le prix et la dynamique. Lorsque la corrélation est élevée, un cycle RSI plus court est utilisé; lorsqu’elle est faible, un cycle RSI plus long est utilisé.

Plus précisément, cette stratégie définit la longueur du cycle RSI comme une plage, par défaut 20-50. Après avoir calculé les coefficients correspondants du prix et de la dynamique, le coefficient correspondant est cartographié dans la plage 20-50, par une méthode de cartographie linéaire, comme la longueur du cycle de lissage final du RSI.

Cela permet d’ajuster automatiquement les paramètres de l’indicateur RSI en fonction de la situation du marché, en utilisant un RSI plus court lorsque les variations de prix et les variations de momentum sont fortement corrélées, ce qui le rend plus sensible; et en utilisant un RSI plus long lorsque la corrélation n’est pas forte, ce qui réduit l’impact du bruit sur le signal.

Analyse des avantages

  • Paramètres d’ajustement dynamique pour s’adapter aux évolutions du marché
  • Éviter les limites de l’utilisation d’indicateurs à cycle fixe
  • Optimisation automatique des cycles de lissage, sans sélection manuelle des paramètres optimaux
  • Une gamme de cycles RSI configurables pour différentes variétés

Analyse des risques

  • Le calcul de la corrélation introduit lui-même un retard qui peut manquer le point de basculement des prix
  • L’expérience montre qu’il n’y a pas de corrélation entre le prix et la dynamique, et que les autres facteurs sont négligés.
  • La gamme de cycles RSI par défaut peut ne pas être adaptée à toutes les variétés et doit être optimisée
  • On peut envisager d’ajuster le cycle du RSI en combinant d’autres facteurs comme la volatilité.

Direction d’optimisation

  • Essayez différentes méthodes de calcul de la relation pour réduire le retard
  • Considérez d’introduire plus de facteurs pour déterminer le cycle du RSI et ne vous fiez pas uniquement à la corrélation
  • Les variétés sont retestées pour trouver la meilleure plage de cycles RSI par défaut.
  • On peut définir des poids de facteurs de corrélation plutôt que de s’appuyer sur une cartographie linéaire
  • Ajout de conditions de filtrage pour éviter l’utilisation de cycles RSI inappropriés dans un contexte de marché particulier

Résumer

La stratégie de l’optimisation des paramètres en fonction de l’expérience et des retours d’expérience est une idée très innovante qui a le potentiel d’être utilisée dans la vie réelle après une optimisation et une amélioration continues.

Code source de la stratégie
/*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")