Estrategia de ruptura secundaria del indicador RSI rápido


Fecha de creación: 2023-11-07 16:56:39 Última modificación: 2023-11-07 16:56:39
Copiar: 0 Número de Visitas: 737
1
Seguir
1617
Seguidores

Estrategia de ruptura secundaria del indicador RSI rápido

Descripción general

Esta estrategia permite una entrada y salida más precisa de las señales de entrada y salida mediante la configuración de los parámetros del indicador RSI para lograr múltiples brechas en el precio.

Principio de estrategia

La estrategia establece dos conjuntos de parámetros RSI, el RSI de 7 ciclos y el RSI de 14 ciclos, limitados a 25 RSI. Cuando el precio rompe los límites de cualquiera de los conjuntos de RSI, se ejecutan operaciones de compra o venta.

La estrategia primero calcula los valores de los dos conjuntos de indicadores RSI y luego decide si el precio rompe el límite superior o inferior del RSI. Si se rompe el límite superior, se genera una señal de plus y si se rompe el límite inferior, se produce una señal de déficit.

Si ya tiene una posición, continúa juzgando si el RSI actual está en el rango normal. Si el RSI está normal y la entidad rompe la mitad de la línea media, genera una señal de salida.

La estrategia también utiliza el sistema de apostaje de Martingale. Después de cada pérdida, el volumen de la siguiente operación se duplica.

Análisis de las ventajas

  • El uso de dos conjuntos de indicadores RSI permite determinar con mayor precisión las señales de ruptura y evitar falsas rupturas.

  • También es importante verificar las rupturas de entidades para evitar transacciones erróneas durante la conmoción.

  • El uso de la adición de Martingale permite una rápida suspensión de pérdidas después de la pérdida.

  • La combinación de parámetros RSI se puede personalizar para optimizar las oportunidades de ingreso.

  • Se puede limitar el tiempo de transacción para evitar el impacto de eventos importantes.

Análisis de riesgos

  • El doble RSI no puede evitar completamente el fenómeno de las falsas rupturas.

  • En la mayoría de los casos, las inversiones de los inversores en el mercado de divisas se realizan a través de la venta de acciones, que se realizan a través de la compra de acciones.

  • No se tiene en cuenta el impacto en el costo de la transacción.

  • Hay muchos parámetros que se pueden optimizar y se necesita una gran cantidad de pruebas para encontrar la combinación óptima de parámetros.

Se puede configurar un stop loss para limitar las pérdidas; optimizar la combinación de parámetros RSI; agregar consideraciones de costos; y permitir la determinación de brechas adecuadamente.

Dirección de optimización de la estrategia

  • La inclusión de un mecanismo de suspensión de pérdidas puede limitar la pérdida máxima.

  • Optimice la combinación de parámetros RSI para encontrar los mejores parámetros para reducir las falsas rupturas.

  • Tenga en cuenta el impacto de los costos de transacción y evite transacciones demasiado frecuentes.

  • La liberalización de la determinación de la brecha de la entidad para obtener más oportunidades de transacción.

  • Añade más filtros de indicadores para evitar que te encuentren.

Resumir

La estrategia utiliza el doble RSI para determinar las rupturas de precios y la determinación de rupturas de entidades, para evitar ser bloqueado en un mercado de crisis. Al mismo tiempo, se utiliza la adición de posiciones de Martingale para detener rápidamente. La estrategia puede obtener una señal de negociación más precisa a través de la optimización de los parámetros y la adición de más filtros de indicadores.

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