Estrategia de trading cuantitativo basada en el indicador RSI y la media móvil


Fecha de creación: 2023-12-25 11:40:36 Última modificación: 2023-12-25 11:40:36
Copiar: 0 Número de Visitas: 615
1
Seguir
1623
Seguidores

Estrategia de trading cuantitativo basada en el indicador RSI y la media móvil

Descripción general

Esta estrategia se llama estrategia de comercio cuantitativa de indicadores RSI en combinación con promedios móviles. La estrategia utiliza el indicador RSI y los promedios móviles como señales de negociación, para lograr una estrategia de comercio cuantitativa para realizar operaciones de reversión en el contexto de la tendencia. Su idea central es abrir posiciones cuando se presentan señales de reversión en el precio de las acciones y hacer un stop en caso de sobreventa o sobreventa.

Principio de estrategia

La estrategia utiliza principalmente el indicador RSI y las medias móviles rápidas para determinar la tendencia de los precios de las acciones y el momento de la reversión. Concretamente, la estrategia primero calcula las medias móviles rápidas (SMA) y las medias móviles lentas, que generan una señal de compra cuando se cruza una media móvil lenta por encima de la media móvil rápida; y una señal de venta cuando se cruza una media móvil lenta por debajo de la media móvil rápida. Esto indica que el precio de las acciones está cambiando de tendencia.

Al mismo tiempo, esta estrategia calcula el RSI para determinar si el precio de la acción está sobrecomprado o sobrevendido. Antes de abrir una posición, se determina si el RSI es normal. Si el RSI supera el umbral establecido, se detiene la apertura de la posición hasta que el RSI se desvía. Esto evita la creación de una posición en un momento desfavorable para sobrecomprar y sobrevendir.

A través de la combinación de indicadores RSI y medias móviles, se pueden abrir posiciones cuando se produce una señal de reversión en el precio de las acciones; y se realizan paradas cuando se sobrecompra y se sobreventa, lo que permite una estrategia de negociación cuantitativa para obtener ganancias mediante operaciones de reversión en el contexto de la tendencia del precio de las acciones.

Ventajas estratégicas

La estrategia tiene las siguientes ventajas:

  1. Puede abrir posiciones con precisión cuando el precio de las acciones se invierte. Utilice el forko de oro de la media móvil como señal de compra y el forko de oro como señal de venta, para capturar con precisión las oportunidades de inversión de la tendencia de las acciones.

  2. Evite abrir una posición en un momento desfavorable. El indicador RSI juzga las situaciones de sobrecompra y sobreventa, lo que evita la creación de posiciones en caso de fluctuaciones excesivas en el precio de las acciones a corto plazo y evita pérdidas innecesarias.

  3. El parón RSI puede mantener las posiciones dentro de un rango de ganancias razonables y controlar el riesgo de las operaciones.

  4. Flexible ajuste de parámetros. Los parámetros de los ciclos SMA, RSI, etc. pueden ajustarse con flexibilidad para adaptarse a diferentes entornos de mercado.

  5. Eficiencia en la utilización de los fondos. Puede realizar transacciones frecuentes en la fase de agitación de la tendencia y utilizar eficazmente los fondos.

Análisis de riesgos

También existe el riesgo de que:

  1. Riesgo de error de seguimiento. El promedio móvil como indicador de tendencia tiene un cierto retraso, lo que puede causar que el momento de apertura de la posición sea inexacto.

  2. Riesgo de operaciones frecuentes. En situaciones de crisis, esto puede conducir a que las posiciones se establezcan o se cierren con demasiada frecuencia.

  3. Riesgo de ajuste de parámetros. Los parámetros de los ciclos SMA y RSI requieren ajustes de prueba repetidos para adaptarse al mercado, y una configuración inadecuada puede afectar el rendimiento de la estrategia.

  4. Riesgo de parálisis. La incorrecta configuración del parálisis del RSI también puede causar que las posiciones salgan prematuramente o sigan subiendo después de la salida del parálisis.

Dirección de optimización

La estrategia se ha orientado en la siguiente dirección:

  1. Intenta utilizar otros indicadores, como el MACD, la línea de Brin y el RSI, para que la señal sea más precisa y confiable.

  2. La adición de algoritmos de aprendizaje automático que permiten ajustar los parámetros automáticamente en función de los datos históricos, reduciendo el riesgo de ajuste de parámetros.

  3. Aumentar el mecanismo de optimización de la estrategia de frenado para que sea más inteligente y se adapte a los cambios en el mercado.

  4. Optimización de las estrategias de gestión de posiciones para reducir el riesgo de una sola transacción mediante el ajuste dinámico del tamaño de las posiciones.

  5. La combinación de datos de alta frecuencia y el uso de datos en tiempo real a nivel de tick para el comercio de alta frecuencia aumenta la frecuencia de la estrategia.

Resumir

En general, la estrategia utiliza el indicador RSI y el promedio móvil para generar señales de negociación, lo que permite una estrategia cuantitativa para realizar cálculos inversos durante el funcionamiento de la tendencia. En comparación con el uso de promedios móviles solo, la estrategia incluye el indicador RSI para evitar la apertura de posiciones en momentos adversos y controlar el riesgo de negociación mediante el RSI Stop, lo que mejora la estabilidad de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-17 00:00:00
end: 2023-12-18 19:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//1. 做多
//    a. RSI在超买区间时不开单,直到RSI回落一点再开单
//    b. 已经有多仓,如果RSI超买,则平多获利,当RSI回落一点之后,再次开多,直到有交叉信号反转做空

//2. 做空
//    a. RSI在超卖区间时不开单,直到RSI回落一点之后再开多单
//    b. 已经有空仓,如果RSI超卖,则平空获利,当RSI回落一点之后,再开空单,直到有交叉信号反转做多

//@version=4
strategy("策略_RSI+移动揉搓线_", overlay=true)

// 输入
fastLength = input(11, minval=1)
slowLength = input(82,minval=1)
length = input(title="长度", type=input.integer, defval=14, minval=1, maxval=100)
hight_rsi = input(title="rsi超过上轨平多获利", type=input.integer, defval=80, minval=1, maxval=100)
low_rsi = input(title="rsi超过下轨平空获利", type=input.integer, defval=20, minval=1, maxval=100)

open_long_rsi_threshold = input(title="rsi低于该阈值时才开多", type=input.integer, defval=75, minval=1, maxval=100)
open_short_rsi_threshold = input(title="rsi高于该阈值时才开空仓", type=input.integer, defval=25, minval=1, maxval=100)

// 均线
sma_fast = sma(close, fastLength)
sma_slow = sma(close, slowLength)
// RSI
rsi = rsi(close, length)

//**********变量*start*******//
var long_f = false // 标记是否是均线交叉多头
var short_f = false // 标记是否是均线交叉空头
var long_open_pending = false // 标记开仓时rsi是否处于超买状态
var short_open_pending = false // 标记开仓时rsi是否处于超卖
var long_rsi_over_buy = false // 标记 多仓时 是否发生超买平多获利
var short_rsi_over_sell = false // 标记 空仓时 是否发生超卖平空获利

//**********逻辑*start*******//

// 买入
longCondition = crossover(sma_fast, sma_slow)
if (longCondition)
    short_rsi_over_sell := false // 清空该标记,防止再次开空仓
    long_f := true
	short_f := false
	if (rsi < hight_rsi)
	    // 并且没有超买
	    strategy.entry("多", long=strategy.long)
    if (rsi > hight_rsi)
        // 开仓时发生超买,等待rsi小于hight_rsi
	    long_open_pending := true

// 卖出
shortCondition = crossunder(sma_fast, sma_slow)
if (shortCondition)
    long_rsi_over_buy := false //清空该标记,防止再次开多仓
    long_f := false
    short_f := true
    if (rsi > low_rsi)
        strategy.entry("空", long=strategy.short)
	if (rsi < low_rsi)
	    // 开仓时发生超卖,等待rsi大于low_rsi
	    short_open_pending := true
	    

// 等待RSI合理,买入开仓
if (long_f and long_open_pending and strategy.position_size == 0 and rsi < open_long_rsi_threshold)
    strategy.entry("多", long=strategy.long)
	long_open_pending := false
// 等待RSI合理,卖出开仓
if (short_f and short_open_pending and strategy.position_size == 0 and rsi > open_short_rsi_threshold)
    strategy.entry("空", long=strategy.short)
	short_open_pending := false


	
//RSI止盈(RSI超买平多)
if (strategy.position_size > 0 and long_f and rsi > hight_rsi)
	strategy.close_all()
	long_rsi_over_buy := true
//RSI止盈(RSI超卖平空)
if (strategy.position_size < 0 and short_f and rsi < low_rsi)
	strategy.close_all()
	short_rsi_over_sell := true
	
	
//RSI止盈之后,再次开多
if (long_f and long_rsi_over_buy and strategy.position_size == 0 and rsi < hight_rsi)
    long_rsi_over_buy := false
    strategy.entry("多", long=strategy.long)
//RSI止盈之后,再次开空
if (short_f and short_rsi_over_sell and strategy.position_size == 0 and rsi > low_rsi)
    short_rsi_over_sell := false
    strategy.entry("空", long=strategy.short)


//**********绘图*start*******//

p1 = plot(sma_fast, linewidth=2, color=color.green)
p2 = plot(sma_slow, linewidth=2, color=color.red)
fill(p1, p2, color=color.green)
plot(cross(sma_fast, sma_slow) ? sma_fast : na, style = plot.style_circles, linewidth = 4)

// 绘制rsi线
//plot(rsi, color=color.green, editable=true, style=plot.style_circles, linewidth=2)

// 绘制上下轨
//high_ = hline(80, title="上轨")
//low_ = hline(20, title="下轨")
//fill(high_, low_, transp=80, editable=true, title="背景")