4 de enero de 2018
La importancia de los métodos cuantitativos en los negocios y las finanzas ha aumentado sustancialmente en los últimos años porque nos encontramos en un entorno rico en datos y las economías y los mercados financieros están más integrados que nunca. Los datos se recopilan sistemáticamente para miles de variables en muchos países y en una escala de tiempo más fina. Las instalaciones informáticas y los paquetes estadísticos para analizar datos financieros complejos y de gran dimensión están ahora ampliamente disponibles. De hecho, con una conexión a Internet, uno puede descargar fácilmente datos financieros de fuentes abiertas dentro de un paquete de software como R. Todas estas características y capacidades buenas son gratuitas y ampliamente accesibles.
R es un software gratuito disponible en http://www.r-project.org/ . Se ejecuta en muchos sitemas operativos, incluidos Linux, MacOS X y Window, R Studio esta disponible en https://www.rstudio.com/products/rstudio/download/
Para instalar paquetes en R Studio, uno puede hacer clip en el comando Tools para seleccionar Install Packages. Aparece una ventana emergente que pide a los usuarios que escriba el paquete a instalar.
Para empezar, consideramos que es un paquete R útil para descargar datos financieros directamente de algunas fuentes abiertas, incluidas Yahoo Finance, Google Finance y Federal Reserve Economic Data (FRED) del Federal Reserve Bank of St. Louis. El paquete es quantmod de Jeffry A. Ryan. Es muy recomendable que uno lo instale. El paquete requiere tres paquetes adicionales que deben instalarse también. Ellos son TTR, xts y zoo.
El paquete Quantmod se instala con el siguiente comando install.packages("quantmod")
Descargamos el conjunto de datos desde Yahoo Finance con la siguiente linea de comando getSymbols("AAPL") 
library(quantmod) #Cargue el paquete quantmod
getSymbols("AAPL") #Descargue los precios diarios de las acciones de Apple de Yahoo
## [1] "AAPL"
dim(AAPL) #(dimensión): vea el tamaño de los datos descargados.
## [1] 2771 6
head(AAPL) #Veremos la 6 primeras filas
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
2007-01-03 12.32714 12.36857 11.70000 11.97143 309579900
2007-01-04 12.00714 12.27857 11.97429 12.23714 211815100
2007-01-05 12.25286 12.31428 12.05714 12.15000 208685400
2007-01-08 12.28000 12.36143 12.18286 12.21000 199276700
2007-01-09 12.35000 13.28286 12.16429 13.22429 837324600
2007-01-10 13.53571 13.97143 13.35000 13.85714 738220000
AAPL.Adjusted
2007-01-03 10.73159
2007-01-04 10.96978
2007-01-05 10.89166
2007-01-08 10.94545
2007-01-09 11.85469
2007-01-10 12.42201
chartSeries(AAPL, theme="white") #Plot the daily price and volume
#El theme del subcomando se usa para obtener un fondo blanco del gráfico.
chartSeries(AAPL) #No se muestra el trama con fondo blanco
getSymbols("AAPL",from="2005-01-02", to="2010-12-31")
## [1] "AAPL"
#from y to para especificar el intervalo de datos de interés
head(AAPL)
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
2005-01-03 4.627143 4.650714 4.471428 4.520714 172998000
2005-01-04 4.556428 4.676429 4.497857 4.567143 274202600
2005-01-05 4.604286 4.660714 4.575000 4.607143 170108400
2005-01-06 4.619286 4.636428 4.523571 4.610714 176388800
2005-01-07 4.642857 4.973571 4.625000 4.946429 556862600
2005-01-10 4.987857 5.050000 4.848571 4.925714 431327400
AAPL.Adjusted
2005-01-03 4.052520
2005-01-04 4.094139
2005-01-05 4.129996
2005-01-06 4.133199
2005-01-07 4.434144
2005-01-10 4.415576
getSymbols("UNRATE", src = "FRED") #Descarga las tasas de desempleo de FRED
[1] "UNRATE"
head(UNRATE)
UNRATE 1948-01-01 3.4 1948-02-01 3.8 1948-03-01 4.0 1948-04-01 3.9 1948-05-01 3.5 1948-06-01 3.6
chartSeries(UNRATE, theme = "white") #Trazar las tasas de desempleo mensuales
Descargamos un nuevo conjunto de datos desde google utilizamos la siguiente linea de comandos:
src se usa para especificar la fuente de datosgetSymbols("INTC", src = "google")
[1] "INTC"
head(INTC)
INTC.Open INTC.High INTC.Low INTC.Close INTC.Volume 2007-01-03 20.45 20.88 20.14 20.35 69803965 2007-01-04 20.63 21.33 20.56 21.17 89514297 2007-01-05 21.09 21.15 20.76 21.10 64596375 2007-01-08 21.25 21.34 20.95 21.01 52844607 2007-01-09 21.18 21.21 20.86 21.03 54414980 2007-01-10 21.09 21.62 21.03 21.52 76369883
getSymbols("^TNX") #Descargamos la tasa de interés CBOE 10 años
[1] "TNX"
head(TNX)
TNX.Open TNX.High TNX.Low TNX.Close TNX.Volume TNX.Adjusted 2007-01-03 4.658 4.692 4.636 4.664 0 4.664 2007-01-04 4.656 4.662 4.602 4.618 0 4.618 2007-01-05 4.587 4.700 4.583 4.646 0 4.646 2007-01-08 4.668 4.678 4.654 4.660 0 4.660 2007-01-09 4.660 4.670 4.644 4.656 0 4.656 2007-01-10 4.666 4.700 4.660 4.682 0 4.682
chartSeries(TNX, theme = "white", TA = NULL) #Obtenemos el trama sin volumen
#Especificando el período
getSymbols("AAPL", from = "2007-01-03", to = "2011-12-02")
[1] "AAPL"
head(AAPL)
AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
2007-01-03 12.32714 12.36857 11.70000 11.97143 309579900
2007-01-04 12.00714 12.27857 11.97429 12.23714 211815100
2007-01-05 12.25286 12.31428 12.05714 12.15000 208685400
2007-01-08 12.28000 12.36143 12.18286 12.21000 199276700
2007-01-09 12.35000 13.28286 12.16429 13.22429 837324600
2007-01-10 13.53571 13.97143 13.35000 13.85714 738220000
AAPL.Adjusted
2007-01-03 10.73159
2007-01-04 10.96978
2007-01-05 10.89166
2007-01-08 10.94545
2007-01-09 11.85469
2007-01-10 12.42201
AAPL.rtn <- diff(log(AAPL$AAPL.Adjusted)) #Diferenciamos la serie y aplicamos logaritmo chartSeries(AAPL.rtn, theme = "white") #Trazamos la serie diferenciada
#Cargamos el conjunto de datos ^TNX
getSymbols("^TNX", from = "2007-01-03", to = "2011-12-02")
[1] "TNX"
head(TNX)
TNX.Open TNX.High TNX.Low TNX.Close TNX.Volume TNX.Adjusted 2007-01-03 4.658 4.692 4.636 4.664 0 4.664 2007-01-04 4.656 4.662 4.602 4.618 0 4.618 2007-01-05 4.587 4.700 4.583 4.646 0 4.646 2007-01-08 4.668 4.678 4.654 4.660 0 4.660 2007-01-09 4.660 4.670 4.644 4.656 0 4.656 2007-01-10 4.666 4.700 4.660 4.682 0 4.682
#Trabajaremos con la variable TNX.Adjusted TNX.rtn <- diff(log(TNX$TNX.Adjusted)) #Diferenciamos la serie y aplicamos logaritmo chartSeries(TNX.rtn, theme = "white") #Trazamos la serie diferenciada
getSymbols("DEXUSEU", src = "FRED") #Obtenemos los tipos de cambio de FRED
[1] "DEXUSEU"
head(DEXUSEU)
DEXUSEU 1999-01-04 1.1812 1999-01-05 1.1760 1999-01-06 1.1636 1999-01-07 1.1672 1999-01-08 1.1554 1999-01-11 1.1534
tail(DEXUSEU) #Mostramos lo ultimos datos de la serie
## DEXUSEU ## 2017-12-22 1.1839 ## 2017-12-25 NA ## 2017-12-26 1.1867 ## 2017-12-27 1.1902 ## 2017-12-28 1.1952 ## 2017-12-29 1.2022
USEU.rtn <- diff(log(DEXUSEU$DEXUSEU))
chartSeries(DEXUSEU, theme = "white")
chartSeries(USEU.rtn, theme = "white")
library(fBasics)
da <- read.table("d-mmm-0111.txt", header = TRUE) #Cargar datos
head(da)
date rtn 1 20010102 -0.010892 2 20010103 -0.011536 3 20010104 0.010080 4 20010105 -0.037290 5 20010108 0.006001 6 20010109 -0.015727
Puedes descargar el conjunto de datos desde el siguiente enlace https://github.com/blacksde/finance-analysis-with-R/tree/master/Financial%20Data%20and%20Their%20Properties
basicStats(mmm)#Cálculo de estadísticas de resumen
mmm nobs 2704.000000 NAs 0.000000 Minimum -0.089569 Maximum 0.098784 1. Quartile -0.007161 3. Quartile 0.007987 Mean 0.000278 Median 0.000350 Sum 0.751082 SE Mean 0.000298 LCL Mean -0.000306 UCL Mean 0.000862 Variance 0.000240 Stdev 0.015488 Skewness 0.027949 Kurtosis 4.630925
#Pruebas simples t.test(mmm) #Prueba de retorno medio = 0
## ## One Sample t-test ## ## data: mmm ## t = 0.93258, df = 2703, p-value = 0.3511 ## alternative hypothesis: true mean is not equal to 0 ## 95 percent confidence interval: ## -0.0003062688 0.0008618028 ## sample estimates: ## mean of x ## 0.000277767
normalTest(mmm, method = "jb") #jarque bera test
## ## Title: ## Jarque - Bera Normalality Test ## ## Test Results: ## STATISTIC: ## X-squared: 2422.4384 ## P VALUE: ## Asymptotic p Value: < 2.2e-16 ## ## Description: ## Thu Jan 04 18:07:38 2018 by user: USER
Los gráficos son herramientas útiles para analizar datos financieros. Además de la gráfica de series de tiempo mostrada anteriormente, descutiremos algunos gráficos adicionales para mostrar datos financieros en esta sección. Para obtener una mejor visualización de la distribución de los retornos de activos, podemos examinar el histograma o la función de densidad empírica de los datos
hist(mmm, nclass = 30, col = "red", main = "") #Histograma
d1 <- density(mmm) #Obtener estimación de densidad range(mmm) #Rango de retornos de 3M
## [1] -0.089569 0.098784
x <- seq(-.1, .1, .001) #Crea una secuencia de x con incremento de 0.001. #El siguiente comando crea densidad normal y1 <- dnorm(x, mean = (mmm), stdev(mmm))
plot(d1$x,d1$y,xlab='rtn',ylab='density',type='l')