Estrategia comercial de seguimiento de señales perdidas basada en RSI inverso


Fecha de creación: 2023-09-28 10:54:24 Última modificación: 2023-09-28 10:54:24
Copiar: 1 Número de Visitas: 693
1
Seguir
1617
Seguidores

Descripción general

Esta estrategia permite el reverso de las operaciones al rastrear las señales de sobreventa y sobreventa que el RSI ha perdido. Cuando el RSI retrocede desde la zona de sobreventa, genera señales de seguimiento y cuando el RSI rebota desde la zona de sobreventa, genera señales de seguimiento para capturar oportunidades de reversión.

Principio de estrategia

La señal está establecida.

El indicador RSI sirve para determinar si hay un exceso de compra o de venta. Cuando el RSI cruza la línea de compra establecida, es una señal de compra excesiva, y cuando cruza la línea de venta excesiva, es una señal de venta excesiva.

overbought = rsi > uplimit 
oversold = rsi < dnlimit

Si un indicador anterior de la línea K RSI está en un estado de sobreventa, el indicador de la línea K RSI actual se retira de un estado de sobreventa, generando una señal de seguimiento múltipleup1Si un indicador RSI de la línea K anterior está en un estado de sobreventa, el indicador RSI de la línea K actual se retira de un estado de sobreventa, generando una señal de seguimiento de brechadn1

up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false 

Retirado de la sentencia

Se produce una señal de salida cuando la dirección de la posición coincide con la dirección de la entidad en la línea K y la entidad supera la mitad de su promedio de 10 ciclos.

exit = (((strategy.position_size > 0 and bar == 1) or 
         (strategy.position_size < 0 and bar == -1)) and 
        body > abody / 2)

Ventajas estratégicas

  1. El indicador RSI se utiliza para seguir las señales de reversión que se han perdido, evitando la dificultad de capturar en el tiempo los puntos de sobreventa y sobrecompra.

  2. El indicador RSI se ha convertido en un indicador de tendencia a la baja, con una tendencia a la baja en los últimos años.

  3. Juzga la salida en combinación con la dirección y el tamaño de la entidad de la línea K, para evitar seguir el seguimiento después del rebote.

Riesgos y soluciones

  1. El riesgo de falsas señales en el RSI

    • Solución: Confirmar junto con otros indicadores para evitar errores.
  2. En el caso de las señales de seguimiento, el precio podría haber retrocedido un poco, con un alto riesgo de pérdidas.

    • La solución: reducir la posición de entrada o optimizar el tiempo de entrada.
  3. El riesgo de que algunos rebotes no sean rentables es que emitan señales de salida.

    • Solución: Optimizar la lógica de decisión de salida para mejorar las oportunidades de lucro de la posición.

Optimización de las ideas

  1. Los parámetros de optimización, como la línea de venta excesiva, el ciclo de revisión, etc., se ajustan a los diferentes mercados.

  2. Ajuste de la gestión de posiciones, como la reducción de posiciones en la búsqueda de señales.

  3. Optimizar el tiempo de entrada, añadiendo otras restricciones de condiciones basadas en señales de seguimiento.

  4. Optimización de los métodos de salida para aumentar la probabilidad de ganar, como la introducción de paradas móviles.

  5. Optimización de los métodos de detención de pérdidas y reducción del riesgo de pérdidas, como la introducción de detención móvil, detención de fanerología, etc.

Resumir

Esta estrategia permite el seguimiento de inversiones basadas en señales de sobreventa y sobreventa basadas en el indicador RSI. La estrategia tiene las ventajas de seguir señales de inversiones, pero también existe cierto riesgo de falsas señales y riesgo de pérdidas. Con la optimización continua, la estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más.

Código Fuente de la Estrategia
/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-27 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Anti RSI Strategy v1.0", shorttitle = "Anti RSI str 1.0", 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")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
rsiperiod1 = input(14, defval = 14, minval = 2, maxval = 50, title = "RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
showarr = input(false, defval = false, title = "Show Arrows")
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
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit = 100 - rsilimit1
dnlimit = rsilimit1

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

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overbought = rsi > uplimit
oversold = rsi < dnlimit

up1 = bar == -1 and strategy.position_size == 0 and overbought[1] and overbought == false
dn1 = bar == 1 and strategy.position_size == 0 and oversold[1] and oversold == false
up2 = bar == -1 and strategy.position_size > 0 and overbought == false
dn2 = bar == 1 and strategy.position_size < 0 and oversold == false

norma = overbought == false and oversold == false
exit = (((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2)

//Arrows
col = exit ? black : up1 or dn1 or up2 or dn2 ? blue : 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, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()