Estrategia de trading cuantitativo basada en el indicador de índice de fuerza relativa (RSI)


Fecha de creación: 2023-12-22 14:06:45 Última modificación: 2023-12-22 14:06:45
Copiar: 4 Número de Visitas: 772
1
Seguir
1623
Seguidores

Estrategia de trading cuantitativo basada en el indicador de índice de fuerza relativa (RSI)

Descripción general

La estrategia RSI breakout es una estrategia de trading cuantitativa basada en indicadores de índices relativamente fuertes y débiles (RSI). Esta estrategia, mediante la fijación de umbrales de RSI por encima de las zonas de compra y venta, genera señales de trading cuando el indicador RSI rompe estos umbrales, es decir, hace más cuando el RSI está por debajo de 30 y hace menos cuando el RSI está por encima de 70.

Principio de estrategia

La idea central de la estrategia de ruptura del RSI es usar el indicador RSI para determinar la tendencia de sobreventa y sobreventa en el mercado. El RSI refleja la tendencia de fuerte y débil reciente de las acciones mediante el cálculo de la relación entre la subida y la caída promedio de las acciones durante un período de tiempo. En general, el RSI inferior a 30 se considera una tendencia de sobreventa y superior a 70 se considera una tendencia de sobreventa.

La estrategia primero establece la línea de sobreventa y la línea de sobreventa del RSI, con 30 y 70 por defecto. Luego, se monitorea en tiempo real el funcionamiento de la línea RSI. Cuando el RSI rompe el umbral de 70 de arriba a abajo, se produce una señal de venta.

De esta manera, la estrategia trata de capturar los puntos de inflexión de los precios de las acciones en el proceso de fluctuación, y ajustar las posiciones a tiempo cuando se producen sobrecompras y sobreventa, para que se pueda comprar o vender.

Ventajas estratégicas

La estrategia de ruptura RSI tiene las siguientes ventajas:

  1. Las señales de operación son simples y claras. El indicador RSI es fácil de calcular y entender, basta con observar el límite superior o inferior del umbral establecido para romper su línea de indicador. Se puede operar cuando se produce una ruptura en el indicador, sin reglas de negociación complejas.

  2. La estrategia extrae las señales de negociación del indicador RSI, sin necesidad de intervención y juicio humanos, y puede automatizar fácilmente las transacciones. Al mismo tiempo, la estrategia de retroalimentación del RSI es más efectiva que la señal de compra y venta de RSI, y también muestra un beneficio considerable.

  3. El comerciante puede ajustar los parámetros del RSI con flexibilidad, como ajustar los mínimos de sobrecompra y sobreventa, para adaptarse a las características de diferentes acciones y mercados.

Riesgo estratégico

Las estrategias de ruptura del RSI también tienen ciertos riesgos, que incluyen:

  1. Cuando el indicador oscila hacia arriba o hacia abajo, a menudo se dispara una señal de ruptura. En este momento, la estrategia produce demasiadas operaciones no válidas, lo que no es favorable para obtener ganancias estables. Se pueden ajustar los parámetros adecuadamente y filtrar algunas señales de oscilación.

  2. No puede juzgar la tendencia del mercado. El RSI solo genera señales de negociación a partir de un estado de sobrecompra y sobreventa. La capacidad de juzgar las grandes tendencias es débil. La estrategia es fácil de atrapar en situaciones de crisis.

  3. El riesgo de retroceso es mayor. El RSI a menudo muestra un comportamiento de desviación múltiple, es decir, los precios continúan subiendo y el indicador RSI baja. En este momento, la estrategia de operar en blanco y desviarse de la gran tendencia, se enfrentará a grandes pérdidas.

Optimización de la estrategia

La estrategia de ruptura del RSI se puede optimizar desde las siguientes dimensiones:

  1. Considere varios indicadores de manera integral, evitando las limitaciones de un solo indicador RSI. Por ejemplo, combinar el indicador de promedio móvil para determinar la tendencia del mercado o usar un indicador de fuerza débil y un indicador de volumen de transacción para combinar las señales de filtración de comercio.

  2. Optimizar los parámetros del RSI para mejorar la estabilidad de la estrategia. Incluye ajustar el umbral de sobreventa y sobreventa, establecer la duración de la señal de negociación, etc. Obtener los mejores parámetros mediante pruebas y filtrar una gran cantidad de señales no válidas.

  3. Establezca condiciones de stop loss para controlar el riesgo, por ejemplo, establezca un porcentaje o un número de puntos de stop loss. Evite que una sola pérdida tenga un impacto excesivo en el rendimiento general.

Resumir

La estrategia de ruptura del RSI es una estrategia cuantitativa que utiliza el fenómeno de la sobrecompra y la sobreventa para invertir el comercio. La señal de la estrategia es simple, clara, completamente cuantificable y personalizable. Pero también existe un cierto riesgo de whipsaw y riesgo de retiro.

Código Fuente de la Estrategia
/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bunghole 2021

strategy(title="My New Strategy", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)

//// Stoploss and Take Profit Parameters
// Enable Long Strategy
enable_long_strategy = input(true, title="Enable Long Strategy", group="SL/TP For Long Strategy",inline="1")
long_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_stoploss_percentage = (close * (long_stoploss_value / 100)) / syminfo.mintick
long_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_takeprofit_percentage = (close * (long_takeprofit_value / 100)) / syminfo.mintick

// Enable Short Strategy
enable_short_strategy = input(true, title="Enable Short Strategy", group="SL/TP For Short Strategy",inline="3")
short_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group= "SL/TP For Short Strategy",inline="4")
short_stoploss_percentage = (close * (short_stoploss_value / 100)) / syminfo.mintick
short_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Short Strategy",inline="4")
short_takeprofit_percentage = (close * (short_takeprofit_value / 100)) / syminfo.mintick

// Plot Stoploss & Take Profit Levels
long_stoploss_price = strategy.position_avg_price * (1 - long_stoploss_value/100)
long_takeprofit_price = strategy.position_avg_price * (1 + long_takeprofit_value/100)
short_stoploss_price = strategy.position_avg_price * (1 + short_stoploss_value/100)
short_takeprofit_price = strategy.position_avg_price * (1 - short_takeprofit_value/100)
plot(enable_long_strategy and not enable_short_strategy ? long_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Long SL Level")
plot(enable_long_strategy and not enable_short_strategy ? long_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Long TP Level")
plot(enable_short_strategy and not enable_long_strategy ? short_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Short SL Level")
plot(enable_short_strategy and not enable_long_strategy ? short_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Short TP Level")

// Date Range
start_date = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Date Range")
start_month = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
start_year = input(title="Start Year", type=input.integer, defval=1804, minval=1800, maxval=3000, group="Date Range")
end_date = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=3, group="Date Range")
end_month = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
end_year = input(title="End Year", type=input.integer, defval=2077, minval=1800, maxval=3000, group="Date Range")
in_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))

//// Inputs   **This is where you enter your indicators for your strategy. For example, I added the RSI indicator.**
//RSI
rsi = rsi(close, 14)
rsi_over_sold = rsi < 30
rsi_over_bought = rsi > 70


//// Strategy  **This is where you create your strategy. For example, We have or buy and sell signals.**
// Creating Long and Short Strategy
buy_signal = rsi_over_sold
sell_signal = rsi_over_bought

// Long Strategy
if buy_signal and in_date_range and enable_long_strategy == true
    strategy.entry("Long", true, when=buy_signal, alert_message="Open Long Position")
    strategy.exit("Long  SL/TP", from_entry="Long", loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message="Your Long SL/TP Limit As Been Triggered.")
    strategy.close("Long", when=sell_signal, alert_message="Close Long Position")
    
// Short Strategy
if sell_signal and in_date_range and enable_short_strategy == true
    strategy.entry("Short", false, when = sell_signal, alert_message="Open Short Position")
    strategy.exit("Short SL/TP", from_entry="Short", loss=short_stoploss_percentage, profit=short_takeprofit_percentage, alert_message="Your Short SL/TP Limit As Been Triggered.")
    strategy.close("Short", when=buy_signal, alert_message="Close Short Position")