11 votos

Detectar divergencias de RSI programáticamente

¿Cómo puedo detectar de forma programática divergencias alcistas y bajistas en el RSI?

Una divergencia alcista ocurre cuando el valor subyacente alcanza un mínimo más bajo y el RSI forma un mínimo más alto. El RSI no confirma el mínimo más bajo y esto muestra un impulso creciente.

Una divergencia bajista se forma cuando el valor registra un máximo más alto y el RSI forma un máximo más bajo. El RSI no confirma el nuevo máximo y esto muestra un impulso decreciente.

enter image description here

0 votos

Para futuros visitantes, así es como implementé el algoritmo de detección de divergencias RSI: github.com/SpiralDevelopment/RSI-divergence-detector

8voto

James Alexander Puntos 133

Estaba buscando respuestas a la misma pregunta y me encontré con tu pregunta.

Después de pensar e investigar, aquí está el plan que he desarrollado. Estaré trabajando en Python.

  1. Calcular los máximos y mínimos relativos con SciPy.
  2. Calcular RSI en esos puntos usando lib-ta.
  3. Para cada par de mínimos y máximos, comparar el cambio en el precio con la diferencia en RSI.

Soy completamente nuevo en análisis técnico, así que en caso de que haya cometido algún error, agradecería mucho tus comentarios. Quería preguntarte sobre tu lenguaje de programación y formato de datos, pero no tengo suficiente reputación para comentar.

1 votos

Genial, gracias. Si mi respuesta te fue útil, agradecería un voto positivo o aceptación. En mi opinión, mi respuesta es más específica y completa que cualquiera de las respuestas en Reddit hasta ahora.

0 votos

Asombroso, ¡gracias! :) Realmente acabo de empezar a desarrollar mi propio bot hace un par de días. Hasta ahora, solo realiza pérdidas de parada móviles para la estrategia de venta. Estoy planeando utilizar divergencias de RSI al principio para la estrategia de compra, así que estaré ansioso por comparar mi algoritmo con el tuyo más tarde.

0 votos

Estoy intentando hacer lo mismo con la búsqueda de divergencias y logré completar los pasos 1 y 2 antes de encontrarme con un obstáculo y tropezar con esto. ¿Podrías explicar cómo calculaste el paso 3? Tengo los puntos de índice de estos máximos y mínimos y toda la información de RSI/close. Solo estoy tratando de encontrar una forma de automatizar la verificación, utilizando esos puntos de índice específicos.

3voto

user44249 Puntos 11

Quiero implementar el mismo principio en C# y me di cuenta de que debería empezar al contrario. Empezar encontrando Higher High o Lower Low y luego revisar el RSI. Después de encontrar HH o LL, revisar el RSI es una tarea trivial. Para encontrar HH o LL podrías usar el indicador ZigZag. En investopedia puedes encontrar cómo calcularlo con más detalles. También puedes revisar la versión en Python en el foro de quantconnect. También puedes encontrar más versiones en internet.

0 votos

El problema con el indicador ZigZag es que dibuja picos cuando ya han pasado (se actualiza retrospectivamente). Es bastante difícil detectar los puntos de inflexión a medida que suceden.

0 votos

foro de quantconnect no tiene ninguna versión de Python

0 votos

¿Qué hay de esto? Presione el código> main.py. También lo he hecho en c# quantconnect.com/terminal/…

0voto

ars Puntos 391

Script de pino que se podría aplicar en tradingview, referencia de Shizaru:

// => RSI normal: verifica la doble o triple parte superior/inferior en un gráfico mientras RSI está descendiendo/ascendiendo (ver ejemplo en el gráfico)
// => línea de señal: cuando la Divergencia de RSI cruza la línea cero de abajo hacia arriba obtienes una señal de compra (la línea se vuelve verde),
//    viceversa cuando la Divergencia de RSI cruza la línea cero en la dirección opuesta obtienes una señal de venta (la línea se vuelve roja)

study(title="Divergencia de RSI", shorttitle="Divergencia de RSI")
src_fast = close, len_fast = input(5, minval=1, title="Longitud RSI Rápido")
src_slow = close, len_slow = input(14,minval=1, title="Longitud RSI Lento")
up_fast = rma(max(change(src_fast), 0), len_fast)
down_fast = rma(-min(change(src_fast), 0), len_fast)
rsi_fast = down_fast == 0 ? 100 : up_fast == 0 ? 0 : 100 - (100 / (1 + up_fast / down_fast))
up_slow = rma(max(change(src_slow), 0), len_slow)
down_slow = rma(-min(change(src_slow), 0), len_slow)
rsi_slow = down_slow == 0 ? 100 : up_slow == 0 ? 0 : 100 - (100 / (1 + up_slow / down_slow))
//plotfast = plot(rsi_fast, color=blue)
//plotslow = plot(rsi_slow, color=orange)
divergencia = rsi_fast - rsi_slow
plotdiv = plot(divergencia, color = divergence > 0 ? lime:red, linewidth = 2)
//band1 = hline(70,color=green)
//band0 = hline(30,color=red)
band = hline(0)

divlong = divergence >=0
divshort = divergence <=0

alertcondition(divlong, title='Div Long', message='Div Long')
alertcondition(divshort, title='Div Short', message='Div Short')

data1 = divlong
data2 = divshort
plotshape(data1, style=shape.triangleup,location=location.bottom, color=green , title="DivUp")
plotshape(data2, style=shape.triangledown, location=location.top, color=red,title="DivDown")

0 votos

Esto sólo representa la divergencia entre dos líneas RSI configuradas de manera diferente. Creo que la definición más popular de divergencia es entre máximos más altos y mínimos más bajos en los precios y tendencias RSI, por lo general en las zonas RSI de sobrecompra/sobreventa.

0 votos

@DaveSkender ¿Podría WaveTrend Oscillator ser un ejemplo de lo que estás definiendo relacionado con las zonas de sobrecompra/sobreventa? Por favor, visita tradingview.com/script/…

0 votos

Estoy tratando de hacer algunas investigaciones para mi biblioteca de indicadores .NET también. Hasta ahora, aquí está la descripción más general que puedo encontrar en línea: Divergencia en Investopedia

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X