Q1 Import stock prices and calculate monthly returns.

Hint: Import Apple, Google, Netflix, Microsoft and Tesla from “2015-01-01” to “2018-12-31”.

# Load packages
library(tidyquant)
library(tidyverse)

# Asset Period Returns
stock_returns_monthly <- c("AAPL", "GOOG", "NFLX", "MSFT", "TSLA") %>%
    tq_get(get  = "stock.prices",
           from = "2015-01-01",
           to   = "2018-12-31") %>%
    group_by(symbol) %>%
    tq_transmute(select     = adjusted, 
                 mutate_fun = periodReturn, 
                 period     = "monthly", 
                 col_rename = "Ra")
stock_returns_monthly 
## # A tibble: 240 x 3
## # Groups:   symbol [5]
##    symbol date             Ra
##    <chr>  <date>        <dbl>
##  1 AAPL   2015-01-30  0.0716 
##  2 AAPL   2015-02-27  0.101  
##  3 AAPL   2015-03-31 -0.0314 
##  4 AAPL   2015-04-30  0.00579
##  5 AAPL   2015-05-29  0.0453 
##  6 AAPL   2015-06-30 -0.0372 
##  7 AAPL   2015-07-31 -0.0329 
##  8 AAPL   2015-08-31 -0.0662 
##  9 AAPL   2015-09-30 -0.0218 
## 10 AAPL   2015-10-30  0.0834 
## # … with 230 more rows

Q2 Import S&P500 as a baseline index fund and calculate monthly returns.

# Baseline Period Returns
baseline_returns_monthly <- "^GSPC" %>%
    tq_get(get  = "stock.prices",
           from = "2015-01-01",
           to   = "2018-12-31") %>%
    tq_transmute(select     = adjusted, 
                 mutate_fun = periodReturn, 
                 period     = "monthly", 
                 col_rename = "Rb")
baseline_returns_monthly
## # A tibble: 48 x 2
##    date             Rb
##    <date>        <dbl>
##  1 2015-01-30 -0.0307 
##  2 2015-02-27  0.0549 
##  3 2015-03-31 -0.0174 
##  4 2015-04-30  0.00852
##  5 2015-05-29  0.0105 
##  6 2015-06-30 -0.0210 
##  7 2015-07-31  0.0197 
##  8 2015-08-31 -0.0626 
##  9 2015-09-30 -0.0264 
## 10 2015-10-30  0.0830 
## # … with 38 more rows

Q3 Aggregate three Portfolios with the following weighting schemes.

# scaling a single portfolio to many, 3 in this case
stock_returns_monthly_multi <- stock_returns_monthly %>%
    tq_repeat_df(n = 3)
stock_returns_monthly_multi
## # A tibble: 720 x 4
## # Groups:   portfolio [3]
##    portfolio symbol date             Ra
##        <int> <chr>  <date>        <dbl>
##  1         1 AAPL   2015-01-30  0.0716 
##  2         1 AAPL   2015-02-27  0.101  
##  3         1 AAPL   2015-03-31 -0.0314 
##  4         1 AAPL   2015-04-30  0.00579
##  5         1 AAPL   2015-05-29  0.0453 
##  6         1 AAPL   2015-06-30 -0.0372 
##  7         1 AAPL   2015-07-31 -0.0329 
##  8         1 AAPL   2015-08-31 -0.0662 
##  9         1 AAPL   2015-09-30 -0.0218 
## 10         1 AAPL   2015-10-30  0.0834 
## # … with 710 more rows

# Create Vector of Weights
# not all symbols need to be specified. Any symbol not specified by default gets a weight of zero.
weights <- c(
    0.40, 0.40, 0.40, 0.40, 0.60,
    0.40, 0.40, 0.40, 0.60, 0.40,
    0.40, 0.40, 0.60, 0.40, 0.40
)
stocks <- c("AAPL", "GOOG", "NFLX", "MSFT", "TSLA")
weights_table <-  tibble(stocks) %>%
    tq_repeat_df(n = 3) %>%
    bind_cols(tibble(weights)) %>%
    group_by(portfolio)
weights_table
## # A tibble: 15 x 3
## # Groups:   portfolio [3]
##    portfolio stocks weights
##        <int> <chr>    <dbl>
##  1         1 AAPL       0.4
##  2         1 GOOG       0.4
##  3         1 NFLX       0.4
##  4         1 MSFT       0.4
##  5         1 TSLA       0.6
##  6         2 AAPL       0.4
##  7         2 GOOG       0.4
##  8         2 NFLX       0.4
##  9         2 MSFT       0.6
## 10         2 TSLA       0.4
## 11         3 AAPL       0.4
## 12         3 GOOG       0.4
## 13         3 NFLX       0.6
## 14         3 MSFT       0.4
## 15         3 TSLA       0.4




# Aggregate a Portfolio using Vector of Weights
portfolio_returns_monthly_multi  <-
  stock_returns_monthly_multi %>%
    tq_portfolio(assets_col  = symbol, 
                 returns_col = Ra, 
                 weights     = weights_table, 
                 col_rename  = "Ra")
portfolio_returns_monthly_multi 
## # A tibble: 144 x 3
## # Groups:   portfolio [3]
##    portfolio date            Ra
##        <int> <date>       <dbl>
##  1         1 2015-01-30  1.25  
##  2         1 2015-02-27  0.0583
##  3         1 2015-03-31 -0.0660
##  4         1 2015-04-30  0.148 
##  5         1 2015-05-29  0.0586
##  6         1 2015-06-30  0.0130
##  7         1 2015-07-31  0.0900
##  8         1 2015-08-31 -0.0340
##  9         1 2015-09-30 -0.0370
## 10         1 2015-10-30  0.0409
## # … with 134 more rows

Q4 What is the portfolio’s return on the first period? Explain how it’s computed.

Portfolio 1: 7.16 * 0.4 + 1.85 * 0.4 + 2.66 * 0.4 + -0.14 * 0.4 + -0.07 * 0.6 = 1.24

Portfolio 2: 7.16 * 0.4 + 1.85 * 0.4 + 2.66 * 0.4 + -0.14 * 0.6 + -0.07 * 0.4 = 1.23

Portfolio 3: 7.16 * 0.4 + 1.85 * 0.4 + 2.66 * 0.6 + -0.14 * 0.4 + -0.07 * 0.4 = 1.31

Q5 Merge Ra and Rb

# Merging Ra and Rb
RaRb_single_portfolio <- left_join(portfolio_returns_monthly_multi , 
                                   baseline_returns_monthly,
                                   by = "date")
RaRb_single_portfolio
## # A tibble: 144 x 4
## # Groups:   portfolio [?]
##    portfolio date            Ra       Rb
##        <int> <date>       <dbl>    <dbl>
##  1         1 2015-01-30  1.25   -0.0307 
##  2         1 2015-02-27  0.0583  0.0549 
##  3         1 2015-03-31 -0.0660 -0.0174 
##  4         1 2015-04-30  0.148   0.00852
##  5         1 2015-05-29  0.0586  0.0105 
##  6         1 2015-06-30  0.0130 -0.0210 
##  7         1 2015-07-31  0.0900  0.0197 
##  8         1 2015-08-31 -0.0340 -0.0626 
##  9         1 2015-09-30 -0.0370 -0.0264 
## 10         1 2015-10-30  0.0409  0.0830 
## # … with 134 more rows

Q6 Compute the CAPM Table

RaRb_single_portfolio %>%
    tq_performance(Ra = Ra, Rb = Rb, performance_fun = table.CAPM) %>%
  t()
##                      [,1]   [,2]   [,3]
## portfolio          1.0000 2.0000 3.0000
## ActivePremium      0.4703 0.4821 0.5195
## Alpha              0.0448 0.0450 0.0486
## AnnualizedAlpha    0.6922 0.6956 0.7671
## Beta               0.2903 0.3566 0.3421
## Beta-              1.1252 1.1487 1.2885
## Beta+              0.8219 1.0242 0.9765
## Correlation        0.0521 0.0647 0.0578
## Correlationp-value 0.7252 0.6624 0.6965
## InformationRatio   0.7158 0.7432 0.7463
## R-squared          0.0027 0.0042 0.0033
## TrackingError      0.6571 0.6486 0.6961
## TreynorRatio       1.7862 1.4873 1.6597

Q7 Interpret Beta.

The portfolios have a beta of 0.29, 0.36. and 0.34 which means compared to the market as a whole they are less risky because they are less than 1 but also have a higher chance of having a lower return. Portfolio 1 is 29% as volatile as the market, Portfolio 2 is 36% as volatile and Portfolio 3 is 34% as volatile as the market. These portfolios would be good for a risk averse investor.

Q8 Interpret Alpha.

THe portfolios have alpha of 0.0448, 0.0450, and 0.0486 respectively. This means all of the portfolios did about 0.5% better than the S&P 500.

Q9 Interpret AnnualizedAlpha.

Annualize Alpha is equal to 12 times the monthly alpha value. This means it will determne the amount above or below the portfolio performed beyont the market index over the year period. In the portfolios this is 69%, 70%, and 77% respectively.

Q10.a Display both code and the results of the code on the webpage.

Q10.b Display the title and your name correctly at the top of the webpage.

Q10.c Use the correct slug.