Estrategia de ruptura bidireccional del RSI


Fecha de creación: 2023-11-08 12:11:03 Última modificación: 2023-11-08 12:11:03
Copiar: 0 Número de Visitas: 669
1
Seguir
1617
Seguidores

Estrategia de ruptura bidireccional del RSI

Descripción general

La estrategia se basa en el diseño de indicadores de índices relativamente fuertes (RSI) y utiliza el principio de sobrecompra y sobreventa del indicador RSI para realizar operaciones de ruptura bidireccionales. Hacer más cuando se cruza la línea de sobrecompra establecida en el indicador RSI y cerrar cuando se cruza la línea de sobreventa establecida en el indicador RSI es una estrategia de negociación inversa típica.

Principio de estrategia

  1. Los parámetros del indicador RSI se calculan de acuerdo con la configuración de entrada del usuario, incluida la longitud del ciclo RSI, el umbral de la línea de compra excesiva y el umbral de la línea de venta excesiva.

  2. Según la relación de posición de la curva RSI con respecto a la línea de sobrecompra y la línea de sobreventa, se determina si se encuentra en una zona de sobrecompra o en una zona de sobreventa.

  3. Cuando el indicador RSI rompe la línea de desvalorización correspondiente desde la zona de venta por encima de la norma, se realiza una operación de apertura de posición en la dirección opuesta. Por ejemplo, cuando el indicador RSI rompe la línea de compra por encima de la norma desde la zona de venta por encima de la norma, se considera que el movimiento se invierte y se abre una posición más alta; cuando el indicador RSI rompe la línea de venta por encima de la norma desde la zona de venta por encima de la norma, se considera que el movimiento se invierte y se abre una posición baja.

  4. Después de abrir una posición, configure la línea de parada de pérdidas. Siga la situación de la parada de pérdidas y cierre la posición cuando cumpla con las condiciones.

  5. La estrategia también ofrece la opción de usar EMA como filtro. El precio solo puede abrir una posición si el indicador RSI hace más señales de breakout y, al mismo tiempo, rompe la EMA.

  6. La estrategia también ofrece la función de negociar solo en un período de tiempo específico. El usuario puede configurar el comercio solo en un período de tiempo determinado y salir de la posición después de que se supere el tiempo.

Análisis de las ventajas

  • El índice RSI utiliza el principio clásico de ruptura para medir mejor.
  • Se puede configurar de forma flexible el umbral de sobrecompra y sobreventa para adaptarse a las diferentes variedades.
  • Se puede elegir si se utilizan señales de filtro de EMA para evitar la apertura de posiciones cerradas frecuentes debido a las vibraciones de pequeña amplitud.
  • El soporte de la función Stop Loss Stop para mejorar la estabilidad de la estrategia.
  • Apoyo a la configuración de horarios específicos para evitar el uso de horarios inadecuados.
  • Apoyando el comercio de divisas, que puede aprovechar las fluctuaciones de la bolsa.

Análisis de riesgos

  • El indicador RSI es susceptible a desviaciones, y la evaluación del indicador RSI solo puede generar señales de negociación incorrectas. Se requiere combinar la tendencia, la línea media y otros criterios.
  • La configuración incorrecta de los umbrales de sobrecompra y sobreventa puede conducir a oportunidades de negociación demasiado frecuentes o perdidas.
  • La configuración incorrecta de la parada de pérdidas puede hacer que la estrategia sea demasiado radical o conservadora.
  • Un filtro EMA mal configurado también puede perder oportunidades de negociación o filtrar señales válidas.

Resolver el riesgo:

  • Optimización de los parámetros del RSI y ajuste de los parámetros para diferentes variedades
  • La combinación de indicadores de tendencia y otros juzgamientos desvía de la situación y evita señales erróneas.
  • Prueba y optimiza los parámetros de parada de pérdida para encontrar el mejor parámetro.
  • Prueba y optimiza los parámetros de EMA para encontrar el nivel de filtración óptimo.

Dirección de optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Optimización de los parámetros del RSI para buscar la combinación óptima de parámetros de las diferentes variedades. Se puede encontrar el mejor umbral de sobreventa y sobreventa a través de la retroalimentación.

  2. Intentar sustituir o combinar diferentes indicadores del RSI para formar una señal de juicio más fuerte. Por ejemplo, MACD, KD, Brin Band, etc.

  3. Optimización de las estrategias de stop loss para mejorar la estabilidad de las estrategias. Se puede establecer un stop loss libre en función de la volatilidad del mercado, o una estrategia con la función de seguimiento de stop loss.

  4. Optimice los parámetros del filtro EMA o pruebe otros filtros de indicadores para evitar aún más el enchufe.

  5. Añadir un módulo de evaluación de tendencias para evitar el cambio de tendencia hacia el mercado de divisas, o el cambio de tendencia hacia el mercado de divisas.

  6. Probar diferentes parámetros de tiempo de negociación para determinar cuáles son los momentos adecuados para la estrategia y cuáles deben evitarse.

Resumir

La estrategia de ruptura bidireccional del RSI tiene una idea clara, utiliza el clásico principio de RSI de sobrecompra y sobreventa para invertir. Se puede aprovechar la oportunidad de reversión de la zona de sobrecompra y venta, pero también se puede controlar el riesgo mediante filtración de EMA y parada de pérdidas.

Código Fuente de la Estrategia
/*backtest
start: 2023-10-08 00:00:00
end: 2023-11-07 00:00:00
period: 1h
basePeriod: 15m
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/
// © REV0LUTI0N

//@version=4

strategy("RSI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)

// Strategy Backtesting
startDate  = input(timestamp("2021-10-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("9999-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true
// Strategy

Length = input(12, minval=1)
src = input(close, title="Source")
overbought = input(70, minval=1)
oversold = input(30, minval=1)
xRSI = rsi(src, Length)
    
rsinormal = input(true, title="Overbought Go Long & Oversold Go Short")
rsiflipped = input(false, title="Overbought Go Short & Oversold Go Long")

// EMA Filter
noemafilter = input(true, title="No EMA Filter")
useemafilter = input(false, title="Use EMA Filter")
ema_length = input(defval=15, minval=1, title="EMA Length")
emasrc = input(close, title="Source")
ema = ema(emasrc, ema_length)
plot(ema, "EMA", style=plot.style_linebr, color=#cad850, linewidth=2)

//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))

// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")

// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")

// Strategy Execution
if (xRSI > overbought and close > ema and time_cond and timetobuy and rsinormal and useemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI < oversold and close < ema and time_cond and timetobuy and rsinormal and useemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI < oversold and close > ema and time_cond and timetobuy and rsiflipped and useemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI > overbought and close < ema and time_cond and timetobuy and rsiflipped and useemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI > overbought and time_cond and timetobuy and rsinormal and noemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI < oversold and time_cond and timetobuy and rsinormal and noemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if (xRSI < oversold and time_cond and timetobuy and rsiflipped and noemafilter)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
    
if (xRSI > overbought and time_cond and timetobuy and rsiflipped and noemafilter)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)
    
if strategy.position_size > 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
    strategy.close_all(alert_message = message_closeshort)
    
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)