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)
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
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
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
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
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
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>
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
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"
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
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>
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
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.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
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)
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 <- 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)