Q1 Get monthly returns of Facebook, Amazon, and Netflix for the last 5 years.

from <- today() - years(5)
stock_returns_monthly <- c("FB", "AMZN", "NFLX") %>%
    tq_get(get  = "stock.prices",
           from = from) %>%
    group_by(symbol) %>%
    tq_transmute(select     = adjusted, 
                 mutate_fun = periodReturn, 
                 period     = "monthly", 
                 col_rename = "Ra")
stock_returns_monthly
## # A tibble: 183 x 3
## # Groups:   symbol [3]
##    symbol date             Ra
##    <chr>  <date>        <dbl>
##  1 FB     2015-11-30 -0.0287 
##  2 FB     2015-12-31  0.00403
##  3 FB     2016-01-29  0.0721 
##  4 FB     2016-02-29 -0.0471 
##  5 FB     2016-03-31  0.0672 
##  6 FB     2016-04-29  0.0305 
##  7 FB     2016-05-31  0.0105 
##  8 FB     2016-06-30 -0.0381 
##  9 FB     2016-07-29  0.0845 
## 10 FB     2016-08-31  0.0176 
## # ... with 173 more rows

Q2 Get monthly returns of NASDAQ for the same period as the baseline.

baseline_returns_monthly <- "^IXIC" %>%
    tq_get(get  = "stock.prices",
           from = from) %>%
    tq_transmute(select     = adjusted, 
                 mutate_fun = periodReturn, 
                 period     = "monthly", 
                 col_rename = "Rb")
baseline_returns_monthly
## # A tibble: 61 x 2
##    date              Rb
##    <date>         <dbl>
##  1 2015-11-30  0.000735
##  2 2015-12-31 -0.0198  
##  3 2016-01-29 -0.0786  
##  4 2016-02-29 -0.0121  
##  5 2016-03-31  0.0684  
##  6 2016-04-29 -0.0194  
##  7 2016-05-31  0.0362  
##  8 2016-06-30 -0.0213  
##  9 2016-07-29  0.0660  
## 10 2016-08-31  0.00990 
## # ... with 51 more rows

Q3 Aggregate for 10 portfolios with the following weighting schemes.

stock_returns_monthly_multi <- stock_returns_monthly %>%
    tq_repeat_df(n = 10)
stock_returns_monthly_multi
## # A tibble: 1,830 x 4
## # Groups:   portfolio [10]
##    portfolio symbol date             Ra
##        <int> <chr>  <date>        <dbl>
##  1         1 FB     2015-11-30 -0.0287 
##  2         1 FB     2015-12-31  0.00403
##  3         1 FB     2016-01-29  0.0721 
##  4         1 FB     2016-02-29 -0.0471 
##  5         1 FB     2016-03-31  0.0672 
##  6         1 FB     2016-04-29  0.0305 
##  7         1 FB     2016-05-31  0.0105 
##  8         1 FB     2016-06-30 -0.0381 
##  9         1 FB     2016-07-29  0.0845 
## 10         1 FB     2016-08-31  0.0176 
## # ... with 1,820 more rows
weights <- c(
   0.80, 0.10, 0.10,
   0.10, 0.80, 0.10,
   0.10, 0.10, 0.80,
   0.60, 0.20, 0.20,
   0.20, 0.60, 0.20,
   0.20, 0.20, 0.60,
   0.50, 0.25, 0.25,
   0.25, 0.50, 0.25,
   0.25, 0.25, 0.50,
   0.40, 0.40, 0.20
)
stocks <- c("FB", "AMZN", "NFLX")
weights_table <-  tibble(stocks) %>%
    tq_repeat_df(n = 10) %>%
    bind_cols(tibble(weights)) %>%
    group_by(portfolio)
weights_table
## # A tibble: 30 x 3
## # Groups:   portfolio [10]
##    portfolio stocks weights
##        <int> <chr>    <dbl>
##  1         1 FB         0.8
##  2         1 AMZN       0.1
##  3         1 NFLX       0.1
##  4         2 FB         0.1
##  5         2 AMZN       0.8
##  6         2 NFLX       0.1
##  7         3 FB         0.1
##  8         3 AMZN       0.1
##  9         3 NFLX       0.8
## 10         4 FB         0.6
## # ... with 20 more rows
portfolio_returns_monthly  <-
  stock_returns_monthly_multi %>%
    tq_portfolio(assets_col  = symbol, 
                 returns_col = Ra, 
                 weights     = weights_table, 
                 col_rename  = "Ra")
portfolio_returns_monthly 
## # A tibble: 610 x 3
## # Groups:   portfolio [10]
##    portfolio date             Ra
##        <int> <date>        <dbl>
##  1         1 2015-11-30 -0.0239 
##  2         1 2015-12-31 -0.00250
##  3         1 2016-01-29  0.0255 
##  4         1 2016-02-29 -0.0434 
##  5         1 2016-03-31  0.0699 
##  6         1 2016-04-29  0.0254 
##  7         1 2016-05-31  0.0274 
##  8         1 2016-06-30 -0.0407 
##  9         1 2016-07-29  0.0758 
## 10         1 2016-08-31  0.0205 
## # ... with 600 more rows

Q4 Calcualte the Sharpe Ratio per portfolio.

RaRb_multi_portfolio <- left_join(portfolio_returns_monthly , 
                                   baseline_returns_monthly,
                                   by = "date")
RaRb_multi_portfolio
## # A tibble: 610 x 4
## # Groups:   portfolio [10]
##    portfolio date             Ra        Rb
##        <int> <date>        <dbl>     <dbl>
##  1         1 2015-11-30 -0.0239   0.000735
##  2         1 2015-12-31 -0.00250 -0.0198  
##  3         1 2016-01-29  0.0255  -0.0786  
##  4         1 2016-02-29 -0.0434  -0.0121  
##  5         1 2016-03-31  0.0699   0.0684  
##  6         1 2016-04-29  0.0254  -0.0194  
##  7         1 2016-05-31  0.0274   0.0362  
##  8         1 2016-06-30 -0.0407  -0.0213  
##  9         1 2016-07-29  0.0758   0.0660  
## 10         1 2016-08-31  0.0205   0.00990 
## # ... with 600 more rows
RaRb_multi_portfolio %>%
  tq_performance(Ra = Ra, Rb = Rb, performance_fun = table.CAPM) %>%
  t()
##                      [,1]   [,2]   [,3]   [,4]   [,5]   [,6]   [,7]   [,8]
## portfolio          1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000
## ActivePremium      0.0511 0.1557 0.1225 0.0790 0.1380 0.1184 0.0921 0.1288
## Alpha              0.0027 0.0090 0.0093 0.0045 0.0080 0.0081 0.0054 0.0075
## AnnualizedAlpha    0.0328 0.1138 0.1170 0.0557 0.1004 0.1012 0.0668 0.0942
## Beta               1.1484 1.2108 1.1353 1.1452 1.1891 1.1414 1.1474 1.1772
## Beta-              0.6889 1.0701 0.8992 0.7752 0.9917 0.8852 0.8162 0.9516
## Beta+              1.5794 1.3206 1.3370 1.4857 1.3507 1.3588 1.4473 1.3661
## Correlation        0.7716 0.7701 0.5990 0.7893 0.7840 0.6759 0.7865 0.7834
## Correlationp-value 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
## InformationRatio   0.3105 0.8846 0.4682 0.5099 0.8366 0.5503 0.5874 0.7886
## R-squared          0.5954 0.5931 0.3588 0.6231 0.6147 0.4569 0.6186 0.6137
## TrackingError      0.1646 0.1760 0.2617 0.1550 0.1649 0.2151 0.1568 0.1633
## TreynorRatio       0.2023 0.2783 0.2676 0.2273 0.2685 0.2625 0.2382 0.2633
##                      [,9]   [,10]
## portfolio          9.0000 10.0000
## ActivePremium      0.1163  0.1099
## Alpha              0.0076  0.0063
## AnnualizedAlpha    0.0945  0.0782
## Beta               1.1458  1.1664
## Beta-              0.8824  0.8876
## Beta+              1.3707  1.4122
## Correlation        0.7134  0.8008
## Correlationp-value 0.0000  0.0000
## InformationRatio   0.5965  0.7205
## R-squared          0.5089  0.6413
## TrackingError      0.1949  0.1525
## TreynorRatio       0.2597  0.2496
RaRb_multi_portfolio %>%
  tq_performance(Ra = Ra, Rb = NULL, performance_fun = SharpeRatio.annualized, scale = 12) 
## # A tibble: 10 x 2
## # Groups:   portfolio [10]
##    portfolio `AnnualizedSharpeRatio(Rf=0%)`
##        <int>                          <dbl>
##  1         1                          0.909
##  2         2                          1.25 
##  3         3                          0.933
##  4         4                          1.04 
##  5         5                          1.23 
##  6         6                          1.03 
##  7         7                          1.09 
##  8         8                          1.20 
##  9         9                          1.08 
## 10        10                          1.16

Q5 Sort the portfolios in descending order of Sharpe Ratio.

Hint: Use dplyr::arrange().

portfolio_returns_monthly %>% arrange(desc(RaRb_multi_portfolio))
## # A tibble: 610 x 3
## # Groups:   portfolio [10]
##    portfolio date            Ra
##        <int> <date>       <dbl>
##  1        10 2020-11-19  0.0279
##  2        10 2020-10-30 -0.0278
##  3        10 2020-09-30 -0.0860
##  4        10 2020-08-31  0.106 
##  5        10 2020-07-31  0.123 
##  6        10 2020-06-30  0.0852
##  7        10 2020-05-29  0.0195
##  8        10 2020-04-30  0.220 
##  9        10 2020-03-31 -0.0187
## 10        10 2020-02-28 -0.0284
## # ... with 600 more rows

Q6 Which weighting scheme would have performed the best?

The 10th weighting scheme(Facebook(0.40), Amazon(0.40), Netflix (0.20)) would be the best because it has the best Sharpe Ratio.

Q7 Which weighting scheme is most volatile?

Hint: Calculate Beta from the Capital Asset Pricing Model. Make your argument based on the calculated Beta. Stock Betas: FB- 1.27 AMZN- 1.30 NFLX- 1.02

Portfolio Betas:

1- (1.27.8)+(1.3.1)+(1.02*.1) = 1.248

2- (1.27.1)+(1.3.8)+(1.02*.1) = 1.269

3- (1.27.1)+(1.3.1)+(1.02*.8) = 1.073

4- (1.27.6)+(1.3.2)+(1.02*.2) = 1.226

5- (1.27.2)+(1.3.6)+(1.02*.2) = 1.238

6- (1.27.2)+(1.3.2)+(1.02*.6) = 1.126

7- (1.27.5)+(1.3.25)+(1.02*.25) = 1.215

8- (1.27.25)+(1.3.5)+(1.02*.25) = 1.223

9- (1.27.25)+(1.3.25)+(1.02*.5) = 1.153

10- (1.27.4)+(1.3.4)+(1.02*.2) = 1.232

Based on Beta calculations, portfolio 2 is the most volatile.

Q8 Hide the messages, but display the code and its results on the webpage.

Hint: Use message, echo and results in the chunk options. Refer to the RMarkdown Reference Guide.

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

Q10 Use the correct slug.