Hint: Add group_by(symbol) at the end of the code so that calculations below will be done per stock.
## # A tibble: 22,677 x 8
## # Groups: symbol [3]
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ^IXIC 1990-04-23 423. 425. 418. 420. 125990000 420.
## 2 ^IXIC 1990-04-24 422. 422. 419. 419. 126790000 419.
## 3 ^IXIC 1990-04-25 420 421. 419. 421. 121710000 421.
## 4 ^IXIC 1990-04-26 422. 422 419. 421. 115930000 421.
## 5 ^IXIC 1990-04-27 421. 421. 418. 418 116010000 418
## 6 ^IXIC 1990-04-30 418. 420. 417 420. 105790000 420.
## 7 ^IXIC 1990-05-01 422 422. 421. 422. 124130000 422.
## 8 ^IXIC 1990-05-02 423. 424. 422. 424. 143260000 424.
## 9 ^IXIC 1990-05-03 425 427. 424. 425. 160850000 425.
## 10 ^IXIC 1990-05-04 427. 429. 426. 429. 136810000 429.
## # … with 22,667 more rows
Hint: Take the adjusted variable from Stocks, and calculate yearly returns using ***tq_transmute().
## # A tibble: 93 x 3
## # Groups: symbol [3]
## symbol date yearly.returns
## <chr> <date> <dbl>
## 1 ^IXIC 1990-12-31 -0.110
## 2 ^IXIC 1991-12-31 0.569
## 3 ^IXIC 1992-12-31 0.155
## 4 ^IXIC 1993-12-31 0.147
## 5 ^IXIC 1994-12-30 -0.0320
## 6 ^IXIC 1995-12-29 0.399
## 7 ^IXIC 1996-12-31 0.227
## 8 ^IXIC 1997-12-31 0.216
## 9 ^IXIC 1998-12-31 0.396
## 10 ^IXIC 1999-12-31 0.856
## # … with 83 more rows
Hint: Take returns_yearly and pipe it to summarise. Calculate the mean yearly returns.
## # A tibble: 3 x 2
## symbol returns_avg
## <chr> <dbl>
## 1 ^IXIC 0.137
## 2 MSFT 0.275
## 3 WMT 0.160
## # A tibble: 93 x 3
## # Groups: symbol [3]
## symbol date yearly.returns
## <chr> <date> <dbl>
## 1 ^IXIC 1990-12-31 -0.110
## 2 ^IXIC 1991-12-31 0.569
## 3 ^IXIC 1992-12-31 0.155
## 4 ^IXIC 1993-12-31 0.147
## 5 ^IXIC 1994-12-30 -0.0320
## 6 ^IXIC 1995-12-29 0.399
## 7 ^IXIC 1996-12-31 0.227
## 8 ^IXIC 1997-12-31 0.216
## 9 ^IXIC 1998-12-31 0.396
## 10 ^IXIC 1999-12-31 0.856
## # … with 83 more rows
Hint: Take returns_yearly and pipe it to tidyquant::tq_performance. Use the performance_fun argument to compute sd (standard deviation).
## # A tibble: 3 x 2
## # Groups: symbol [3]
## symbol sd.1
## <chr> <dbl>
## 1 ^IXIC 0.278
## 2 WMT 0.327
## 3 MSFT 0.402
Microsoft would be the riskiest stock in terms of standard deviation due to the deviation being the largest of the three stocks.
Hint: when the return distribution is not normal, the standard deviation is not an appropriate measure of risk. One can use skewness and kurtosis to detect non-normal returns. Take returns_yearly and pipe it to tidyquant::tq_performance. Use the performance_fun argument to compute skewness. Do the same for kurtosis.
All three stocks have a positive skewness with walmart having the largest of 1.41. All three stocks also have positive kurtosis with walmart having the largest kurtosis of 1.52. This means that all three stocks will have large positive returns be more likely than negative returns, with walmart having the best chances.
Hint: Take returns_yearly and pipe it to tidyquant::tq_performance. Use the performance_fun argument to compute table.DownsideRisk.
Microsoft has the greatest downside risk because it has the lowest HistoricalES(95%) with a value of -.5362, the second lowest HistoricalVaR with a value of -0.3317 and a semideviation value of 0.2659 which is the highest of the three stocks.
Hint: Make your argument based on the three Sharpe Ratios.
## [,1] [,2] [,3]
## symbol "^IXIC" "WMT" "MSFT"
## ESSharpe(Rf=2%,p=95%) "0.2864316" "0.2692776" "0.5196648"
## StdDevSharpe(Rf=2%,p=95%) "0.4192555" "0.4280681" "0.6328775"
## VaRSharpe(Rf=2%,p=95%) "0.3916984" "0.6439233" "0.7457163"
Due to Microsoft having the highest Sharpe ratio I would choose Microsoft, since usually any sharpe ratio that goes above one is considered acceptable by investors but since none of the stocks go above one Microsoft has the highest making it the safest stock.
Hint: Make your argument based on the three Sharpe Ratios.
## [,1] [,2] [,3]
## symbol "^IXIC" "WMT" "MSFT"
## ESSharpe(Rf=2%,p=1%) "0.2046036" "0.1401236" "0.3643917"
## StdDevSharpe(Rf=2%,p=1%) "0.4192555" "0.4280681" "0.6328775"
## VaRSharpe(Rf=2%,p=1%) "0.2429389" "1.1327741" "0.4281056"
Yes this would change my answer since Walmart now has a Sharpe ratio over one with a value of 1.132, making this stock the safest stock with the lowest risk.
Hint: Use message, echo and results in the chunk options. Refer to the RMarkdown Reference Guide.