Loading the Packages

library(quantmod)
## Warning: package 'quantmod' was built under R version 4.0.5
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(tidyquant)
## Warning: package 'tidyquant' was built under R version 4.0.5
## Loading required package: lubridate
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
## Loading required package: PerformanceAnalytics
## Warning: package 'PerformanceAnalytics' was built under R version 4.0.5
## 
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
## 
##     legend
## Warning: replacing previous import 'vctrs::data_frame' by 'tibble::data_frame'
## when loading 'dplyr'
## == Need to Learn tidyquant? ====================================================
## Business Science offers a 1-hour course - Learning Lab #9: Performance Analysis & Portfolio Optimization with tidyquant!
## </> Learn more at: https://university.business-science.io/p/learning-labs-pro </>
library(lubridate)
library(timetk)
## Warning: package 'timetk' was built under R version 4.0.5
library(purrr)
library(tibble)
## Warning: package 'tibble' was built under R version 4.0.5
library(PerformanceAnalytics)
library(magrittr)
## 
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
## 
##     set_names
library(xts)
library(tibble)
library(readr)
library(tidyr)
## 
## Attaching package: 'tidyr'
## The following object is masked from 'package:magrittr':
## 
##     extract
library(readr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:xts':
## 
##     first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(xts)
library(SIT)
## Loading required package: SIT.date
## 
## Attaching package: 'SIT'
## The following objects are masked from 'package:dplyr':
## 
##     count, lst
## The following object is masked from 'package:magrittr':
## 
##     add
## The following object is masked from 'package:tibble':
## 
##     lst
## The following object is masked from 'package:purrr':
## 
##     cross
## The following object is masked from 'package:TTR':
## 
##     DVI
## The following object is masked from 'package:base':
## 
##     close
library(pacman)
## Warning: package 'pacman' was built under R version 4.0.5
library(ggplot2)

Q1. Import data Download ETF daily data from yahoo with ticker names of SPY, QQQ, EEM, IWM, EFA, TLT, IYR and GLD from 2010 to current date (See http://etfdb.com/ for ETF information). (Hint: Use library quantmod to help you to download these prices and use adjusted prices for your computation.)

Import the Data

tickers <- c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
data = new.env()
getSymbols(tickers, src = 'yahoo', from = '2010-01-01', to = '2021-05-07', auto.assign = TRUE)
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
## 
## This message is shown once per session and may be disabled by setting 
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## [1] "SPY" "QQQ" "EEM" "IWM" "EFA" "TLT" "IYR" "GLD"
ETFList <- merge(Ad(SPY), Ad(QQQ),Ad(EEM), Ad(IWM),Ad(EFA),Ad(TLT),Ad(IYR),Ad(GLD))
colnames(ETFList) <- c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
head(ETFList)
##                 SPY      QQQ      EEM      IWM      EFA      TLT      IYR
## 2010-01-04 90.79006 41.51847 34.10928 54.61730 41.03314 66.03745 30.41554
## 2010-01-05 91.03041 41.51847 34.35684 54.42949 41.06930 66.46396 30.48858
## 2010-01-06 91.09449 41.26806 34.42872 54.37827 41.24289 65.57423 30.47530
## 2010-01-07 91.47905 41.29489 34.22906 54.77949 41.08377 65.68450 30.74751
## 2010-01-08 91.78343 41.63475 34.50059 55.07827 41.40926 65.65512 30.54169
## 2010-01-11 91.91164 41.46482 34.42872 54.85632 41.74921 65.29481 30.68776
##               GLD
## 2010-01-04 109.80
## 2010-01-05 109.70
## 2010-01-06 111.51
## 2010-01-07 110.82
## 2010-01-08 111.37
## 2010-01-11 112.85
tail(ETFList)
##               SPY    QQQ   EEM    IWM   EFA      TLT   IYR    GLD
## 2021-04-29 420.06 340.22 54.95 227.99 79.10 138.1175 98.78 166.22
## 2021-04-30 417.30 337.99 53.98 224.89 78.11 138.4370 99.19 165.66
## 2021-05-03 418.20 336.19 53.98 225.99 78.97 138.5200 99.03 167.81
## 2021-05-04 415.62 330.14 53.37 223.29 77.80 139.4600 98.13 166.58
## 2021-05-05 415.75 329.03 53.62 222.40 78.86 139.6900 96.71 167.27
## 2021-05-06 419.07 331.51 54.13 222.59 79.51 139.9200 97.23 170.06
ETFList.xts <- xts(ETFList)
head(ETFList.xts)
##                 SPY      QQQ      EEM      IWM      EFA      TLT      IYR
## 2010-01-04 90.79006 41.51847 34.10928 54.61730 41.03314 66.03745 30.41554
## 2010-01-05 91.03041 41.51847 34.35684 54.42949 41.06930 66.46396 30.48858
## 2010-01-06 91.09449 41.26806 34.42872 54.37827 41.24289 65.57423 30.47530
## 2010-01-07 91.47905 41.29489 34.22906 54.77949 41.08377 65.68450 30.74751
## 2010-01-08 91.78343 41.63475 34.50059 55.07827 41.40926 65.65512 30.54169
## 2010-01-11 91.91164 41.46482 34.42872 54.85632 41.74921 65.29481 30.68776
##               GLD
## 2010-01-04 109.80
## 2010-01-05 109.70
## 2010-01-06 111.51
## 2010-01-07 110.82
## 2010-01-08 111.37
## 2010-01-11 112.85
ETFList.monthly <- to.monthly(ETFList.xts, indexAt = "last", OHLC = FALSE)
ETFList.monthly
##                  SPY       QQQ      EEM       IWM      EFA       TLT      IYR
## 2010-01-29  86.03146  38.27178 30.57135  51.31363 37.95908  67.87571 28.83534
## 2010-02-26  88.71517  40.03376 31.11442  53.60998 38.06035  67.64324 30.40889
## 2010-03-31  94.11614  43.12074 33.63808  58.02244 40.49066  66.25161 33.37330
## 2010-04-30  95.57211  44.08773 33.58218  61.31721 39.35506  68.45240 35.50523
## 2010-05-28  87.97849  40.82861 30.42761  56.69596 34.95013  71.94920 33.48727
## 2010-06-30  83.42641  38.38882 30.00203  52.30577 34.22948  76.12069 31.92338
## 2010-07-30  89.12448  41.17518 33.28199  55.82642 38.20367  75.40027 34.92571
## 2010-08-31  85.11560  39.06291 32.20475  51.67079 36.75383  81.72704 34.47266
## 2010-09-30  92.73808  44.20863 35.99118  58.10137 40.41891  79.66724 36.06863
## 2010-10-29  96.28087  47.01053 37.07647  60.51152 41.95707  76.10667 37.48735
## 2010-11-30  96.28087  46.92944 35.99922  62.62037 39.93317  74.82107 36.89394
## 2010-12-31 102.71748  49.16192 38.61916  67.65089 43.25084  72.05334 38.58150
## 2011-01-31 105.11081  50.55211 37.13569  67.40013 44.15717  69.83326 39.96039
## 2011-02-28 108.76209  52.14992 37.11948  71.13549 45.72465  70.98565 41.76674
## 2011-03-31 108.77515  51.91614 39.45414  72.93029 44.63261  71.00648 41.31004
## 2011-04-29 111.92544  53.40772 40.53230  74.85381 47.14358  72.66734 43.23645
## 2011-05-31 110.67024  52.75682 39.34065  73.51082 46.10353  75.15462 43.67458
## 2011-06-30 108.80326  51.68827 38.97262  71.74318 45.54533  73.40867 42.31806
## 2011-07-29 106.62672  52.54898 38.57143  69.29950 44.46236  76.64938 42.40930
## 2011-08-31 100.76482  49.88529 35.00167  63.13780 40.56973  84.05953 40.15655
## 2011-09-30  93.76968  47.64503 28.73821  56.09775 36.18483  95.16052 35.87255
## 2011-10-31 104.00437  52.60105 33.41329  64.56911 39.66852  91.51659 40.60401
## 2011-11-30 103.58170  51.18504 32.75829  64.32482 38.80518  93.33694 39.11435
## 2011-12-30 104.66397  50.87067 31.36121  64.65614 37.96118  96.55228 40.72094
## 2012-01-31 109.51772  55.15317 34.80814  69.27631 39.96156  96.23375 43.40889
## 2012-02-29 114.27138  58.68853 36.64319  71.05601 41.89295  93.73454 43.10786
## 2012-03-30 117.94679  61.65409 35.50248  72.82154 42.06924  89.76397 45.04468
## 2012-04-30 117.15942  60.93304 34.89906  71.64318 41.19551  94.10336 46.20874
## 2012-05-31 110.12330  56.64326 31.16283  66.92969 36.60461 102.59651 44.26381
## 2012-06-29 114.59223  58.69458 32.73199  70.31105 39.18278 100.87478 46.63867
## 2012-07-31 115.94779  59.28005 32.72362  69.24172 39.21415 104.72545 47.72551
## 2012-08-31 118.85254  62.35383 32.85746  71.68969 40.46901 103.34425 47.87138
## 2012-09-28 121.86562  62.90778 34.57228  74.02746 41.56701 100.72674 47.33631
## 2012-10-31 119.64786  59.58671 34.42171  72.42162 42.02188 100.23920 47.05691
## 2012-11-30 120.32503  60.36654 34.95707  72.82088 43.19047 101.40115 46.78487
## 2012-12-31 121.40009  60.08465 37.33540  75.45616 45.08271  98.87865 48.13484
## 2013-01-31 127.61458  61.68986 37.22597  80.16322 46.76360  95.72900 50.07005
## 2013-02-28 129.24278  61.90203 36.37571  80.96860 46.16101  96.91480 50.70272
## 2013-03-28 134.15033  63.77443 36.00530  84.74097 46.76360  96.50831 52.15533
## 2013-04-30 136.72765  65.39259 36.44307  84.44482 49.11050 101.02962 55.14292
## 2013-05-31 139.95575  67.73199 34.68363  87.76519 47.62783  94.19905 51.56233
## 2013-06-28 138.08810  66.10967 32.83645  87.04727 46.35239  91.11755 50.33374
## 2013-07-31 145.22411  70.28383 33.27143  93.43144 48.81966  89.06016 50.45497
## 2013-08-30 140.86847  70.00557 32.42706  90.47511 47.86511  87.86636 47.15899
## 2013-09-30 145.32646  73.38837 34.76400  96.34615 51.61051  88.43906 48.78606
## 2013-10-31 152.05606  77.02615 36.21391  98.67774 53.29311  89.70411 50.60626
## 2013-11-29 156.56264  79.76144 36.12009 102.58185 53.58432  87.27917 48.25835
## 2013-12-31 160.62177  82.09618 35.97324 104.65514 54.75042  85.64733 48.69495
## 2014-01-31 154.96011  80.51881 32.86646 101.75211 51.90273  91.04549 50.37009
## 2014-02-28 162.01323  84.66748 33.97663 106.61472 55.08495  91.52263 52.76315
## 2014-03-31 163.35722  82.35306 35.29335 105.81676 54.83200  92.19276 52.83976
## 2014-04-30 164.49281  82.09002 35.56875 101.85113 55.74586  94.12435 54.44048
## 2014-05-30 168.31007  85.77229 36.61868 102.65152 56.63526  96.90060 55.96313
## 2014-06-30 171.78481  88.45167 37.49819 108.06331 57.15673  96.65710 56.52981
## 2014-07-31 169.47644  89.49713 38.00996 101.52084 55.66866  97.29903 56.46682
## 2014-08-29 176.16461  93.98048 39.08556 106.42384 55.76899 101.89523 58.42752
## 2014-09-30 173.73421  93.26938 36.04961 100.11516 53.60377  99.74285 54.98579
## 2014-10-31 177.82577  95.73353 36.56138 106.71626 53.46165 102.55418 59.57854
## 2014-11-28 182.71101 100.08591 35.99756 106.83527 53.49509 105.59738 61.19950
## 2014-12-31 182.24757  97.84336 34.57079 109.92595 51.35914 109.03073 61.69217
## 2015-01-30 176.84767  95.80594 34.33322 106.32361 51.67993 119.73299 65.21675
## 2015-02-27 186.78735 102.72369 35.84663 112.64603 54.95530 112.38326 63.52271
## 2015-03-31 183.85371 100.30045 35.30989 114.63987 54.17023 113.61075 64.20527
## 2015-04-30 185.66171 102.22857 37.72960 111.69945 56.14558 109.71939 61.11318
## 2015-05-29 188.04862 104.52713 36.18098 114.19742 56.25532 107.11627 60.91084
## 2015-06-30 184.22894 101.93059 35.12058 115.09154 54.50115 102.75455 58.23199
## 2015-07-31 188.39053 106.57633 32.90448 113.82100 55.60851 107.42577 61.11502
## 2015-08-31 176.90816  99.30306 29.99697 106.63773 51.47951 106.68507 57.56231
## 2015-09-30 172.39414  97.11115 29.05735 101.37380 49.20469 108.78342 58.49213
## 2015-10-30 187.05792 108.15259 30.91000 107.07374 52.45810 108.33869 62.12779
## 2015-11-30 187.74165 108.81106 30.12994 110.56425 52.06323 107.39867 62.00412
## 2015-12-31 184.49698 107.07577 28.97902 105.00243 50.84919 107.07954 62.68945
## 2016-01-29 175.31154  99.67638 27.52062  95.99581 48.04346 113.04713 60.11775
## 2016-02-29 175.16670  98.11609 27.29556  95.78139 46.44144 116.53578 59.66687
## 2016-03-31 186.94951 104.83960 30.83354 103.45677 49.49828 116.42698 65.78579
## 2016-04-29 187.68628 101.49856 30.95958 105.18681 50.59805 115.56948 64.68736
## 2016-05-31 190.87913 105.93406 29.81626 107.54342 50.55476 116.50028 66.11532
## 2016-06-30 191.54257 103.52088 31.17561 107.52471 49.33163 124.57860 70.24296
## 2016-07-29 198.52838 110.92350 32.85416 113.84166 51.29358 127.19791 72.80922
## 2016-08-31 198.76616 112.08826 33.14450 115.87269 51.56755 125.90877 70.37086
## 2016-09-30 198.77766 114.56939 33.97924 117.11700 52.25689 124.00956 69.33450
## 2016-10-31 195.33147 112.89986 33.69797 111.73305 51.09915 118.57716 65.89528
## 2016-11-30 202.52719 113.39202 32.20996 124.09442 50.18888 108.83756 64.35623
## 2016-12-30 206.63275 114.67590 32.12857 127.67384 51.54713 108.33408 67.08110
## 2017-01-31 210.33037 120.57036 34.26681 128.03363 53.24364 109.21617 67.16828
## 2017-02-28 218.59460 125.84537 34.86331 130.50472 53.87760 110.94682 70.10646
## 2017-03-31 218.86783 128.39615 36.14808 130.53870 55.61875 110.21997 69.08781
## 2017-04-28 221.04031 131.89746 36.76294 132.03891 56.96703 111.95396 69.47511
## 2017-05-31 224.15987 137.03798 37.80912 129.43727 58.98499 114.06754 69.39588
## 2017-06-30 225.58885 133.86151 38.15948 133.80499 59.15959 114.97079 70.83935
## 2017-07-31 230.22566 139.29803 40.38137 134.94565 60.72933 114.21393 71.62970
## 2017-08-31 230.89740 142.18651 41.33098 133.24824 60.70211 118.10714 72.10925
## 2017-09-29 235.54987 141.76668 41.31254 141.64836 62.13573 115.36359 71.54314
## 2017-10-31 241.10033 148.29704 42.66780 142.68076 63.17918 115.31914 71.57896
## 2017-11-30 248.46980 151.22107 42.50185 146.87727 63.61472 116.17615 73.41501
## 2017-12-29 251.48325 152.13315 44.10059 146.29198 64.47279 118.28195 73.32455
## 2018-01-31 265.65662 165.45552 47.76003 150.03418 67.70972 114.43123 71.10696
## 2018-02-28 255.99721 163.31653 44.94291 144.26733 64.43610 110.95090 66.37314
## 2018-03-29 248.98021 156.65511 45.18625 146.02379 63.89508 114.12367 68.87668
## 2018-04-30 250.26698 157.44753 43.91340 147.45686 64.86708 111.74062 69.03182
## 2018-05-31 256.35074 166.37938 42.76222 156.54541 63.63834 113.98038 71.35904
## 2018-06-29 257.82495 168.28451 40.81838 157.50720 62.63024 114.71645 74.25584
## 2018-07-31 267.37646 172.99040 42.25969 160.10460 64.41647 113.06809 74.87325
## 2018-08-31 275.91113 182.99043 40.66766 167.00606 62.97626 114.55160 76.65179
## 2018-09-28 277.55158 182.47505 40.43214 163.12317 63.58414 111.27050 74.46461
## 2018-10-31 258.37155 166.79002 36.89010 145.19946 58.41249 108.00967 72.68720
## 2018-11-30 263.16418 166.34805 38.69881 147.70607 58.70241 109.94004 76.10240
## 2018-12-31 239.99297 151.94110 37.34864 130.02248 55.56197 116.37540 70.14947
## 2019-01-31 259.20813 165.63217 41.21164 144.74347 59.24846 116.81596 78.19970
## 2019-02-28 267.61054 170.58655 40.58055 152.23991 60.75140 115.20811 78.77073
## 2019-03-29 272.45450 177.28134 41.03952 149.05306 61.30911 121.62708 82.05619
## 2019-04-30 283.58490 187.03053 42.00527 154.11592 63.10509 119.20539 82.01846
## 2019-05-31 265.50040 171.64694 38.92635 142.01370 59.92904 127.35811 81.89590
## 2019-06-28 283.97559 184.67500 41.34280 151.93321 63.47183 128.56821 82.94341
## 2019-07-31 288.26916 188.98682 40.24443 152.96890 62.23580 128.89796 84.91939
## 2019-08-30 283.44254 185.39694 38.72214 145.42596 61.03841 143.14008 87.83586
## 2019-09-30 288.95776 187.09866 39.37730 148.38838 62.96969 139.30406 89.49599
## 2019-10-31 295.34506 195.29370 41.02485 152.41824 65.10377 137.75330 90.18485
## 2019-11-29 306.03601 203.24101 40.98631 158.61497 65.83765 137.19251 89.17068
## 2019-12-31 314.92804 211.13971 44.15466 163.03482 67.80976 132.80576 89.93537
## 2020-01-31 314.80087 217.55505 41.43867 157.97658 65.89578 143.02006 91.37504
## 2020-02-28 289.87939 204.37682 39.87402 144.00246 60.77880 152.49727 84.44727
## 2020-03-31 253.68181 189.48625 33.58589 113.07493 52.20492 162.22151 67.86822
## 2020-04-30 285.89523 217.85944 36.05587 128.73314 55.24191 164.19893 74.18971
## 2020-05-29 299.51679 232.24010 37.12849 137.21916 58.23983 161.30589 75.52621
## 2020-06-30 304.82852 246.84026 39.58080 141.92570 60.28474 161.84889 77.39291
## 2020-07-31 322.78055 264.97446 42.84703 146.06909 61.45340 169.02712 80.58448
## 2020-08-31 345.30957 293.97516 44.08424 154.06839 64.35523 160.49710 80.77106
## 2020-09-30 332.37994 276.98749 43.63884 149.04373 63.03802 161.73842 78.87990
## 2020-10-30 324.09250 268.55344 44.25250 152.32730 60.79974 156.26321 76.57793
## 2020-11-30 359.34628 298.70062 48.23136 180.11816 69.47553 158.86328 83.14796
## 2020-12-31 372.65945 313.34424 51.67000 195.69199 72.96000 156.91299 85.22947
## 2021-01-29 368.86191 314.16321 53.31000 205.17416 72.39000 151.21268 84.86128
## 2021-02-26 379.11829 313.74374 53.73000 217.90022 74.01000 142.54373 86.92112
## 2021-03-31 396.32999 319.13000 53.34000 220.94000 75.87000 135.06692 91.94000
## 2021-04-30 417.29999 337.98999 53.98000 224.89000 78.11000 138.43700 99.19000
## 2021-05-06 419.07001 331.51001 54.13000 222.59000 79.51000 139.92000 97.23000
##               GLD
## 2010-01-29 105.96
## 2010-02-26 109.43
## 2010-03-31 108.95
## 2010-04-30 115.36
## 2010-05-28 118.88
## 2010-06-30 121.68
## 2010-07-30 115.49
## 2010-08-31 122.08
## 2010-09-30 127.91
## 2010-10-29 132.62
## 2010-11-30 135.42
## 2010-12-31 138.72
## 2011-01-31 129.87
## 2011-02-28 137.66
## 2011-03-31 139.86
## 2011-04-29 152.37
## 2011-05-31 149.64
## 2011-06-30 146.00
## 2011-07-29 158.29
## 2011-08-31 177.72
## 2011-09-30 158.06
## 2011-10-31 167.34
## 2011-11-30 170.13
## 2011-12-30 151.99
## 2012-01-31 169.31
## 2012-02-29 164.29
## 2012-03-30 162.12
## 2012-04-30 161.88
## 2012-05-31 151.62
## 2012-06-29 155.19
## 2012-07-31 156.49
## 2012-08-31 164.22
## 2012-09-28 171.89
## 2012-10-31 166.83
## 2012-11-30 166.05
## 2012-12-31 162.02
## 2013-01-31 161.20
## 2013-02-28 153.00
## 2013-03-28 154.45
## 2013-04-30 142.77
## 2013-05-31 133.92
## 2013-06-28 119.11
## 2013-07-31 127.96
## 2013-08-30 134.62
## 2013-09-30 128.18
## 2013-10-31 127.74
## 2013-11-29 120.70
## 2013-12-31 116.12
## 2014-01-31 120.09
## 2014-02-28 127.62
## 2014-03-31 123.61
## 2014-04-30 124.22
## 2014-05-30 120.43
## 2014-06-30 128.04
## 2014-07-31 123.39
## 2014-08-29 123.86
## 2014-09-30 116.21
## 2014-10-31 112.66
## 2014-11-28 112.11
## 2014-12-31 113.58
## 2015-01-30 123.45
## 2015-02-27 116.16
## 2015-03-31 113.66
## 2015-04-30 113.47
## 2015-05-29 114.10
## 2015-06-30 112.37
## 2015-07-31 104.93
## 2015-08-31 108.82
## 2015-09-30 106.86
## 2015-10-30 109.30
## 2015-11-30 101.92
## 2015-12-31 101.46
## 2016-01-29 106.95
## 2016-02-29 118.64
## 2016-03-31 117.64
## 2016-04-29 123.65
## 2016-05-31 116.06
## 2016-06-30 126.47
## 2016-07-29 128.98
## 2016-08-31 124.78
## 2016-09-30 125.64
## 2016-10-31 121.94
## 2016-11-30 111.75
## 2016-12-30 109.61
## 2017-01-31 115.55
## 2017-02-28 119.23
## 2017-03-31 118.72
## 2017-04-28 120.77
## 2017-05-31 120.62
## 2017-06-30 118.02
## 2017-07-31 120.75
## 2017-08-31 125.82
## 2017-09-29 121.58
## 2017-10-31 120.67
## 2017-11-30 121.10
## 2017-12-29 123.65
## 2018-01-31 127.65
## 2018-02-28 125.00
## 2018-03-29 125.79
## 2018-04-30 124.59
## 2018-05-31 123.10
## 2018-06-29 118.65
## 2018-07-31 115.99
## 2018-08-31 113.51
## 2018-09-28 112.76
## 2018-10-31 115.15
## 2018-11-30 115.54
## 2018-12-31 121.25
## 2019-01-31 124.75
## 2019-02-28 123.99
## 2019-03-29 122.01
## 2019-04-30 121.20
## 2019-05-31 123.33
## 2019-06-28 133.20
## 2019-07-31 133.21
## 2019-08-30 143.75
## 2019-09-30 138.87
## 2019-10-31 142.43
## 2019-11-29 137.86
## 2019-12-31 142.90
## 2020-01-31 149.33
## 2020-02-28 148.38
## 2020-03-31 148.05
## 2020-04-30 158.80
## 2020-05-29 162.91
## 2020-06-30 167.37
## 2020-07-31 185.43
## 2020-08-31 184.83
## 2020-09-30 177.12
## 2020-10-30 176.20
## 2020-11-30 166.67
## 2020-12-31 178.36
## 2021-01-29 172.61
## 2021-02-26 161.81
## 2021-03-31 159.96
## 2021-04-30 165.66
## 2021-05-06 170.06

Convert into Price

ETFList.price <- cumprod(ETFList.monthly+1)*100
head(ETFList.price)
##                     SPY          QQQ          EEM          IWM          EFA
## 2010-01-29 8.703146e+03 3.927178e+03 3.157135e+03 5.231363e+03 3.895908e+03
## 2010-02-26 7.808042e+05 1.611469e+05 1.013896e+05 2.856846e+05 1.521756e+05
## 2010-03-31 7.426708e+07 7.109920e+06 3.511940e+06 1.686180e+07 6.313864e+06
## 2010-04-30 7.172129e+09 3.205702e+08 1.214505e+08 1.050781e+09 2.547964e+08
## 2010-05-28 6.381652e+11 1.340900e+10 3.816900e+09 6.062579e+10 9.159965e+09
## 2010-06-30 5.387799e+13 5.281648e+11 1.183316e+11 3.231704e+12 3.227008e+11
##                     TLT          IYR          GLD
## 2010-01-29 6.887571e+03 2.983534e+03 1.069600e+04
## 2010-02-26 4.727852e+05 9.370951e+04 1.181159e+06
## 2010-03-31 3.179557e+07 3.221105e+06 1.298685e+08
## 2010-04-30 2.208278e+09 1.175872e+08 1.511149e+10
## 2010-05-28 1.610921e+11 4.055261e+09 1.811566e+12
## 2010-06-30 1.242354e+13 1.335129e+11 2.222429e+14
tail(ETFList.price)
##                      SPY           QQQ           EEM           IWM
## 2020-12-31 7.075743e+298 2.356239e+266 3.970332e+209 3.627567e+268
## 2021-01-29 2.617048e+301 7.425997e+268 2.156287e+211 7.479106e+270
## 2021-02-26 9.947877e+303 2.337286e+271 1.180136e+213 1.637178e+273
## 2021-03-31 3.952590e+306 7.482355e+273 6.412859e+214 3.633553e+275
## 2021-04-30           Inf 2.536443e+276 3.525790e+216 8.207832e+277
## 2021-05-06           Inf 8.433928e+278 1.943768e+218 1.835189e+280
##                      EFA           TLT           IYR           GLD
## 2020-12-31 1.632728e+229 3.227460e+269 7.645597e+235 1.252442e+282
## 2021-01-29 1.198259e+231 4.912603e+271 6.564608e+237 2.174364e+284
## 2021-02-26 8.988142e+232 7.051734e+273 5.771677e+239 3.540082e+286
## 2021-03-31 6.909185e+234 9.595078e+275 5.364196e+241 5.698116e+288
## 2021-04-30 5.465857e+236 1.337909e+278 5.374388e+243 9.496480e+290
## 2021-05-06 4.400561e+238 1.885381e+280 5.279262e+245 1.624468e+293
ETFList.price.sample <- ETFList.price['201001/202105']
ETFList.price.sample
##                      SPY           QQQ           EEM           IWM
## 2010-01-29  8.703146e+03  3.927178e+03  3.157135e+03  5.231363e+03
## 2010-02-26  7.808042e+05  1.611469e+05  1.013896e+05  2.856846e+05
## 2010-03-31  7.426708e+07  7.109920e+06  3.511940e+06  1.686180e+07
## 2010-04-30  7.172129e+09  3.205702e+08  1.214505e+08  1.050781e+09
## 2010-05-28  6.381652e+11  1.340900e+10  3.816900e+09  6.062579e+10
## 2010-06-30  5.387799e+13  5.281648e+11  1.183316e+11  3.231704e+12
## 2010-07-30  4.855726e+15  2.227544e+13  4.056645e+12  1.836462e+14
## 2010-08-31  4.181538e+17  8.924191e+14  1.346999e+14  9.672791e+15
## 2010-09-30  3.919693e+19  4.034504e+16  4.982708e+15  5.716752e+17
## 2010-10-29  3.813112e+21  1.936987e+18  1.897239e+17  3.516461e+19
## 2010-11-30  3.709428e+23  9.283870e+19  7.019637e+18  2.237186e+21
## 2010-12-31  3.847326e+25  4.656967e+21  2.781121e+20  1.535848e+23
## 2011-01-31  4.082428e+27  2.400765e+23  1.060600e+22  1.050522e+25
## 2011-02-28  4.480959e+29  1.276005e+25  4.042951e+23  7.577992e+26
## 2011-03-31  4.918980e+31  6.752124e+26  1.635541e+25  5.602431e+28
## 2011-04-29  5.554779e+33  3.673677e+28  6.792777e+26  4.249657e+30
## 2011-05-31  6.203035e+35  1.974852e+30  2.740250e+28  3.166455e+32
## 2011-06-30  6.811135e+37  1.040515e+32  1.095350e+30  2.303380e+34
## 2011-07-29  7.330601e+39  5.571853e+33  4.334457e+31  1.619264e+36
## 2011-08-31  7.459973e+41  2.835254e+35  1.560477e+33  1.038561e+38
## 2011-09-30  7.069793e+43  1.379210e+37  4.640580e+34  5.929947e+39
## 2011-10-31  7.423591e+45  7.392711e+38  1.596976e+36  3.888214e+41
## 2011-11-30  7.763718e+47  3.857890e+40  5.391118e+37  2.539969e+43
## 2011-12-30  8.203452e+49  2.001113e+42  1.744631e+39  1.667646e+45
## 2012-01-31  9.066269e+51  1.123689e+44  6.247199e+40  1.171960e+47
## 2012-02-29  1.045081e+54  6.707132e+45  2.351645e+42  8.444673e+48
## 2012-03-30  1.243091e+56  4.202292e+47  8.584086e+43  6.233988e+50
## 2012-04-30  1.468829e+58  2.602607e+49  3.081607e+45  4.528567e+52
## 2012-05-31  1.632211e+60  1.500228e+51  9.911319e+46  3.076242e+54
## 2012-06-29  1.886709e+62  8.955546e+52  3.343286e+48  2.193700e+56
## 2012-07-31  2.206464e+64  5.398408e+54  1.127477e+50  1.540893e+58
## 2012-08-31  2.644504e+66  3.420098e+56  3.817351e+51  1.120070e+60
## 2012-09-28  3.249186e+68  2.185709e+58  1.357919e+53  8.403602e+61
## 2012-10-31  3.920073e+70  1.324249e+60  4.809981e+54  6.170061e+63
## 2012-11-30  4.756030e+72  8.126458e+61  1.729528e+56  4.554793e+65
## 2012-12-31  5.821385e+74  4.964019e+63  6.630217e+57  3.482420e+67
## 2013-01-31  7.487150e+76  3.111936e+65  2.534464e+59  2.826444e+69
## 2013-02-28  9.751473e+78  1.957471e+67  9.472740e+60  2.316796e+71
## 2013-03-28  1.317915e+81  1.267941e+69  3.505416e+62  1.986444e+73
## 2013-04-30  1.815133e+83  8.418187e+70  1.312535e+64  1.697313e+75
## 2013-05-31  2.558534e+85  5.785988e+72  4.683602e+65  1.506623e+77
## 2013-06-28  3.558617e+87  3.882958e+74  1.584765e+67  1.326541e+79
## 2013-07-31  5.203556e+89  2.767921e+76  5.431215e+68  1.252672e+81
## 2013-08-30  7.382205e+91  1.965378e+78  1.815496e+70  1.145883e+83
## 2013-09-30  1.080212e+94  1.462013e+80  6.492938e+71  1.115473e+85
## 2013-10-31  1.653330e+96  1.140752e+82  2.416276e+73  1.111878e+87
## 2013-11-29  2.605030e+98  9.212880e+83  8.969239e+74  1.151704e+89
## 2013-12-31 4.210296e+100  7.655551e+85  3.316218e+76  1.216834e+91
## 2014-01-31 6.566382e+102  6.240714e+87  1.123086e+78  1.250323e+93
## 2014-02-28 1.070407e+105  5.346262e+89  3.928174e+79  1.345531e+95
## 2014-03-31 1.759291e+107  4.456273e+91  1.425666e+81  1.437253e+97
## 2014-04-30 2.911501e+109  3.702718e+93  5.213484e+82  1.478231e+99
## 2014-05-30 4.929464e+111  3.212934e+95  1.961244e+84 1.532209e+101
## 2014-06-30 8.517365e+113  2.874023e+97  7.550434e+85 1.671078e+103
## 2014-07-31 1.452010e+116  2.600908e+99  2.945421e+87 1.713203e+105
## 2014-08-29 2.572448e+118 2.470355e+101  1.180688e+89 1.840388e+107
## 2014-09-30 4.494947e+120 2.328788e+103  4.374405e+90 1.860912e+109
## 2014-10-31 8.038123e+122 2.252719e+105  1.643087e+92 2.004504e+111
## 2014-11-28 1.476692e+125 2.277182e+107  6.079021e+93 2.161562e+113
## 2014-12-31 2.706002e+127 2.250843e+109  2.162356e+95 2.397734e+115
## 2015-01-30 4.812561e+129 2.178950e+111  7.640299e+96 2.573334e+117
## 2015-02-27 9.037381e+131 2.260087e+113  2.815193e+98 2.924492e+119
## 2015-03-31 1.670594e+134 2.289478e+115 1.022193e+100 3.381879e+121
## 2015-04-30 3.118359e+136 2.363396e+117 3.958914e+101 3.811359e+123
## 2015-05-29 5.895214e+138 2.494024e+119 1.471963e+103 4.390587e+125
## 2015-06-30 1.091964e+141 2.567113e+121 5.316815e+104 5.097100e+127
## 2015-07-31 2.068077e+143 2.761606e+123 1.802638e+106 5.852541e+129
## 2015-08-31 3.679277e+145 2.769976e+125 5.587632e+107 6.299543e+131
## 2015-09-30 6.379651e+147 2.717655e+127 1.679494e+109 6.449081e+133
## 2015-10-30 1.199744e+150 2.966391e+129 5.359266e+110 6.969763e+135
## 2015-11-30 2.264416e+152 3.257425e+131 1.668336e+112 7.775764e+137
## 2015-12-31 4.200424e+154 3.520487e+133 5.001509e+113 8.242498e+139
## 2016-01-29 7.405833e+156 3.544299e+135 1.426462e+115 7.994878e+141
## 2016-02-29 1.304661e+159 3.512971e+137 4.036253e+116 7.737554e+143
## 2016-03-31 2.452104e+161 3.718114e+139 1.284882e+118 8.082399e+145
## 2016-04-29 4.626784e+163 3.811014e+141 4.106429e+119 8.582442e+147
## 2016-05-31 8.877833e+165 4.075272e+143 1.265448e+121 9.315676e+149
## 2016-06-30 1.709361e+168 4.259510e+145 4.071656e+122 1.010981e+152
## 2016-07-29 3.410660e+170 4.767392e+147 1.378425e+124 1.161027e+154
## 2016-08-31 6.813344e+172 5.391361e+149 4.706562e+125 1.356924e+156
## 2016-09-30 1.361154e+175 6.230763e+151 1.646320e+127 1.602758e+158
## 2016-10-31 2.672374e+177 7.096831e+153 5.712395e+128 1.806838e+160
## 2016-11-30 5.439007e+179 8.118208e+155 1.897084e+130 2.260253e+162
## 2016-12-30 1.129316e+182 9.390810e+157 6.284768e+131 2.908354e+164
## 2017-01-31 2.386588e+184 1.141644e+160 2.216437e+133 3.752755e+166
## 2017-02-28 5.240818e+186 1.448123e+162 7.948878e+134 4.935050e+168
## 2017-03-31 1.152287e+189 1.873815e+164 2.952856e+136 6.491501e+170
## 2017-04-28 2.558542e+191 2.490253e+166 1.115085e+138 8.636222e+172
## 2017-05-31 5.760810e+193 3.437494e+168 4.327547e+139 1.126485e+175
## 2017-06-30 1.305335e+196 4.635857e+170 1.694645e+141 1.518558e+177
## 2017-07-31 3.018270e+198 6.504016e+172 7.012673e+142 2.064414e+179
## 2017-08-31 6.999290e+200 9.312874e+174 2.968533e+144 2.771439e+181
## 2017-09-29 1.655681e+203 1.329568e+177 1.256062e+146 3.953413e+183
## 2017-10-31 4.008410e+205 1.985006e+179 5.484946e+147 5.680293e+185
## 2017-11-30 9.999771e+207 3.021597e+181 2.386053e+149 8.399863e+187
## 2017-12-29 2.524775e+210 4.627067e+183 1.076124e+151 1.237232e+190
## 2018-01-31 6.732479e+212 7.702008e+185 5.247184e+152 1.868644e+192
## 2018-02-28 1.730228e+215 1.265567e+188 2.410709e+154 2.714529e+194
## 2018-03-29 4.325228e+217 1.995231e+190 1.113416e+156 3.991004e+196
## 2018-04-30 1.086787e+220 3.161395e+192 5.000731e+157 5.924919e+198
## 2018-05-31 2.796855e+222 5.291523e+194 2.188431e+159 9.334438e+200
## 2018-06-29 7.238957e+224 8.957728e+196 9.151663e+160 1.479576e+203
## 2018-07-31 1.942766e+227 1.558559e+199 3.958981e+162 2.383664e+205
## 2018-08-31 5.379735e+229 2.867599e+201 1.649615e+164 4.004700e+207
## 2018-09-28 1.498534e+232 5.261329e+203 6.834707e+165 6.572641e+209
## 2018-10-31 3.886770e+234 8.827985e+205 2.589677e+167 9.609166e+211
## 2018-11-30 1.026745e+237 1.477346e+208 1.028071e+169 1.428941e+214
## 2018-12-31 2.474384e+239 2.259469e+210 3.942512e+170 1.872234e+216
## 2019-01-31 6.438549e+241 3.765003e+212 1.664199e+172 2.728659e+218
## 2019-02-28 1.729462e+244 6.460238e+214 6.919831e+173 4.181395e+220
## 2019-03-29 4.729292e+246 1.151740e+217 2.909064e+175 6.274311e+222
## 2019-04-30 1.345885e+249 2.165623e+219 1.251051e+177 9.732455e+224
## 2019-05-31 3.586789e+251 3.738882e+221 4.994989e+178 1.391874e+227
## 2019-06-28 1.022147e+254 6.942168e+223 2.115018e+180 2.128638e+229
## 2019-07-31 2.956757e+256 1.318920e+226 8.723273e+181 3.277441e+231
## 2019-08-30 8.410274e+258 2.458427e+228 3.465071e+183 4.799025e+233
## 2019-09-30 2.438624e+261 4.624269e+230 1.399102e+185 7.169185e+235
## 2019-10-31 7.226743e+263 9.077149e+232 5.879706e+186 1.099884e+238
## 2019-11-29 2.218870e+266 1.853926e+235 2.468672e+188 1.755579e+240
## 2019-12-31 7.010033e+268 3.932913e+237 1.114720e+190 2.879761e+242
## 2020-01-31 2.213775e+271 8.595581e+239 4.730725e+191 4.578146e+244
## 2020-02-28 6.439414e+273 1.765333e+242 1.933637e+193 6.638424e+246
## 2020-03-31 1.640002e+276 3.362717e+244 6.687656e+194 7.572778e+248
## 2020-04-30 4.705087e+278 7.359623e+246 2.478169e+196 9.824402e+250
## 2020-05-29 1.413957e+281 1.716559e+249 9.448886e+197 1.357921e+253
## 2020-06-30 4.324285e+283 4.254325e+251 3.834433e+199 1.940818e+255
## 2020-07-31 1.400119e+286 1.131542e+254 1.681285e+201 2.854343e+257
## 2020-08-31 4.848748e+288 3.337767e+256 7.579947e+202 4.426184e+259
## 2020-09-30 1.616475e+291 9.278575e+258 3.383601e+204 6.641211e+261
## 2020-10-30 5.255040e+293 2.501072e+261 1.531164e+206 1.018279e+264
## 2020-11-30 1.893634e+296 7.495727e+263 7.538128e+207 1.844288e+266
## 2020-12-31 7.075743e+298 2.356239e+266 3.970332e+209 3.627567e+268
## 2021-01-29 2.617048e+301 7.425997e+268 2.156287e+211 7.479106e+270
## 2021-02-26 9.947877e+303 2.337286e+271 1.180136e+213 1.637178e+273
## 2021-03-31 3.952590e+306 7.482355e+273 6.412859e+214 3.633553e+275
## 2021-04-30           Inf 2.536443e+276 3.525790e+216 8.207832e+277
## 2021-05-06           Inf 8.433928e+278 1.943768e+218 1.835189e+280
##                      EFA           TLT           IYR           GLD
## 2010-01-29  3.895908e+03  6.887571e+03  2.983534e+03  1.069600e+04
## 2010-02-26  1.521756e+05  4.727852e+05  9.370951e+04  1.181159e+06
## 2010-03-31  6.313864e+06  3.179557e+07  3.221105e+06  1.298685e+08
## 2010-04-30  2.547964e+08  2.208278e+09  1.175872e+08  1.511149e+10
## 2010-05-28  9.159965e+09  1.610921e+11  4.055261e+09  1.811566e+12
## 2010-06-30  3.227008e+11  1.242354e+13  1.335129e+11  2.222429e+14
## 2010-07-30  1.265106e+13  9.491616e+14  4.796545e+12  2.588907e+16
## 2010-08-31  4.776259e+14  7.852133e+16  1.701462e+14  3.186427e+18
## 2010-09-30  1.978274e+16  6.334099e+18  6.307086e+15  4.107624e+20
## 2010-10-29  8.498086e+17  4.884013e+20  2.427430e+17  5.488607e+22
## 2010-11-30  3.478536e+19  3.703111e+22  9.198491e+18  7.487557e+24
## 2010-12-31  1.539281e+21  2.705246e+24  3.640901e+20  1.046161e+27
## 2011-01-31  6.950959e+22  1.916214e+26  1.491327e+22  1.369111e+29
## 2011-02-28  3.247811e+24  1.379399e+28  6.377920e+23  1.898410e+31
## 2011-03-31  1.482061e+26  9.932568e+29  2.698500e+25  2.674100e+33
## 2011-04-29  7.135173e+27  7.317058e+31  1.193721e+27  4.101268e+35
## 2011-05-31  3.360919e+29  5.572277e+33  5.332898e+28  6.178149e+37
## 2011-06-30  1.564351e+31  4.146258e+35  2.310108e+30  9.081880e+39
## 2011-07-29  7.111908e+32  3.219543e+37  1.002802e+32  1.446653e+42
## 2011-08-31  2.956401e+34  2.738529e+39  4.127186e+33  2.585457e+44
## 2011-09-30  1.099333e+36  2.633383e+41  1.521799e+35  4.112429e+46
## 2011-10-31  4.470824e+37  2.436316e+43  6.331294e+36  6.922862e+48
## 2011-11-30  1.779619e+39  2.298346e+45  2.539757e+38  1.184709e+51
## 2011-12-30  6.933607e+40  2.242089e+47  1.059611e+40  1.812487e+53
## 2012-01-31  2.840114e+42  2.180067e+49  4.705614e+41  3.086847e+55
## 2012-02-29  1.218209e+44  2.065277e+51  2.075545e+43  5.102248e+57
## 2012-03-30  5.246732e+45  1.874527e+53  9.556782e+44  8.322787e+59
## 2012-04-30  2.213885e+47  1.782738e+55  4.511637e+46  1.355616e+62
## 2012-05-31  8.325229e+48  1.846855e+57  2.042139e+48  2.068941e+64
## 2012-06-29  3.345308e+50  1.881479e+59  9.728477e+49  3.231478e+66
## 2012-07-31  1.345287e+52  1.989202e+61  4.740250e+51  5.089255e+68
## 2012-08-31  5.578774e+53  2.075618e+63  2.316625e+53  8.408468e+70
## 2012-09-28  2.374717e+55  2.111459e+65  1.119771e+55  1.453740e+73
## 2012-10-31  1.021648e+57  2.137624e+67  5.381275e+56  2.439812e+75
## 2012-11-30  4.514710e+58  2.188951e+69  2.571436e+58  4.075706e+77
## 2012-12-31  2.080501e+60  2.186295e+71  1.263471e+60  6.644216e+79
## 2013-01-31  9.937221e+61  2.114781e+73  6.452552e+61  1.077692e+82
## 2013-02-28  4.686494e+63  2.070684e+75  3.336145e+63  1.659645e+84
## 2013-03-28  2.238438e+65  2.019089e+77  1.773339e+65  2.579919e+86
## 2013-04-30  1.121693e+67  2.060069e+79  9.956045e+66  3.709149e+88
## 2013-05-31  5.454548e+68  1.961166e+81  5.233128e+68  5.004384e+90
## 2013-06-28  2.582859e+70  1.806578e+83  2.686361e+70  6.010765e+92
## 2013-07-31  1.286772e+72  1.627007e+85  1.382266e+72  7.751483e+94
## 2013-08-30  6.287823e+73  1.445862e+87  6.656855e+73  1.051256e+97
## 2013-09-30  3.308056e+75  1.293165e+89  3.314186e+75  1.358013e+99
## 2013-10-31  1.796046e+77  1.172954e+91  1.710327e+77 1.748305e+101
## 2013-11-29  9.803598e+78  1.035474e+93  8.424790e+78 2.127688e+103
## 2013-12-31  5.465547e+80  8.972107e+94  4.186695e+80 2.491948e+105
## 2014-01-31  2.891424e+82  8.258420e+96  2.150709e+82 3.017499e+107
## 2014-02-28  1.621654e+84  7.640907e+98  1.156289e+84 3.881108e+109
## 2014-03-31  9.054016e+85 7.120772e+100  6.225431e+85 4.836248e+111
## 2014-04-30  5.137779e+87 6.773589e+102  3.451409e+87 6.055950e+113
## 2014-05-30  2.961172e+89 6.631384e+104  1.966031e+89 7.353740e+115
## 2014-06-30  1.722121e+91 6.476017e+106  1.131054e+91 9.489266e+117
## 2014-07-31  9.759029e+92 6.365861e+108  6.499806e+92 1.180370e+120
## 2014-08-29  5.540102e+94 6.550168e+110  3.862674e+94 1.473810e+122
## 2014-09-30  3.025105e+96 6.598826e+112  2.162549e+96 1.727452e+124
## 2014-10-31  1.647522e+98 6.833360e+114  1.310040e+98 1.963422e+126
## 2014-11-28  8.978185e+99 7.284183e+116  8.148386e+99 2.220827e+128
## 2014-12-31 4.700901e+101 8.014840e+118 5.108399e+101 2.544624e+130
## 2015-01-30 2.476431e+103 9.676556e+120 3.382616e+103 3.166784e+132
## 2015-02-27 1.385695e+105 1.097160e+123 2.182555e+105 3.710205e+134
## 2015-03-31 7.644908e+106 1.257463e+125 1.423141e+107 4.254121e+136
## 2015-04-30 4.368727e+108 1.392255e+127 8.839582e+108 4.869692e+138
## 2015-05-29 2.501329e+110 1.505254e+129 5.472660e+110 5.605015e+140
## 2015-06-30 1.388266e+112 1.561770e+131 3.241565e+112 6.354406e+142
## 2015-07-31 7.858768e+113 1.693361e+133 2.013499e+114 6.731222e+144
## 2015-08-31 4.124243e+115 1.823497e+135 1.179151e+116 7.392229e+146
## 2015-09-30 2.070564e+117 2.001897e+137 7.015022e+117 7.973258e+148
## 2015-10-30 1.106884e+119 2.188848e+139 4.428429e+119 8.794504e+150
## 2015-11-30 5.873484e+120 2.372682e+141 2.790093e+121 9.051303e+152
## 2015-12-31 3.045354e+122 2.564384e+143 1.776995e+123 9.273965e+154
## 2016-01-29 1.493547e+124 2.924607e+145 1.086059e+125 1.001124e+157
## 2016-02-29 7.085602e+125 3.437459e+147 6.588781e+126 1.197745e+159
## 2016-03-31 3.578107e+127 4.036505e+149 4.400369e+128 1.421005e+161
## 2016-04-29 1.846234e+129 4.705332e+151 2.890487e+130 1.771283e+163
## 2016-05-31 9.518213e+130 5.528779e+153 1.939959e+132 2.073464e+165
## 2016-06-30 4.790671e+132 6.942963e+155 1.382084e+134 2.643044e+167
## 2016-07-29 2.505214e+134 8.900734e+157 1.020106e+136 3.435429e+169
## 2016-08-31 1.316929e+136 1.129581e+160 7.280581e+137 4.321082e+171
## 2016-09-30 7.013556e+137 1.412084e+162 5.120760e+139 5.472218e+173
## 2016-10-31 3.654003e+139 1.688531e+164 3.425547e+141 6.727545e+175
## 2016-11-30 1.870443e+141 1.854641e+166 2.238808e+143 7.585307e+177
## 2016-12-30 9.828642e+142 2.027754e+168 1.524205e+145 8.390108e+179
## 2017-01-31 5.331413e+144 2.234913e+170 1.039025e+147 9.778672e+181
## 2017-02-28 2.925751e+146 2.501914e+172 7.388136e+148 1.175690e+184
## 2017-03-31 1.656524e+148 2.782628e+174 5.178183e+150 1.407536e+186
## 2017-04-28 9.602377e+149 3.143089e+176 3.649330e+152 1.713956e+188
## 2017-05-31 5.759984e+151 3.616675e+178 2.568978e+154 2.084514e+190
## 2017-06-30 3.465183e+153 4.194287e+180 1.845537e+156 2.480988e+192
## 2017-07-31 2.139034e+155 4.832402e+182 1.340408e+158 3.020603e+194
## 2017-08-31 1.319829e+157 5.755736e+184 9.799622e+159 3.830729e+196
## 2017-09-29 8.332838e+158 6.697582e+186 7.108953e+161 4.695707e+198
## 2017-10-31 5.347947e+160 7.790569e+188 5.159604e+163 5.713267e+200
## 2017-11-30 3.455561e+162 9.128689e+190 3.839520e+165 6.975899e+202
## 2017-12-29 2.262452e+164 1.088888e+193 2.853706e+167 8.695458e+204
## 2018-01-31 1.554524e+166 1.256917e+195 2.057720e+169 1.118671e+207
## 2018-02-28 1.017220e+168 1.407129e+197 1.386351e+171 1.409525e+209
## 2018-03-29 6.601259e+169 1.619939e+199 9.687359e+172 1.787137e+211
## 2018-04-30 4.348057e+171 1.826329e+201 6.784234e+174 2.244465e+213
## 2018-05-31 2.810512e+173 2.099920e+203 4.909006e+176 2.785381e+215
## 2018-06-29 1.788335e+175 2.429953e+205 3.694314e+178 3.332709e+217
## 2018-07-31 1.169866e+177 2.771801e+207 2.802996e+180 3.898936e+219
## 2018-08-31 7.484364e+178 3.202861e+209 2.176577e+182 4.464671e+221
## 2018-09-28 4.833713e+180 3.595868e+211 1.642545e+184 5.079010e+223
## 2018-10-31 2.871829e+182 3.919844e+213 1.210346e+186 5.899270e+225
## 2018-11-30 1.714551e+184 4.348676e+215 9.332055e+187 6.875010e+227
## 2018-12-31 9.697838e+185 5.104276e+217 6.639708e+189 8.404700e+229
## 2019-01-31 5.842798e+187 6.013652e+219 5.258629e+191 1.056891e+232
## 2019-02-28 3.608010e+189 6.988351e+221 4.194846e+193 1.321008e+234
## 2019-03-29 2.248119e+191 8.569611e+223 3.484080e+195 1.624972e+236
## 2019-04-30 1.441159e+193 1.030113e+226 2.892429e+197 1.985716e+238
## 2019-05-31 8.780840e+194 1.322234e+228 2.397705e+199 2.468840e+240
## 2019-06-28 5.661168e+196 1.713195e+230 2.012716e+201 3.313184e+242
## 2019-07-31 3.579885e+198 2.225405e+232 1.729313e+203 4.446624e+244
## 2019-08-30 2.220904e+200 3.207701e+234 1.536250e+205 6.436488e+246
## 2019-09-30 1.420705e+202 4.500535e+236 1.390245e+207 9.002716e+248
## 2019-10-31 9.391396e+203 6.244641e+238 1.267693e+209 1.291259e+251
## 2019-11-29 6.276989e+205 8.629625e+240 1.143087e+211 1.793043e+253
## 2019-12-31 4.319181e+207 1.154694e+243 1.039470e+213 2.580189e+255
## 2020-01-31 2.889350e+209 1.662990e+245 9.602112e+214 3.878798e+257
## 2020-02-28 1.785006e+211 2.552645e+247 8.204743e+216 5.794148e+259
## 2020-03-31 9.497109e+212 4.166466e+249 5.650460e+218 8.636178e+261
## 2020-04-30 5.341355e+214 6.882956e+251 4.248565e+220 1.380061e+264
## 2020-05-29 3.164210e+216 1.117144e+254 3.251266e+222 2.262058e+266
## 2020-06-30 1.939178e+218 1.819257e+256 2.548762e+224 3.808628e+268
## 2020-07-31 1.211083e+220 3.093231e+258 2.079394e+226 7.100424e+270
## 2020-08-31 7.915058e+221 4.995478e+260 1.700343e+228 1.319472e+273
## 2020-09-30 5.068646e+223 8.129562e+262 1.358232e+230 2.350243e+275
## 2020-10-30 3.132410e+225 1.278481e+265 1.053688e+232 4.164631e+277
## 2020-11-30 2.207583e+227 2.043822e+267 8.866571e+233 6.982837e+279
## 2020-12-31 1.632728e+229 3.227460e+269 7.645597e+235 1.252442e+282
## 2021-01-29 1.198259e+231 4.912603e+271 6.564608e+237 2.174364e+284
## 2021-02-26 8.988142e+232 7.051734e+273 5.771677e+239 3.540082e+286
## 2021-03-31 6.909185e+234 9.595078e+275 5.364196e+241 5.698116e+288
## 2021-04-30 5.465857e+236 1.337909e+278 5.374388e+243 9.496480e+290
## 2021-05-06 4.400561e+238 1.885381e+280 5.279262e+245 1.624468e+293

Monthly Returns of ETF

ETF.monthly.returns <- na.omit(Return.calculate(ETFList.monthly, method = "log"))
head(ETF.monthly.returns)
##                    SPY         QQQ         EEM         IWM          EFA
## 2010-02-26  0.03071793  0.04501044  0.01760802  0.04377882  0.002664268
## 2010-03-31  0.05909865  0.07428087  0.07798729  0.07909466  0.061898269
## 2010-04-30  0.01535150  0.02217754 -0.00166310  0.05523070 -0.028446722
## 2010-05-28 -0.08278878 -0.07679864 -0.09864508 -0.07835767 -0.118702355
## 2010-06-30 -0.05312741 -0.06161677 -0.01408547 -0.08059619 -0.020834896
## 2010-07-30  0.06606917  0.07006933  0.10375152  0.06514060  0.109844203
##                     TLT         IYR          GLD
## 2010-02-26 -0.003430786  0.05313334  0.032223420
## 2010-03-31 -0.020787687  0.09302102 -0.004396042
## 2010-04-30  0.032678847  0.06192375  0.057168648
## 2010-05-28  0.049821743 -0.05851441  0.030056874
## 2010-06-30  0.056359738 -0.04782683  0.023280092
## 2010-07-30 -0.009509251  0.08988455 -0.052210719
tail(ETF.monthly.returns)
##                     SPY          QQQ          EEM         IWM          EFA
## 2020-12-31  0.036378510  0.047860577  0.068867768  0.08292882  0.048936800
## 2021-01-29 -0.010242670  0.002610233  0.031246646  0.04731728 -0.007843178
## 2021-02-26  0.027425916 -0.001336071  0.007847555  0.06017807  0.022132092
## 2021-03-31  0.044398908  0.017022008 -0.007284986  0.01385392  0.024821143
## 2021-04-30  0.051558194  0.057417721  0.011927089  0.01772021  0.029096714
## 2021-05-06  0.004232628 -0.019358274  0.002774972 -0.01027989  0.017764723
##                    TLT          IYR         GLD
## 2020-12-31 -0.01235249  0.024725619  0.06778819
## 2021-01-29 -0.03700417 -0.004329307 -0.03276927
## 2021-02-26 -0.05903846  0.023983094 -0.06461193
## 2021-03-31 -0.05387845  0.056135171 -0.01149897
## 2021-04-30  0.02464492  0.075901011  0.03501369
## 2021-05-06  0.01065550 -0.019957886  0.02621378

Monthly Returns (Tibble Format)

ETF.monthly.returns.tibble <- as_tibble(ETF.monthly.returns)
ETF.monthly.returns.tibble
## # A tibble: 136 x 8
##        SPY      QQQ      EEM     IWM      EFA      TLT     IYR      GLD
##      <dbl>    <dbl>    <dbl>   <dbl>    <dbl>    <dbl>   <dbl>    <dbl>
##  1  0.0307  0.0450   0.0176   0.0438  0.00266 -0.00343  0.0531  0.0322 
##  2  0.0591  0.0743   0.0780   0.0791  0.0619  -0.0208   0.0930 -0.00440
##  3  0.0154  0.0222  -0.00166  0.0552 -0.0284   0.0327   0.0619  0.0572 
##  4 -0.0828 -0.0768  -0.0986  -0.0784 -0.119    0.0498  -0.0585  0.0301 
##  5 -0.0531 -0.0616  -0.0141  -0.0806 -0.0208   0.0564  -0.0478  0.0233 
##  6  0.0661  0.0701   0.104    0.0651  0.110   -0.00951  0.0899 -0.0522 
##  7 -0.0460 -0.0527  -0.0329  -0.0774 -0.0387   0.0806  -0.0131  0.0555 
##  8  0.0858  0.124    0.111    0.117   0.0951  -0.0255   0.0453  0.0467 
##  9  0.0375  0.0615   0.0297   0.0406  0.0373  -0.0457   0.0386  0.0362 
## 10  0      -0.00173 -0.0295   0.0343 -0.0494  -0.0170  -0.0160  0.0209 
## # ... with 126 more rows

Fama French 3 Factors Digit Numbers Data

famafrench <- read_csv("F-F_Research_Data_Factors.CSV")
## Warning: Missing column names filled in: 'X1' [1]
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   `Mkt-RF` = col_double(),
##   SMB = col_double(),
##   HML = col_double(),
##   RF = col_double()
## )
str(famafrench)
## spec_tbl_df[,5] [1,136 x 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ X1    : num [1:1136] 192607 192608 192609 192610 192611 ...
##  $ Mkt-RF: num [1:1136] 2.96 2.64 0.36 -3.24 2.53 2.62 -0.06 4.18 0.13 0.46 ...
##  $ SMB   : num [1:1136] -2.3 -1.4 -1.32 0.04 -0.2 -0.04 -0.56 -0.1 -1.6 0.43 ...
##  $ HML   : num [1:1136] -2.87 4.19 0.01 0.51 -0.35 -0.02 4.83 3.17 -2.67 0.6 ...
##  $ RF    : num [1:1136] 0.22 0.25 0.23 0.32 0.31 0.28 0.25 0.26 0.3 0.25 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   `Mkt-RF` = col_double(),
##   ..   SMB = col_double(),
##   ..   HML = col_double(),
##   ..   RF = col_double()
##   .. )
head(famafrench)
## # A tibble: 6 x 5
##       X1 `Mkt-RF`   SMB   HML    RF
##    <dbl>    <dbl> <dbl> <dbl> <dbl>
## 1 192607     2.96 -2.3  -2.87  0.22
## 2 192608     2.64 -1.4   4.19  0.25
## 3 192609     0.36 -1.32  0.01  0.23
## 4 192610    -3.24  0.04  0.51  0.32
## 5 192611     2.53 -0.2  -0.35  0.31
## 6 192612     2.62 -0.04 -0.02  0.28
colnames(famafrench) <- paste(c("date","Mkt-RF","SMB","HML","RF"))
famafrench.digit <- famafrench %>% mutate(date = as.character(date))%>% 
  mutate(date=ymd(parse_date(date,format="%Y%m"))) %>%
  mutate(date=rollback(date))
head(famafrench.digit)
## # A tibble: 6 x 5
##   date       `Mkt-RF`   SMB   HML    RF
##   <date>        <dbl> <dbl> <dbl> <dbl>
## 1 1926-06-30     2.96 -2.3  -2.87  0.22
## 2 1926-07-31     2.64 -1.4   4.19  0.25
## 3 1926-08-31     0.36 -1.32  0.01  0.23
## 4 1926-09-30    -3.24  0.04  0.51  0.32
## 5 1926-10-31     2.53 -0.2  -0.35  0.31
## 6 1926-11-30     2.62 -0.04 -0.02  0.28
famafrench.digit.xts <- xts(famafrench.digit[,-1],order.by=as.Date(famafrench.digit$date))
head(famafrench.digit.xts)
##            Mkt-RF   SMB   HML   RF
## 1926-06-30   2.96 -2.30 -2.87 0.22
## 1926-07-31   2.64 -1.40  4.19 0.25
## 1926-08-31   0.36 -1.32  0.01 0.23
## 1926-09-30  -3.24  0.04  0.51 0.32
## 1926-10-31   2.53 -0.20 -0.35 0.31
## 1926-11-30   2.62 -0.04 -0.02 0.28

Merging Fama French and Monthly Returns

final.data <- merge(famafrench.digit,ETF.monthly.returns)
tail(final.data)
##              date Mkt-RF  SMB   HML   RF         SPY         QQQ         EEM
## 154491 2020-08-31  -3.63 0.06 -2.51 0.01 0.004232628 -0.01935827 0.002774972
## 154492 2020-09-30  -2.10 4.44  4.03 0.01 0.004232628 -0.01935827 0.002774972
## 154493 2020-10-31  12.47 5.48  2.11 0.01 0.004232628 -0.01935827 0.002774972
## 154494 2020-11-30   4.63 4.81 -1.36 0.01 0.004232628 -0.01935827 0.002774972
## 154495 2020-12-31  -0.04 7.19  2.85 0.00 0.004232628 -0.01935827 0.002774972
## 154496 2021-01-31   2.79 2.11  7.07 0.00 0.004232628 -0.01935827 0.002774972
##                IWM        EFA       TLT         IYR        GLD
## 154491 -0.01027989 0.01776472 0.0106555 -0.01995789 0.02621378
## 154492 -0.01027989 0.01776472 0.0106555 -0.01995789 0.02621378
## 154493 -0.01027989 0.01776472 0.0106555 -0.01995789 0.02621378
## 154494 -0.01027989 0.01776472 0.0106555 -0.01995789 0.02621378
## 154495 -0.01027989 0.01776472 0.0106555 -0.01995789 0.02621378
## 154496 -0.01027989 0.01776472 0.0106555 -0.01995789 0.02621378
final.data.tibble <- as_tibble(final.data)
head(final.data.tibble)
## # A tibble: 6 x 13
##   date       `Mkt-RF`   SMB   HML    RF    SPY    QQQ    EEM    IWM     EFA
##   <date>        <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>
## 1 1926-06-30     2.96 -2.3  -2.87  0.22 0.0307 0.0450 0.0176 0.0438 0.00266
## 2 1926-07-31     2.64 -1.4   4.19  0.25 0.0307 0.0450 0.0176 0.0438 0.00266
## 3 1926-08-31     0.36 -1.32  0.01  0.23 0.0307 0.0450 0.0176 0.0438 0.00266
## 4 1926-09-30    -3.24  0.04  0.51  0.32 0.0307 0.0450 0.0176 0.0438 0.00266
## 5 1926-10-31     2.53 -0.2  -0.35  0.31 0.0307 0.0450 0.0176 0.0438 0.00266
## 6 1926-11-30     2.62 -0.04 -0.02  0.28 0.0307 0.0450 0.0176 0.0438 0.00266
## # ... with 3 more variables: TLT <dbl>, IYR <dbl>, GLD <dbl>

Q2. Based on CAPM model, compute MVP monthly returns based on estimated covariance matrix for the 8-asset portfolio by using past 60-month returns from 2015/01 - 2021/03. (Hint: you can use SIT package or portfolioBacktest package to help you to run backtesting!)

MVP Monthly Returns for the 8-asset Portfolio_CAPM Model (Using SIT package)

models.tw <- list()
# Three inputs needed in backtesting (Prices, Weight, Execution.price)
data <- new.env() 
data$prices <- ETFList.price.sample
data$weight <- ETFList.price.sample
data$execution.price <- ETFList.price.sample
data$execution.price[] <- NA
data$symbolnames <- colnames(data$prices)
prices <- data$prices
n <- ncol(prices)
# Equal Point
data$weight <- ntop(prices, n)
head(data$weight)
##              SPY   QQQ   EEM   IWM   EFA   TLT   IYR   GLD
## 2010-01-29 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
## 2010-02-26 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
## 2010-03-31 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
## 2010-04-30 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
## 2010-05-28 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
## 2010-06-30 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125
last <- xts::last

Backtesting

models.tw$equal.weight <- bt.run(data, trade.summary = T)
## Latest weights :
##             SPY  QQQ  EEM  IWM  EFA  TLT  IYR  GLD
## 2021-05-06 12.5 12.5 12.5 12.5 12.5 12.5 12.5 12.5
## 
## Performance summary :
##  CAGR    Best    Worst   
##  1.390432e+26    18157.2 0   
names(models.tw$equal.weight)
## [1] "weight"        "type"          "ret"           "best"         
## [5] "worst"         "equity"        "cagr"          "dates.index"  
## [9] "trade.summary"

Trade Summary

bt.detail.summary(models.tw$equal.weight)
## Warning in min(drawdown[x[1]:x[2]], na.rm = T): no non-missing arguments to min;
## returning Inf
## $System
## $System$Period
## [1] "Jan2010 - May2021"
## 
## $System$Cagr
## [1] 1.390432e+26
## 
## $System$Sharpe
## [1] 11.63
## 
## $System$DVR
##     [,1]
## SPY 0.25
## 
## $System$Volatility
## [1] 10570.67
## 
## $System$MaxDD
## [1] 0
## 
## $System$AvgDD
## [1] NaN
## 
## $System$VaR
##      5% 
## 6140.89 
## 
## $System$CVaR
## [1] 5083.51
## 
## $System$Exposure
## [1] 99.27
## 
## 
## $Trade
## $Trade$Win.Percent
## [1] 100
## 
## $Trade$Avg.Trade
## [1] Inf
## 
## $Trade$Avg.Win
## [1] Inf
## 
## $Trade$Avg.Loss
## [1] NaN
## 
## $Trade$Best.Trade
## [1] Inf
## 
## $Trade$Worst.Trade
## [1] 7.695933e+215
## 
## $Trade$WinLoss.Ratio
## [1] NaN
## 
## $Trade$Avg.Len
## [1] 136
## 
## $Trade$Num.Trades
## [1] 8
## 
## 
## $Period
## $Period$Win.Percent.Day
## [1] 99.3
## 
## $Period$Best.Day
## [1] 18157.2
## 
## $Period$Worst.Day
## [1] 0
## 
## $Period$Win.Percent.Month
## [1] 99.3
## 
## $Period$Best.Month
## [1] 18157.2
## 
## $Period$Worst.Month
## [1] 5737.7
## 
## $Period$Win.Percent.Year
## [1] 91.7
## 
## $Period$Best.Year
## [1] 1.775652e+28
## 
## $Period$Worst.Year
## [1] 1.118642e+13
plotbt.transition.map(models.tw$equal.weight$weight)

layout(1:1)
tab.mon <- plotbt.monthly.table(models.tw$equal.weight$equity)

tab.mon
##      Jan                                       
## 2010 "                                      NA"
## 2011 "                                 6,800.2"
## 2012 "                                 7,720.9"
## 2013 "                                 8,255.7"
## 2014 "                                 8,543.8"
## 2015 "                                 9,667.4"
## 2016 "                                 9,083.3"
## 2017 "                                10,479.7"
## 2018 "                                12,622.6"
## 2019 "                                12,372.6"
## 2020 "                                14,767.4"
## 2021 "                                17,782.3"
## Avg  "                                10,736.0"
##      Feb                                       
## 2010 "                                 5,737.7"
## 2011 "                                 7,066.3"
## 2012 "                                 7,796.1"
## 2013 "                                 8,190.8"
## 2014 "                                 8,928.3"
## 2015 "                                 9,812.8"
## 2016 "                                 9,220.5"
## 2017 "                                10,799.6"
## 2018 "                                12,191.1"
## 2019 "                                12,621.7"
## 2020 "                                14,053.0"
## 2021 "                                17,872.2"
## Avg  "                                10,357.5"
##      Mar                                       
## 2010 "                                 5,974.5"
## 2011 "                                 7,123.6"
## 2012 "                                 7,836.5"
## 2013 "                                 8,356.9"
## 2014 "                                 8,878.7"
## 2015 "                                 9,746.9"
## 2016 "                                 9,692.9"
## 2017 "                                10,845.0"
## 2018 "                                12,119.1"
## 2019 "                                12,835.4"
## 2020 "                                12,752.2"
## 2021 "                                18,157.2"
## Avg  "                                10,359.9"
##      Apr                                       
## 2010 "                                 6,165.4"
## 2011 "                                 7,451.7"
## 2012 "                                 7,850.3"
## 2013 "                                 8,388.3"
## 2014 "                                 8,906.7"
## 2015 "                                 9,722.1"
## 2016 "                                 9,748.0"
## 2017 "                                11,011.3"
## 2018 "                                12,116.4"
## 2019 "                                13,153.3"
## 2020 "                                14,012.2"
## 2021 "                                13,728.2"
## Avg  "                                10,187.8"
##      May                                       
## 2010 "                                 5,940.0"
## 2011 "                                 7,385.6"
## 2012 "                                 7,499.3"
## 2013 "                                 8,218.1"
## 2014 "                                 9,041.0"
## 2015 "                                 9,766.7"
## 2016 "                                 9,792.5"
## 2017 "                                11,143.9"
## 2018 "                                12,426.4"
## 2019 "                                12,632.5"
## 2020 "                                14,551.1"
## 2021 "                                13,686.9"
## Avg  "                                10,173.7"
##      Jun                                       
## 2010 "                                 5,851.0"
## 2011 "                                 7,231.0"
## 2012 "                                 7,727.7"
## 2013 "                                 7,887.4"
## 2014 "                                 9,302.3"
## 2015 "                                 9,552.9"
## 2016 "                                10,054.8"
## 2017 "                                11,180.1"
## 2018 "                                12,433.6"
## 2019 "                                13,376.4"
## 2020 "                                15,000.9"
## 2021 "                                      NA"
## Avg  "                                 9,963.5"
##      Jul                                       
## 2010 "                                 6,042.8"
## 2011 "                                 7,360.7"
## 2012 "                                 7,816.9"
## 2013 "                                 8,231.3"
## 2014 "                                 9,141.6"
## 2015 "                                 9,634.6"
## 2016 "                                10,455.4"
## 2017 "                                11,402.2"
## 2018 "                                12,638.5"
## 2019 "                                13,496.7"
## 2020 "                                15,914.6"
## 2021 "                                      NA"
## Avg  "                                10,194.1"
##      Aug                                       
## 2010 "                                 6,038.6"
## 2011 "                                 7,391.2"
## 2012 "                                 8,020.7"
## 2013 "                                 8,141.1"
## 2014 "                                 9,445.1"
## 2015 "                                 9,217.4"
## 2016 "                                10,406.2"
## 2017 "                                11,555.0"
## 2018 "                                12,928.3"
## 2019 "                                13,609.4"
## 2020 "                                16,598.6"
## 2021 "                                      NA"
## Avg  "                                10,304.7"
##      Sep                                       
## 2010 "                                 6,438.8"
## 2011 "                                 6,894.1"
## 2012 "                                 8,186.2"
## 2013 "                                 8,335.5"
## 2014 "                                 9,096.4"
## 2015 "                                 9,041.0"
## 2016 "                                10,446.1"
## 2017 "                                11,636.2"
## 2018 "                                12,820.8"
## 2019 "                                13,680.8"
## 2020 "                                16,035.3"
## 2021 "                                      NA"
## Avg  "                                10,237.4"
##      Oct                                       
## 2010 "                                 6,613.1"
## 2011 "                                 7,421.5"
## 2012 "                                 8,027.8"
## 2013 "                                 8,566.5"
## 2014 "                                 9,313.6"
## 2015 "                                 9,567.7"
## 2016 "                                10,139.7"
## 2017 "                                11,818.7"
## 2018 "                                12,018.9"
## 2019 "                                13,994.4"
## 2020 "                                15,738.3"
## 2021 "                                      NA"
## Avg  "                                10,292.7"
##      Nov                                       
## 2010 "                                 6,611.2"
## 2011 "                                 7,415.5"
## 2012 "                                 8,073.7"
## 2013 "                                 8,560.6"
## 2014 "                                 9,475.4"
## 2015 "                                 9,507.9"
## 2016 "                                10,092.0"
## 2017 "                                12,042.2"
## 2018 "                                12,202.5"
## 2019 "                                14,236.7"
## 2020 "                                17,056.9"
## 2021 "                                      NA"
## Avg  "                                10,479.5"
##      Dec                                       
## 2010 "                                 6,884.4"
## 2011 "                                 7,234.7"
## 2012 "                                 8,104.9"
## 2013 "                                 8,607.0"
## 2014 "                                 9,503.1"
## 2015 "                                 9,345.4"
## 2016 "                                10,221.0"
## 2017 "                                12,171.7"
## 2018 "                                11,533.0"
## 2019 "                                14,583.9"
## 2020 "                                17,835.4"
## 2021 "                                      NA"
## Avg  "                                10,547.7"
##      Year                                      
## 2010 "         6,196,124,041,794,954,461,244.0"
## 2011 "     2,399,119,576,127,615,096,802,024.0"
## 2012 "     6,730,604,311,332,108,491,626,266.0"
## 2013 "    12,505,673,638,797,983,814,406,282.0"
## 2014 "    38,087,854,871,145,738,620,888,886.0"
## 2015 "    64,876,489,097,527,502,636,888,044.0"
## 2016 "   104,460,865,328,030,059,834,204,622.0"
## 2017 "   496,989,899,904,461,658,762,666,608.0"
## 2018 " 1,362,997,745,701,854,621,528,264,828.0"
## 2019 " 3,557,593,603,677,447,863,040,282,060.0"
## 2020 "17,756,515,612,913,533,265,646,446,008.0"
## 2021 "                    11,186,418,302,340.5"
## Avg  " 1,950,263,638,762,026,071,680,402,006.0"
##      MaxDD                                     
## 2010 "                                     0.0"
## 2011 "                                     0.0"
## 2012 "                                     0.0"
## 2013 "                                     0.0"
## 2014 "                                     0.0"
## 2015 "                                     0.0"
## 2016 "                                     0.0"
## 2017 "                                     0.0"
## 2018 "                                     0.0"
## 2019 "                                     0.0"
## 2020 "                                     0.0"
## 2021 "                                     0.0"
## Avg  "                                     0.0"
strategy.performance.snapshoot(models.tw, T)
## Warning in min(drawdown[x[1]:x[2]], na.rm = T): no non-missing arguments to min;
## returning Inf

## NULL

MVP Portfolio (Creating Constraints)

constraints = new.constraints(n, lb = -Inf, ub = +Inf)
#SUM x.i = 1
constraints = add.constraints(rep(1, n), 1, type = '=', constraints)        
ret = prices / mlag(prices) - 1
weight = coredata(prices)
weight[] = NA
#i = 60
for (i in 60:dim(weight)[1]) {
  # using 60 historical monthly returns
  hist = ret[ (i- 60 +1):i, ]
  hist = na.omit(hist)
  # create historical input assumptions
  ia = create.historical.ia(hist, 12)
  s0 = apply(coredata(hist),2, sd)     
  ia$cov = cor(coredata(hist), use='complete.obs', method='kendall') * (s0 %*% t(s0))
  # use min.risk.portfolio() to compute MVP weights
  weight[i,] = min.risk.portfolio(ia, constraints)
}
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'
## Loading required package: kernlab
## Warning in library(package, lib.loc = lib.loc, character.only = TRUE,
## logical.return = TRUE, : there is no package called 'kernlab'

#apply(weight, 1, sum)

data$weight[] = weight     
#capital = 100000
#data$weight[] = (capital / prices) * data$weight
models.tw$min.var.monthly = bt.run(data)
## Latest weights :
##            SPY QQQ EEM IWM EFA TLT IYR GLD
## 2021-05-06   0   0   0   0   0   0   0   0
## 
## Performance summary :
##  CAGR    Best    Worst   
##  0   0   0   
#to verify the default do.lag  = 1 day
#sum(as.numeric(weight[60,])*as.numeric(ret[61,]))
#min.var.monthly$ret[61, ]
plotbt.custom.report.part1(models.tw$min.var.monthly, models.tw$equal.weight)

#
layout(1:2)
plotbt.transition.map(models.tw$min.var.monthly$weight)
legend('topright', legend = 'min.var.monthly', bty = 'n')
plotbt.transition.map(models.tw$equal.weight$weight)
legend('topright', legend = 'equal weight', bty = 'n')

strategy.performance.snapshoot(models.tw, T)
## Warning in min(drawdown[x[1]:x[2]], na.rm = T): no non-missing arguments to min;
## returning Inf
## Warning in cor(y, x): the standard deviation is zero
## Warning in min(drawdown[x[1]:x[2]], na.rm = T): no non-missing arguments to min;
## returning Inf

## NULL
models.tw <- rev(models.tw)
plotbt.custom.report(models.tw)
## Warning in cor(y, x): the standard deviation is zero

## Warning in cor(y, x): no non-missing arguments to min; returning Inf
## Warning in cor(y, x): the standard deviation is zero
## Warning in min(drawdown[x[1]:x[2]], na.rm = T): no non-missing arguments to min;
## returning Inf

## Warning in min(drawdown[x[1]:x[2]], na.rm = T): no non-missing arguments to min;
## returning Inf
bt.detail.summary(models.tw$min.var.monthly)
## Warning in cor(y, x): the standard deviation is zero

## Warning in cor(y, x): no non-missing arguments to min; returning Inf
## $System
## $System$Period
## [1] "Jan2010 - May2021"
## 
## $System$Cagr
## [1] 0
## 
## $System$Sharpe
## [1] NaN
## 
## $System$DVR
##     [,1]
## SPY  NaN
## 
## $System$Volatility
## [1] 0
## 
## $System$MaxDD
## [1] 0
## 
## $System$AvgDD
## [1] NaN
## 
## $System$VaR
## 5% 
##  0 
## 
## $System$CVaR
## [1] NaN
## 
## $System$Exposure
## [1] 0
## 
## 
## $Trade
## list()
## 
## $Period
## $Period$Win.Percent.Day
## [1] 0
## 
## $Period$Best.Day
## [1] 0
## 
## $Period$Worst.Day
## [1] 0
## 
## $Period$Win.Percent.Month
## [1] 0
## 
## $Period$Best.Month
## [1] 0
## 
## $Period$Worst.Month
## [1] 0
## 
## $Period$Win.Percent.Year
## [1] 0
## 
## $Period$Best.Year
## [1] 0
## 
## $Period$Worst.Year
## [1] 0
plotbt.strategy.sidebyside
## function (..., perfromance.metric = spl("System,Trade,Period"), 
##     perfromance.fn = "bt.detail.summary", return.table = FALSE, 
##     make.plot = TRUE) 
## {
##     models = variable.number.arguments(...)
##     out = list()
##     for (i in 1:len(models)) {
##         out[[names(models)[i]]] = match.fun(perfromance.fn)(models[[i]])[[perfromance.metric[1]]]
##     }
##     temp = list2matrix(out, keep.names = F)
##     if (make.plot) 
##         plot.table(temp, smain = perfromance.metric[1])
##     if (return.table) 
##         return(temp)
## }
## <bytecode: 0x0000000020b19ee0>
## <environment: namespace:SIT>

Q3. Based on FF 3-factor model, compute MVP monthly returns covariance matrix for the 8-asset portfolio by using past 60-month returns from 2015/01 - 2021/03.

t <- dim(final.data)[1]
markets <- final.data[,c(2,3,4)]
final.data2 <- final.data[,c(-1,-2,-3,-4,-5)]
head(final.data2)
##          SPY        QQQ        EEM        IWM         EFA          TLT
## 1 0.03071793 0.04501044 0.01760802 0.04377882 0.002664268 -0.003430786
## 2 0.03071793 0.04501044 0.01760802 0.04377882 0.002664268 -0.003430786
## 3 0.03071793 0.04501044 0.01760802 0.04377882 0.002664268 -0.003430786
## 4 0.03071793 0.04501044 0.01760802 0.04377882 0.002664268 -0.003430786
## 5 0.03071793 0.04501044 0.01760802 0.04377882 0.002664268 -0.003430786
## 6 0.03071793 0.04501044 0.01760802 0.04377882 0.002664268 -0.003430786
##          IYR        GLD
## 1 0.05313334 0.03222342
## 2 0.05313334 0.03222342
## 3 0.05313334 0.03222342
## 4 0.05313334 0.03222342
## 5 0.05313334 0.03222342
## 6 0.05313334 0.03222342
final.data2 <- as.matrix(final.data2)
n <- dim(final.data2)[2]
one_vec <- rep(1,t)
p <- cbind(one_vec,markets)
p <- as.matrix(p)
b.hat <- solve(t(p)%*%p)%*%t(p)%*%final.data2
res <- final.data2-p%*%b.hat
diag.d <- diag(t(res)%*%res)/(t-6)
diag.d
##         SPY         QQQ         EEM         IWM         EFA         TLT 
## 0.001578483 0.002060616 0.002870264 0.003061741 0.002028496 0.001349983 
##         IYR         GLD 
## 0.002057381 0.002150222

R-Square

retvar <- apply(final.data2,2,var)
rsq <- 1-diag(t(res)%*%res)/((t-1)/retvar)
res.stdev <- sqrt(diag.d)
factor.cov <- var(final.data2)*t(b.hat)%*%b.hat+diag(diag.d)
stdev <- sqrt(diag(factor.cov))
factor.cor <- factor.cov/(stdev%*%t(stdev))
factor.cor
##               SPY           QQQ           EEM           IWM           EFA
## SPY  1.000000e+00  1.696038e-04  3.679961e-05  1.128260e-04  5.532082e-05
## QQQ  1.696038e-04  1.000000e+00  4.603472e-05  1.340136e-04  6.896780e-05
## EEM  3.679961e-05  4.603472e-05  1.000000e+00  3.226141e-05  1.942251e-05
## IWM  1.128260e-04  1.340136e-04  3.226141e-05  1.000000e+00  4.621496e-05
## EFA  5.532082e-05  6.896780e-05  1.942251e-05  4.621496e-05  1.000000e+00
## TLT -2.816168e-05 -3.082833e-05 -8.184789e-06 -2.893366e-05 -1.273156e-05
## IYR  7.532827e-05  8.618368e-05  2.293799e-05  6.674992e-05  3.244921e-05
## GLD  2.152997e-06  5.444283e-06  3.941232e-06  7.657671e-07  1.577165e-06
##               TLT           IYR          GLD
## SPY -2.816168e-05  7.532827e-05 2.152997e-06
## QQQ -3.082833e-05  8.618368e-05 5.444283e-06
## EEM -8.184789e-06  2.293799e-05 3.941232e-06
## IWM -2.893366e-05  6.674992e-05 7.657671e-07
## EFA -1.273156e-05  3.244921e-05 1.577165e-06
## TLT  1.000000e+00 -2.252112e-06 4.635900e-06
## IYR -2.252112e-06  1.000000e+00 4.845003e-06
## GLD  4.635900e-06  4.845003e-06 1.000000e+00

Sample Variance and Correlation

sample.cov <- cov(final.data2)
sample.cor <- cor(final.data2)
sample.cov
##               SPY           QQQ           EEM           IWM           EFA
## SPY  1.578432e-03  0.0016554053  0.0016017022  1.974852e-03  0.0015641380
## QQQ  1.655405e-03  0.0020605493  0.0016790216  1.965652e-03  0.0016340490
## EEM  1.601702e-03  0.0016790216  0.0028701713  2.110138e-03  0.0020520776
## IWM  1.974852e-03  0.0019656525  0.0021101382  3.061642e-03  0.0019636228
## EFA  1.564138e-03  0.0016340490  0.0020520776  1.963623e-03  0.0020284300
## TLT -6.639143e-04 -0.0006090258 -0.0007210460 -1.025052e-03 -0.0007285929
## IYR  1.304797e-03  0.0012509566  0.0014847124  1.737499e-03  0.0013643915
## GLD  9.794933e-05  0.0002075539  0.0006700266  5.235326e-05  0.0001741747
##               TLT           IYR          GLD
## SPY -6.639143e-04  1.304797e-03 9.794933e-05
## QQQ -6.090258e-04  1.250957e-03 2.075539e-04
## EEM -7.210460e-04  1.484712e-03 6.700266e-04
## IWM -1.025052e-03  1.737499e-03 5.235326e-05
## EFA -7.285929e-04  1.364392e-03 1.741747e-04
## TLT  1.349939e-03 -7.895722e-05 4.268831e-04
## IYR -7.895722e-05  2.057314e-03 3.277936e-04
## GLD  4.268831e-04  3.277936e-04 2.150152e-03
sample.cor
##             SPY         QQQ        EEM         IWM         EFA         TLT
## SPY  1.00000000  0.91790956  0.7525146  0.89834757  0.87414224 -0.45482249
## QQQ  0.91790956  1.00000000  0.6904160  0.78259670  0.79927008 -0.36516326
## EEM  0.75251457  0.69041603  1.0000000  0.71183573  0.85047168 -0.36631265
## IWM  0.89834757  0.78259670  0.7118357  1.00000000  0.78795398 -0.50420997
## EFA  0.87414224  0.79927008  0.8504717  0.78795398  1.00000000 -0.44029909
## TLT -0.45482249 -0.36516326 -0.3663126 -0.50420997 -0.44029909  1.00000000
## IYR  0.72406847  0.60757572  0.6109956  0.69230449  0.66789575 -0.04737884
## GLD  0.05316844  0.09860634  0.2697140  0.02040478  0.08340084  0.25056313
##             IYR        GLD
## SPY  0.72406847 0.05316844
## QQQ  0.60757572 0.09860634
## EEM  0.61099564 0.26971402
## IWM  0.69230449 0.02040478
## EFA  0.66789575 0.08340084
## TLT -0.04737884 0.25056313
## IYR  1.00000000 0.15585311
## GLD  0.15585311 1.00000000

MVP Monthly Returns of 8 Asset_FF3 Factor

one <- rep(1,8)
top.mat <- solve(factor.cov)%*%one
bot.mat <- t(one)%*%top.mat
MVP_FF3 <- top.mat/as.numeric(bot.mat)
MVP_FF3
##           [,1]
## SPY 0.15919954
## QQQ 0.12192163
## EEM 0.08757552
## IWM 0.08206829
## EFA 0.12391229
## TLT 0.18624538
## IYR 0.12215695
## GLD 0.11692040
#
barplot(as.vector(MVP_FF3), ylim = c(-0.01, 0.4), names.arg = rownames(MVP_FF3), cex.names = 0.5)

Q4. Based on PCA with 3 factors, compute MVP monthly returns covariance matrix for the 8-asset portfolio by using past 60-month returns from 2015/01 - 2021/03. (Hint: you can use package factorAnalytics or covFactorModel to extract covariance matrix based on 3-factor PCA analysis!

rm(list = ls())
library(quantmod)
library(readxl)

tickers <- c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
data = new.env()
getSymbols(tickers, src = 'yahoo', from = '2010-01-01', to = '2021-05-03', auto.assign = TRUE)
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## pausing 1 second between requests for more than 5 symbols
## [1] "SPY" "QQQ" "EEM" "IWM" "EFA" "TLT" "IYR" "GLD"
ETFList <- merge(Ad(SPY), Ad(QQQ),Ad(EEM), Ad(IWM),Ad(EFA),Ad(TLT),Ad(IYR),Ad(GLD))
colnames(ETFList) <- c("SPY", "QQQ", "EEM", "IWM", "EFA", "TLT", "IYR", "GLD")
head(ETFList)
##                 SPY      QQQ      EEM      IWM      EFA      TLT      IYR
## 2010-01-04 90.79006 41.51847 34.10928 54.61730 41.03314 66.03745 30.41554
## 2010-01-05 91.03041 41.51847 34.35684 54.42949 41.06930 66.46396 30.48858
## 2010-01-06 91.09449 41.26806 34.42872 54.37827 41.24289 65.57423 30.47530
## 2010-01-07 91.47905 41.29489 34.22906 54.77949 41.08377 65.68450 30.74751
## 2010-01-08 91.78343 41.63475 34.50059 55.07827 41.40926 65.65512 30.54169
## 2010-01-11 91.91164 41.46482 34.42872 54.85632 41.74921 65.29481 30.68776
##               GLD
## 2010-01-04 109.80
## 2010-01-05 109.70
## 2010-01-06 111.51
## 2010-01-07 110.82
## 2010-01-08 111.37
## 2010-01-11 112.85
tail(ETFList)
##               SPY    QQQ   EEM    IWM   EFA      TLT   IYR    GLD
## 2021-04-23 416.74 339.42 54.63 225.76 79.07 139.8549 98.20 166.40
## 2021-04-26 417.61 341.63 54.70 228.11 79.13 139.6552 98.36 166.84
## 2021-04-27 417.52 340.15 54.67 228.45 78.87 138.4370 98.39 166.42
## 2021-04-28 417.40 339.00 55.08 228.84 79.07 138.5269 97.98 166.91
## 2021-04-29 420.06 340.22 54.95 227.99 79.10 138.1175 98.78 166.22
## 2021-04-30 417.30 337.99 53.98 224.89 78.11 138.4370 99.19 165.66
ETFList.xts <- xts(ETFList)
head(ETFList.xts)
##                 SPY      QQQ      EEM      IWM      EFA      TLT      IYR
## 2010-01-04 90.79006 41.51847 34.10928 54.61730 41.03314 66.03745 30.41554
## 2010-01-05 91.03041 41.51847 34.35684 54.42949 41.06930 66.46396 30.48858
## 2010-01-06 91.09449 41.26806 34.42872 54.37827 41.24289 65.57423 30.47530
## 2010-01-07 91.47905 41.29489 34.22906 54.77949 41.08377 65.68450 30.74751
## 2010-01-08 91.78343 41.63475 34.50059 55.07827 41.40926 65.65512 30.54169
## 2010-01-11 91.91164 41.46482 34.42872 54.85632 41.74921 65.29481 30.68776
##               GLD
## 2010-01-04 109.80
## 2010-01-05 109.70
## 2010-01-06 111.51
## 2010-01-07 110.82
## 2010-01-08 111.37
## 2010-01-11 112.85

Monthly Returns

monthly.returns <- to.monthly(ETFList.xts, indexAt = "last", OHLC = FALSE)
ETF.monthly.returns <- na.omit(Return.calculate(monthly.returns, method = "log"))
head(ETF.monthly.returns)
##                    SPY         QQQ         EEM         IWM          EFA
## 2010-02-26  0.03071793  0.04501044  0.01760802  0.04377882  0.002664268
## 2010-03-31  0.05909865  0.07428087  0.07798729  0.07909466  0.061898269
## 2010-04-30  0.01535150  0.02217754 -0.00166310  0.05523070 -0.028446722
## 2010-05-28 -0.08278878 -0.07679864 -0.09864508 -0.07835767 -0.118702355
## 2010-06-30 -0.05312741 -0.06161677 -0.01408547 -0.08059619 -0.020834896
## 2010-07-30  0.06606917  0.07006933  0.10375152  0.06514060  0.109844203
##                     TLT         IYR          GLD
## 2010-02-26 -0.003430786  0.05313334  0.032223420
## 2010-03-31 -0.020787687  0.09302102 -0.004396042
## 2010-04-30  0.032678847  0.06192375  0.057168648
## 2010-05-28  0.049821743 -0.05851441  0.030056874
## 2010-06-30  0.056359738 -0.04782683  0.023280092
## 2010-07-30 -0.009509251  0.08988455 -0.052210719
tail(ETF.monthly.returns)
##                    SPY          QQQ          EEM        IWM          EFA
## 2020-11-30  0.10325753  0.106391900  0.086097691 0.16758160  0.133388954
## 2020-12-31  0.03637851  0.047860577  0.068867768 0.08292882  0.048936800
## 2021-01-29 -0.01024267  0.002610233  0.031246646 0.04731728 -0.007843178
## 2021-02-26  0.02742592 -0.001336071  0.007847555 0.06017807  0.022132092
## 2021-03-31  0.04439891  0.017022008 -0.007284986 0.01385392  0.024821143
## 2021-04-30  0.05155819  0.057417721  0.011927089 0.01772021  0.029096714
##                    TLT          IYR         GLD
## 2020-11-30  0.01650211  0.082312759 -0.05560390
## 2020-12-31 -0.01235249  0.024725619  0.06778819
## 2021-01-29 -0.03700417 -0.004329307 -0.03276927
## 2021-02-26 -0.05903846  0.023983094 -0.06461193
## 2021-03-31 -0.05387845  0.056135171 -0.01149897
## 2021-04-30  0.02464492  0.075901011  0.03501369

stocks <- ETF.monthly.returns
head(stocks)
##                    SPY         QQQ         EEM         IWM          EFA
## 2010-02-26  0.03071793  0.04501044  0.01760802  0.04377882  0.002664268
## 2010-03-31  0.05909865  0.07428087  0.07798729  0.07909466  0.061898269
## 2010-04-30  0.01535150  0.02217754 -0.00166310  0.05523070 -0.028446722
## 2010-05-28 -0.08278878 -0.07679864 -0.09864508 -0.07835767 -0.118702355
## 2010-06-30 -0.05312741 -0.06161677 -0.01408547 -0.08059619 -0.020834896
## 2010-07-30  0.06606917  0.07006933  0.10375152  0.06514060  0.109844203
##                     TLT         IYR          GLD
## 2010-02-26 -0.003430786  0.05313334  0.032223420
## 2010-03-31 -0.020787687  0.09302102 -0.004396042
## 2010-04-30  0.032678847  0.06192375  0.057168648
## 2010-05-28  0.049821743 -0.05851441  0.030056874
## 2010-06-30  0.056359738 -0.04782683  0.023280092
## 2010-07-30 -0.009509251  0.08988455 -0.052210719
dim(stocks)
## [1] 135   8
stocks.fit = princomp(stocks, cor = T) # performing on correlation matrix
stocks.fit$sdev # gives root_eigen_value
##    Comp.1    Comp.2    Comp.3    Comp.4    Comp.5    Comp.6    Comp.7    Comp.8 
## 2.2420831 1.1442631 0.8455558 0.5862939 0.5620277 0.3872292 0.3192805 0.1930246
stocks.fit$sdev^2
##     Comp.1     Comp.2     Comp.3     Comp.4     Comp.5     Comp.6     Comp.7 
## 5.02693668 1.30933805 0.71496468 0.34374050 0.31587511 0.14994643 0.10194004 
##     Comp.8 
## 0.03725851
loadings(stocks.fit)
## 
## Loadings:
##     Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8
## SPY  0.431                0.294                       0.845
## QQQ  0.399                0.645 -0.309  0.190 -0.339 -0.420
## EEM  0.385 -0.146 -0.239 -0.540 -0.402 -0.288 -0.482       
## IWM  0.409                0.106  0.402 -0.734  0.218 -0.247
## EFA  0.416               -0.237 -0.366  0.270  0.731 -0.169
## TLT -0.217 -0.597  0.569        -0.375 -0.323  0.127       
## IYR  0.340 -0.268  0.508 -0.319  0.490  0.397 -0.203 -0.116
## GLD        -0.735 -0.587  0.164  0.259         0.109       
## 
##                Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8
## SS loadings     1.000  1.000  1.000  1.000  1.000  1.000  1.000  1.000
## Proportion Var  0.125  0.125  0.125  0.125  0.125  0.125  0.125  0.125
## Cumulative Var  0.125  0.250  0.375  0.500  0.625  0.750  0.875  1.000
#
stocks.fit.cov = princomp(stocks) # performing on covariance matrix
stocks.fit.cov$sdev # gives root_eigen_value
##      Comp.1      Comp.2      Comp.3      Comp.4      Comp.5      Comp.6 
## 0.106074657 0.050543863 0.036365287 0.028805992 0.025679900 0.018781335 
##      Comp.7      Comp.8 
## 0.014964411 0.008019123
stocks.fit.cov$sdev^2
##       Comp.1       Comp.2       Comp.3       Comp.4       Comp.5       Comp.6 
## 1.125183e-02 2.554682e-03 1.322434e-03 8.297852e-04 6.594573e-04 3.527386e-04 
##       Comp.7       Comp.8 
## 2.239336e-04 6.430633e-05
loadings(stocks.fit.cov)
## 
## Loadings:
##     Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8
## SPY  0.360                0.200  0.180                0.883
## QQQ  0.379                0.337  0.688         0.335 -0.386
## EEM  0.445 -0.206 -0.336 -0.643        -0.296  0.378       
## IWM  0.482  0.174         0.404 -0.421 -0.572 -0.181 -0.172
## EFA  0.397               -0.294  0.195  0.272 -0.783 -0.151
## TLT -0.160 -0.398  0.584 -0.177  0.358 -0.522 -0.197       
## IYR  0.330 -0.165  0.662 -0.130 -0.365  0.458  0.227 -0.114
## GLD        -0.856 -0.297  0.367 -0.124  0.128              
## 
##                Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 Comp.8
## SS loadings     1.000  1.000  1.000  1.000  1.000  1.000  1.000  1.000
## Proportion Var  0.125  0.125  0.125  0.125  0.125  0.125  0.125  0.125
## Cumulative Var  0.125  0.250  0.375  0.500  0.625  0.750  0.875  1.000
library(devtools)
## Warning: package 'devtools' was built under R version 4.0.5
## Loading required package: usethis
## Warning: package 'usethis' was built under R version 4.0.5
library(covFactorModel)

#factor_model <- factorModel(retdata1, type = ā€œSā€, K = K, max_iter = 10) #cbind(alpha = factor_model\(alpha, beta = factor_model\)beta) #Statistical 3-factor model

K <- 3
X_trn <- as.matrix(stocks)
T_trn <- dim(stocks)[1]
N <- dim(stocks)[2]
alpha <- colMeans(X_trn)
X_trn_ <- X_trn - matrix(alpha, T_trn, N, byrow = TRUE)
Sigma_prev <- matrix(0, N, N)
Sigma <- (1/(T_trn-1)) * t(X_trn_) %*% X_trn_
eigSigma <- eigen(Sigma)
while (norm(Sigma - Sigma_prev, "F")/norm(Sigma, "F") > 1e-3) {
  B <- eigSigma$vectors[, 1:K] %*% diag(sqrt(eigSigma$values[1:K]), K, K)
  Psi <- diag(diag(Sigma - B %*% t(B)))
  Sigma_prev <- Sigma
  Sigma <- B %*% t(B) + Psi
  eigSigma <- eigen(Sigma - Psi)
}
Sigma_PCA3 <- Sigma
B
##              [,1]         [,2]         [,3]
## [1,] -0.038354632 -0.003918015  0.002702833
## [2,] -0.040383333 -0.001779210  0.001146633
## [3,] -0.047365922  0.010470498 -0.012247708
## [4,] -0.051358799 -0.008811822  0.002867794
## [5,] -0.042215512 -0.001294825 -0.003163563
## [6,]  0.017056597  0.020197596  0.021298973
## [7,] -0.035173673  0.008387294  0.024173328
## [8,] -0.006510705  0.043450946 -0.010837352
eigSigma
## eigen() decomposition
## $values
## [1]  1.133580e-02  2.573747e-03  1.332303e-03  7.954688e-19 -7.902154e-20
## [6] -1.967081e-19 -2.555879e-19 -7.530792e-19
## 
## $vectors
##             [,1]        [,2]        [,3]          [,4]        [,5]       [,6]
## [1,] -0.36023980  0.07722950  0.07404876  0.8385085920  0.00000000  0.3945669
## [2,] -0.37929406  0.03507069  0.03141397 -0.2300921812  0.29865280  0.1299217
## [3,] -0.44487692 -0.20638800 -0.33554696 -0.0517668319 -0.36175988 -0.1927921
## [4,] -0.48237939  0.17369320  0.07856813 -0.0384879802 -0.47010801 -0.4073628
## [5,] -0.39650251  0.02552279 -0.08667124  0.0040790006  0.74470553 -0.3594054
## [6,]  0.16020138 -0.39812254  0.58352190  0.3109941292  0.02546300 -0.5462258
## [7,] -0.33036315 -0.16532515  0.66226978 -0.3782399844 -0.05540101  0.4102606
## [8,] -0.06115076 -0.85647822 -0.29690783 -0.0005721393  0.02511569  0.1687467
##             [,7]       [,8]
## [1,]  0.00000000  0.0000000
## [2,] -0.23142965 -0.8008396
## [3,]  0.67195997 -0.1569961
## [4,] -0.55985430  0.1705980
## [5,]  0.08852676  0.3781669
## [6,]  0.09395782 -0.2660446
## [7,]  0.18454128  0.2764462
## [8,] -0.36159746  0.1212110

#MVP Monthly returns of the 8 Asset PCA 3 Factors

one.vector = rep(1, 8)
sigma.inv.mat = solve(Sigma_PCA3)
top.mat.PCA = sigma.inv.mat%*%one.vector
bot.val.PCA = as.numeric((t(one.vector)%*%sigma.inv.mat%*%one.vector))
MVP_PCA3 = top.mat.PCA/bot.val.PCA
MVP_PCA3
##             [,1]
## [1,]  0.54251509
## [2,]  0.09163438
## [3,] -0.03949738
## [4,]  0.04388710
## [5,]  0.17319504
## [6,]  0.63507078
## [7,] -0.45450164
## [8,]  0.00769663

sd = sqrt(diag(Sigma_PCA3))
cor.pca = Sigma_PCA3/outer(sd,sd)
colnames(cor.pca) <- colnames(stocks)
rownames(cor.pca) <- colnames(stocks)
print(cor.pca)
##             SPY         QQQ        EEM         IWM        EFA         TLT
## SPY  1.00000000  0.85374035  0.8067714  0.90244876  0.8900377 -0.45623131
## QQQ  0.85374035  1.00000000  0.7634514  0.82333198  0.8230493 -0.41468580
## EEM  0.80677143  0.76345143  1.0000000  0.76664383  0.8270490 -0.42915929
## IWM  0.90244876  0.82333198  0.7666438  1.00000000  0.8588558 -0.48151344
## EFA  0.89003769  0.82304925  0.8270490  0.85885578  1.0000000 -0.48460678
## TLT -0.45623131 -0.41468580 -0.4291593 -0.48151344 -0.4846068  1.00000000
## IYR  0.75662590  0.68844036  0.5919878  0.70885536  0.6752695  0.04993627
## GLD  0.02686692  0.08132451  0.3557222 -0.03060395  0.1194454  0.31012990
##            IYR         GLD
## SPY 0.75662590  0.02686692
## QQQ 0.68844036  0.08132451
## EEM 0.59198784  0.35572215
## IWM 0.70885536 -0.03060395
## EFA 0.67526955  0.11944537
## TLT 0.04993627  0.31012990
## IYR 1.00000000  0.15565536
## GLD 0.15565536  1.00000000
#
barplot(as.vector(MVP_PCA3), ylim = c(-0.01, 0.4), names.arg = rownames(MVP_PCA3), cex.names = 0.5)