Estrategia de reversión del impulso del RSI

El autor:¿ Qué pasa?, Fecha: 2023-11-07 15:45:15
Las etiquetas:

img

Resumen general

La estrategia de inversión de impulso del RSI identifica las condiciones de sobrecompra y sobreventa mediante la combinación de indicadores del RSI y las direcciones del cuerpo de la vela para la negociación de inversión.

Estrategia lógica

La estrategia se ejecuta principalmente a través de las siguientes partes:

  1. Indicador RSI de Connors

    Calcula el RSI convencional, el RSI Win Ratio y el RSI Parisiense para obtener el RSI de Connors como un promedio.

  2. Indicador del RSI rápido

    Utiliza los cambios de precios para calcular el RSI rápido, reflejando ciclos de muy corto plazo.

  3. Filtro del cuerpo del candelabro

    Requiere un cuerpo alcista para el largo y un cuerpo bajista para el corto para evitar fallas.

  4. Condiciones largas y cortas

    Ir largo cuando Connors RSI por debajo de 20 y rápido RSI por debajo de 25 con cuerpo alcista.

    Ir corto cuando Connors RSI por encima de 80 y rápido RSI por encima de 75 con cuerpo bajista.

  5. Salida de pérdida de parada

    Salida con stop loss cuando el cuerpo del candelabro gira.

Connors RSI identifica puntos de inversión de tendencia a largo plazo, RSI rápido identifica reversiones a corto plazo, y el cuerpo de vela asegura la validez de las rupturas.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. Combinación de indicadores a largo y corto plazo

    El RSI de Connors refleja ciclos a largo plazo y el RSI rápido refleja ciclos a corto plazo, combinando ambos puede identificar con precisión los puntos de inversión.

  2. Filtro del cuerpo del candelabro

    El comercio sólo en los breakouts corporales puede reducir las pérdidas de los breakouts falsos.

  3. Parámetros ajustables

    Los parámetros del RSI, los productos comerciales y los plazos de negociación se pueden ajustar libremente para adaptarse a diferentes mercados.

  4. Simple e intuitivo

    El RSI y el cuerpo de las velas son indicadores básicos, de lógica fácil de entender.

  5. Fácil de implementar

    Utiliza indicadores incorporados solamente, requiere poco código y es fácil de implementar.

Análisis de riesgos

Los principales riesgos de esta estrategia:

  1. Riesgo de reversión fallido

    El precio continúa la tendencia original después de la señal de inversión, lo que lleva a pérdidas.

  2. Riesgo de mercado variable

    Se activan frecuentes señales ineficaces en mercados variados.

  3. Riesgo de ruptura falsa

    El filtro del cuerpo del candelabro no puede evitar completamente las fallas.

  4. Riesgo de parámetros

    Los parámetros RSI inadecuados pueden hacer que las operaciones falten o desencadenar múltiples operaciones ineficaces.

  5. Riesgo de condiciones especiales de mercado

    Los indicadores RSI pueden fallar y generar señales incorrectas en condiciones especiales de mercado.

Direcciones de optimización

La estrategia se puede optimizar a partir de los siguientes aspectos:

  1. Añadir mecanismos de stop loss

    Optimizar las estrategias de stop loss para obtener paradas más razonables, reduciendo las pérdidas de una sola operación.

  2. Integrar varios indicadores

    Añadir filtros como MACD y KD para hacer señales más confiables.

  3. Añadir filtros de probabilidad

    Combinar análisis de tendencia, soporte/resistencia para evitar operaciones de baja probabilidad.

  4. Optimiza las configuraciones de parámetros

    Los parámetros de ensayo en diferentes productos y marcos de tiempo para encontrar los valores óptimos.

  5. Evitar las condiciones especiales del mercado

    Identificar y evitar el comercio en condiciones especiales del mercado para evitar grandes pérdidas.

Conclusión

La estrategia de reversión del impulso del RSI identifica reversiones a largo y corto plazo utilizando el Connors RSI y el RSI rápido, con filtros de cuerpo de candelabros para aumentar la validez de la señal. Las ventajas como las combinaciones de indicadores y los parámetros ajustables permiten capturar reversiones y negociar contra-tendencia cuando hay sobrecompra o sobreventa. Pero persisten riesgos como reversiones fallidas y falsos breakouts, que requieren más optimizaciones en el stop loss, combinaciones de indicadores para reducir riesgos y mejorar la rentabilidad.


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Connors RSI Strategy v1.0", shorttitle = "CRSI str 1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usecrsi = input(true, defval = true, title = "Use CRSI Strategy")
usefrsi = input(true, defval = true, title = "Use FRSI Strategy")
usemod = input(true, defval = true, title = "CRSI+FRSI Mode")
limit = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
usebod = input(true, defval = true, title = "Use Body-filter")
usecol = input(true, defval = true, title = "Use Color-filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//CRSI
rsilen = 3
streaklen = 2
lookback = 100
rsi = rsi(close,rsilen)
upday = close > close[1] ? 1 : 0
downday = close < close[1] ? -1 : 0
upstreak = upday!=0 ? upstreak[1] + upday : 0
downstreak = downday!=0 ? downstreak[1] + downday : 0
streak = upstreak + downstreak
streakrsi = rsi(streak,streaklen)
roc = close/close[1] - 1
roccount = 0
for i=1 to lookback-1
    roccount := roc[i]<roc ? roccount + 1 : roccount
crsi = (rsi + streakrsi + roccount) / 3

//Oscilator
// rsiplot = plot(crsi, title="RSI", style=line, linewidth=1, color=blue)
// band1 = hline(80, title="Upper Line", linestyle=dashed, linewidth=1, color=red)
// band0 = hline(20, title="Lower Line", linestyle=dashed, linewidth=1, color=green)
// fill(band1, band0, color=purple, transp=90)

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 or usecol == false
rbar = bar == -1 or usecol == false

//Signals

up1 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and crsi < limit and body and usecrsi
dn1 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and crsi > 100 - limit and body and usecrsi
up2 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and fastrsi < limit and body and usefrsi
dn2 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and fastrsi > 100 - limit and body and usefrsi
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if ((up1 or up2) and usemod == false) or (up1 and up2 and usemod)
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if ((dn1 or dn2) and usemod == false) or (dn1 and dn2 and usemod)
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()

Más.