paquetes <- c(“quantmod”, “xts”, “zoo”, “PerformanceAnalytics”) instalar <- paquetes[!(paquetes %in% installed.packages()[, “Package”])] if (length(instalar) > 0) install.packages(instalar)
lapply(paquetes, library, character.only = TRUE)
tickers <- c(“AAPL”, “BAC”, “JNJ”) fecha_ini <- as.Date(“2021-10-01”) fecha_fin <- Sys.Date() # fecha de descarga = hoy fuente <- “yahoo”
fecha_descarga <- Sys.time() cat(“Fecha y hora de descarga:”, format(fecha_descarga), “”)
precios_lista <- list()
for (tk in tickers) { getSymbols(tk, src = fuente, from = fecha_ini, to = fecha_fin, auto.assign = TRUE) precios_lista[[tk]] <- get(tk) }
ficha_tecnica <- data.frame( ticker = tickers, empresa = c(“Apple Inc.”, “Bank of America Corp.”, “Johnson & Johnson”), sector = c(“Tecnologia”, “Financiero (banca comercial)”, “Salud / Consumo defensivo”), mercado = c(“NASDAQ”, “NYSE”, “NYSE”), fuente_precios = fuente, fuente_dividendos = fuente, fecha_descarga = format(fecha_descarga), fecha_inicio = as.character(fecha_ini), fecha_fin = as.character(fecha_fin), stringsAsFactors = FALSE )
precios_ajustados <- do.call(merge, lapply(precios_lista, Ad)) colnames(precios_ajustados) <- tickers
precios_cierre_no_ajustado <- do.call(merge, lapply(precios_lista, Cl)) colnames(precios_cierre_no_ajustado) <- tickers
faltantes <- sapply(list(precios_ajustados, precios_cierre_no_ajustado), function(x) sum(is.na(x))) names(faltantes) <- c(“precios_ajustados”, “precios_no_ajustados”) print(faltantes)
if (any(is.na(precios_ajustados))) { precios_ajustados <- na.locf(precios_ajustados) } if (any(is.na(precios_cierre_no_ajustado))) { precios_cierre_no_ajustado <- na.locf(precios_cierre_no_ajustado) }
n_obs <- nrow(precios_ajustados) cat(“Numero de observaciones por activo:”, n_obs, “”)
dividendos_lista <- lapply(tickers, function(tk) { div <- getDividends(tk, from = fecha_ini, to = fecha_fin, src = fuente) colnames(div) <- tk div }) names(dividendos_lista) <- tickers
tasa_dividendo <- sapply(tickers, function(tk) { div <- dividendos_lista[[tk]] precio_actual <- as.numeric(last(precios_ajustados[, tk])) if (nrow(div) == 0) return(0) ult_12m <- div[index(div) >= (Sys.Date() - 365)] sum_div <- sum(ult_12m) round(sum_div / precio_actual, 4) }) ficha_tecnica\(tasa_dividendo_anualizada <- tasa_dividendo[ficha_tecnica\)ticker]
retornos_log <- diff(log(precios_ajustados)) retornos_log <- retornos_log[-1, ] # eliminar primer NA
retornos_simples <- (precios_ajustados / lag(precios_ajustados) - 1) retornos_simples <- retornos_simples[-1, ]
saveRDS(precios_ajustados, “precios_ajustados.rds”) saveRDS(precios_cierre_no_ajustado, “precios_no_ajustados.rds”) saveRDS(dividendos_lista, “dividendos.rds”) saveRDS(retornos_log, “retornos_log.rds”) saveRDS(retornos_simples, “retornos_simples.rds”) write.csv(ficha_tecnica, “ficha_tecnica.csv”, row.names = FALSE)
cat(“— Ficha tecnica —”) print(ficha_tecnica)
cat(“guardados: precios_ajustados.rds, precios_no_ajustados.rds,”, “dividendos.rds, retornos_log.rds, retornos_simples.rds, ficha_tecnica.csv”)