if (!requireNamespace("quantmod", quietly = TRUE)) install.packages("quantmod")
library(quantmod)

# Fetch Microsoft stock prices for the given period
getSymbols("MSFT", src = "yahoo", from = "2024-10-01", to = "2025-02-01")
## [1] "MSFT"

Q6

# Preview of the data pulled
head(MSFT)
##            MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
## 2024-10-01    428.45    428.48   418.81     420.69    19092900      417.5552
## 2024-10-02    422.58    422.82   416.71     417.13    16582300      414.0217
## 2024-10-03    417.63    419.55   414.29     416.54    13686400      413.4361
## 2024-10-04    418.24    419.75   414.97     416.06    19169700      412.9597
## 2024-10-07    416.00    417.11   409.00     409.54    20919800      406.4883
## 2024-10-08    410.90    415.66   408.17     414.71    19229300      411.6198

Q7

# Q7
# Count how many rows (trading days) of MSFT data were returned
n_days <- NROW(MSFT)
n_days
## [1] 84

Q8

open_series <- Op(MSFT)
max_open    <- max(open_series, na.rm = TRUE)
max_date    <- index(open_series)[which.max(open_series)]

max_open
## [1] 451.32
max_date
## [1] "2024-12-18"
# Map to quiz options
bucket <- if (max_date >= as.Date("2024-12-09") & max_date <= as.Date("2024-12-18")) {
  "A (Dec9–Dec18)"
} else if (max_date >= as.Date("2024-10-21") & max_date <= as.Date("2024-10-29")) {
  "B (Oct21–Oct29)"
} else if (max_date >= as.Date("2025-01-11") & max_date <= as.Date("2025-01-21")) {
  "C (Jan11–Jan21)"
} else if (max_date > as.Date("2025-01-21")) {
  "D (After Jan21)"
} else {
  "Outside listed buckets"
}
cat("Max Open on:", as.character(max_date), "→", bucket, "\n")
## Max Open on: 2024-12-18 → A (Dec9–Dec18)

Q10

# Pull U.S. unemployment rate (UNRATE) from FRED
getSymbols("UNRATE", src = "FRED")
## [1] "UNRATE"
# Show the most recent value
tail(UNRATE, 1)
##            UNRATE
## 2025-08-01    4.3