Estrategia de negociación cuantitativa basada en señales de indicadores RSI

El autor:¿ Qué pasa?, Fecha: 14 de septiembre de 2023 20:26:49
Las etiquetas:

Este artículo explica en detalle una estrategia de trading cuantitativa que utiliza el indicador RSI para generar señales de trading.

I. Lógica de la estrategia

La lógica principal de negociación es la siguiente:

  1. Calcular el indicador RSI(14) y suavizarlo utilizando EMA(28) para obtener el oscilador procesado.

  2. Calcular Bandas de Bollinger en el RSI procesado para obtener bandas superiores / inferiores.

  3. Cuando el RSI procesado cruza por debajo de la línea de entrada, se genera una señal de compra.

  4. Cuando el indicador entra en las zonas de sobrecompra/sobreventa, se genera una señal de posición cerrada.

De esta manera, las características del RSI se pueden utilizar para capturar oportunidades de reversión.

II. Ventajas de la Estrategia

La mayor ventaja es el mayor espacio de ajuste de parámetros del procesamiento de indicadores, que permite un control más estricto de la frecuencia de las operaciones y evita el exceso de operaciones.

Otra ventaja son los criterios de entrada intuitivos basados en valores numéricos claros del indicador.

Por último, el intervalo de sobrecompra/sobreventa también ayuda a obtener beneficios oportunos y a controlar el riesgo por operación.

III. Posibles debilidades

Sin embargo, la estrategia también presenta los siguientes riesgos:

En primer lugar, el RSI se centra en las operaciones de reversión, que pueden generar señales falsas durante las tendencias.

En segundo lugar, un ajuste inadecuado de los parámetros también puede conducir a una optimización excesiva y a una falta de adaptación a las condiciones cambiantes del mercado.

Por último, la tasa de ganancia relativamente baja también expone la estrategia a riesgos de extracción.

IV. Resumen

En resumen, este artículo introduce principalmente una estrategia de trading cuantitativa utilizando el indicador RSI. Controla la frecuencia de trading a través de la sintonización de parámetros y tiene reglas claras de entrada/salida. Al tiempo que optimiza los parámetros, también se necesitan gestionar los riesgos de la inversión de trading. En general, proporciona un marco de estrategia RSI simple e intuitivo.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//-----------------------------------------------------------------
//This simple strategy base on RSI, EMA, Bollinger Bands to get Buy and Sell Signal with detail as below:
//-----------------------------------------------------------------
//1.Define Oscillator Line
//+ Oscillator Line is smoothed by ema(28) of RSI(14) on H1 Timeframe
//2.Define Overbought and Oversold
//+ Apply Bollinger Bands BB(80,3) on Oscillator Line and calculate %b
//+ Overbought Zone marked above level 0.8
//+ Oversold Zone marked below level 0.2
//3.Buy Signal
//+ Entry Long Positon when %b crossover Point of Entry Long
//+ Deafault Point of Entry Long is 0.2
//+ Buy signal marked by Green dot
//4.Sell Signal
//+ Entry Short Position when %b crossunder Point of Entry Short
//+ Deafault Point of Entry Short is 0.8
//+ Sell signal marked by Red dot
//5.Exit Signal
//+ Exit Position (both Long and Short) when %b go into Overbought Zone or Oversold Zone
//+ Exit signal marked by Yellow dot
//-----------------------------------------------------------------
strategy(title="RSI %b Signal [H1 Backtesting]", overlay=false)

//RSI
rsi_gr="=== RSI ==="
rsi_len = input(14, title = "RSI",inline="set",group=rsi_gr)
smoothed_len = input(28, title = "EMA",inline="set",group=rsi_gr)
rsi=ta.ema(ta.rsi(close,rsi_len),smoothed_len)
//rsi's BOLLINGER BANDS
pb_gr="=== %b ==="
length = input(80, title = "Length",inline="set1",group=pb_gr)
rsimult = input(3.0, title = "Multiplier",inline="set1",group=pb_gr)
ovb = input(0.8, title = "Overbought",inline="set2",group=pb_gr)
ovs = input(0.2, title = "Oversold",inline="set2",group=pb_gr)
et_short = input(0.8, title = "Entry Short",inline="set3",group=pb_gr)
et_long = input(0.2, title = "Entry Long",inline="set3",group=pb_gr)
[rsibasis, rsiupper, rsilower] = ta.bb(rsi, length, rsimult)
//rsi's %B
rsipB = ((rsi - rsilower) / (rsiupper - rsilower))
plot(rsipB, title="rsi's %B", color=rsipB>math.min(ovb,et_short)?color.red:rsipB<math.max(ovs,et_long)?color.green:color.aqua, linewidth=1)

h1=hline(1,color=color.new(color.red,100))
h4=hline(ovb,color=color.new(color.red,100))
h0=hline(0,color=color.new(color.green,100))
h3=hline(ovs,color=color.new(color.green,100))
h5=hline(0.5,color=color.new(color.silver,0),linestyle=hline.style_dotted)

fill(h1,h4, title="Resistance", color=color.new(color.red,90))
fill(h0,h3, title="Support", color=color.new(color.green,90))

//Signal
rsi_buy=
           rsipB[1]<et_long
           and
           rsipB>et_long
rsi_sell=
           rsipB[1]>et_short
           and
           rsipB<et_short
rsi_exit=
           (rsipB[1]>ovs and rsipB<ovs)
           or
           (rsipB[1]<ovb and rsipB>ovb)
plotshape(rsi_buy?rsipB:na,title="Buy",style=shape.circle,color=color.new(color.green,0),location=location.absolute)
plotshape(rsi_sell?rsipB:na,title="Sell",style=shape.circle,color=color.new(color.red,0),location=location.absolute)
plotshape(rsi_exit?rsipB:na,title="Exit",style=shape.circle,color=color.new(color.yellow,0),location=location.absolute)
//Alert
strategy.entry("Long",strategy.long,when=rsi_buy)
strategy.close("Long",when=rsi_exit)
strategy.entry("Short",strategy.short,when=rsi_sell)
strategy.close("Short",when=rsi_exit)
//EOF

Más.