Estrategia de negociación cuantitativa basada en el cruce de la media del RSI

El autor:¿ Qué pasa?, Fecha: 2023-12-01 16:59:26
Las etiquetas:

img

Resumen general

Esta estrategia determina señales de compra y venta basadas en el cruce entre el indicador RSI y su promedio móvil, perteneciente a estrategias de negociación a corto plazo. Comprará cuando el RSI sea inferior a su MA y venderá cuando el RSI sea superior a su MA, que es una típica estrategia de compra baja-venta alta.

Principio de la estrategia

  1. Calcular el indicador RSI con un período de 40 barras
  2. Calcular el MA del indicador RSI, con un período de 10 barras
  3. Generar una señal de compra cuando el RSI es inferior a su MA multiplicado por un coeficiente (rango de negociación en %)
  4. Generar una señal de venta cuando el RSI es superior a su MA multiplicado por un coeficiente (1+rango de negociación%)
  5. La distancia de intervalo de negociación predeterminada es de 5, lo que significa un 5% por encima o por debajo del MA para activar las señales.
  6. Determinar la salida cuando el RSI esté por encima de su MA y por encima del nivel 50

Análisis de ventajas

Esta es una estrategia típica de reversión de la media, utilizando las propiedades de sobrecompra / sobreventa del indicador RSI para determinar las señales comerciales.

  1. Adopción del indicador RSI para juzgar la estructura del mercado, que es bastante fiable
  2. El filtro MA evita intercambios innecesarios y mejora la estabilidad
  3. Control de la frecuencia del intervalo de negociación ajustable
  4. Lógica sencilla y fácil de entender

En resumen, se trata de una estrategia de negociación simple y práctica a corto plazo.

Análisis de riesgos

Hay algunos riesgos a tener en cuenta:

  1. Posibilidad de RSI dando señales falsas, necesita ver el patrón
  2. La configuración incorrecta del intervalo de negociación puede conducir a un exceso de negociación o a oportunidades perdidas
  3. Frecuencia alta de operaciones, necesidad de considerar los costes de transacción
  4. Se basa únicamente en un único indicador, propenso a las anomalías del mercado

Estos riesgos pueden mitigarse ajustando los parámetros, añadiendo filtros, etc.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Añadir más filtros como el volumen para asegurar señales sólo en los puntos de inflexión
  2. Añadir stop loss para controlar la pérdida de una sola operación
  3. Optimizar el rango de negociación para equilibrar la frecuencia y la tasa de ganancia
  4. Utilice el aprendizaje automático para encontrar conjuntos óptimos de parámetros
  5. Añadir modelos de conjunto para integrar resultados de subestrategias

Se puede lograr un aumento significativo del rendimiento mediante combinaciones de múltiples indicadores, gestión de pérdidas de parada, optimización de parámetros, etc.

Resumen de las actividades

En resumen, esta es una estrategia comercial a corto plazo muy típica y práctica. Se capitaliza en los niveles de sobrecompra / sobreventa de RSI para determinar entradas y salidas, con un filtro MA adicional. La lógica es simple y clara, los parámetros son flexibles, fáciles de implementar. Hay ciertos riesgos de mercado, pero se pueden abordar mediante mecanismos de entrada / salida refinados, ajuste de parámetros, etc. Cuando se combina con indicadores más técnicos y técnicas de gestión de riesgos, esta estrategia puede convertirse en una estrategia relativamente estable a corto plazo.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © I11L

//@version=5
strategy("I11L - Meanreverter 4h", overlay=false, pyramiding=3, default_qty_value=10000, initial_capital=10000, default_qty_type=strategy.cash,process_orders_on_close=false, calc_on_every_tick=false)
 
frequency = input.int(10)
rsiFrequency = input.int(40)
buyZoneDistance = input.int(5)
avgDownATRSum = input.int(3)
useAbsoluteRSIBarrier = input.bool(true)
barrierLevel = 50//input.int(50)

momentumRSI = ta.rsi(close,rsiFrequency)
momentumRSI_slow = ta.sma(momentumRSI,frequency)
 
isBuy = momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) //and (momentumRSI < barrierLevel or not(useAbsoluteRSIBarrier))
isShort = momentumRSI > momentumRSI_slow*(1+buyZoneDistance/100) and (strategy.position_avg_price - math.sum(ta.atr(20),avgDownATRSum)*strategy.opentrades > close or strategy.opentrades == 0 ) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))
momentumRSISoftClose = (momentumRSI > momentumRSI_slow) and (momentumRSI > barrierLevel or not(useAbsoluteRSIBarrier))

isClose = momentumRSISoftClose

plot(momentumRSI,color=isClose ? color.red :  momentumRSI < momentumRSI_slow*(1-buyZoneDistance/100) ? color.green : color.white)
plot(momentumRSI_slow,color=color.gray)
plot(barrierLevel,color=useAbsoluteRSIBarrier ? color.white : color.rgb(0,0,0,0))
plot(momentumRSI_slow*(1-buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+buyZoneDistance/100),color=color.gray)
plot(momentumRSI_slow*(1+(buyZoneDistance*2)/100),color=color.gray)

// plot(strategy.wintrades - strategy.losstrades)

 
 
if(isBuy)
    strategy.entry("Buy",strategy.long, comment="#"+str.tostring(strategy.opentrades+1))

// if(isShort)
//     strategy.entry("Sell",strategy.short, comment="#"+str.tostring(strategy.opentrades+1))

if(isClose)
    strategy.exit("Close",limit=close)





Más.