Estrategia de negociación de reversión basada en el índice de rentabilidad de varios períodos

El autor:¿ Qué pasa?, Fecha: 14 de septiembre de 2023 20:42:55
Las etiquetas:

Este artículo explica en detalle una estrategia de trading cuantitativa que utiliza indicadores de RSI de varios períodos para identificar puntos de reversión.

I. Lógica de la estrategia

La estrategia emplea 3 grupos de indicadores RSI con diferentes parámetros:

  1. Se calcularán los valores del RSI para los períodos 2, 7 y 14, respectivamente.

  2. Cuando el RSI-2 está por debajo de 10, el RSI-7 por debajo de 20 y el RSI-14 por debajo de 30, se identifica un fondo.

  3. Cuando el RSI-2 está por encima de 90, el RSI-7 por encima de 80 y el RSI-14 por encima de 70, se identifica una cima.

  4. Generar señales de compra/venta basadas en la unanimidad del RSI.

  5. Parámetros ajustables preestablecidos para el consenso del indicador, control de la frecuencia de la señal.

Al analizar los indicadores RSI en todos los períodos en conjunto, se puede mejorar la precisión del punto de inversión.

II. Ventajas de la Estrategia

La mayor ventaja es que el uso de análisis de RSI de marcos de tiempo múltiples mejora la identificación de puntos clave y filtra señales falsas.

Otra ventaja es la flexibilidad para ajustar los parámetros de consenso y adaptarse a los diferentes entornos de mercado.

Por último, las combinaciones del RSI también proporcionan más opciones de ajuste.

III. Riesgos potenciales

Sin embargo, existen los siguientes riesgos:

En primer lugar, el propio RSI tiene un retraso inherente en la identificación de las reversiones.

En segundo lugar, los múltiples indicadores introducen una ambigüedad de señales que requiere normas claras.

Por último, las operaciones de reversión tienen una tasa de fracaso que requiere preparación psicológica.

IV. Resumen

En resumen, este artículo ha explicado una estrategia cuantitativa de identificación de reversiones basada en el análisis del RSI de varios períodos. Mejora el reconocimiento de los puntos de inflexión del mercado al juzgar la unanimidad del RSI. Pero los riesgos como el retraso y las señales incorrectas deben ser manejados. En general, proporciona un enfoque flexible de optimización de la estrategia del RSI.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Triple RSI Top/Bottom v1.1", shorttitle = "3RSI Top/Bottom 1.1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
leverage = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
indi = input(3, defval = 3, minval = 1, maxval = 3, title = "Indicators")
accuracy = input(3, defval = 3, minval = 1, maxval = 10, title = "accuracy")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI-2
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//RSI-7
middleup = rma(max(change(close), 0), 7)
middledown = rma(-min(change(close), 0), 7)
middlersi = middledown == 0 ? 100 : middleup == 0 ? 0 : 100 - (100 / (1 + middleup / middledown))

//RSI-14
slowup = rma(max(change(close), 0), 14)
slowdown = rma(-min(change(close), 0), 14)
slowrsi = slowdown == 0 ? 100 : slowup == 0 ? 0 : 100 - (100 / (1 + slowup / slowdown))

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
acc = 10 - accuracy
signalup1 = fastrsi < (5 + acc) ? 1 : 0
signalup2 = middlersi < (10 + acc * 2) ? 1 : 0
signalup3 = slowrsi < (15 + acc * 3) ? 1 : 0

signaldn1 = fastrsi > (95 - acc) ? 1 : 0
signaldn2 = middlersi > (90 - acc * 2) ? 1 : 0
signaldn3 = slowrsi > (85 - acc * 3) ? 1 : 0

up = signalup1 + signalup2 + signalup3 >= indi
dn = signaldn1 + signaldn2 + signaldn3 >= indi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 3

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * leverage : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Top", strategy.short, needshort == false ? 0 : lot)
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Más.