10 votos

Detectar programáticamente la divergencia RSI

¿Cómo puedo detectar programáticamente las divergencias RSI alcistas y bajistas?

A divergencia alcista ocurre cuando la seguridad subyacente hace un bajo más bajo y el RSI forma un bajo más alto. El RSI no confirma el bajo más bajo y esto muestra un impulso de fortalecimiento.

A divergencia bajista se forma cuando la seguridad registra un alto más alto y el RSI forma un alto más bajo. El RSI no confirma el nuevo máximo y esto muestra un momento de debilitamiento.

enter image description here

7voto

James Alexander Puntos 133

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

Después de reflexionar e investigar, este es el plan que he desarrollado. Trabajaré en Python.

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

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

1 votos

Genial, gracias. Si mi respuesta te ha servido de ayuda, te agradecería que me dieras un upvote y/o aceptaras. IMHO mi respuesta es más específica y completa que cualquiera de las respuestas en Reddit hasta ahora.

0 votos

Impresionante, gracias. :) De hecho, acabo de empezar a desarrollar mi propio bot hace un par de días. Hasta ahora sólo hace trailing stop losses para la estrategia de venta. Estoy planeando utilizar divergencias RSI en un primer momento para la estrategia de compra, así que voy a ser curioso para comparar mi algoritmo con el suyo más tarde.

0 votos

Estoy intentando hacer lo mismo con la búsqueda de divergencias y pude completar los pasos 1 y 2 antes de toparme con un obstáculo y tropezar con esto. ¿Podría explicar cómo calculó el paso 3? Tengo los puntos de índice de estos máximos y mínimos y toda la información de RSI / cierre. Sólo tratando de encontrar una manera de automatizar la comprobación, utilizando los puntos de índice específico.

2voto

user44249 Puntos 11

Quiero implementar exactamente el mismo principio en C# y me he dado cuenta de que debo empezar por lo contrario. Empezar por encontrar Higher High o Lower Low y luego comprobar el RSI. Después de encontrar HH o LL comprobar RSI es una tarea trivial. Para encontrar HH o LL podría usar el indicador ZigZag. En investopedia puedes encontrar cómo calcularlo con más detalle. También puede consultar la versión de Python en foro quantconnect . Además, puede encontrar más versiones en Internet.

0 votos

El problema con el indicador ZigZag es que dibuja los picos cuando están bastante en el pasado (se actualiza retrospectivamente). Una forma de detectar los puntos de inflexión a medida que se producen es bastante difícil

0 votos

quantconnect forum no tiene ninguna versión de Python

0 votos

¿Qué te parece esto? Pulse código > main.py. También lo he hecho en c# quantconnect.com/terminal/

0voto

ars Puntos 391

Pine script que podría aplicarse en tradingview, referencia :

study(title="RSI Divergence", shorttitle="RSI Divergence_alper")
src_fast = close, len_fast = input(5, minval=1, title="Length Fast RSI")
src_slow = close, len_slow = input(14,minval=1, title="Length Slow RSI")
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)
divergence = rsi_fast - rsi_slow
plotdiv = plot(divergence, color = divergence > 0 ? lime:red, linewidth = 2)
//band1 = hline(70,color=green)
//band0 = hline(30,color=red)
band = hline(0)

// => normal RSI: check double or triple top/bottom on a chart meanwhile RSI is descending/ascending (check the example on chart)
// => signal line: when RSI Divergence cross zero line from bottom to top you get a buy signal (the line become green), 
//    vice versa when the RSI Divergence cross zero line in the opposite way you get a sell signal (the line become red)
divlong = divergence >=0
divshort = divergence <=0

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

data1 = divlong
plotshape(data1, style=shape.triangleup,location=location.bottom, color=green , title="DivUp")

data2 = divshort
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 de diferente configuración. Creo que la definición más popular de divergencia es entre las tendencias de precio y RSI más altas y más bajas, generalmente en las zonas de sobrecompra/sobreventa del RSI.

0 votos

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

0 votos

Estoy tratando de hacer una investigación para mi biblioteca de indicadores .NET también. Hasta ahora, esta es la descripción más general que he encontrado en Internet: Divergencia @ 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