Estrategia de negociación cuantitativa basada en el indicador RSI y la media móvil

El autor:¿ Qué pasa?, Fecha: 2023-12-25 11:40:36
Las etiquetas:

img

Resumen general

La estrategia se llama Quantitative Trading Strategy Based on RSI Indicator and Moving Average. Utiliza el indicador RSI y las medias móviles como señales comerciales para implementar una estrategia comercial cuantitativa que realiza operaciones de reversión en el contexto de la tendencia.

Principio de la estrategia

La estrategia utiliza principalmente el indicador RSI y los promedios móviles rápidos / lentos para determinar las tendencias de precios y el momento de la reversión. Específicamente, primero calcula el promedio móvil rápido (SMA) y el promedio móvil lento. Cuando el SMA rápido cruza el SMA lento, se genera una señal de compra. Cuando el SMA rápido cruza por debajo del SMA lento, se genera una señal de venta. Esto indica que la tendencia del precio está cambiando.

Al mismo tiempo, esta estrategia calcula el indicador RSI para determinar si el precio está en un estado de sobrecompra o sobreventa. Antes de abrir posiciones, juzgará si el indicador RSI es normal. Si el RSI excede el umbral establecido, suspenderá las posiciones de apertura y esperará a que el RSI caiga antes de abrir posiciones. Esto puede evitar establecer posiciones en momentos desfavorables de sobrecompra y sobreventa. Por otro lado, después de tomar posiciones, si el RSI excede el umbral establecido, cerrará posiciones para obtener ganancias. Esto puede bloquear las ganancias comerciales.

Al colaborar con los promedios móviles, las posiciones se pueden abrir cuando ocurren señales de inversión de precios y al obtener ganancias cuando se sobrecompra o sobreventa, se puede implementar una estrategia comercial cuantitativa que realiza operaciones de inversión para obtener ganancias bajo el contexto de la tendencia de precios.

Ventajas

La estrategia tiene las siguientes ventajas:

  1. El uso de la media móvil de cruz dorada como señal de compra y cruz de muerte como señal de venta puede capturar con precisión las oportunidades de inversión de tendencia de precios.

  2. Al juzgar las condiciones de sobrecompra y sobreventa a través del indicador RSI, puede evitar efectivamente establecer posiciones cuando el precio fluctúa excesivamente a corto plazo, evitando pérdidas flotantes innecesarias.

  3. Los riesgos pueden ser bien controlados. RSI take profit puede mantener posiciones dentro de un rango de ganancias razonable y controlar eficazmente los riesgos comerciales.

  4. Fácil de optimizar los parámetros. Los períodos SMA, los parámetros RSI, etc. se pueden ajustar de manera flexible para adaptarse a diferentes entornos de mercado.

  5. Alta eficiencia en la utilización del capital: se pueden realizar operaciones frecuentes durante las etapas de consolidación de tendencias y de choque, haciendo un uso eficiente del capital.

Análisis de riesgos

La estrategia también presenta los siguientes riesgos:

  1. El riesgo de error de seguimiento: las medias móviles como indicadores de juicio de tendencia tienen ciertos retrasos, lo que puede llevar a un momento inexacto de apertura de posiciones.

  2. En los mercados oscilantes, puede dar lugar a una apertura y cierre excesivamente frecuentes de posiciones.

  3. El riesgo de ajuste de parámetros. Los períodos SMA y los parámetros RSI necesitan pruebas y ajustes repetidos para adaptarse a los mercados.

  4. El riesgo de obtener ganancias: la configuración incorrecta de los indicadores de rendimiento de las posiciones puede también conducir a una salida prematura de las posiciones o a un aumento continuo después de la salida de las mismas.

Direcciones de optimización

Las direcciones de optimización son las siguientes:

  1. Intente usar MACD, Bandas de Bollinger y otros indicadores combinados con RSI para hacer que las señales sean más precisas y confiables.

  2. Aumentar los algoritmos de aprendizaje automático para ajustar automáticamente los parámetros basados en datos históricos, reduciendo los riesgos de ajuste de parámetros.

  3. Aumentar los mecanismos de optimización de las estrategias de aprovechamiento para hacer que las estrategias de aprovechamiento sean más inteligentes y adaptables a los cambios del mercado.

  4. Optimizar las estrategias de gestión de posiciones ajustando dinámicamente los tamaños de las posiciones para reducir los riesgos de operaciones individuales.

  5. Combinar datos de alta frecuencia y utilizar datos en tiempo real a nivel de tick para el comercio de alta frecuencia para mejorar la frecuencia de la estrategia.

Conclusión

En resumen, esta estrategia utiliza señales comerciales generadas por el indicador RSI y promedios móviles para implementar una estrategia cuantitativa que hace operaciones de reversión durante las tendencias. En comparación con el uso de promedios móviles por sí solos, al agregar juicios de indicadores RSI, esta estrategia puede prevenir eficazmente los tiempos de apertura de posiciones desfavorables y controlar los riesgos comerciales a través de RSI tomar ganancias. Hasta cierto punto, mejora la estabilidad de la estrategia. Por supuesto, todavía hay margen para mejoras para esta estrategia. En el futuro, se puede optimizar en aspectos como más combinaciones de indicadores, optimización automática de parámetros, gestión de posiciones, etc. para hacer que la estrategia de rendimiento sea aún mejor.


/*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="背景")
    
    
    
    
    
    
    

Más.