# 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)
| 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% |