Estrategia de trading cuantitativo a corto plazo basada en el promedio móvil RSI: comprar barato y vender caro


Fecha de creación: 2023-12-01 16:59:26 Última modificación: 2023-12-01 16:59:26
Copiar: 0 Número de Visitas: 703
1
Seguir
1619
Seguidores

Estrategia de trading cuantitativo a corto plazo basada en el promedio móvil RSI: comprar barato y vender caro

Descripción general

La estrategia determina el punto de compra y venta a través de la intersección del indicador RSI con su línea media. La estrategia se compra cuando el indicador RSI está por debajo de su línea media y se vende cuando está por encima de su línea media, y es una estrategia típica de compra y venta.

Principio de estrategia

  1. Calcula el RSI con una longitud de ciclo de 40 líneas K
  2. Calcula el promedio de la línea MA del RSI con una longitud de ciclo de 10 líneas K
  3. Genera una señal de compra cuando el indicador RSI está por debajo de su línea media multiplicada por el factor ((1-intervalo de compra y venta/100)
  4. Una señal de venta se genera cuando el indicador RSI está por encima de su línea media multiplicada por el factor ((1 + rango de compra y venta / 100)
  5. La distancia entre las zonas de compra y venta es 5 por defecto, lo que significa que la señal se genera cuando está a menos del 5% de la línea media
  6. Cuando el indicador RSI está por encima de su línea media y por encima del nivel 50

Análisis de las ventajas

Esta es una estrategia típica de inversión de tendencia, que utiliza las características de sobrecompra y sobreventa del RSI para determinar el momento de comprar y vender. La estrategia tiene las siguientes ventajas:

  1. El uso del RSI para determinar la estructura del mercado, el indicador en sí es más confiable
  2. El filtro uniforme evita transacciones innecesarias y mejora la estabilidad
  3. Los parámetros de distancia entre zonas de compra y venta ajustan la frecuencia de las transacciones
  4. El código es sencillo y fácil de entender, la lógica es clara.

En resumen, es una estrategia de intercambio de líneas cortas sencilla y práctica.

Análisis de riesgos

La estrategia también tiene algunos riesgos a tener en cuenta:

  1. El indicador RSI puede emitir señales erróneas, por lo que es necesario prestar atención a la forma de la curva
  2. La mala distancia entre las zonas de compra y venta puede llevar a demasiadas transacciones o oportunidades perdidas.
  3. La frecuencia de las transacciones es alta y hay que tener en cuenta los costos de las transacciones
  4. Basado en un solo indicador, vulnerable a las anomalías del mercado

Estos riesgos pueden mitigarse mediante la optimización de los parámetros, el aumento de las condiciones de filtración, etc.

Dirección de optimización

La estrategia se puede optimizar en las siguientes dimensiones:

  1. Añadir más indicadores de filtración, como el indicador de volumen de transacciones, para asegurar que la señal se produzca solo en los puntos de cambio de tendencia
  2. Adherirse a una estrategia de stop loss para controlar las pérdidas individuales
  3. Optimizar la distancia entre las zonas de compra y venta, equilibrar la frecuencia de las transacciones y obtener ganancias
  4. Utilizando algoritmos de aprendizaje automático para buscar combinaciones de parámetros óptimos
  5. Agregación de modelos de agregación para integrar los resultados de varias subestrategias

La combinación de varios indicadores, el manejo de la pérdida y la optimización de los parámetros pueden mejorar considerablemente el rendimiento de la estrategia.

Resumir

Esta estrategia en su conjunto es una estrategia de comercio de línea corta muy típica y práctica. Utiliza el estado de sobrecompra y sobreventa del indicador RSI para determinar el momento de compra y venta, complementado con un filtro de línea uniforme. La lógica de la estrategia es simple y clara, los parámetros se ajustan con flexibilidad y son fáciles de implementar.

Código Fuente de la Estrategia
/*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)