start_date <- "2024-01-01"
end_date <- Sys.Date()

stocks <- c("AAPL", "MSFT", "GOOG", "AMZN", "TSM", "NVDA")

getSymbols(
  stocks,
  src = "yahoo",
  from = start_date,
  to = end_date,
  auto.assign = TRUE
)
## [1] "AAPL" "MSFT" "GOOG" "AMZN" "TSM"  "NVDA"
prices <- merge(
  Ad(AAPL),
  Ad(MSFT),
  Ad(GOOG),
  Ad(AMZN),
  Ad(TSM),
  Ad(NVDA)
)

colnames(prices) <- stocks

head(prices)
##                AAPL     MSFT     GOOG   AMZN      TSM     NVDA
## 2024-01-02 183.4040 363.1180 138.2505 149.93 98.27406 48.08253
## 2024-01-03 182.0307 362.8536 139.0430 148.47 96.95766 47.48460
## 2024-01-04 179.7189 360.2491 136.7448 144.57 95.95101 47.91284
## 2024-01-05 178.9977 360.0631 136.1009 145.24 96.41563 49.00989
## 2024-01-08 183.3250 366.8581 139.2114 149.10 98.96128 52.16029
## 2024-01-09 182.9100 367.9352 141.2224 151.37 98.62251 53.04572
returns <- na.omit(prices / lag(prices) - 1)

returns_df <- data.frame(
  Date = index(returns),
  coredata(returns)
)

kable(
  head(returns_df),
  digits = 6,
  caption = "First Few Daily Returns of AAPL, MSFT, GOOG, AMZN, TSM and NVDA"
)
First Few Daily Returns of AAPL, MSFT, GOOG, AMZN, TSM and NVDA
Date AAPL MSFT GOOG AMZN TSM NVDA
2024-01-03 -0.007488 -0.000728 0.005732 -0.009738 -0.013395 -0.012436
2024-01-04 -0.012700 -0.007178 -0.016529 -0.026268 -0.010382 0.009019
2024-01-05 -0.004013 -0.000516 -0.004709 0.004634 0.004842 0.022897
2024-01-08 0.024175 0.018872 0.022855 0.026577 0.026403 0.064281
2024-01-09 -0.002263 0.002936 0.014445 0.015225 -0.003423 0.016975
2024-01-10 0.005671 0.018574 0.008698 0.015591 -0.010698 0.022770