# 1. Install & Load Required Packages
if (!requireNamespace("tidyquant", quietly = TRUE)) install.packages("tidyquant")
if (!requireNamespace("tidyverse", quietly = TRUE)) install.packages("tidyverse")
if (!requireNamespace("knitr", quietly = TRUE)) install.packages("knitr")

library(tidyquant)
library(tidyverse)
library(knitr)

# 2. Download Stock Prices (2024 to Present)
tickers <- c("AAPL", "MSFT", "GOOG", "AMZN", "TSM", "NVDA")
start_date <- "2024-01-01"
end_date <- Sys.Date()

stock_prices <- tq_get(
  tickers,
  get  = "stock.prices",
  from = start_date,
  to   = end_date
)

# 3. Compute Daily Returns using Adjusted Closing Prices
stock_returns <- stock_prices %>%
  group_by(symbol) %>%
  arrange(date) %>%
  mutate(daily_return = (adjusted / lag(adjusted)) - 1) %>%
  drop_na(daily_return) %>%
  ungroup()

# 4. Reshape to Wide Format & Show First 10 Returns
returns_wide <- stock_returns %>%
  select(date, symbol, daily_return) %>%
  pivot_wider(names_from = symbol, values_from = daily_return)

returns_wide %>%
  head(10) %>%
  mutate(across(where(is.numeric), ~ scales::percent(.x, accuracy = 0.01))) %>%
  kable(caption = "First 10 Daily Returns (2024 to Present)")
First 10 Daily Returns (2024 to Present)
date AAPL MSFT GOOG AMZN TSM NVDA
2024-01-03 -0.75% -0.07% 0.57% -0.97% -1.34% -1.24%
2024-01-04 -1.27% -0.72% -1.65% -2.63% -1.04% 0.90%
2024-01-05 -0.40% -0.05% -0.47% 0.46% 0.48% 2.29%
2024-01-08 2.42% 1.89% 2.29% 2.66% 2.64% 6.43%
2024-01-09 -0.23% 0.29% 1.44% 1.52% -0.34% 1.70%
2024-01-10 0.57% 1.86% 0.87% 1.56% -1.07% 2.28%
2024-01-11 -0.32% 0.49% -0.09% 0.94% 0.42% 0.87%
2024-01-12 0.18% 1.00% 0.40% -0.36% 0.02% -0.20%
2024-01-16 -1.23% 0.46% -0.11% -0.94% 0.42% 3.06%
2024-01-17 -0.52% -0.20% -0.83% -0.95% 1.26% -0.58%