Este documento decribe como obtener el valor de las acciones de las empresas cotizadas en el NASDAQ 100, entre unas fechas determinadas, descargando los datos desde yahoo.
Los datos que se obtienen desde yahoo son:
Una vez obtenidos los valores calcularemos una serie de indicadores técnicos que serán:
Media Móvil SMA Muestra el valor medio del precio de un instrumento durante un determinado perÃodo de tiempo. Cuando se calcula Moving Average, se promedia matemáticamente el precio del instrumento durante un perÃodo de tiempo dado. En función del cambio del precio, su valor medio va aumentando o disminuyendo. En nuestro caso calcularemos la media móvil simple para un periodo de 8 dÃas.
Ãndice de fuerza relativa RSI Muestra la fuerza del precio mediante la comparación de los movimientos individuales al alza o a la baja de los sucesivos precios de cierre. El RSI es un oscilador normalizado entre 0 y 100 donde se definen bandas de sobrecompra(>70) y de sobreventa(<30). Utilizamos 14 periodos para obtenerlo.
Media Móvil Convergente Divergente MACD Un seguidor de tendencia nos muestra el sentido de la tendencia vigente en esos momentos. Muestra la correlación entre dos medias moviles de precios. El MACD es la diferencia entre una media movil exponencial de 26 dias y otra de 12 dias. Una media movil exponencial de 8 dias, llamada linea de señal, se traza sobre el MACD para señalar ocasiones de compra/venta.
Preparamos el entorno con las librerias necesarias, limpiamos y establecemos la codificación
# limpio espacio de trabajo
rm(list = ls());cat("\014")
# Cargo las librerias que me van a hacer falta
packages <- c("quantmod","tidyverse","rvest","stringr","rebus","lubridate")
new <- packages[!(packages %in% installed.packages()[,"Package"])]
if(length(new)) install.packages(new)
a=lapply(packages, require, character.only=TRUE)
# Codificación de caracteres, lo fijamos a UTF-8
options(encoding = "utf-8")
Lo primero que debemos obtener son los codigos de las empresas que forman el indice NASDAQ 100, para ello los obtenemos de scrapear la web de la CNBC
Cargamos la pagina
# Vamos a obtener la lista de Scrapear la pagina de CBNC, ya que las empresas de la lista pueden variar con el tiempo
url <- "https://www.cnbc.com/nasdaq-100/"
webNasdaq100 <- read_html(url)
Leemos los codigos de las empresas que forman el NASDAQ 100
Ticker <- webNasdaq100 %>%
html_nodes("td.first.text") %>%
html_text()
Definimos los fechas de principio y final del periodo que queremos estudiar
start <- as.Date("2017-01-01")
end <- as.Date("2018-11-01")
Para crear los datos creamos un enviroment, que es una estructura en forma de cubo. y luego creamos una funcion para cargar los datos a enviroment que hemos creado,desde yahoo.
nasdaq <- new.env()
for(i in Ticker) {
cat("Downloading time series for symbol '", i, "' ...\n", sep = "")
status <- tryCatch(getSymbols(i, env = nasdaq, src = "yahoo",from = start, end = end), error = identity)
if(inherits(status, "error"))
cat("Symbol '", i, "' not downloadable!\n", sep = "")
}
| Downloading time series for symbol 'AAL' ...
| Downloading time series for symbol 'AAPL' ...
| Downloading time series for symbol 'ADBE' ...
| Downloading time series for symbol 'ADI' ...
| Downloading time series for symbol 'ADP' ...
| Downloading time series for symbol 'ADSK' ...
| Downloading time series for symbol 'ALGN' ...
| Downloading time series for symbol 'ALXN' ...
| Downloading time series for symbol 'AMAT' ...
| Downloading time series for symbol 'AMGN' ...
| Downloading time series for symbol 'AMZN' ...
| Downloading time series for symbol 'ATVI' ...
| Downloading time series for symbol 'ASML' ...
| Downloading time series for symbol 'AVGO' ...
| Downloading time series for symbol 'BIDU' ...
| Downloading time series for symbol 'BIIB' ...
| Downloading time series for symbol 'BMRN' ...
| Downloading time series for symbol 'CDNS' ...
| Downloading time series for symbol 'CELG' ...
| Downloading time series for symbol 'CERN' ...
| Downloading time series for symbol 'CHKP' ...
| Downloading time series for symbol 'CHTR' ...
| Downloading time series for symbol 'CTRP' ...
| Downloading time series for symbol 'CTAS' ...
| Downloading time series for symbol 'CSCO' ...
| Downloading time series for symbol 'CTXS' ...
| Downloading time series for symbol 'CMCSA' ...
| Downloading time series for symbol 'COST' ...
| Downloading time series for symbol 'CSX' ...
| Downloading time series for symbol 'CTSH' ...
| Downloading time series for symbol 'DISH' ...
| Downloading time series for symbol 'DLTR' ...
| Downloading time series for symbol 'EA' ...
| Downloading time series for symbol 'EBAY' ...
| Downloading time series for symbol 'ESRX' ...
| Downloading time series for symbol 'EXPE' ...
| Downloading time series for symbol 'FAST' ...
| Downloading time series for symbol 'FB' ...
| Downloading time series for symbol 'FISV' ...
| Downloading time series for symbol 'FOX' ...
| Downloading time series for symbol 'FOXA' ...
| Downloading time series for symbol 'GILD' ...
| Downloading time series for symbol 'GOOG' ...
| Downloading time series for symbol 'GOOGL' ...
| Downloading time series for symbol 'HAS' ...
| Downloading time series for symbol 'HSIC' ...
| Downloading time series for symbol 'HOLX' ...
| Downloading time series for symbol 'ILMN' ...
| Downloading time series for symbol 'INCY' ...
| Downloading time series for symbol 'INTC' ...
| Downloading time series for symbol 'INTU' ...
| Downloading time series for symbol 'ISRG' ...
| Downloading time series for symbol 'IDXX' ...
| Downloading time series for symbol 'JBHT' ...
| Downloading time series for symbol 'JD' ...
| Downloading time series for symbol 'KLAC' ...
| Downloading time series for symbol 'KHC' ...
| Downloading time series for symbol 'LBTYA' ...
| Downloading time series for symbol 'LBTYK' ...
| Downloading time series for symbol 'LRCX' ...
| Downloading time series for symbol 'MELI' ...
| Downloading time series for symbol 'MAR' ...
| Downloading time series for symbol 'MCHP' ...
| Downloading time series for symbol 'MDLZ' ...
| Downloading time series for symbol 'MNST' ...
| Downloading time series for symbol 'MSFT' ...
| Downloading time series for symbol 'MU' ...
| Downloading time series for symbol 'MXIM' ...
| Downloading time series for symbol 'MYL' ...
| Downloading time series for symbol 'NFLX' ...
| Downloading time series for symbol 'NTES' ...
| Downloading time series for symbol 'NVDA' ...
| Downloading time series for symbol 'NXPI' ...
| Downloading time series for symbol 'ORLY' ...
| Downloading time series for symbol 'PAYX' ...
| Downloading time series for symbol 'PCAR' ...
| Downloading time series for symbol 'BKNG' ...
| Downloading time series for symbol 'PYPL' ...
| Downloading time series for symbol 'QCOM' ...
| Downloading time series for symbol 'QRTEA' ...
| Downloading time series for symbol 'REGN' ...
| Downloading time series for symbol 'ROST' ...
| Downloading time series for symbol 'STX' ...
| Downloading time series for symbol 'SHPG' ...
| Downloading time series for symbol 'SIRI' ...
| Downloading time series for symbol 'SWKS' ...
| Downloading time series for symbol 'SBUX' ...
| Downloading time series for symbol 'SYMC' ...
| Downloading time series for symbol 'SNPS' ...
| Downloading time series for symbol 'TTWO' ...
| Downloading time series for symbol 'TSLA' ...
| Downloading time series for symbol 'TXN' ...
| Downloading time series for symbol 'TMUS' ...
| Downloading time series for symbol 'ULTA' ...
| Downloading time series for symbol 'VOD' ...
| Downloading time series for symbol 'VRTX' ...
| Downloading time series for symbol 'WBA' ...
| Downloading time series for symbol 'WDC' ...
| Downloading time series for symbol 'WDAY' ...
| Downloading time series for symbol 'VRSK' ...
| Downloading time series for symbol 'WYNN' ...
| Downloading time series for symbol 'XEL' ...
| Downloading time series for symbol 'XLNX' ...
Una vez que tenemos ya los datos, creo una funcion para sacar los datos de una determinada empresa y colocarlos en un data frame, y aprovecho para calcular los distintos indicadores que que posteriormente dibujaremos.
#Creo una funcion, para sacar los datos del enviroment y calcular los indices
SellInd <- function(x){
a <- get(x, envir=nasdaq)
names(a) <- gsub(x,'', names(a)) #Elimino en Ticker de la compa?ia en el nombre de las columnas
names(a) <- gsub('\\.', '', names(a)) #Elimino el punto en el nombre de las columnas
a$SMA <- SMA(a$Close, n=8) #A?ado SMA
a$RSI <- RSI(a$Close, n=14)
a$MACD <- MACD(a$Close, nFast = 12, nSlow = 26, nSig = 8)
return(a)
}
# Tomo de ejemplo la compa?ia XXX
Stocks <- function(x){
a <- SellInd(x)
b <- as.data.frame(a)
return (b)
}
Ahora vamos a obtener las cotizaciones de una empresa, por ejemplo Apple, el codigo de Apple es AAPL.
AAPL <- Stocks('AAPL')
Obtenemos otro ejemplo, Automatic Data Processing Inc “ADP”"
ADP <- Stocks('ADP')
Una vez tenemos los datos, los representamos mediante una grafica
Grafica de Apple
# Realizo el grafico para ADP
chartSeries(AAPL)
addMACD(fast = 12, slow =26, signal = 8)
addSMA(n = 8)
addRSI()