Random walk hace referencia a la teoría financiera de que los mercados financieros siguen un camino aleatorio. Pero NO vamos a discutir si se da o NO tal hipótesis; lo que SÍ vamos a hacer es utilizar R para seguir las acciones, fondos de inversión, o sencillamente para ver nuestro decepcionante euro respecto a otras divisas (por si algún día los españolitos debiéramos empezar a emigrar de nuevo… ¡tal como está el patio!).
Vamos a necesitar varios paquetes; si no me olvido de ninguno, básicamente son estos dos:
quantmodtawny
La manera de funcionar es que conectan a la fuente de datos de los portales de Yahoo y Google, y extraen los datos que le pidamos con unos 15-30 minutos de retraso respecto al tiempo real de mercado (creo que conecta con Yahoo por defecto). Sea como sea, nos indica también la fecha y hora de la cotización más reciente.
Es tan sencillo como hacer:
library(quantmod)
getQuote("AAPL")
…y nos informa de la última cotización de las acciones de APPLE.
El ligero inconveniente es que siempre vamos a depender de la conectividad a Yahoo o Google: si ellos dejan de recibir datos, nosotros también. Un apunte importante: para las acciones americanas solo basta escribir su ticker (código de 3 o 4 letras que identifica a las acciones de una compañía) tal cual, pero para el resto de países es otra historia: hemos de añadir su “destino”. Aquí os facilito una breve guía:
.MCpara el Mercado Continuo español..PAsi cotiza en París..DEsi cotiza en Alemania (Deutschland)..MIsi cotiza en Milán..LSsi cotiza en Lisboa.
Así tenemos, por ejemplo (CITIGROUP, BANCO SANTANDER, BNP PARIBAS, DEUTSCHE BANK, BANCO ESPIRITU SANTO):
getQuote("C;SAN.MC;BNP.PA;DBK.DE;BES.LS")
La lista de valores la podemos separar por ";" o "+".
Veamos un listado de índices europeos (4), americanos (3), Japón, Brasil y algunos pares de divisas:
getQuote("^IBEX;^GDAXI;^FCHI;^STOXX50E;^DJI;^IXIC;^GSPC;^N225;^BVSP;EURUSD=X;GBPEUR=X;USDJPY=X")
La función getQuote solo nos informa de la cotización más reciente. Para extraer un histórico lo mejor es getSymbols, especificando el inicio y final de fechas; si NO indicamos final, extrae hasta el último cierre de día (este histórico NO incluye la cotización del día presente en curso), y si NO especificamos el inicio de la serie histórica, nos dará por defecto el primer día de enero de 2007. Para estar seguros siempre podemos acudir a la función head() y ver unas líneas del inicio de la serie o bien tail() para ver los días más recientes. Ejemplo con las “Starbucks”:
getSymbols("SBUX")
head(SBUX)
tail(SBUX)
Si queremos extraer un detalle de los últimos meses (formato de fechas yyyy-mm-dd):
getSymbols("SBUX", from = "2010-01-01")
Y ahora llega lo mejor: vamos a confeccionar su gráfico con chartSeries(SBUX) y, sin cerrar la ventana de salida, creamos algunos de sus indicadores (RSI, Bollinger Bands y ADX):
chartSeries(SBUX)
addRSI()
addBBands()
addADX()

…y guardamos el gráfico en .PDF:
saveChart(.type = "pdf", dev = dev.cur())
# chart saved to SBUX.pdf
Si quisiéramos concretar el rango temporal, basta con definirlo (ejemplo sólo año 2009):
getSymbols("SBUX", from = "2009-01-01", to = "2009-12-31")
Para filtrar la información (columnas) a extraer podemos usar la función yahooQF():
getQuote("TEF.MC", what = yahooQF())
Podemos también conocer el histórico de dividendos que una compañía ha repartido a sus accionistas:
getDividends("SBUX")
O bien conocer los rendimientos diarios de los últimos 30 días o desde una fecha anterior hasta la fecha reciente:
getPortfolioReturns("SBUX", obs = 30) # Suponiendo que la función esté disponible en tawny
getPortfolioReturns("SBUX", start = "2010-03-01", end = Sys.Date())
Lo que tenemos que TENER MUY CLARO es que cada vez que usemos el ticker para cualquier función de gráfico a extraer, éste hace referencia al objeto memorizado de la última vez que lo definimos como símbolo con getSymbols. Si cambiamos el rango temporal a uno muy corto, solo “graficaremos” un chart sobre ese corto espacio temporal, su respectivo histórico de dividendos también estará sujeto a dicho espacio, etc.
Para extraer un listado completo de compañías, por ahora que yo sepa solo existe esta posibilidad para los índices DOW JONES y SP500:
# Nota: Estas funciones pueden variar según la versión del paquete
# getIndexComposition("^DJI")
# getIndexComposition("^GSPC")
En caso de ignorar algún ticker o el código de algún índice o cualquier producto financiero, lo mejor es remitirse a Yahoo y/o Google. Como hemos visto, lo que aquí R nos puede ofrecer es la facilidad de seguir un listado de stocks e índices de diferentes países, divisas, conocer su histórico y, sobre todo, graficar charts con sus indicadores técnicos sin coste alguno.
Saludos. Y ya saben: «Random» también se escribe con R.