1.0 Introducción

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:

  1. Valor apertura
  2. Valor más alto durante la sesión
  3. Valor más bajo durante la sesión
  4. Valor de cierre
  5. Volumen de transacciones
  6. Valor contable ajustado

Una vez obtenidos los valores calcularemos una serie de indicadores técnicos que serán:

2 Código

2.1 Preparar

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")

2.2 Obtener datos

2.2.1 Obtener codigos de empresa

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()

2.2.2 Obtener las cotizaciones

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')

2.2.3 Representamos los datos obtenidos

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()