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.
La estrategia se ejecuta principalmente a través de las siguientes partes:
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.
Indicador del RSI rápido
Utiliza los cambios de precios para calcular el RSI rápido, reflejando ciclos de muy corto plazo.
Filtro del cuerpo del candelabro
Requiere un cuerpo alcista para el largo y un cuerpo bajista para el corto para evitar fallas.
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.
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.
Las ventajas de esta estrategia incluyen:
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.
Filtro del cuerpo del candelabro
El comercio sólo en los breakouts corporales puede reducir las pérdidas de los breakouts falsos.
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.
Simple e intuitivo
El RSI y el cuerpo de las velas son indicadores básicos, de lógica fácil de entender.
Fácil de implementar
Utiliza indicadores incorporados solamente, requiere poco código y es fácil de implementar.
Los principales riesgos de esta estrategia:
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.
Riesgo de mercado variable
Se activan frecuentes señales ineficaces en mercados variados.
Riesgo de ruptura falsa
El filtro del cuerpo del candelabro no puede evitar completamente las fallas.
Riesgo de parámetros
Los parámetros RSI inadecuados pueden hacer que las operaciones falten o desencadenar múltiples operaciones ineficaces.
Riesgo de condiciones especiales de mercado
Los indicadores RSI pueden fallar y generar señales incorrectas en condiciones especiales de mercado.
La estrategia se puede optimizar a partir de los siguientes aspectos:
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.
Integrar varios indicadores
Añadir filtros como MACD y KD para hacer señales más confiables.
Añadir filtros de probabilidad
Combinar análisis de tendencia, soporte/resistencia para evitar operaciones de baja probabilidad.
Optimiza las configuraciones de parámetros
Los parámetros de ensayo en diferentes productos y marcos de tiempo para encontrar los valores óptimos.
Evitar las condiciones especiales del mercado
Identificar y evitar el comercio en condiciones especiales del mercado para evitar grandes pérdidas.
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()