Major Takeaways From Chapter 1

Chapter 1 focuses on why reproducibility matters. It states that finance workflows should be clean, consistent, and easy to revisit or share. It covers setting up RStudio Projects, using Git for version control, and introduces xts, tidyverse, and tidyquant. It states that the goal is writing organized, repeatable code from the start. It also sets up Shiny as a way to bring your analysis to life later on.

Tq_get

Stock Index

tq_index_options()
## [1] "DOW"       "DOWGLOBAL" "SP400"     "SP500"     "SP600"
data <- tq_index("SP400")

Stock Exchanges

tq_exchange_options()
## [1] "AMEX"   "NASDAQ" "NYSE"
nyse_data <- tq_exchange("NYSE")

tq_get

stock <- tq_get("TSLA")

Economic data from FRED

unemployment_nh <- tq_get("NHUR", get = "economic.data")
unemployment_nh
## # A tibble: 123 × 3
##    symbol date       price
##    <chr>  <date>     <dbl>
##  1 NHUR   2015-01-01   3.8
##  2 NHUR   2015-02-01   3.8
##  3 NHUR   2015-03-01   3.7
##  4 NHUR   2015-04-01   3.6
##  5 NHUR   2015-05-01   3.5
##  6 NHUR   2015-06-01   3.4
##  7 NHUR   2015-07-01   3.3
##  8 NHUR   2015-08-01   3.3
##  9 NHUR   2015-09-01   3.2
## 10 NHUR   2015-10-01   3.1
## # ℹ 113 more rows

Charting With Tidyquant

Import Data

AAPL <- tq_get("AAPL")

Line Chart

AAPL %>%
    ggplot(aes(x = date, y = close)) +
    geom_line() +
    labs(title = "AAPL Line Chart", y = "Closing Price", x = "") +
    theme_tq()

Bar Chart

AAPL %>%
    tail(30) %>%
    ggplot(aes(x = date, y = close)) +
    geom_barchart(aes(open = open, high = high, low = low, close = close)) +
    labs(title = "AAPL Bar Chart", y = "Closing Price", x = "") +
    theme_tq()

Candlestick Chart

AAPL %>%
    tail(30) %>%
    ggplot(aes(x = date, y = close)) +
    geom_candlestick(aes(open = open, high = high, low = low, close = close)) +
    labs(title = "AAPL Candlestick Chart", y = "Closing Price", x = "") +
    theme_tq()

Preformance Analysis with Tidyquant

1 Get stock prices and convert to returns

Ra <- c("AAPL", "GOOG", "NFLX") %>%
    tq_get(get = "stock.prices",
           from = "2010-01-01",
           to = "2015-12-31") %>%
    group_by(symbol) %>%
    tq_transmute(select = adjusted,
                 mutate_fun = periodReturn,
                 period = "monthly",
                 col_rename = "Ra")
Ra
## # A tibble: 216 × 3
## # Groups:   symbol [3]
##    symbol date            Ra
##    <chr>  <date>       <dbl>
##  1 AAPL   2010-01-29 -0.103 
##  2 AAPL   2010-02-26  0.0654
##  3 AAPL   2010-03-31  0.148 
##  4 AAPL   2010-04-30  0.111 
##  5 AAPL   2010-05-28 -0.0161
##  6 AAPL   2010-06-30 -0.0208
##  7 AAPL   2010-07-30  0.0227
##  8 AAPL   2010-08-31 -0.0550
##  9 AAPL   2010-09-30  0.167 
## 10 AAPL   2010-10-29  0.0607
## # ℹ 206 more rows

2 Get baseline and convert to returns

Rb <- "XLK" %>%
    tq_get(get = "stock.prices",
           from = "2010-01-01",
           to = "2015-12-31") %>%
    tq_transmute(select = adjusted,
                 mutate_fun = periodReturn,
                 period = "monthly",
                 col_rename = "Rb")
Rb
## # A tibble: 72 × 2
##    date            Rb
##    <date>       <dbl>
##  1 2010-01-29 -0.0993
##  2 2010-02-26  0.0348
##  3 2010-03-31  0.0684
##  4 2010-04-30  0.0126
##  5 2010-05-28 -0.0748
##  6 2010-06-30 -0.0540
##  7 2010-07-30  0.0745
##  8 2010-08-31 -0.0561
##  9 2010-09-30  0.117 
## 10 2010-10-29  0.0578
## # ℹ 62 more rows

3 Join the two tables

RaRb <- left_join(Ra, Rb, by = c("date" = "date"))
RaRb
## # A tibble: 216 × 4
## # Groups:   symbol [3]
##    symbol date            Ra      Rb
##    <chr>  <date>       <dbl>   <dbl>
##  1 AAPL   2010-01-29 -0.103  -0.0993
##  2 AAPL   2010-02-26  0.0654  0.0348
##  3 AAPL   2010-03-31  0.148   0.0684
##  4 AAPL   2010-04-30  0.111   0.0126
##  5 AAPL   2010-05-28 -0.0161 -0.0748
##  6 AAPL   2010-06-30 -0.0208 -0.0540
##  7 AAPL   2010-07-30  0.0227  0.0745
##  8 AAPL   2010-08-31 -0.0550 -0.0561
##  9 AAPL   2010-09-30  0.167   0.117 
## 10 AAPL   2010-10-29  0.0607  0.0578
## # ℹ 206 more rows

4 Calculate CAPM

RaRb_capm <- RaRb %>%
    tq_performance(Ra = Ra,
                   Rb = Rb,
                   performance_fun = table.CAPM)
RaRb_capm
## # A tibble: 3 × 13
## # Groups:   symbol [3]
##   symbol ActivePremium  Alpha AnnualizedAlpha  Beta `Beta-` `Beta+` Correlation
##   <chr>          <dbl>  <dbl>           <dbl> <dbl>   <dbl>   <dbl>       <dbl>
## 1 AAPL           0.119 0.0089           0.112 1.11    0.578  1.04        0.659 
## 2 GOOG           0.034 0.0028           0.034 1.14    1.39   1.16        0.644 
## 3 NFLX           0.447 0.053            0.859 0.384  -1.52   0.0045      0.0817
## # ℹ 5 more variables: `Correlationp-value` <dbl>, InformationRatio <dbl>,
## #   `R-squared` <dbl>, TrackingError <dbl>, TreynorRatio <dbl>