El lucero del alba

Puede que algunos de mis lectores sepan que el lucero del alba es el nombre con que se conoce al planeta Venus cuando es visible en el cielo al amanecer.

En contextos menos poéticos se conoce por tal nombre a esto:

Es decir, una determinada configuración de los precios de apertura y cierre de tres días de cotización (bursátil, por ejemplo) de forma que:

  • El primer día hay una bajada
  • El tercer día hay una subida
  • Los precios de apertura y cierre del segundo día son inferiores a los del cierre del primero y apertura del segundo.

Se ve que eso es cosa güena. De El Economista extraigo el siguiente párrafo atribuido a un tal Joan Cabrero:

Después del fallido intento que protagonizaron los alcistas ayer, hoy la presión compradora sí ha conseguido dominar la sesión de principio a fin, y mucho tendrían que cambiar las cosas para que al cierre de Wall Street los futuros europeos no consigan desplegar un patrón triple de velas que es conocido en el argot técnico oriental como lucero del alba y que sería otro elemento más que apoyaría el giro alcista señalado

Efectivamente, un lucero del alba parece ser indicio de subidas bursátiles.

Y uno se pregunta: ¿en serio? Y si es verdad, ¿por qué? Y como ya somos mayorcitos para no creer todo lo que se nos cuenta, vamos a Yahoo Finance y bajamos las cotizaciones históricas de Telefónica (desde el 2000), por ejemplo, y ejecutamos lo siguiente:

tef <- read.table( "table_tef.csv", sep = ",", header = T )
tef <- tef[ order( tef$Date ), ]

morning.star <- function( block ){

	if( nrow( block ) < 23 ) return( NULL )

	apertura <- block$Open
	cierre   <- block$Close

	if( !(
		apertura[1] > cierre[1] &
		apertura[3] < cierre[3] &
		max( apertura[2], cierre[2] )
			< min( apertura[3], cierre[1] )
		)
	) return( c( 0, rep( 0, 20 ) ) )

	else return( c( 1, ( cierre[4:23] - cierre[3] ) / cierre[3] ) )
}

tmp     <- sapply( 1:nrow( tef ),
		function( i )
			morning.star( tef[ i:nrow( tef ), ] ) )

res.all <- do.call( rbind, tmp )
res.ms  <- res.all[ res.all[,1] == 1, ]

El resultado muestra cómo en los 10 últimos años ha habido 48 luceros del alba. ¿Y qué pasó un mes después? Lo indica el histograma siguiente:

Y en 20 años de cotización del IBEX 35, ¿cuáles serían los resultados? Helos:

ibex    <- read.table( "table_ibex.csv", sep = ",", header = T )
ibex    <- ibex[ order( ibex$Date ), ]
tmp     <- sapply( 1:nrow( ibex ),
					function( i ) morning.star( ibex[ i:nrow( ibex ), ] ) )
res.all <- do.call( rbind, tmp )
res.ms  <- res.all[ res.all[,1] == 1, ]

Y al cabo de un mes de los 78 luceriles prodigios ocurridos desde el 92, la rentabilidad acumulada por el IBEX 35 fue la indicada en el siguiente histograma:

Ah, Joan, Joan, ¿cuánto te pagarán por no decir nada (útil)?