Estrategia de inversión de tendencia del RSI

RSI ATR
Fecha de creación: 2024-04-28 13:33:19 Última modificación: 2024-04-28 13:33:19
Copiar: 1 Número de Visitas: 546
1
Seguir
1617
Seguidores

Estrategia de inversión de tendencia del RSI

Descripción general

La estrategia de reversión de tendencia RSI es una estrategia de negociación cuantitativa basada en un índice relativamente débil (RSI) y una amplitud real promedio (ATR). La estrategia se adapta a las rápidas fluctuaciones del mercado mediante el ajuste dinámico de la parada de parada (TP / SL) para capturar oportunidades de reversión de tendencia. La estrategia tiene el RSI como núcleo, mide la volatilidad en combinación con el ATR, y construye los siguientes dos bandos dinámicos de adaptación como base para abrir posiciones de equilibrio.

Principio de estrategia

El núcleo de la estrategia de reversión de la tendencia RSI está en la construcción de bandas de stop loss dinámicas. Primero, utiliza las funciones personalizadas de más alto_custom y más bajo_custom para encontrar el precio más alto y el precio más bajo desde el último cruce, formando la base de la banda. Luego, calcula el RSI y el ATR de longitud, respectivamente, y luego realiza el siguiente cálculo:

  1. Baja línea = precio máximo ×[1 - (ATR/precio + 1/(RSI bajo la vía × multiplicador))
  2. El precio de salida = el precio mínimo ×[1 + (ATR/precio + 1/(RSI en la vía × multiplicador))

El multiplicador es un factor de expansión de la banda personalizada por el usuario. Si el precio se eleva hacia arriba, se hace más, y si se cae hacia abajo, se hace vacío. Además, el color de las dos bandas también cambia según la posición de la banda relativa del precio, para facilitar la observación.

Ventajas estratégicas

  1. La banda de retención de pérdidas es muy adaptable y se ajusta automáticamente a la fluctuación de los precios, respondiendo a los cambios en las condiciones.
  2. Los parámetros son ajustables, lo que permite un control flexible de la sensibilidad de las estrategias mediante ajustes de parámetros como longitud, multiplicador, etc.
  3. La lógica es clara, la estructura del código es razonable, y es fácil de entender y rediseñar.
  4. Es muy versátil, puede ser usado independientemente de la estrategia, o puede agregar la función Stop Loss para otras estrategias.
  5. Eficiencia de cálculo: se evita el gran número de cálculos repetidos que se producen con el tipo de serie al personalizar funciones como el más alto_custom.

Riesgo estratégico

  1. La elección incorrecta de los parámetros puede conllevar riesgos adicionales, como que una longitud demasiado pequeña puede conducir a operaciones frecuentes, y un multiplicador demasiado grande puede conducir a un stop loss demasiado flexible.
  2. El efecto puede ser deficiente en ciertas condiciones de mercado, como las correcciones frecuentes y las brechas falsas en mercados convulsos, que pueden generar más operaciones perdedoras.
  3. La estrategia no tiene una función de juicio de tendencias por sí misma y requiere la combinación de otras señales.

Dirección de optimización de la estrategia

  1. Se puede considerar la inclusión de indicadores de tendencia, como las medias móviles, para negociar solo en los puntos de inflexión en la dirección de la gran tendencia.
  2. Los parámetros se pueden optimizar para encontrar la mejor combinación de parámetros, como longitud, multiplicador, etc.
  3. Se puede combinar con otros indicadores técnicos o con indicadores de sentimiento del mercado para mejorar la precisión de la posición de apertura.
  4. Se puede añadir la gestión de posiciones, controlando estrictamente el margen de riesgo de cada operación.

Resumir

La estrategia de reversión de tendencia RSI utiliza el RSI y el ATR para construir bandas de adaptación y puede ajustar dinámicamente los puntos de parada y pérdida para responder a los cambios en el mercado. La lógica de la estrategia es clara y tiene un amplio rango de aplicaciones, y puede ser una herramienta poderosa para los operadores cuantitativos.

Código Fuente de la Estrategia
/*backtest
start: 2023-04-22 00:00:00
end: 2024-04-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI Trend Reversal", overlay=true, max_bars_back = 4999, calc_on_every_tick = false)


//INPUTS 
rsi_length = input.int(title = "Lenght", defval = 8)
rsi_mult = input.float(title = "Multiplier", defval = 1.5, step = .05)
lookback = input.int(title = "Delay to prevent idealization", defval = 1)
sltp = input.float(title = "Minimum Difference", defval = 10)
src = input.source(title = "Source Input", defval = close)

//PARAMETERS INITILIZATION
hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src)
//FUNCTION INITILIZATION
highest_custom(src, length) =>
    x = src
    for i = 0 to length
        if src[i] > x
            x := src[i]
    x
lowest_custom(src, length) => 
    x = src
    for i = 0 to length
        if src[i] < x
            x := src[i]
    x
rsilev(src, length, mult, sltp) =>
    sl = (100 - sltp) / 100
    tp = (100 + sltp) / 100
    var bool crossup = na
    var bool crossdown = na
    var float dir = na
    dir_change = ta.change(dir)
    var float BearGuy = 0
    BullGuy = ta.barssince(crossup or crossdown)
    if na(BullGuy)
        BearGuy += 1
    else
        BearGuy := BullGuy
    var float upper = na
    var float lower = na
    rsilower = ta.rsi(src, length)
    rsiupper = math.abs(ta.rsi(src, length) - 100)
    atr = ta.atr(length) / src
    lower := highest_custom(math.max(highest_custom(highest_custom(src, BearGuy) * (1 - (atr + ((1 / (rsilower) * mult)))), BearGuy), src * sl), BearGuy)
    upper := lowest_custom(math.min(lowest_custom(lowest_custom(src, BearGuy) * (1 + (atr + ((1 / (rsiupper) * mult)))), BearGuy), src * tp), BearGuy)
    var float thresh = na
    if na(thresh)
        thresh := lower
    if na(dir)
        dir := 1
    if crossdown
        dir := -1
    if crossup
        dir := 1
    if dir == 1
        thresh := lower
    if dir == -1
        thresh := upper
    crossup := ta.crossover(src, thresh)
    crossdown := ta.crossunder(src, thresh)
    thresh

rsiclose = rsilev(hclose, rsi_length, rsi_mult, sltp)

//PLOTTING
var color col = color.lime
if hclose > rsiclose
    col := color.lime
if hclose < rsiclose
    col := color.red
plot(rsiclose, linewidth = 2, color = col)

//STRATEGY
buy = ta.crossover(hclose, rsiclose)
sell = ta.crossunder(hclose, rsiclose)

if buy[lookback]
    strategy.entry("long", strategy.long)
if sell[lookback]
    strategy.entry("Short", strategy.short)