Estrategia VRSI y MARSI

El autor:¿ Qué pasa?, Fecha: 2024-02-02 17:21:09
Las etiquetas:

img

Resumen general

La estrategia VRSI y MARSI utiliza promedios móviles para suavizar los indicadores RSI e implementa una estrategia de indicadores duales. Utiliza tanto el indicador RSI de precio y volumen, combinado con sus promedios móviles, para generar señales comerciales. Va largo cuando el precio RSI aumenta y va corto cuando el precio RSI cae. Mientras tanto, observa los cambios en el volumen RSI para juzgar la fuerza del mercado y los posibles cambios de tendencia.

Estrategia lógica

La estrategia primero calcula el indicador RSI de precio (RSI) de 9 períodos y el indicador RSI de volumen (VRSI) de 9 períodos.

Las señales de trading se generan basándose en el indicador MARSI. Se hace largo cuando MARSI sube y corto cuando MARSI cae. Además, el indicador MAVRSI se utiliza para juzgar la fortaleza del mercado y posibles cambios de tendencia.

Por ejemplo, durante una tendencia alcista, si el precio continúa subiendo pero el volumen comienza a disminuir, esto indica que la fuerza alcista puede estar debilitándose y uno debe prepararse para cerrar posiciones largas.

Análisis de ventajas

Al combinar los promedios móviles de los indicadores duales de RSI, esta estrategia puede capturar de manera efectiva las tendencias, al tiempo que utiliza los cambios de volumen para juzgar la fortaleza del mercado y evitar quedar atrapado.

El uso de promedios móviles también filtra algo de ruido para hacer que las señales sean más confiables.

Análisis de riesgos

El principal riesgo de esta estrategia radica en las divergencias que pueden ocurrir entre los indicadores duales. Cuando hay una divergencia entre el precio y el volumen, las señales comerciales pueden volverse menos confiables.

Otro riesgo es quedarse atrapado en mercados de rango. Cuando el precio se mueve en un rango, el indicador RSI tiende a oscilar hacia arriba y hacia abajo, lo que desencadena operaciones innecesarias.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Ajustar los parámetros del RSI y las medias móviles para encontrar combinaciones óptimas

  2. Añadir otras condiciones al generar señales, por ejemplo, las señales de reversión activadas en el área de sobrecompra/sobreventa tienden a ser más confiables

  3. Añadir estrategias de stop loss como movimiento de stop loss o stop loss indicador

  4. Incorporar otros indicadores, por ejemplo, patrones de candeleros, indicadores de volatilidad, etc., para evitar trampas

Resumen de las actividades

La estrategia VRSI y MARSI combina con éxito los indicadores RSI de precio y volumen. La comparación y el juicio entre los indicadores duales pueden mejorar la precisión y la rentabilidad de la señal. La optimización de parámetros y las estrategias de stop loss también hacen posible un funcionamiento estable. En resumen, al combinar indicadores, esta estrategia logra un rendimiento superior sobre un único indicador 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")
    

Más.