Stratégie VRSI et MARSI

Auteur:ChaoZhang est là., Date: 2024-02-02 17:21:09
Les étiquettes:

img

Résumé

La stratégie VRSI et MARSI utilise des moyennes mobiles pour lisser les indicateurs RSI et implémente une stratégie à double indicateur. Elle utilise à la fois l'indicateur RSI du prix et du volume, combiné à leurs moyennes mobiles, pour générer des signaux de trading. Elle va long lorsque le prix RSI augmente et court lorsque le prix RSI chute. Pendant ce temps, elle observe les changements du volume RSI pour juger de la force du marché et des changements de tendance possibles.

La logique de la stratégie

La stratégie calcule d'abord l'indicateur RSI de prix (RSI) de 9 périodes et l'indicateur RSI de volume (VRSI) de 9 périodes.

Les signaux de trading sont générés sur la base de l'indicateur MARSI. Il va long quand MARSI monte et court quand MARSI tombe. En outre, l'indicateur MAVRSI est utilisé pour juger de la force du marché et des éventuels changements de tendance.

Par exemple, pendant une tendance haussière, si le prix continue à augmenter mais que le volume commence à diminuer, cela indique que la force haussière peut s'affaiblir et qu'il faut se préparer à fermer les positions longues.

Analyse des avantages

En combinant les moyennes mobiles des deux indicateurs RSI, cette stratégie peut capturer efficacement les tendances, tout en utilisant les variations de volume pour juger de la force du marché et éviter d'être pris au piège.

L'utilisation de moyennes mobiles filtre également un peu de bruit pour rendre les signaux plus fiables.

Analyse des risques

Le risque majeur de cette stratégie réside dans les divergences qui peuvent se produire entre les deux indicateurs. Lorsqu'il y a une divergence entre le prix et le volume, les signaux de trading peuvent devenir moins fiables. Un jugement manuel de la relation entre les indicateurs est alors nécessaire.

Un autre risque est de se retrouver pris au piège dans les marchés à plage. Lorsque le prix se déplace dans une plage, l'indicateur RSI a tendance à osciller à la hausse et à la baisse, déclenchant des transactions inutiles.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Ajustez les paramètres de l'indice de résistance et des moyennes mobiles pour trouver des combinaisons optimales

  2. Ajouter d'autres conditions lors de la génération de signaux, par exemple les signaux de renversement déclenchés dans une zone de surachat/survente ont tendance à être plus fiables

  3. Ajouter des stratégies de stop loss comme le stop loss en mouvement ou l'indicateur stop loss

  4. Incorporer d'autres indicateurs, par exemple des modèles de chandeliers, des indicateurs de volatilité, etc., pour éviter les pièges

Résumé

La stratégie VRSI et MARSI combine avec succès les indicateurs RSI de prix et de volume. La comparaison et le jugement entre les deux indicateurs peuvent améliorer la précision et la rentabilité du signal. L'optimisation des paramètres et les stratégies de stop loss permettent également un fonctionnement stable. En résumé, en combinant les indicateurs, cette stratégie permet d'obtenir une performance supérieure par rapport à un seul indicateur RSI.


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("VRSI-MARSI Strategy", shorttitle="(V/MA)RSI Str.", overlay=false, default_qty_type=strategy.percent_of_equity, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0, default_qty_value=5, initial_capital=100)

// RSI(close, ="RSI") and RSI(Volume, ="VRSI")
src = close, len = input(9, minval=1, title="Length RSI")
src2 = volume, len2 = input(9, minval=1, title="Length VRSI)")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
up2 = rma(max(change(src2), 0), len2)
down2 = rma(-min(change(src2), 0), len2)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

// MA(=Moving Average) of RSI(close, ="MARSI") and RSI(Volume, ="MAVRSI")
len3 = input(5, minval=1, title="Length MARSI")
marsi = sma(rsi, len3)
len4 = input(5, minval=1, title="Length MAVRSI")
marsi2 = sma(rsi2, len4)

// Plot: 
// Default plot of RSI and VRSI: not visible but can be made visible
// Default plot MARSI and MAVRSI: visible
p1 = plot(rsi, linewidth=2, transp=100, color=color.yellow, title="RSI")
p2 = plot(rsi2, linewidth=2, transp=100, color=color.orange, title="VRSI")
m1 = plot(marsi, color=(marsi>=0 ? (marsi[1] < marsi ? color.yellow : color.blue) : (marsi[1] < marsi ? color.yellow : color.blue) ), linewidth = 2, transp = 0, title="MARSI")
m2 = plot(marsi2, color=color.orange, linewidth = 2, transp = 0, title="MAVRSI")

// Color fill:
// Default color fill "RSI - VRSI": not visible but can be made visible
// Default color fill "MARSI - MAVRSI": visible
fill(p1,p2, color = rsi>rsi2 ? color.green : color.red, transp=100, title="BG RSI-VRSI")
fill(m1,m2, color = marsi>marsi2 ? color.green : color.red, transp=75, title="BG MARSI-MAVRSI")

// Lines:
h2=hline(20, color=color.green, linestyle=hline.style_dotted, title="Extreme Oversold Rsi")
h3=hline(30, color=color.black, linestyle=hline.style_dotted, title="Oversold Rsi")
h5=hline(50, color=color.yellow, linestyle=hline.style_dashed, title="Middle line")
h7=hline(70, color=color.black, linestyle=hline.style_dotted, title="Overbought Rsi")
h8=hline(80, color=color.red, linestyle=hline.style_dotted, title="Extreme Overbought Rsi")

// Color fill between Lines "20-30" and "70-80" represents the crossing of "MARSI" and "MAVRSI":
fill(h2, h3, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="20-30 BG color X MARSI/MAVRSI")
fill(h7, h8, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="70-80 BG color X MARSI/MAVRSI")

///Long Entry///
longCondition = marsi > marsi[1] 
if (longCondition)
    strategy.entry("Long", strategy.long)

///Long exit///
Xlong =input(true)
closeConditionLong = marsi < marsi[1] and Xlong
if (closeConditionLong)
    strategy.close("Long")

///Short Entry///
shortCondition = marsi < marsi[1] 
if (shortCondition)
    strategy.entry("Short", strategy.short)
    
///Short exit///
Xshort =input(true)
closeConditionShort = marsi > marsi[1] and Xshort
if (closeConditionShort)
    strategy.close("Short")
    

Plus de