Estrategia de negociación automática basada en RSI

El autor:¿ Qué pasa?, Fecha: 2024-02-29 14:14:01
Las etiquetas:

img

Resumen general

Esta estrategia diseña un sistema de negociación automatizado para posiciones largas y cortas basado en el indicador RSI.

Estrategia lógica

La estrategia utiliza el indicador RSI para identificar las condiciones de mercado de sobrecompra / sobreventa.

Además, las reglas de salida se establecen en la estrategia. Después de abrir posiciones largas, si el RSI cruza por encima de la línea de sobrecompra nuevamente, activará las pérdidas de parada para cerrar posiciones largas; de manera similar, después de abrir posiciones cortas, si el RSI cruza por debajo de la línea de sobreventa nuevamente, cerrará las posiciones cortas.

Análisis de ventajas

La mayor ventaja de esta estrategia es el uso del indicador RSI para juzgar escenarios de sobrecompra/sobreventa, que es un método de análisis técnico relativamente maduro y confiable en el comercio cuantitativo.

Además, el mecanismo de stop loss controla eficazmente el riesgo a la baja durante fuertes tendencias unidireccionales, lo que contrasta con las estrategias tradicionales de seguimiento de tendencias donde los corredores pueden meterse fácilmente en problemas.

Análisis de riesgos

El mayor riesgo es que el indicador RSI pueda dar señales comerciales incorrectas ocasionalmente. Ningún indicador técnico puede ser 100% preciso en la predicción de los movimientos del mercado, incluido el RSI. Cuando el RSI hace juicios erróneos sobre el estado de sobrecompra / sobreventa, dará lugar a entradas incorrectas para la estrategia.

Para mitigar dicho riesgo, se implementan stop losses en la estrategia. Pero las probabilidades de que se desencadenen stop losses pueden ser altas durante las tendencias fuertes, y se requeriría una intervención manual para cerrar las posiciones equivocadas. En términos generales, todavía se necesita supervisión y ajustes humanos para que el sistema automatizado alcance el máximo rendimiento.

Direcciones de optimización

Queda margen para nuevas optimizaciones:

  1. Incorporar otros indicadores para confirmar las señales de entrada y evitar entradas erróneas solo del RSI.

  2. Optimizar los parámetros del RSI para encontrar mejores valores de longitud para detecciones más precisas de sobrecompra/sobreventa.

  3. Ajuste fino de la colocación de la parada de pérdidas para equilibrar la prevención de pérdidas y evitar salidas prematuras.

Conclusión

En general, esta estrategia de negociación automatizada basada en RSI tiene la ventaja de identificar eficazmente las condiciones de mercado de sobrecompra y sobreventa. Al entrar en posiciones largas y cortas durante los niveles extremos de RSI, tiene como objetivo beneficiarse de las reversiones del mercado. El mecanismo de stop loss también ayuda a limitar las pérdidas durante fuertes tendencias unidireccionales. Sin embargo, el riesgo de señales de RSI mal juzgadas permanece.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4

strategy("Soran Strategy 2 - LONG SIGNALS", pyramiding=1, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)


// ----------------- Inputs ----------------- //

reso = input(title="Resolution", type=input.resolution, defval="")
length = input(20, title="RSI Length", type=input.integer)
ovrsld = input(30, "RSI Oversold level", type=input.float)
ovrbgt = input(85, "RSI Overbought level", type=input.float)
lateleave = input(28, "Number of candles", type=input.integer)
// lateleave : numbers of bars in overbought/oversold zones where the position is closed. The position is closed when this number is reached or when the zone is left (the first condition).

// best parameters BTCUSDTPERP M15 : 20 / 30 / 85 / 28


stratbull = input(title="Enter longs ?", type = input.bool, defval=true)
stratbear = input(title="Enter shorts ?", type = input.bool, defval=true)

stratyear = input(2020, title = "Strategy Start Year")
stratmonth = input(1, title = "Strategy Start Month")
stratday = input(1, title = "Strategy Start Day")
stratstart = timestamp(stratyear,stratmonth,stratday,0,0)


// --------------- Laguerre ----------------- //

laguerre = input(title="Use Laguerre on RSI ?", type=input.bool, defval=false)
gamma = input(0.06, title="Laguerre Gamma")

laguerre_cal(s,g) =>
    l0 = 0.0
    l1 = 0.0
    l2 = 0.0
    l3 = 0.0
    l0 := (1 - g)*s+g*nz(l0[1])
    l1 := -g*l0+nz(l0[1])+g*nz(l1[1])
    l2 := -g*l1+nz(l1[1])+g*nz(l2[1])
    l3 := -g*l2+nz(l2[1])+g*nz(l3[1])
    (l0 + 2*l1 + 2*l2 + l3)/6


// ---------------- Rsi VWAP ---------------- //

rsiV = security(syminfo.tickerid, reso, rsi(vwap(close), length))

rsiVWAP = laguerre ? laguerre_cal(rsiV,gamma) : rsiV


// ------------------ Plots ----------------- //

prsi = plot(rsiVWAP, color = rsiVWAP>ovrbgt ? color.red : rsiVWAP<ovrsld ? color.green : color.white, title="RSI on VWAP", linewidth=1, style=plot.style_line)
hline = plot(ovrbgt, color = color.gray, style=plot.style_line)
lline = plot(ovrsld, color = color.gray, style=plot.style_line)
fill(prsi,hline, color = rsiVWAP > ovrbgt ? color.red : na, transp = 30)
fill(prsi,lline, color = rsiVWAP < ovrsld ? color.green : na, transp = 30)


// ---------------- Positions: only shows Buy and close Buy positions --------------- //

timebull = stratbull 
timebear = stratbear 

strategy.entry("Long", true, when = timebull and crossover(rsiVWAP, ovrsld), comment="")
strategy.close("Long", when = timebull and crossover(rsiVWAP, ovrbgt)[lateleave] or crossunder(rsiVWAP, ovrbgt), comment="")


Más.