library(pacman)
pacman::p_load(data.table, fixest, BatchGetSymbols, finreportr, ggplot2, lubridate, esquisse)

Download stock price data

## Set parameters
first.date <- Sys.Date() - 2500
last.date <- Sys.Date()
freq.data <- "monthly"
tickers <- c("TSLA", "NIO", "PRPL", "AAPL", "SNAP", "MU", "AMD",
             "NVDA", "TWTR")

## Get Stock Prices

stocks <- BatchGetSymbols(tickers = tickers, 
                          first.date = first.date,
                          last.date = last.date, 
                          freq.data = freq.data,
                          do.cache = FALSE,
                          thresh.bad.data = 0)
head(stocks)
## $df.control
## # A tibble: 8 × 6
##   ticker src   download.status total.obs perc.benchmark.dates threshold.decision
##   <chr>  <chr> <chr>               <int>                <dbl> <chr>             
## 1 TSLA   yahoo OK                   1724                1     KEEP              
## 2 NIO    yahoo OK                   1562                0.906 KEEP              
## 3 PRPL   yahoo OK                   1724                1     KEEP              
## 4 AAPL   yahoo OK                   1724                1     KEEP              
## 5 SNAP   yahoo OK                   1724                1     KEEP              
## 6 MU     yahoo OK                   1724                1     KEEP              
## 7 AMD    yahoo OK                   1724                1     KEEP              
## 8 NVDA   yahoo OK                   1724                1     KEEP              
## 
## $df.tickers
## # A tibble: 656 × 10
##    ticker ref.date       volume price.open price.high price.low price.close
##    <chr>  <date>          <dbl>      <dbl>      <dbl>     <dbl>       <dbl>
##  1 AAPL   2018-01-22 1282969200       44.3       44.9      41.2        41.9
##  2 AAPL   2018-02-01 3711577200       41.8       45.2      37.6        44.5
##  3 AAPL   2018-03-01 2854910800       44.6       45.9      41.2        41.9
##  4 AAPL   2018-04-02 2664617200       41.7       44.7      40.2        41.3
##  5 AAPL   2018-05-01 2483905200       41.6       47.6      41.3        46.7
##  6 AAPL   2018-06-01 2110498000       47.0       48.5      45.2        46.3
##  7 AAPL   2018-07-02 1574765600       46.0       49.0      45.9        47.6
##  8 AAPL   2018-08-01 2801275600       49.8       57.2      49.3        56.9
##  9 AAPL   2018-09-04 2715888000       57.1       57.4      53.8        56.4
## 10 AAPL   2018-10-01 3158994000       57.0       58.4      51.5        54.7
## # ℹ 646 more rows
## # ℹ 3 more variables: price.adjusted <dbl>, ret.adjusted.prices <dbl>,
## #   ret.closing.prices <dbl>
## Verify Returns
stocks_DT <- stocks$df.tickers %>% setDT() %>%          # Convert to data.table
  .[order(ticker, ref.date)]                           # Order by ticker and date
library(ggplot2)

# Create the plot
ggplot(stocks_DT, aes(x = ref.date, y = price.close, color = ticker)) +
  geom_line() +
  facet_wrap(~ ticker, ncol = 3) +
  labs(title = "Stock Prices Over Time",
       x = "Date",
       y = "Closing Price",
       color = "Ticker") +
  theme_minimal() +
  theme(legend.position = "right")