Estrategia para el avance de la RSI doble y rápida

El autor:¿ Qué pasa?, fecha: 2023-11-07 16:56:39
Las etiquetas:

img

Resumen general

Esta estrategia utiliza múltiples indicadores RSI para implementar avances de precios para generar señales de entrada y salida más precisas.

Estrategia lógica

La estrategia establece dos grupos de parámetros RSI, uno con período de 7 y límite de 25, el otro con período de 14 y límite de 25.

La estrategia primero calcula los valores de los dos indicadores RSI, luego juzga si el precio rompe el límite superior o inferior del RSI. Si rompe el límite superior, se genera una señal larga. Si rompe el límite inferior, se genera una señal corta.

Si ya tiene una posición, continúa juzgando si el RSI actual está dentro del rango normal.

La estrategia también utiliza el sistema Martingale. El tamaño de la orden se duplica después de cada pérdida.

Análisis de ventajas

  • El uso de dos indicadores RSI puede juzgar mejor las señales de avance y evitar señales falsas.

  • Además, comprobar el avance del cuerpo evita operaciones equivocadas durante la consolidación.

  • Martingale ayuda a detener pérdidas rápidamente después de las pérdidas.

  • Los parámetros de RSI personalizables optimizan las oportunidades de entrada.

  • Las sesiones de negociación pueden limitarse para evitar el impacto de eventos importantes.

Análisis de riesgos

  • El doble RSI no puede evitar completamente el falso avance.

  • Martingale aumenta la posición después de las pérdidas, el riesgo de explotar.

  • No se tiene en cuenta el coste de negociación.

  • Demasiados parámetros optimizables requieren muchas pruebas para encontrar la mejor combinación.

Puede establecer stop loss para limitar las pérdidas; optimizar los parámetros del RSI; agregar consideración de costos; relajar los criterios de avance.

Direcciones de optimización

  • Añadir el stop loss para limitar la pérdida máxima.

  • Optimice los parámetros del RSI para reducir las señales falsas.

  • Considere el impacto de los costes de negociación para evitar el exceso de negociación.

  • Relaja los criterios de avance corporal para más oportunidades.

  • Agregue más filtros para evitar quedar atrapado.

Resumen de las actividades

Esta estrategia utiliza el doble RSI para determinar el avance del precio, agrega un filtro de avance corporal para evitar las flechas. También utiliza Martingale para reducir rápidamente las pérdidas. La estrategia se puede mejorar optimizando parámetros y agregando filtros para señales más precisas. La gestión del riesgo es importante para limitar las pérdidas. En general, esta estrategia proporciona un sistema de avance relativamente estable adecuado para el comercio de alta eficiencia.


/*backtest
start: 2023-10-30 00:00:00
end: 2023-11-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Fast RSI Strategy v2.0", shorttitle = "Fast RSI str 2.0", overlay = true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi1 = input(true, defval = true, title = "Use RSI #1")
rsiperiod1 = input(7, defval = 7, minval = 2, maxval = 50, title = "#1 RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "#1 RSI limit")
usersi2 = input(true, defval = true, title = "Use RSI #2")
rsiperiod2 = input(14, defval = 14, minval = 2, maxval = 50, title = "#2 RSI Period")
rsilimit2 = input(25, defval = 25, minval = 1, maxval = 100, title = "#2 RSI limit")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, 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 #1
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi1 = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit1 = 100 - rsilimit1
dnlimit1 = rsilimit1

//RSI #2
uprsi2 = rma(max(change(close), 0), rsiperiod2)
dnrsi2 = rma(-min(change(close), 0), rsiperiod2)
rsi2 = dnrsi2 == 0 ? 100 : uprsi2 == 0 ? 0 : 100 - (100 / (1 + uprsi2 / dnrsi2))
uplimit2 = 100 - rsilimit2
dnlimit2 = rsilimit2

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

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi1 < dnlimit1 and body > abody / 5 and usersi1
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi1 > uplimit1 and body > abody / 5 and usersi1
up2 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi2 < dnlimit2 and body > abody / 5 and usersi2
dn2 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi2 > uplimit2 and body > abody / 5 and usersi2
norma = rsi1 > dnlimit1 and rsi1 < uplimit1 and rsi2 > dnlimit2 and rsi2 < uplimit2
exit = (((strategy.position_size > 0 and bar == 1 and norma) or (strategy.position_size < 0 and bar == -1 and norma)) and body > abody / 2)

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()

Más.