Hola,
Estoy intentando hacer un screener que me permita encontrar empresas que hayan tenido un volumen anormal días atrás. Me tendría que indicar el número de barras hacia atrás en el pasado en que se ha producido el evento. Y para rizar el rizo, poder configurar a partir de cuanto volumen considero que es un volumen anormal.
Dejo el código que estoy desarrollando, funciona, pero no con la fiabilidad que quisiera, ya que hay veces que falla y no entiendo el porque. Tal vez me he liado y se puede escribir el código de una manera diferente y mas simple.
Adjunto también una imagen de lo que estoy buscando. En este caso me tendría que marcar el día 1 en el screener.
Muchas gracias.
// El scanner busca las acciones que han tenido un volumen muy alto en comparación con los días anteriores.
// Da como resultado el día que la acción ha aumentado el volumen ( o tendría que hacer eso)
// A TENER EN CUENTA: el algoritmo funciona algunas veces y otras no.
// Define el timeframe a diario
TIMEFRAME(Daily)
// Inicializar variable para almacenar el día con volumen alto
DiaConVolumenAlto = 0
// Bucle externo para seleccionar el día en cuestión (hasta 10 días atrás)
FOR DiaAnalizado = 0 TO 10 DO
// Inicializar indicador de si el volumen es mayor a los 10 días anteriores
VolumenEsMayor = 1
// Bucle interno para comparar el volumen del día analizado con los 10 días anteriores
FOR i = 1 TO 10 DO
IF Volume[DiaAnalizado] <= Volume[DiaAnalizado + i] THEN
VolumenEsMayor = 0
BREAK
ENDIF
NEXT
// Si el volumen del día analizado es mayor que los 10 días anteriores, marcar el día
IF VolumenEsMayor THEN
DiaConVolumenAlto = DiaAnalizado
BREAK
ENDIF
NEXT
// Condición para el rango de precio entre 20 y 50 dólares
RangoPrecio = (Close[DiaConVolumenAlto] >= 20) AND (Close[DiaConVolumenAlto] <= 50)
// Condición final del screener: volumen alto en un día específico y rango de precio
CONDICION = (DiaConVolumenAlto > 0) AND RangoPrecio
// Definir los criterios de orden y mostrar resultados
SCREENER[CONDICION](DiaConVolumenAlto AS "Days Since Volume High")
Buenas,
Yo en su día programé un screener para localizar valores con mucho más volumen del normal basándome en bollinger.
mult = 2
dev = std[20](volume)
bbmed = average[20](volume)
bbtop = bbmed + mult*dev
SCREENER[volume>bbtop](close as "close")
También podrías utilizar la instrucción barssince(xxx) para comprobar cuándo se produjo el volumen alto.
Hola Ivan,
Muchas gracias por tu respuesta. El código funciona muy bien. Pero al utilizar la función barssince() me salen resultados lejanos. A partir del día 38.
He estado mirando la documentación y probando los ejemplos pero no consigo que funcione como quiero. Es decir, que me muestre únicamente los tickers con volúmenes anormales desde hace 15 días, no mas.
Un saludo.
Tienes que limitar el valor.
mult = 2
dev = std[20](volume)
bbmed = average[20](volume)
bbtop = bbmed + mult*dev
bars = barssince(volume>bbtop)
SCREENER[bars>=0 and bars<10](bars as "bars")
En el ejemplo he puesto 10 velas. Además hay que limitarlo por abajo porque barssince puede valer -1 en caso de no haberse producido el evento.
Buenas de nuevo Iva,
Ahora si va perfecto!!.
Nada que ver con mi código, sin duda un código muy eficiente y que funciona.
Saludos y muchas gracias.