## clear memory
#rm(list=ls())
# load packages
library(fpp2)
## Warning: package 'fpp2' was built under R version 4.5.1
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## ── Attaching packages ────────────────────────────────────────────── fpp2 2.5 ──
## ✔ ggplot2 3.5.2 ✔ fma 2.5
## ✔ forecast 8.24.0 ✔ expsmooth 2.3
## Warning: package 'fma' was built under R version 4.5.1
## Warning: package 'expsmooth' was built under R version 4.5.1
##
library(quantmod)
## Cargando paquete requerido: xts
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Cargando paquete requerido: TTR
library(pastecs)
## Warning: package 'pastecs' was built under R version 4.5.1
##
## Adjuntando el paquete: 'pastecs'
## The following objects are masked from 'package:xts':
##
## first, last
library(corrplot)
## corrplot 0.95 loaded
#library(igraph)
library(ConnectednessApproach)
## Warning: package 'ConnectednessApproach' was built under R version 4.5.1
##
## Please cite as:
## Gabauer, David (2022). ConnectednessApproach.
## R package version 1.0.0. https://CRAN.R-project.org/package=ConnectednessApproach
library(riskParityPortfolio)
## Warning: package 'riskParityPortfolio' was built under R version 4.5.1
library(quadprog)
library(PerformanceAnalytics)
## Warning: package 'PerformanceAnalytics' was built under R version 4.5.1
##
## Adjuntando el paquete: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
library(vars)
## Cargando paquete requerido: MASS
##
## Adjuntando el paquete: 'MASS'
## The following objects are masked from 'package:fma':
##
## cement, housing, petrol
## Cargando paquete requerido: strucchange
## Cargando paquete requerido: sandwich
## Cargando paquete requerido: urca
## Cargando paquete requerido: lmtest
##
## Adjuntando el paquete: 'vars'
## The following object is masked from 'package:ConnectednessApproach':
##
## VAR
# set working directory
#setwd("C:/finx_1")
#load data
# load("my_data_1.RData")
load("my_data_2.RData")
# data
head(y)
## FINX KBWB KBWP KBWR PSP
## 2016-09-13 14.06094 30.26740 42.33040 35.89139 48.02049
## 2016-09-14 14.06094 30.05338 41.99276 35.44553 47.93229
## 2016-09-15 14.33294 30.25918 42.31351 35.79232 48.50555
## 2016-09-16 14.33294 29.91194 42.00053 35.59068 47.35833
## 2016-09-19 14.30565 30.05248 42.27195 35.59897 47.53536
## 2016-09-20 14.19271 30.14343 42.28891 35.77324 47.62389
tail(y)
## FINX KBWB KBWP KBWR PSP
## 2024-01-24 24.06 49.10 97.69 53.88 60.93
## 2024-01-25 24.07 49.33 98.29 53.38 61.71
## 2024-01-26 24.35 49.42 98.13 53.87 62.22
## 2024-01-29 24.97 49.78 98.18 54.71 62.37
## 2024-01-30 24.69 50.32 98.60 54.16 62.43
## 2024-01-31 24.11 49.12 98.27 50.90 61.81
# plots
p1 <-plot.xts(y, auto.legend = TRUE, main="",legend.loc = "topleft")
# p2 <-plot.xts(y[,5], auto.legend = TRUE, main="",legend.loc = "topleft", col=c("goldenrod"))
# png("plots/etfsplot1.png", width = 600, height = 480 , pointsize=14)
#par(mfrow = c(2, 1))
p1

#p2
#par(mfrow = c(1, 1))
# dev.off()
# calculate returns
y.r <- na.omit (1*diff(log(y)))
head(y.r)
## FINX KBWB KBWP KBWR PSP
## 2016-09-14 0.000000000 -0.007096091 -0.0080081635 -0.0125002262 -0.001838321
## 2016-09-15 0.019159290 0.006824244 0.0076091270 0.0097361933 0.011888772
## 2016-09-16 0.000000000 -0.011541746 -0.0074240170 -0.0056494551 -0.023935581
## 2016-09-19 -0.001906100 0.004687488 0.0064414130 0.0002328709 0.003731254
## 2016-09-20 -0.007925903 0.003021802 0.0004010366 0.0048834507 0.001860629
## 2016-09-21 -0.002656084 0.003558848 0.0123582609 0.0006954457 0.011090574
tail(y.r)
## FINX KBWB KBWP KBWR PSP
## 2024-01-24 -0.0099256402 0.009824046 0.014538618 0.005956831 0.0057608256
## 2024-01-25 0.0004155828 0.004673462 0.006123083 -0.009323207 0.0127203119
## 2024-01-26 0.0115655977 0.001822704 -0.001629203 0.009137555 0.0082305314
## 2024-01-29 0.0251432147 0.007258117 0.000509429 0.015472772 0.0024078670
## 2024-01-30 -0.0112767204 0.010789336 0.004268713 -0.010103861 0.0009615546
## 2024-01-31 -0.0237716102 -0.024136349 -0.003352479 -0.062079666 -0.0099807492
summary(y.r)
## Index FINX KBWB
## Min. :2016-09-14 Min. :-0.1374266 Min. :-0.1732648
## 1st Qu.:2018-07-19 1st Qu.:-0.0078072 1st Qu.:-0.0087839
## Median :2020-05-22 Median : 0.0014496 Median : 0.0006083
## Mean :2020-05-22 Mean : 0.0002904 Mean : 0.0002607
## 3rd Qu.:2022-03-25 3rd Qu.: 0.0098739 3rd Qu.: 0.0099484
## Max. :2024-01-31 Max. : 0.1057545 Max. : 0.1383334
## KBWP KBWR PSP
## Min. :-0.1384327 Min. :-0.1705978 Min. :-0.1329668
## 1st Qu.:-0.0058426 1st Qu.:-0.0100032 1st Qu.:-0.0054966
## Median : 0.0009596 Median : 0.0003347 Median : 0.0009038
## Mean : 0.0004535 Mean : 0.0001881 Mean : 0.0001359
## 3rd Qu.: 0.0072505 3rd Qu.: 0.0099268 3rd Qu.: 0.0068730
## Max. : 0.0905202 Max. : 0.1516565 Max. : 0.1010676
# summary statistics
sumstats = stat.desc(100*y.r, basic=F, norm=TRUE)
ss_o = format(round(sumstats, 4), nsmall = 4)
ss_o
## FINX KBWB KBWP KBWR PSP
## median 0.1450 0.0608 0.0960 0.0335 0.0904
## mean 0.0290 0.0261 0.0454 0.0188 0.0136
## SE.mean 0.0424 0.0452 0.0320 0.0474 0.0338
## CI.mean.0.95 0.0831 0.0886 0.0628 0.0929 0.0664
## var 3.3368 3.7918 1.9053 4.1698 2.1269
## std.dev 1.8267 1.9473 1.3803 2.0420 1.4584
## coef.var 62.9081 74.6822 30.4352 108.5401 107.2838
## skewness -0.4934 -0.4741 -1.1447 -0.1898 -0.9754
## skew.2SE -4.3433 -4.1741 -10.0773 -1.6706 -8.5867
## kurtosis 5.5885 11.0127 14.2302 7.5726 13.5399
## kurt.2SE 24.6122 48.5008 62.6706 33.3503 59.6308
## normtest.W 0.9364 0.8979 0.8823 0.9225 0.8766
## normtest.p 0.0000 0.0000 0.0000 0.0000 0.0000
summary(y.r)
## Index FINX KBWB
## Min. :2016-09-14 Min. :-0.1374266 Min. :-0.1732648
## 1st Qu.:2018-07-19 1st Qu.:-0.0078072 1st Qu.:-0.0087839
## Median :2020-05-22 Median : 0.0014496 Median : 0.0006083
## Mean :2020-05-22 Mean : 0.0002904 Mean : 0.0002607
## 3rd Qu.:2022-03-25 3rd Qu.: 0.0098739 3rd Qu.: 0.0099484
## Max. :2024-01-31 Max. : 0.1057545 Max. : 0.1383334
## KBWP KBWR PSP
## Min. :-0.1384327 Min. :-0.1705978 Min. :-0.1329668
## 1st Qu.:-0.0058426 1st Qu.:-0.0100032 1st Qu.:-0.0054966
## Median : 0.0009596 Median : 0.0003347 Median : 0.0009038
## Mean : 0.0004535 Mean : 0.0001881 Mean : 0.0001359
## 3rd Qu.: 0.0072505 3rd Qu.: 0.0099268 3rd Qu.: 0.0068730
## Max. : 0.0905202 Max. : 0.1516565 Max. : 0.1010676
summary(y.r["2020-03-01/2021-03-01"] )
## Index FINX KBWB
## Min. :2020-03-02 Min. :-0.137427 Min. :-0.173265
## 1st Qu.:2020-05-31 1st Qu.:-0.008851 1st Qu.:-0.016855
## Median :2020-08-27 Median : 0.005154 Median : 0.001043
## Mean :2020-08-28 Mean : 0.001911 Mean : 0.001134
## 3rd Qu.:2020-11-25 3rd Qu.: 0.015390 3rd Qu.: 0.020576
## Max. :2021-03-01 Max. : 0.105755 Max. : 0.138333
## KBWP KBWR PSP
## Min. :-0.1384327 Min. :-0.1705978 Min. :-0.1329668
## 1st Qu.:-0.0103269 1st Qu.:-0.0177877 1st Qu.:-0.0061869
## Median : 0.0012322 Median : 0.0005712 Median : 0.0022213
## Mean : 0.0005454 Mean : 0.0013883 Mean : 0.0009606
## 3rd Qu.: 0.0153298 3rd Qu.: 0.0218701 3rd Qu.: 0.0111955
## Max. : 0.0905202 Max. : 0.1516565 Max. : 0.1010676
summary (window(y.r, start="2020-03-01", end = "2021-03-01" ))
## Index FINX KBWB
## Min. :2020-03-02 Min. :-0.137427 Min. :-0.173265
## 1st Qu.:2020-05-31 1st Qu.:-0.008851 1st Qu.:-0.016855
## Median :2020-08-27 Median : 0.005154 Median : 0.001043
## Mean :2020-08-28 Mean : 0.001911 Mean : 0.001134
## 3rd Qu.:2020-11-25 3rd Qu.: 0.015390 3rd Qu.: 0.020576
## Max. :2021-03-01 Max. : 0.105755 Max. : 0.138333
## KBWP KBWR PSP
## Min. :-0.1384327 Min. :-0.1705978 Min. :-0.1329668
## 1st Qu.:-0.0103269 1st Qu.:-0.0177877 1st Qu.:-0.0061869
## Median : 0.0012322 Median : 0.0005712 Median : 0.0022213
## Mean : 0.0005454 Mean : 0.0013883 Mean : 0.0009606
## 3rd Qu.: 0.0153298 3rd Qu.: 0.0218701 3rd Qu.: 0.0111955
## Max. : 0.0905202 Max. : 0.1516565 Max. : 0.1010676
# write.csv(ss_o, "sumstats.csv")
# write.csv(noquote(t(ss_o)), "sumstats.csv")
# correlations
cor(y.r)
## FINX KBWB KBWP KBWR PSP
## FINX 1.0000000 0.5851842 0.4910805 0.4983772 0.8104792
## KBWB 0.5851842 1.0000000 0.7566345 0.9139584 0.7111019
## KBWP 0.4910805 0.7566345 1.0000000 0.7184719 0.6144765
## KBWR 0.4983772 0.9139584 0.7184719 1.0000000 0.6258025
## PSP 0.8104792 0.7111019 0.6144765 0.6258025 1.0000000
# write.csv(cor(y.r), "correlations.csv")
# png("plots/corrplot1.png", width = 580, height = 550)
corrplot(cor(y.r), type = "upper", order = "hclust",
tl.col = "black", tl.srt = 45)

# dev.off()
## COL2: Get diverging colors
# c('RdBu', 'BrBG', 'PiYG', 'PRGn', 'PuOr', 'RdYlBu')
corrplot(cor(y.r), type = "upper", order = "hclust",
tl.col = "black", tl.srt = 45, col=COL2("PiYG"))

##########################################################
# connectedness approach
# https://gabauerdavid.github.io/ConnectednessApproach/Rpackage
##########################################################
# lag length selection
vars::VARselect(y.r)
## $selection
## AIC(n) HQ(n) SC(n) FPE(n)
## 4 2 1 4
##
## $criteria
## 1 2 3 4 5
## AIC(n) -4.522048e+01 -4.525987e+01 -4.527544e+01 -4.528622e+01 -4.527165e+01
## HQ(n) -4.518742e+01 -4.519926e+01 -4.518727e+01 -4.517050e+01 -4.512838e+01
## SC(n) -4.513080e+01 -4.509546e+01 -4.503629e+01 -4.497234e+01 -4.488303e+01
## FPE(n) 2.296117e-20 2.207437e-20 2.173348e-20 2.150048e-20 2.181612e-20
## 6 7 8 9 10
## AIC(n) -4.527482e+01 -4.528219e+01 -4.528020e+01 -4.528319e+01 -4.527504e+01
## HQ(n) -4.510400e+01 -4.508382e+01 -4.505428e+01 -4.502972e+01 -4.499401e+01
## SC(n) -4.481147e+01 -4.474410e+01 -4.466739e+01 -4.459564e+01 -4.451275e+01
## FPE(n) 2.174714e-20 2.158775e-20 2.163088e-20 2.156671e-20 2.174364e-20
# standard dy approach
dca = ConnectednessApproach(y.r,
nlag=1,
nfore=20,
window.size=200)
## Estimating model
## Computing connectedness measures
## The (generalized) VAR connectedness approach is implemented according to:
## Diebold, F. X., & Yilmaz, K. (2012). Better to give than to receive: Predictive directional measurement of volatility spillovers. International Journal of Forecasting.
(dca$TABLE)
## FINX KBWB KBWP KBWR PSP FROM
## FINX "45.30" "12.04" " 7.88" " 9.35" "25.43" "54.70"
## KBWB " 9.64" "33.47" "15.77" "27.19" "13.93" "66.53"
## KBWP " 7.78" "19.38" "42.72" "18.45" "11.67" "57.28"
## KBWR " 8.01" "28.90" "16.05" "35.59" "11.45" "64.41"
## PSP "22.25" "15.80" "10.87" "12.15" "38.93" "61.07"
## TO " 47.68" " 76.11" " 50.58" " 67.14" " 62.47" "303.98"
## Inc.Own " 92.98" "109.59" " 93.30" "102.73" "101.40" "cTCI/TCI"
## NET "-7.02" " 9.59" "-6.70" " 2.73" " 1.40" "76.00/60.80"
## NPT "0.00" "4.00" "1.00" "3.00" "2.00" ""
PlotTCI(dca, ylim=c(0,100))

# tvp-var
dca = ConnectednessApproach(y.r,
nlag=1,
nfore=20,
#window.size=200,
corrected = FALSE,
model="TVP-VAR")
## Estimating model
## Computing connectedness measures
## The TVP-VAR connectedness approach is implemented according to:
## Antonakakis, N., Chatziantoniou, I., & Gabauer, D. (2020). Refined measures of dynamic connectedness based on time-varying parameter vector autoregressions. Journal of Risk and Financial Management.
(dca$TABLE)
## FINX KBWB KBWP KBWR PSP FROM
## FINX "44.40" "12.31" " 8.43" " 9.31" "25.54" "55.60"
## KBWB " 9.64" "33.22" "15.68" "27.07" "14.39" "66.78"
## KBWP " 8.15" "19.16" "42.10" "18.17" "12.42" "57.90"
## KBWR " 7.85" "28.88" "15.95" "35.54" "11.77" "64.46"
## PSP "22.25" "16.11" "11.42" "12.26" "37.96" "62.04"
## TO " 47.88" " 76.47" " 51.49" " 66.81" " 64.13" "306.78"
## Inc.Own " 92.28" "109.70" " 93.58" "102.36" "102.08" "cTCI/TCI"
## NET "-7.72" " 9.70" "-6.42" " 2.36" " 2.08" "76.69/61.36"
## NPT "0.00" "4.00" "1.00" "3.00" "2.00" ""
PlotTCI(dca, ylim=c(0,100))

# tvp -var
#dca = ConnectednessApproach(y.r,
# nlag=1,
# nfore=20,
# model="TVP-VAR",
# connectedness="Time",
# corrected=TRUE,
# VAR_config=list(TVPVAR=list(kappa1=0.99, kappa2=0.99,
# prior="MinnesotaPrior", gamma=0.1)))
str(dca)
## List of 11
## $ TABLE : chr [1:9, 1:6] "44.40" " 9.64" " 8.15" " 7.85" ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:9] "FINX" "KBWB" "KBWP" "KBWR" ...
## .. ..$ : chr [1:6] "FINX" "KBWB" "KBWP" "KBWR" ...
## $ CT : num [1:5, 1:5, 1:1857] 0.3983 0.1037 0.0886 0.0823 0.2246 ...
## ..- attr(*, "dimnames")=List of 3
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## .. ..$ : chr [1:1857] "2016-09-14" "2016-09-15" "2016-09-16" "2016-09-19" ...
## $ TCI : num [1:1857, 1] 65 66.6 67.8 67.5 68.2 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:1857] "2016-09-14" "2016-09-15" "2016-09-16" "2016-09-19" ...
## .. ..$ : chr "TCI"
## $ TO : num [1:1857, 1:5] 49.9 48.6 58.8 53.9 53.2 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:1857] "2016-09-14" "2016-09-15" "2016-09-16" "2016-09-19" ...
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## $ FROM : num [1:1857, 1:5] 60.2 66.8 63.8 63.2 65.7 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:1857] "2016-09-14" "2016-09-15" "2016-09-16" "2016-09-19" ...
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## $ NET : num [1:1857, 1:5] -10.26 -18.19 -4.97 -9.36 -12.52 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:1857] "2016-09-14" "2016-09-15" "2016-09-16" "2016-09-19" ...
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## $ NPT : num [1:1857, 1:5] 0 0 1 1 1 1 2 2 2 4 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:1857] "2016-09-14" "2016-09-15" "2016-09-16" "2016-09-19" ...
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## $ NPDC : num [1:5, 1:5, 1:1857] 0 -3.47 -1.06 -1.85 -3.87 ...
## ..- attr(*, "dimnames")=List of 3
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## .. ..$ : chr [1:1857] "2016-09-14" "2016-09-15" "2016-09-16" "2016-09-19" ...
## $ PCI : num [1:5, 1:5, 1:1857] 100 51.1 39.2 40 79.7 ...
## ..- attr(*, "dimnames")=List of 3
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## .. ..$ : chr [1:1857] "2016-09-14" "2016-09-15" "2016-09-16" "2016-09-19" ...
## $ INFLUENCE: num [1:5, 1:5, 1:1857] 0 14.35 5.63 10.12 7.94 ...
## ..- attr(*, "dimnames")=List of 3
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## .. ..$ : chr [1:5] "FINX" "KBWB" "KBWP" "KBWR" ...
## .. ..$ : chr [1:1857] "2016-09-14" "2016-09-15" "2016-09-16" "2016-09-19" ...
## $ config :List of 4
## ..$ nfore : num 20
## ..$ approach : chr "Time"
## ..$ generalized: logi TRUE
## ..$ corrected : logi FALSE
(dca$TABLE)
## FINX KBWB KBWP KBWR PSP FROM
## FINX "44.40" "12.31" " 8.43" " 9.31" "25.54" "55.60"
## KBWB " 9.64" "33.22" "15.68" "27.07" "14.39" "66.78"
## KBWP " 8.15" "19.16" "42.10" "18.17" "12.42" "57.90"
## KBWR " 7.85" "28.88" "15.95" "35.54" "11.77" "64.46"
## PSP "22.25" "16.11" "11.42" "12.26" "37.96" "62.04"
## TO " 47.88" " 76.47" " 51.49" " 66.81" " 64.13" "306.78"
## Inc.Own " 92.28" "109.70" " 93.58" "102.36" "102.08" "cTCI/TCI"
## NET "-7.72" " 9.70" "-6.42" " 2.36" " 2.08" "76.69/61.36"
## NPT "0.00" "4.00" "1.00" "3.00" "2.00" ""
# write.csv(noquote(dca$TABLE), "connect_table.csv")
gfevd = dca$CT
dim(gfevd)
## [1] 5 5 1857
(ConnectednessTable(gfevd))
## $FEVD
## FINX KBWB KBWP KBWR PSP
## FINX 44.403830 12.31394 8.432108 9.307987 25.54214
## KBWB 9.638891 33.22159 15.677429 27.072730 14.38936
## KBWP 8.146371 19.16322 42.096704 18.171943 12.42176
## KBWR 7.847759 28.88411 15.954555 35.541755 11.77183
## PSP 22.245221 16.11364 11.422970 12.261476 37.95669
##
## $TCI
## [1] 61.35589
##
## $cTCI
## [1] 76.69486
##
## $PCI
## [,1] [,2] [,3] [,4] [,5]
## [1,] 100.00000 44.09161 32.16655 35.33576 73.43548
## [2,] 44.09161 100.00000 63.25524 89.73181 59.99728
## [3,] 32.16655 63.25524 100.00000 61.06833 45.90021
## [4,] 35.33576 89.73181 61.06833 100.00000 49.28303
## [5,] 73.43548 59.99728 45.90021 49.28303 100.00000
##
## $TO
## FINX KBWB KBWP KBWR PSP
## 47.87824 76.47491 51.48706 66.81413 64.12508
##
## $FROM
## FINX KBWB KBWP KBWR PSP
## 55.59617 66.77841 57.90330 64.45825 62.04331
##
## $NET
## FINX KBWB KBWP KBWR PSP
## -7.717928 9.696502 -6.416234 2.355890 2.081770
##
## $NPDC
## FINX KBWB KBWP KBWR PSP
## FINX 0.0000000 2.675048 0.2857362 1.4602279 3.2969157
## KBWB -2.6750479 0.000000 -3.4857955 -1.8113761 -1.7242827
## KBWP -0.2857362 3.485795 0.0000000 2.2173873 0.9987877
## KBWR -1.4602279 1.811376 -2.2173873 0.0000000 -0.4896505
## PSP -3.2969157 1.724283 -0.9987877 0.4896505 0.0000000
##
## $TABLE
## FINX KBWB KBWP KBWR PSP FROM
## FINX "44.40" "12.31" " 8.43" " 9.31" "25.54" "55.60"
## KBWB " 9.64" "33.22" "15.68" "27.07" "14.39" "66.78"
## KBWP " 8.15" "19.16" "42.10" "18.17" "12.42" "57.90"
## KBWR " 7.85" "28.88" "15.95" "35.54" "11.77" "64.46"
## PSP "22.25" "16.11" "11.42" "12.26" "37.96" "62.04"
## TO " 47.88" " 76.47" " 51.49" " 66.81" " 64.13" "306.78"
## Inc.Own " 92.28" "109.70" " 93.58" "102.36" "102.08" "cTCI/TCI"
## NET "-7.72" " 9.70" "-6.42" " 2.36" " 2.08" "76.69/61.36"
## NPT "0.00" "4.00" "1.00" "3.00" "2.00" ""
##
## $NPT
## FINX KBWB KBWP KBWR PSP
## 0 4 1 3 2
##
## $INFLUENCE
## FINX KBWB KBWP KBWR PSP
## FINX 0.000000 12.185436 1.723537 8.511597 6.899138
## KBWB 12.185436 0.000000 10.004966 3.237095 5.652829
## KBWP 1.723537 10.004966 0.000000 6.497553 4.188715
## KBWR 8.511597 3.237095 6.497553 0.000000 2.037384
## PSP 6.899138 5.652829 4.188715 2.037384 0.000000
(ConnectednessTable(gfevd)$PCI)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 100.00000 44.09161 32.16655 35.33576 73.43548
## [2,] 44.09161 100.00000 63.25524 89.73181 59.99728
## [3,] 32.16655 63.25524 100.00000 61.06833 45.90021
## [4,] 35.33576 89.73181 61.06833 100.00000 49.28303
## [5,] 73.43548 59.99728 45.90021 49.28303 100.00000
# write.csv(ConnectednessTable(gfevd)$PCI, "connect_table_pw.csv")
# png("plots/plot_tci.png", width = 600, height = 480 , pointsize=14)
PlotTCI(dca, ylim=c(0,100))
# dev.off()
View (dca$TCI)
max(dca$TCI)
## [1] 77.02893
min(dca$TCI)
## [1] 43.78821
mean(dca$TCI)
## [1] 61.35589
# png("plots/plot_to.png", width = 600, height = 480 , pointsize=14)
PlotTO(dca, ylim=c(0,100))

# dev.off()
# png("plots/plot_from.png", width = 600, height = 480 , pointsize=14)
PlotFROM(dca, ylim=c(0,100))

# dev.off()
# png("plots/plot_net.png", width = 600, height = 480 , pointsize=14)
PlotNET(dca, ylim=c(-20,20))

# dev.off()
# png("plots/plot_npdc.png", width = 600, height = 480 , pointsize=14)
PlotNPDC(dca, ylim=c(-15,15))

# dev.off()
# png("plots/plot_network.png", width = 600, height = 480 , pointsize=14)
PlotNetwork(dca)

# dev.off()
# portfolio weights
mcp = MinimumConnectednessPortfolio(as.zoo(y.r), dca$PCI, statistics="Fisher")
mcp$TABLE
## Mean Std.Dev. 5% 95% HE p-value SR
## FINX " 0.34" " 0.09" " 0.20" " 0.48" " 0.33" " 0.00" " 0.23"
## KBWB " 0.01" " 0.02" " 0.00" " 0.04" " 0.41" " 0.00" " 0.23"
## KBWP " 0.25" " 0.09" " 0.02" " 0.37" "-0.17" " 0.00" " 0.23"
## KBWR " 0.32" " 0.10" " 0.18" " 0.55" " 0.46" " 0.00" " 0.23"
## PSP " 0.09" " 0.07" " 0.00" " 0.20" "-0.05" " 0.27" " 0.23"
w.mcp <- mcp$portfolio_weights
apply(w.mcp,2, mean)
## FINX KBWB KBWP KBWR PSP
## 0.336416696 0.006370936 0.252549512 0.317054277 0.087608578
rpp = RiskParityPortfolio(as.zoo(y.r), dca$PCI, statistics="Fisher")
rpp$TABLE
## Mean Std.Dev. 5% 95% HE p-value SR
## FINX " 0.22" " 0.01" " 0.20" " 0.25" " 0.34" " 0.00" " 0.17"
## KBWB " 0.18" " 0.01" " 0.17" " 0.19" " 0.42" " 0.00" " 0.17"
## KBWP " 0.21" " 0.02" " 0.19" " 0.23" "-0.15" " 0.00" " 0.17"
## KBWR " 0.19" " 0.01" " 0.18" " 0.20" " 0.47" " 0.00" " 0.17"
## PSP " 0.19" " 0.01" " 0.18" " 0.20" "-0.03" " 0.47" " 0.17"
w.rpp <- rpp$portfolio_weights
apply(w.rpp,2, mean)
## FINX KBWB KBWP KBWR PSP
## 0.2203569 0.1814728 0.2113482 0.1935275 0.1932946
head(w.rpp)
## FINX KBWB KBWP KBWR PSP
## [1,] 0.2201993 0.1829295 0.2072242 0.1970091 0.1926379
## [2,] 0.2120304 0.1875103 0.2067797 0.1963662 0.1973134
## [3,] 0.2140234 0.1915096 0.2062801 0.1984707 0.1897163
## [4,] 0.2175372 0.1906678 0.2051263 0.1977266 0.1889421
## [5,] 0.2150457 0.1923422 0.2007533 0.2016547 0.1902041
## [6,] 0.2020789 0.1972787 0.2069408 0.2072532 0.1864483
tail(w.rpp)
## FINX KBWB KBWP KBWR PSP
## [1852,] 0.1947913 0.1695676 0.2711201 0.1790716 0.1854494
## [1853,] 0.1945014 0.1693023 0.2706702 0.1796471 0.1858790
## [1854,] 0.1943951 0.1691582 0.2710641 0.1795558 0.1858267
## [1855,] 0.1945916 0.1691273 0.2709184 0.1793069 0.1860558
## [1856,] 0.1950367 0.1690180 0.2710874 0.1793159 0.1855420
## [1857,] 0.1942398 0.1689084 0.2703962 0.1801519 0.1863037
dim(w.rpp)
## [1] 1857 5
dim(y.r)
## [1] 1857 5
dim(w.mcp)
## [1] 1857 5
head (w.rpp*y.r)
## FINX KBWB KBWP KBWR
## 2016-09-14 0.0000000000 -0.0012980847 -1.659485e-03 -2.462658e-03
## 2016-09-15 0.0040623523 0.0012796158 1.573413e-03 1.911860e-03
## 2016-09-16 0.0000000000 -0.0022103548 -1.531427e-03 -1.121251e-03
## 2016-09-19 -0.0004146477 0.0008937530 1.321303e-03 4.604478e-05
## 2016-09-20 -0.0017044312 0.0005812201 8.050944e-05 9.847707e-04
## 2016-09-21 -0.0005367386 0.0007020850 2.557429e-03 1.441333e-04
## PSP
## 2016-09-14 -0.0003541304
## 2016-09-15 0.0023458141
## 2016-09-16 -0.0045409686
## 2016-09-19 0.0007049910
## 2016-09-20 0.0003538992
## 2016-09-21 0.0020678186
w.rpp[1,1] * y.r[1,1]
## FINX
## 2016-09-14 0
w.mcp_temp <- cbind(y.r[,1], w.mcp)
head(w.mcp_temp)
## FINX FINX.1 KBWB KBWP KBWR PSP
## 2016-09-14 0.000000000 0.3512573 0.0000000 0.2610636 0.3740703 0.0136088
## 2016-09-15 0.019159290 0.2983188 0.0000000 0.2736721 0.3041726 0.1238364
## 2016-09-16 0.000000000 0.4517827 0.0000000 0.2210688 0.3271485 0.0000000
## 2016-09-19 -0.001906100 0.4281781 0.0000000 0.2687955 0.3030264 0.0000000
## 2016-09-20 -0.007925903 0.4149620 0.0000000 0.2136651 0.3713729 0.0000000
## 2016-09-21 -0.002656084 0.3796332 0.1380743 0.3583619 0.1239305 0.0000000
w.mcp_temp <- w.mcp_temp[,-1]
head(w.mcp_temp)
## FINX.1 KBWB KBWP KBWR PSP
## 2016-09-14 0.3512573 0.0000000 0.2610636 0.3740703 0.0136088
## 2016-09-15 0.2983188 0.0000000 0.2736721 0.3041726 0.1238364
## 2016-09-16 0.4517827 0.0000000 0.2210688 0.3271485 0.0000000
## 2016-09-19 0.4281781 0.0000000 0.2687955 0.3030264 0.0000000
## 2016-09-20 0.4149620 0.0000000 0.2136651 0.3713729 0.0000000
## 2016-09-21 0.3796332 0.1380743 0.3583619 0.1239305 0.0000000
w.rpp_temp <- cbind(y.r[,1], w.rpp)
head(w.rpp_temp)
## FINX FINX.1 KBWB KBWP KBWR PSP
## 2016-09-14 0.000000000 0.2201993 0.1829295 0.2072242 0.1970091 0.1926379
## 2016-09-15 0.019159290 0.2120304 0.1875103 0.2067797 0.1963662 0.1973134
## 2016-09-16 0.000000000 0.2140234 0.1915096 0.2062801 0.1984707 0.1897163
## 2016-09-19 -0.001906100 0.2175372 0.1906678 0.2051263 0.1977266 0.1889421
## 2016-09-20 -0.007925903 0.2150457 0.1923422 0.2007533 0.2016547 0.1902041
## 2016-09-21 -0.002656084 0.2020789 0.1972787 0.2069408 0.2072532 0.1864483
w.rpp_temp <- w.rpp_temp[,-1]
head(w.rpp_temp)
## FINX.1 KBWB KBWP KBWR PSP
## 2016-09-14 0.2201993 0.1829295 0.2072242 0.1970091 0.1926379
## 2016-09-15 0.2120304 0.1875103 0.2067797 0.1963662 0.1973134
## 2016-09-16 0.2140234 0.1915096 0.2062801 0.1984707 0.1897163
## 2016-09-19 0.2175372 0.1906678 0.2051263 0.1977266 0.1889421
## 2016-09-20 0.2150457 0.1923422 0.2007533 0.2016547 0.1902041
## 2016-09-21 0.2020789 0.1972787 0.2069408 0.2072532 0.1864483
################################################################
# portfolios
################################################################
# choice of portfolios; mcp, rpp, ew, rp
# https://cran.r-project.org/web/packages/riskParityPortfolio/vignettes/RiskParityPortfolio.html#a-pratical-example-using-faang-price-data
# for backtesting
# https://cran.r-project.org/web/packages/portfolioBacktest/vignettes/PortfolioBacktest.html#defining-portfolios
y.r_c <- exp(y.r)-1
w.eq <- rep(1/ncol(y), ncol(y) )
w.rp <- riskParityPortfolio(cov(y.r_c))$w
# https://bookdown.org/compfinezbook/introcompfinr/Efficient-portfolios-of.html
max_sharpe_ratio <- function(dataset) {
# prices <- dataset$adjusted
prices <- dataset
log_returns <- diff(log(prices))[-1]
log_returns <- exp(log_returns)-1
N <- ncol(prices)
Sigma <- cov(log_returns)
mu <- colMeans(log_returns)
if (all(mu <= 1e-8))
return(rep(0, N))
Dmat <- 2 * Sigma
Amat <- diag(N)
Amat <- cbind(mu, Amat)
bvec <- c(1, rep(0, N))
dvec <- rep(0, N)
res <- solve.QP(Dmat = Dmat, dvec = dvec, Amat = Amat, bvec = bvec, meq = 1)
w <- res$solution
return(w/sum(w))
}
# rolling portfolio weights
wl <- 252
roll_rp = na.omit (rollapply(y.r_c, wl ,function(x) riskParityPortfolio(cov(x))$w, by.column=FALSE,align="right"))
head(roll_rp)
## FINX KBWB KBWP KBWR PSP
## 2017-09-13 0.2601218 0.1354093 0.2282172 0.1108061 0.2654456
## 2017-09-14 0.2600080 0.1353569 0.2280082 0.1108063 0.2658206
## 2017-09-15 0.2624229 0.1343908 0.2270776 0.1101739 0.2659347
## 2017-09-18 0.2602410 0.1341540 0.2263927 0.1093945 0.2698177
## 2017-09-19 0.2601393 0.1340942 0.2268590 0.1094077 0.2694997
## 2017-09-20 0.2607467 0.1339981 0.2267320 0.1092615 0.2692616
tail(roll_rp)
## FINX KBWB KBWP KBWR PSP
## 2024-01-24 0.1893519 0.1405136 0.3195714 0.1267717 0.2237914
## 2024-01-25 0.1895963 0.1405747 0.3191699 0.1269655 0.2236935
## 2024-01-26 0.1893654 0.1407078 0.3196136 0.1268525 0.2234607
## 2024-01-29 0.1887673 0.1404967 0.3197027 0.1264044 0.2246288
## 2024-01-30 0.1889260 0.1405531 0.3194513 0.1263924 0.2246773
## 2024-01-31 0.1888537 0.1404422 0.3197402 0.1249097 0.2260541
roll_ms = na.omit (rollapply(y, wl ,function(x) max_sharpe_ratio(x), by.column=FALSE,align="right"))
colnames(roll_ms) <- colnames(roll_rp)
head(roll_ms)
## FINX KBWB KBWP KBWR PSP
## 2017-09-12 0.7038954 0.1567573 0.13934730 -1.762248e-19 0.000000e+00
## 2017-09-13 0.6786288 0.1699154 0.15145572 0.000000e+00 0.000000e+00
## 2017-09-14 0.6998628 0.1876540 0.11248322 1.011552e-19 0.000000e+00
## 2017-09-15 0.5699644 0.1529513 0.10971027 0.000000e+00 1.673740e-01
## 2017-09-18 0.6891827 0.2065204 0.10429693 -1.368612e-20 1.056312e-18
## 2017-09-19 0.7029761 0.2028302 0.09419365 -2.660184e-20 0.000000e+00
tail(roll_ms)
## FINX KBWB KBWP KBWR PSP
## 2024-01-24 0 -9.575532e-17 0.4264807 0.000000e+00 0.5735193
## 2024-01-25 0 -1.613315e-16 0.3826578 3.455460e-17 0.6173422
## 2024-01-26 0 -4.868403e-17 0.3876519 8.454477e-18 0.6123481
## 2024-01-29 0 -8.261874e-17 0.4371569 4.096572e-17 0.5628431
## 2024-01-30 0 2.299692e-18 0.3780091 -1.022027e-16 0.6219909
## 2024-01-31 0 -3.513225e-16 0.3498696 -4.643527e-17 0.6501304
###########################3
# port_eqw <- Return.portfolio(y.r, weights=w.eq , verbose=TRUE, geometric = FALSE)
port_eqw <- Return.portfolio( y.r_c, verbose=TRUE, rebalance_on = "days")
head (port_eqw$BOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2016-09-14 0.2 0.2 0.2 0.2 0.2
## 2016-09-15 0.2 0.2 0.2 0.2 0.2
## 2016-09-16 0.2 0.2 0.2 0.2 0.2
## 2016-09-19 0.2 0.2 0.2 0.2 0.2
## 2016-09-20 0.2 0.2 0.2 0.2 0.2
## 2016-09-21 0.2 0.2 0.2 0.2 0.2
## 2016-09-22 0.2 0.2 0.2 0.2 0.2
## 2016-09-23 0.2 0.2 0.2 0.2 0.2
## 2016-09-26 0.2 0.2 0.2 0.2 0.2
## 2016-09-27 0.2 0.2 0.2 0.2 0.2
## 2016-09-28 0.2 0.2 0.2 0.2 0.2
## 2016-09-29 0.2 0.2 0.2 0.2 0.2
## 2016-09-30 0.2 0.2 0.2 0.2 0.2
## 2016-10-03 0.2 0.2 0.2 0.2 0.2
## 2016-10-04 0.2 0.2 0.2 0.2 0.2
## 2016-10-05 0.2 0.2 0.2 0.2 0.2
## 2016-10-06 0.2 0.2 0.2 0.2 0.2
## 2016-10-07 0.2 0.2 0.2 0.2 0.2
## 2016-10-10 0.2 0.2 0.2 0.2 0.2
## 2016-10-11 0.2 0.2 0.2 0.2 0.2
## 2016-10-12 0.2 0.2 0.2 0.2 0.2
## 2016-10-13 0.2 0.2 0.2 0.2 0.2
head (port_eqw$EOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2016-09-14 0.2011792 0.1997566 0.1995745 0.1986800 0.2008097
## 2016-09-15 0.2016278 0.1991560 0.1993123 0.1997367 0.2001672
## 2016-09-16 0.2019450 0.1996276 0.2004513 0.2008073 0.1971687
## 2016-09-19 0.1990924 0.2004095 0.2007613 0.1995188 0.2002180
## 2016-09-20 0.1983302 0.2005134 0.1999886 0.2008870 0.2002807
## 2016-09-21 0.1984694 0.1997067 0.2014717 0.1991357 0.2012165
## 2016-09-22 0.2019317 0.1987829 0.2000083 0.2001251 0.1991520
## 2016-09-23 0.2004950 0.2006694 0.1984823 0.2011190 0.1992343
## 2016-09-26 0.2023978 0.1982008 0.2007889 0.1978950 0.2007174
## 2016-09-27 0.1992896 0.2012331 0.2000082 0.2003648 0.1991042
## 2016-09-28 0.1985326 0.1996830 0.2005536 0.2012193 0.2000114
## 2016-09-29 0.2020993 0.1985116 0.1995699 0.1987510 0.2010683
## 2016-09-30 0.1992316 0.2011705 0.1991885 0.2014099 0.1989994
## 2016-10-03 0.2018349 0.2001015 0.1984628 0.1985796 0.2010213
## 2016-10-04 0.1979544 0.2012461 0.2021708 0.2003036 0.1983250
## 2016-10-05 0.1983903 0.2018816 0.1985136 0.2017465 0.1994680
## 2016-10-06 0.2002848 0.2008405 0.1993215 0.2005569 0.1989963
## 2016-10-07 0.1976332 0.2001186 0.2033183 0.1999988 0.1989310
## 2016-10-10 0.1999815 0.1999298 0.1998052 0.2005150 0.1997686
## 2016-10-11 0.1987804 0.1998644 0.2012065 0.2003860 0.1997627
## 2016-10-12 0.2003592 0.1995101 0.2015527 0.1992015 0.1993765
## 2016-10-13 0.2010805 0.1987476 0.2028685 0.1970307 0.2002727
# port_rp <- Return.portfolio(y.r, weights=w.rp,verbose=TRUE)
port_rp <- Return.portfolio( y.r_c, weights=roll_rp, verbose=TRUE)
port_mcp <- Return.portfolio( y.r_c, weights=w.mcp_temp,verbose=TRUE)
port_rpp <- Return.portfolio( y.r_c, weights=w.rpp_temp,verbose=TRUE)
port_ms <- Return.portfolio( y.r_c, weights=roll_ms, verbose=TRUE)
## Warning in Return.portfolio.geometric(R = R, weights = weights, wealth.index =
## wealth.index, : The weights for one or more periods do not sum up to 1:
## assuming a return of 0 for the residual weights
str(port_eqw)
## List of 6
## $ returns :An xts object on 2016-09-14 / 2024-01-31 containing:
## Data: double [1857, 1]
## Columns: portfolio.returns
## Index: Date [1857] (TZ: "UTC")
## $ contribution:An xts object on 2016-09-14 / 2024-01-31 containing:
## Data: double [1857, 5]
## Columns: FINX, KBWB, KBWP, KBWR, PSP
## Index: Date [1857] (TZ: "UTC")
## $ BOP.Weight :An xts object on 2016-09-14 / 2024-01-31 containing:
## Data: double [1857, 5]
## Columns: FINX, KBWB, KBWP, KBWR, PSP
## Index: Date [1857] (TZ: "UTC")
## $ EOP.Weight :An xts object on 2016-09-14 / 2024-01-31 containing:
## Data: double [1857, 5]
## Columns: FINX, KBWB, KBWP, KBWR, PSP
## Index: Date [1857] (TZ: "UTC")
## $ BOP.Value :An xts object on 2016-09-14 / 2024-01-31 containing:
## Data: double [1857, 5]
## Columns: FINX, KBWB, KBWP, KBWR, PSP
## Index: Date [1857] (TZ: "UTC")
## $ EOP.Value :An xts object on 2016-09-14 / 2024-01-31 containing:
## Data: double [1857, 5]
## Columns: FINX, KBWB, KBWP, KBWR, PSP
## Index: Date [1857] (TZ: "UTC")
################################################################
# some checks on the eqw
head(port_eqw$returns)
## portfolio.returns
## 2016-09-14 -0.0058612425
## 2016-09-15 0.0111146415
## 2016-09-16 -0.0096313691
## 2016-09-19 0.0026455063
## 2016-09-20 0.0004581337
## 2016-09-21 0.0050391116
w.eq *y.r[1:5,]
## FINX KBWB KBWP KBWR
## 2016-09-14 0.0000000000 -0.0014192182 -1.601633e-03 -2.500045e-03
## 2016-09-15 0.0038318580 0.0013648487 1.521825e-03 1.947239e-03
## 2016-09-16 0.0000000000 -0.0023083491 -1.484803e-03 -1.129891e-03
## 2016-09-19 -0.0003812201 0.0009374976 1.288283e-03 4.657418e-05
## 2016-09-20 -0.0015851806 0.0006043604 8.020733e-05 9.766901e-04
## PSP
## 2016-09-14 -0.0003676643
## 2016-09-15 0.0023777544
## 2016-09-16 -0.0047871161
## 2016-09-19 0.0007462507
## 2016-09-20 0.0003721258
apply(w.eq *y.r[1:5,],1, sum)
## 2016-09-14 2016-09-15 2016-09-16 2016-09-19 2016-09-20
## -0.0058885604 0.0110435252 -0.0097101597 0.0026373851 0.0004482031
head(port_rp$returns)
## portfolio.returns
## 2017-09-14 -0.0017763771
## 2017-09-15 0.0041374060
## 2017-09-18 -0.0008175381
## 2017-09-19 0.0049010666
## 2017-09-20 0.0036120071
## 2017-09-21 0.0018695351
tail(port_rp$returns)
## portfolio.returns
## 2024-01-24 0.0062687041
## 2024-01-25 0.0043881475
## 2024-01-26 0.0049566005
## 2024-01-29 0.0085262017
## 2024-01-30 -0.0002796554
## 2024-01-31 -0.0186982030
table.AnnualizedReturns(apply(w.eq *y.r_c["2017-09-14/"],1,sum), scale=252, Rf=(.01/252))
##
## Annualized Return 0.0558
## Annualized Std Dev 0.2491
## Annualized Sharpe (Rf=1%) 0.1818
# in sample eqw
summary(y.r_c["2017-09-14/"])
## Index FINX KBWB
## Min. :2017-09-14 Min. :-0.1284017 Min. :-0.1590851
## 1st Qu.:2019-04-22 1st Qu.:-0.0091703 1st Qu.:-0.0096128
## Median :2020-11-19 Median : 0.0016491 Median : 0.0005399
## Mean :2020-11-21 Mean : 0.0003324 Mean : 0.0003274
## 3rd Qu.:2022-06-27 3rd Qu.: 0.0106992 3rd Qu.: 0.0105237
## Max. :2024-01-31 Max. : 0.1115490 Max. : 0.1483583
## KBWP KBWR PSP
## Min. :-0.1292782 Min. :-0.1568394 Min. :-0.1245059
## 1st Qu.:-0.0062347 1st Qu.:-0.0104000 1st Qu.:-0.0062667
## Median : 0.0009842 Median : 0.0003027 Median : 0.0009183
## Mean : 0.0005320 Mean : 0.0003301 Mean : 0.0001746
## 3rd Qu.: 0.0076571 3rd Qu.: 0.0104311 3rd Qu.: 0.0073800
## Max. : 0.0947436 Max. : 0.1637604 Max. : 0.1063514
w.eq *apply(y.r_c["2017-09-14/"], 2, mean)
## FINX KBWB KBWP KBWR PSP
## 6.647683e-05 6.548138e-05 1.064025e-04 6.602977e-05 3.492979e-05
sum(w.eq *apply(y.r_c["2017-09-14/"], 2, mean))*252
## [1] 0.08550872
# 0.06297518
################################################################
port_ret <- cbind(port_eqw$returns, port_rp$returns, port_rpp$returns, port_ms$returns )
colnames(port_ret) <- c("EQW", "RP", "RPC", "MS")
# all portfolios start at same time period
port_ret <- na.omit( port_ret)
head(port_ret)
## EQW RP RPC MS
## 2017-09-14 -0.003398237 -0.0017763771 -0.003254401 0.0001900134
## 2017-09-15 0.004138981 0.0041374060 0.004020173 0.0015495520
## 2017-09-18 0.002269839 -0.0008175381 0.002253659 0.0030643950
## 2017-09-19 0.005305115 0.0049010666 0.005086788 0.0046377793
## 2017-09-20 0.005006286 0.0036120071 0.004575106 0.0002894237
## 2017-09-21 0.002311203 0.0018695351 0.002217784 0.0021454393
# portfolio summary statistics
# starting date
aw1 <- apply(roll_rp["2017-09-14/"], 2, mean)
aw2 <- apply(roll_ms["2017-09-14/"], 2, mean)
aw3 <- apply(w.rpp_temp["2017-09-14/"], 2, mean)
summary(roll_rp["2017-09-14/"])
## Index FINX KBWB KBWP
## Min. :2017-09-14 Min. :0.1347 Min. :0.1316 Min. :0.2025
## 1st Qu.:2019-04-22 1st Qu.:0.1576 1st Qu.:0.1518 1st Qu.:0.2207
## Median :2020-11-19 Median :0.1879 Median :0.1589 Median :0.2494
## Mean :2020-11-21 Mean :0.1962 Mean :0.1595 Mean :0.2524
## 3rd Qu.:2022-06-27 3rd Qu.:0.2306 3rd Qu.:0.1713 3rd Qu.:0.2868
## Max. :2024-01-31 Max. :0.2797 Max. :0.1827 Max. :0.3231
## KBWR PSP
## Min. :0.1056 Min. :0.1661
## 1st Qu.:0.1467 1st Qu.:0.2109
## Median :0.1626 Median :0.2347
## Mean :0.1615 Mean :0.2304
## 3rd Qu.:0.1785 3rd Qu.:0.2534
## Max. :0.2155 Max. :0.2812
summary(roll_ms["2017-09-14/"])
## Index FINX KBWB KBWP
## Min. :2017-09-14 Min. :0.00000 Min. :0.00000 Min. :0.00000
## 1st Qu.:2019-04-22 1st Qu.:0.00000 1st Qu.:0.00000 1st Qu.:0.00000
## Median :2020-11-19 Median :0.01185 Median :0.00000 Median :0.08571
## Mean :2020-11-21 Mean :0.39001 Mean :0.04076 Mean :0.35480
## 3rd Qu.:2022-06-27 3rd Qu.:1.00000 3rd Qu.:0.00000 3rd Qu.:0.87961
## Max. :2024-01-31 Max. :1.00000 Max. :0.83590 Max. :1.00000
## KBWR PSP
## Min. :0.00000 Min. :0.0000
## 1st Qu.:0.00000 1st Qu.:0.0000
## Median :0.00000 Median :0.0000
## Mean :0.02609 Mean :0.1609
## 3rd Qu.:0.00000 3rd Qu.:0.1784
## Max. :1.00000 Max. :1.0000
summary(w.rpp_temp["2017-09-14/"])
## Index FINX.1 KBWB KBWP
## Min. :2017-09-14 Min. :0.1918 Min. :0.1672 Min. :0.1833
## 1st Qu.:2019-04-22 1st Qu.:0.2083 1st Qu.:0.1769 1st Qu.:0.1965
## Median :2020-11-19 Median :0.2134 Median :0.1812 Median :0.2133
## Mean :2020-11-21 Mean :0.2192 Mean :0.1815 Mean :0.2118
## 3rd Qu.:2022-06-27 3rd Qu.:0.2309 3rd Qu.:0.1854 3rd Qu.:0.2205
## Max. :2024-01-31 Max. :0.2558 Max. :0.1972 Max. :0.2767
## KBWR PSP
## Min. :0.1743 Min. :0.1775
## 1st Qu.:0.1897 1st Qu.:0.1886
## Median :0.1934 Median :0.1940
## Mean :0.1940 Mean :0.1934
## 3rd Qu.:0.1992 3rd Qu.:0.1977
## Max. :0.2068 Max. :0.2094
summary(roll_rp["2017-09-14/"])[1,2:6]
## FINX KBWB KBWP KBWR
## "Min. :0.1347 " "Min. :0.1316 " "Min. :0.2025 " "Min. :0.1056 "
## PSP
## "Min. :0.1661 "
plot(roll_rp, main="weights RP", auto.legend = TRUE, legend.loc = "topleft")

plot(roll_ms, main="weights MS", auto.legend = TRUE, legend.loc = "topleft")

plot(w.rpp_temp["2017-09-14/"], main="weights RPC", auto.legend = TRUE, legend.loc = "topleft")

aw1_2 <- rbind (apply(roll_rp["2017-09-14/"], 2, mean),
apply(roll_rp["2017-09-14/"], 2, sd),
apply(roll_rp["2017-09-14/"], 2, sd) / apply(roll_rp["2017-09-14/"], 2, mean),
apply(roll_rp["2017-09-14/"], 2, min),
apply(roll_rp["2017-09-14/"], 2, max) )
aw2_2 <- rbind (apply(roll_ms["2017-09-14/"], 2, mean),
apply(roll_ms["2017-09-14/"], 2, sd),
apply(roll_ms["2017-09-14/"], 2, sd) / apply(roll_ms["2017-09-14/"], 2, mean),
apply(roll_ms["2017-09-14/"], 2, min),
apply(roll_ms["2017-09-14/"], 2, max) )
aw3_2 <- rbind (apply(w.rpp_temp["2017-09-14/"], 2, mean),
apply(w.rpp_temp["2017-09-14/"], 2, sd),
apply(w.rpp_temp["2017-09-14/"], 2, sd) / apply(w.rpp_temp["2017-09-14/"], 2, mean),
apply(w.rpp_temp["2017-09-14/"], 2, min),
apply(w.rpp_temp["2017-09-14/"], 2, max) )
# write.csv( rbind( rep(0.2,5), rep(0,5), rep(0,5), rep(0.2,5), rep(0.2,5) , aw1_2, aw2_2, aw3_2), "tables_port_ave_weight.csv")
# png("plots/equity_curve.png", width = 580, height = 380 )
# png("plots/equity_curve.png", width = 600, height = 480 , pointsize=14)
chart.CumReturns(port_ret, main = "Equity curves", ylab="", geometric = TRUE, wealth.index = TRUE,
legend.loc = "topleft", )

# dev.off()
# experimenting with colors
#chart.CumReturns(port_ret, main = "Equity curves", ylab="", geometric = FALSE, wealth.index = TRUE,
# colorset=tim6equal, legend.loc = "topleft", )
#chart.CumReturns(port_ret, main = "Equity curves", ylab="", geometric = FALSE, wealth.index = TRUE,
# colorset=rich6equal, legend.loc = "topleft", )
# set risk free rate ; from yahoo finance ^IRX
(rfr <- (0.9556624/100)/252)
## [1] 3.792311e-05
ta1 <- table.AnnualizedReturns(port_ret, scale=252, geometric = TRUE, Rf=rfr)
ta2 <- table.DownsideRisk(port_ret, scale=252, Rf=rfr, MAR =.00, p=.95)
ta3 <- Omega(port_ret, Rf=rfr)
SortinoRatio(port_ret)
## EQW RP RPC MS
## Sortino Ratio (MAR = 0%) 0.03002446 0.03076621 0.03015213 0.04455128
rbind(ta1, ta2, ta3)
## EQW RP RPC MS
## Annualized Return 0.055800 0.057600 0.056100 0.092400
## Annualized Std Dev 0.249100 0.239000 0.247900 0.207200
## Annualized Sharpe (Rf=0.96%) 0.183600 0.198900 0.185800 0.395700
## Semi Deviation 0.011500 0.011100 0.011400 0.010000
## Gain Deviation 0.010900 0.010400 0.010900 0.007500
## Loss Deviation 0.012400 0.012200 0.012400 0.010800
## Downside Deviation (MAR=0%) 0.011300 0.010900 0.011300 0.009800
## Downside Deviation (Rf=0.96%) 0.011300 0.011000 0.011300 0.009800
## Downside Deviation (0%) 0.011300 0.010900 0.011300 0.009800
## Maximum Drawdown 0.443500 0.440800 0.442300 0.361700
## Historical VaR (95%) -0.023600 -0.022500 -0.022900 -0.022300
## Historical ES (95%) -0.037300 -0.036300 -0.037100 -0.032800
## Modified VaR (95%) -0.024500 -0.023700 -0.024400 -0.022900
## Modified ES (95%) -0.049800 -0.050900 -0.049800 -0.046700
## Omega (L = 0%) 1.066798 1.069822 1.067234 1.098181
# write.csv(rbind(ta1, ta2, ta3), "tables_port.csv")
# write.csv(rbind(ta1, ta2, ta3), "tables_port_rb_daily_10.csv")
# write.csv(rbind(ta1, ta2, ta3), "tables_port_rb_daily_20.csv")
# write.csv(rbind(ta1, ta2, ta3), "tables_port_rb_daily_30.csv")
# write.csv(rbind(ta1, ta2, ta3), "tables_port_rb_daily_50.csv")
#################################################################
# weekly re-balancing
#################################################################
rbp <- c("days")
# rbp <- c("weeks")
# rbp <- c("months")
port_eqw <- Return.portfolio( y.r_c, verbose=TRUE, rebalance_on = rbp)
head (port_eqw$BOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2016-09-14 0.2 0.2 0.2 0.2 0.2
## 2016-09-15 0.2 0.2 0.2 0.2 0.2
## 2016-09-16 0.2 0.2 0.2 0.2 0.2
## 2016-09-19 0.2 0.2 0.2 0.2 0.2
## 2016-09-20 0.2 0.2 0.2 0.2 0.2
## 2016-09-21 0.2 0.2 0.2 0.2 0.2
## 2016-09-22 0.2 0.2 0.2 0.2 0.2
## 2016-09-23 0.2 0.2 0.2 0.2 0.2
## 2016-09-26 0.2 0.2 0.2 0.2 0.2
## 2016-09-27 0.2 0.2 0.2 0.2 0.2
## 2016-09-28 0.2 0.2 0.2 0.2 0.2
## 2016-09-29 0.2 0.2 0.2 0.2 0.2
## 2016-09-30 0.2 0.2 0.2 0.2 0.2
## 2016-10-03 0.2 0.2 0.2 0.2 0.2
## 2016-10-04 0.2 0.2 0.2 0.2 0.2
## 2016-10-05 0.2 0.2 0.2 0.2 0.2
## 2016-10-06 0.2 0.2 0.2 0.2 0.2
## 2016-10-07 0.2 0.2 0.2 0.2 0.2
## 2016-10-10 0.2 0.2 0.2 0.2 0.2
## 2016-10-11 0.2 0.2 0.2 0.2 0.2
## 2016-10-12 0.2 0.2 0.2 0.2 0.2
## 2016-10-13 0.2 0.2 0.2 0.2 0.2
head (port_eqw$EOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2016-09-14 0.2011792 0.1997566 0.1995745 0.1986800 0.2008097
## 2016-09-15 0.2016278 0.1991560 0.1993123 0.1997367 0.2001672
## 2016-09-16 0.2019450 0.1996276 0.2004513 0.2008073 0.1971687
## 2016-09-19 0.1990924 0.2004095 0.2007613 0.1995188 0.2002180
## 2016-09-20 0.1983302 0.2005134 0.1999886 0.2008870 0.2002807
## 2016-09-21 0.1984694 0.1997067 0.2014717 0.1991357 0.2012165
## 2016-09-22 0.2019317 0.1987829 0.2000083 0.2001251 0.1991520
## 2016-09-23 0.2004950 0.2006694 0.1984823 0.2011190 0.1992343
## 2016-09-26 0.2023978 0.1982008 0.2007889 0.1978950 0.2007174
## 2016-09-27 0.1992896 0.2012331 0.2000082 0.2003648 0.1991042
## 2016-09-28 0.1985326 0.1996830 0.2005536 0.2012193 0.2000114
## 2016-09-29 0.2020993 0.1985116 0.1995699 0.1987510 0.2010683
## 2016-09-30 0.1992316 0.2011705 0.1991885 0.2014099 0.1989994
## 2016-10-03 0.2018349 0.2001015 0.1984628 0.1985796 0.2010213
## 2016-10-04 0.1979544 0.2012461 0.2021708 0.2003036 0.1983250
## 2016-10-05 0.1983903 0.2018816 0.1985136 0.2017465 0.1994680
## 2016-10-06 0.2002848 0.2008405 0.1993215 0.2005569 0.1989963
## 2016-10-07 0.1976332 0.2001186 0.2033183 0.1999988 0.1989310
## 2016-10-10 0.1999815 0.1999298 0.1998052 0.2005150 0.1997686
## 2016-10-11 0.1987804 0.1998644 0.2012065 0.2003860 0.1997627
## 2016-10-12 0.2003592 0.1995101 0.2015527 0.1992015 0.1993765
## 2016-10-13 0.2010805 0.1987476 0.2028685 0.1970307 0.2002727
tail (port_eqw$BOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2023-12-29 0.2 0.2 0.2 0.2 0.2
## 2024-01-02 0.2 0.2 0.2 0.2 0.2
## 2024-01-03 0.2 0.2 0.2 0.2 0.2
## 2024-01-04 0.2 0.2 0.2 0.2 0.2
## 2024-01-05 0.2 0.2 0.2 0.2 0.2
## 2024-01-08 0.2 0.2 0.2 0.2 0.2
## 2024-01-09 0.2 0.2 0.2 0.2 0.2
## 2024-01-10 0.2 0.2 0.2 0.2 0.2
## 2024-01-11 0.2 0.2 0.2 0.2 0.2
## 2024-01-12 0.2 0.2 0.2 0.2 0.2
## 2024-01-16 0.2 0.2 0.2 0.2 0.2
## 2024-01-17 0.2 0.2 0.2 0.2 0.2
## 2024-01-18 0.2 0.2 0.2 0.2 0.2
## 2024-01-19 0.2 0.2 0.2 0.2 0.2
## 2024-01-22 0.2 0.2 0.2 0.2 0.2
## 2024-01-23 0.2 0.2 0.2 0.2 0.2
## 2024-01-24 0.2 0.2 0.2 0.2 0.2
## 2024-01-25 0.2 0.2 0.2 0.2 0.2
## 2024-01-26 0.2 0.2 0.2 0.2 0.2
## 2024-01-29 0.2 0.2 0.2 0.2 0.2
## 2024-01-30 0.2 0.2 0.2 0.2 0.2
## 2024-01-31 0.2 0.2 0.2 0.2 0.2
tail (port_eqw$EOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2023-12-29 0.1979163 0.2005591 0.2021318 0.1985944 0.2007985
## 2024-01-02 0.1952063 0.2030674 0.2037867 0.2014436 0.1964960
## 2024-01-03 0.1982870 0.2000987 0.2038214 0.1967381 0.2010547
## 2024-01-04 0.1995723 0.1999725 0.2005275 0.2007814 0.1991464
## 2024-01-05 0.1992097 0.2025057 0.1998959 0.1999274 0.1984613
## 2024-01-08 0.2044768 0.1985698 0.1973356 0.1998948 0.1997230
## 2024-01-09 0.1994375 0.1998390 0.2007990 0.1994430 0.2004815
## 2024-01-10 0.2000297 0.1987371 0.2002675 0.2010348 0.1999308
## 2024-01-11 0.1994325 0.1988127 0.2024887 0.1984208 0.2008453
## 2024-01-12 0.1989115 0.1993857 0.2015425 0.1987910 0.2013692
## 2024-01-16 0.1998193 0.1995104 0.2024522 0.1989176 0.1993005
## 2024-01-17 0.1992007 0.1996088 0.2013050 0.1996739 0.2002116
## 2024-01-18 0.1986759 0.1981260 0.2003746 0.2011927 0.2016309
## 2024-01-19 0.1987284 0.2011689 0.2004475 0.2013180 0.1983373
## 2024-01-22 0.2004930 0.1992950 0.1995098 0.2020870 0.1986153
## 2024-01-23 0.2002746 0.2008513 0.1997513 0.1981226 0.2010003
## 2024-01-24 0.1969849 0.2009140 0.2018634 0.2001385 0.2000993
## 2024-01-25 0.1994941 0.2003453 0.2006360 0.1975607 0.2019640
## 2024-01-26 0.2011489 0.1991986 0.1985122 0.2006611 0.2004792
## 2024-01-29 0.2030111 0.1994125 0.1980713 0.2010574 0.1984477
## 2024-01-30 0.1979624 0.2023792 0.2010638 0.1981947 0.2004000
## 2024-01-31 0.2001374 0.2000644 0.2042660 0.1926155 0.2029166
# port_rp <- Return.portfolio(y.r, weights=w.rp,verbose=TRUE)
ep <- endpoints(roll_rp, on = rbp)
port_rp <- Return.portfolio( y.r_c, weights= roll_rp[ep,] , verbose=TRUE)
head(roll_rp[ep,],22)
## FINX KBWB KBWP KBWR PSP
## 2017-09-13 0.2601218 0.1354093 0.2282172 0.1108061 0.2654456
## 2017-09-14 0.2600080 0.1353569 0.2280082 0.1108063 0.2658206
## 2017-09-15 0.2624229 0.1343908 0.2270776 0.1101739 0.2659347
## 2017-09-18 0.2602410 0.1341540 0.2263927 0.1093945 0.2698177
## 2017-09-19 0.2601393 0.1340942 0.2268590 0.1094077 0.2694997
## 2017-09-20 0.2607467 0.1339981 0.2267320 0.1092615 0.2692616
## 2017-09-21 0.2597168 0.1337386 0.2273035 0.1089879 0.2702532
## 2017-09-22 0.2617668 0.1330118 0.2273970 0.1086583 0.2691661
## 2017-09-25 0.2607572 0.1326676 0.2286295 0.1084063 0.2695394
## 2017-09-26 0.2592389 0.1334614 0.2284373 0.1089427 0.2699196
## 2017-09-27 0.2586086 0.1333303 0.2287270 0.1085610 0.2707731
## 2017-09-28 0.2580525 0.1332636 0.2290789 0.1086535 0.2709515
## 2017-09-29 0.2573636 0.1336419 0.2298042 0.1088281 0.2703623
## 2017-10-02 0.2576266 0.1339343 0.2291089 0.1089408 0.2703894
## 2017-10-03 0.2569184 0.1339949 0.2297245 0.1091237 0.2702385
## 2017-10-04 0.2565612 0.1340388 0.2302543 0.1089182 0.2702275
## 2017-10-05 0.2559190 0.1342870 0.2297730 0.1090317 0.2709894
## 2017-10-06 0.2556505 0.1340196 0.2299783 0.1088445 0.2715072
## 2017-10-09 0.2565501 0.1339098 0.2289115 0.1088198 0.2718088
## 2017-10-10 0.2566445 0.1338699 0.2289047 0.1087976 0.2717833
## 2017-10-11 0.2590439 0.1331351 0.2272002 0.1077156 0.2729052
## 2017-10-12 0.2591782 0.1329993 0.2274938 0.1076230 0.2727057
head (port_rp$BOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2017-09-14 0.2601218 0.1354093 0.2282172 0.1108061 0.2654456
## 2017-09-15 0.2600080 0.1353569 0.2280082 0.1108063 0.2658206
## 2017-09-18 0.2624229 0.1343908 0.2270776 0.1101739 0.2659347
## 2017-09-19 0.2602410 0.1341540 0.2263927 0.1093945 0.2698177
## 2017-09-20 0.2601393 0.1340942 0.2268590 0.1094077 0.2694997
## 2017-09-21 0.2607467 0.1339981 0.2267320 0.1092615 0.2692616
## 2017-09-22 0.2597168 0.1337386 0.2273035 0.1089879 0.2702532
## 2017-09-25 0.2617668 0.1330118 0.2273970 0.1086583 0.2691661
## 2017-09-26 0.2607572 0.1326676 0.2286295 0.1084063 0.2695394
## 2017-09-27 0.2592389 0.1334614 0.2284373 0.1089427 0.2699196
## 2017-09-28 0.2586086 0.1333303 0.2287270 0.1085610 0.2707731
## 2017-09-29 0.2580525 0.1332636 0.2290789 0.1086535 0.2709515
## 2017-10-02 0.2573636 0.1336419 0.2298042 0.1088281 0.2703623
## 2017-10-03 0.2576266 0.1339343 0.2291089 0.1089408 0.2703894
## 2017-10-04 0.2569184 0.1339949 0.2297245 0.1091237 0.2702385
## 2017-10-05 0.2565612 0.1340388 0.2302543 0.1089182 0.2702275
## 2017-10-06 0.2559190 0.1342870 0.2297730 0.1090317 0.2709894
## 2017-10-09 0.2556505 0.1340196 0.2299783 0.1088445 0.2715072
## 2017-10-10 0.2565501 0.1339098 0.2289115 0.1088198 0.2718088
## 2017-10-11 0.2566445 0.1338699 0.2289047 0.1087976 0.2717833
## 2017-10-12 0.2590439 0.1331351 0.2272002 0.1077156 0.2729052
## 2017-10-13 0.2591782 0.1329993 0.2274938 0.1076230 0.2727057
head (port_rp$EOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2017-09-14 0.2617395 0.1349800 0.2256381 0.1098341 0.2678083
## 2017-09-15 0.2589367 0.1353849 0.2285507 0.1107413 0.2663864
## 2017-09-18 0.2649551 0.1362794 0.2269437 0.1117647 0.2600571
## 2017-09-19 0.2599785 0.1347540 0.2253282 0.1094965 0.2704428
## 2017-09-20 0.2585758 0.1346390 0.2270774 0.1103215 0.2693863
## 2017-09-21 0.2605127 0.1344732 0.2271816 0.1092869 0.2685455
## 2017-09-22 0.2601478 0.1330591 0.2271272 0.1090678 0.2705980
## 2017-09-25 0.2604406 0.1331121 0.2285936 0.1093336 0.2685200
## 2017-09-26 0.2606160 0.1334111 0.2278595 0.1096535 0.2684599
## 2017-09-27 0.2592748 0.1343965 0.2276766 0.1105320 0.2681202
## 2017-09-28 0.2578729 0.1329675 0.2291321 0.1086902 0.2713372
## 2017-09-29 0.2575347 0.1335103 0.2286601 0.1086085 0.2716864
## 2017-10-02 0.2562484 0.1337456 0.2312501 0.1092831 0.2694729
## 2017-10-03 0.2595240 0.1334729 0.2287697 0.1081411 0.2700923
## 2017-10-04 0.2577396 0.1335007 0.2294634 0.1075163 0.2717800
## 2017-10-05 0.2560675 0.1352249 0.2298222 0.1097350 0.2691504
## 2017-10-06 0.2562369 0.1343305 0.2290536 0.1089758 0.2714031
## 2017-10-09 0.2571316 0.1332980 0.2294062 0.1087104 0.2714538
## 2017-10-10 0.2562946 0.1341000 0.2287609 0.1092685 0.2715759
## 2017-10-11 0.2575930 0.1334246 0.2283068 0.1078502 0.2728254
## 2017-10-12 0.2607641 0.1316479 0.2274274 0.1069323 0.2732283
## 2017-10-13 0.2589587 0.1322106 0.2293342 0.1069752 0.2725213
tail(roll_rp[ep,],22)
## FINX KBWB KBWP KBWR PSP
## 2023-12-29 0.1883135 0.1416930 0.3187616 0.1309215 0.2203104
## 2024-01-02 0.1888308 0.1413299 0.3189418 0.1302922 0.2206054
## 2024-01-03 0.1876619 0.1412958 0.3205018 0.1297566 0.2207838
## 2024-01-04 0.1876809 0.1413454 0.3202291 0.1296623 0.2210823
## 2024-01-05 0.1878257 0.1412241 0.3201422 0.1288018 0.2220062
## 2024-01-08 0.1875867 0.1412913 0.3201988 0.1286814 0.2222419
## 2024-01-09 0.1870143 0.1407865 0.3221913 0.1283486 0.2216592
## 2024-01-10 0.1870263 0.1408315 0.3221369 0.1283298 0.2216755
## 2024-01-11 0.1869578 0.1406479 0.3226224 0.1281611 0.2216108
## 2024-01-12 0.1867577 0.1405732 0.3220216 0.1280202 0.2226273
## 2024-01-16 0.1868376 0.1403914 0.3223902 0.1279753 0.2224055
## 2024-01-17 0.1867819 0.1403244 0.3228845 0.1277368 0.2222724
## 2024-01-18 0.1868239 0.1404691 0.3230927 0.1277174 0.2218969
## 2024-01-19 0.1875320 0.1403474 0.3215318 0.1280963 0.2224926
## 2024-01-22 0.1872273 0.1399948 0.3219629 0.1273717 0.2234432
## 2024-01-23 0.1885638 0.1404386 0.3206002 0.1270720 0.2233255
## 2024-01-24 0.1893519 0.1405136 0.3195714 0.1267717 0.2237914
## 2024-01-25 0.1895963 0.1405747 0.3191699 0.1269655 0.2236935
## 2024-01-26 0.1893654 0.1407078 0.3196136 0.1268525 0.2234607
## 2024-01-29 0.1887673 0.1404967 0.3197027 0.1264044 0.2246288
## 2024-01-30 0.1889260 0.1405531 0.3194513 0.1263924 0.2246773
## 2024-01-31 0.1888537 0.1404422 0.3197402 0.1249097 0.2260541
tail (port_rp$BOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2023-12-29 0.1887844 0.1420112 0.3178525 0.1313114 0.2200406
## 2024-01-02 0.1883135 0.1416930 0.3187616 0.1309215 0.2203104
## 2024-01-03 0.1888308 0.1413299 0.3189418 0.1302922 0.2206054
## 2024-01-04 0.1876619 0.1412958 0.3205018 0.1297566 0.2207838
## 2024-01-05 0.1876809 0.1413454 0.3202291 0.1296623 0.2210823
## 2024-01-08 0.1878257 0.1412241 0.3201422 0.1288018 0.2220062
## 2024-01-09 0.1875867 0.1412913 0.3201988 0.1286814 0.2222419
## 2024-01-10 0.1870143 0.1407865 0.3221913 0.1283486 0.2216592
## 2024-01-11 0.1870263 0.1408315 0.3221369 0.1283298 0.2216755
## 2024-01-12 0.1869578 0.1406479 0.3226224 0.1281611 0.2216108
## 2024-01-16 0.1867577 0.1405732 0.3220216 0.1280202 0.2226273
## 2024-01-17 0.1868376 0.1403914 0.3223902 0.1279753 0.2224055
## 2024-01-18 0.1867819 0.1403244 0.3228845 0.1277368 0.2222724
## 2024-01-19 0.1868239 0.1404691 0.3230927 0.1277174 0.2218969
## 2024-01-22 0.1875320 0.1403474 0.3215318 0.1280963 0.2224926
## 2024-01-23 0.1872273 0.1399948 0.3219629 0.1273717 0.2234432
## 2024-01-24 0.1885638 0.1404386 0.3206002 0.1270720 0.2233255
## 2024-01-25 0.1893519 0.1405136 0.3195714 0.1267717 0.2237914
## 2024-01-26 0.1895963 0.1405747 0.3191699 0.1269655 0.2236935
## 2024-01-29 0.1893654 0.1407078 0.3196136 0.1268525 0.2234607
## 2024-01-30 0.1887673 0.1404967 0.3197027 0.1264044 0.2246288
## 2024-01-31 0.1889260 0.1405531 0.3194513 0.1263924 0.2246773
tail (port_rp$EOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2023-12-29 0.1864867 0.1421560 0.3206717 0.1301577 0.2205279
## 2024-01-02 0.1836566 0.1437541 0.3245437 0.1317637 0.2162819
## 2024-01-03 0.1865447 0.1408946 0.3238748 0.1277093 0.2209766
## 2024-01-04 0.1872626 0.1412780 0.3213506 0.1302650 0.2198439
## 2024-01-05 0.1871049 0.1432431 0.3203460 0.1297301 0.2195759
## 2024-01-08 0.1923081 0.1404171 0.3163346 0.1289204 0.2220198
## 2024-01-09 0.1869069 0.1410626 0.3212163 0.1282186 0.2225956
## 2024-01-10 0.1870127 0.1398755 0.3225716 0.1289924 0.2215477
## 2024-01-11 0.1860184 0.1396372 0.3253109 0.1269907 0.2220428
## 2024-01-12 0.1856097 0.1399666 0.3245326 0.1271598 0.2227313
## 2024-01-16 0.1862233 0.1399543 0.3253309 0.1270777 0.2214138
## 2024-01-17 0.1858848 0.1399616 0.3241343 0.1276251 0.2223942
## 2024-01-18 0.1854289 0.1389224 0.3232863 0.1284180 0.2239444
## 2024-01-19 0.1857563 0.1413815 0.3240252 0.1286423 0.2201947
## 2024-01-22 0.1881871 0.1399960 0.3210726 0.1295656 0.2211787
## 2024-01-23 0.1874142 0.1405381 0.3214423 0.1261288 0.2244767
## 2024-01-24 0.1855383 0.1409415 0.3232688 0.1270349 0.2232165
## 2024-01-25 0.1886030 0.1405551 0.3201294 0.1250465 0.2256660
## 2024-01-26 0.1908559 0.1401366 0.3170787 0.1274991 0.2244298
## 2024-01-29 0.1925453 0.1405346 0.3170730 0.1277413 0.2221057
## 2024-01-30 0.1867028 0.1420605 0.3211601 0.1251687 0.2249078
## 2024-01-31 0.1880032 0.1398156 0.3244487 0.1210479 0.2266846
ep <- endpoints(w.mcp_temp, on = rbp)
port_mcp <- Return.portfolio( y.r_c, weights= w.mcp_temp[ep,] ,verbose=TRUE)
ep <- endpoints(w.rpp_temp, on = rbp)
port_rpp <- Return.portfolio( y.r_c, weights= w.rpp_temp[ep,],verbose=TRUE)
head(w.rpp_temp[ep,],22)
## FINX.1 KBWB KBWP KBWR PSP
## 2016-09-14 0.2201993 0.1829295 0.2072242 0.1970091 0.1926379
## 2016-09-15 0.2120304 0.1875103 0.2067797 0.1963662 0.1973134
## 2016-09-16 0.2140234 0.1915096 0.2062801 0.1984707 0.1897163
## 2016-09-19 0.2175372 0.1906678 0.2051263 0.1977266 0.1889421
## 2016-09-20 0.2150457 0.1923422 0.2007533 0.2016547 0.1902041
## 2016-09-21 0.2020789 0.1972787 0.2069408 0.2072532 0.1864483
## 2016-09-22 0.2044780 0.1930407 0.2087389 0.2044362 0.1893063
## 2016-09-23 0.2042542 0.1939255 0.2034012 0.2020909 0.1963283
## 2016-09-26 0.2061994 0.1965244 0.1982548 0.2001059 0.1989154
## 2016-09-27 0.2135850 0.1946972 0.1960300 0.1984456 0.1972423
## 2016-09-28 0.2138155 0.1949082 0.1977724 0.1968193 0.1966846
## 2016-09-29 0.2151567 0.1936106 0.1972790 0.1960725 0.1978812
## 2016-09-30 0.2172160 0.1934421 0.1989804 0.1965803 0.1937812
## 2016-10-03 0.2174312 0.1937412 0.1949977 0.1989541 0.1948757
## 2016-10-04 0.2199838 0.1898025 0.2002946 0.1961933 0.1937257
## 2016-10-05 0.2203514 0.1891177 0.1997155 0.1966424 0.1941730
## 2016-10-06 0.2211055 0.1899825 0.1991655 0.1963784 0.1933682
## 2016-10-07 0.2210785 0.1897426 0.2006123 0.1961519 0.1924147
## 2016-10-10 0.2209709 0.1906082 0.1996481 0.1960954 0.1926773
## 2016-10-11 0.2206881 0.1907260 0.2002230 0.1959324 0.1924304
## 2016-10-12 0.2209118 0.1900245 0.1990423 0.1943987 0.1956228
## 2016-10-13 0.2222604 0.1881895 0.1996681 0.1973364 0.1925457
head (port_rpp$BOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2016-09-15 0.2201993 0.1829295 0.2072242 0.1970091 0.1926379
## 2016-09-16 0.2120304 0.1875103 0.2067797 0.1963662 0.1973134
## 2016-09-19 0.2140234 0.1915096 0.2062801 0.1984707 0.1897163
## 2016-09-20 0.2175372 0.1906678 0.2051263 0.1977266 0.1889421
## 2016-09-21 0.2150457 0.1923422 0.2007533 0.2016547 0.1902041
## 2016-09-22 0.2020789 0.1972787 0.2069408 0.2072532 0.1864483
## 2016-09-23 0.2044780 0.1930407 0.2087389 0.2044362 0.1893063
## 2016-09-26 0.2042542 0.1939255 0.2034012 0.2020909 0.1963283
## 2016-09-27 0.2061994 0.1965244 0.1982548 0.2001059 0.1989154
## 2016-09-28 0.2135850 0.1946972 0.1960300 0.1984456 0.1972423
## 2016-09-29 0.2138155 0.1949082 0.1977724 0.1968193 0.1966846
## 2016-09-30 0.2151567 0.1936106 0.1972790 0.1960725 0.1978812
## 2016-10-03 0.2172160 0.1934421 0.1989804 0.1965803 0.1937812
## 2016-10-04 0.2174312 0.1937412 0.1949977 0.1989541 0.1948757
## 2016-10-05 0.2199838 0.1898025 0.2002946 0.1961933 0.1937257
## 2016-10-06 0.2203514 0.1891177 0.1997155 0.1966424 0.1941730
## 2016-10-07 0.2211055 0.1899825 0.1991655 0.1963784 0.1933682
## 2016-10-10 0.2210785 0.1897426 0.2006123 0.1961519 0.1924147
## 2016-10-11 0.2209709 0.1906082 0.1996481 0.1960954 0.1926773
## 2016-10-12 0.2206881 0.1907260 0.2002230 0.1959324 0.1924304
## 2016-10-13 0.2209118 0.1900245 0.1990423 0.1943987 0.1956228
## 2016-10-14 0.2222604 0.1881895 0.1996681 0.1973364 0.1925457
head (port_rpp$EOP.Weight,22)
## FINX KBWB KBWP KBWR PSP
## 2016-09-15 0.2219450 0.1821194 0.2064685 0.1967086 0.1927586
## 2016-09-16 0.2140541 0.1871277 0.2072092 0.1971236 0.1944854
## 2016-09-19 0.2130660 0.1919141 0.2070787 0.1980059 0.1899353
## 2016-09-20 0.2157633 0.1911948 0.2051549 0.1986426 0.1892445
## 2016-09-21 0.2134352 0.1920918 0.2022640 0.2008164 0.1913926
## 2016-09-22 0.2040105 0.1960588 0.2069289 0.2073623 0.1856394
## 2016-09-23 0.2049867 0.1936892 0.2071575 0.2055826 0.1885839
## 2016-09-26 0.2066857 0.1921649 0.2041864 0.1999471 0.1970160
## 2016-09-27 0.2054749 0.1977437 0.1982706 0.2004787 0.1980321
## 2016-09-28 0.2120416 0.1944104 0.1965946 0.1996777 0.1972757
## 2016-09-29 0.2160188 0.1934210 0.1973096 0.1955530 0.1976976
## 2016-09-30 0.2143519 0.1947635 0.1964985 0.1974749 0.1969112
## 2016-10-03 0.2191749 0.1935102 0.1974204 0.1951539 0.1947405
## 2016-10-04 0.2152569 0.1949932 0.1971597 0.1993021 0.1932882
## 2016-10-05 0.2182734 0.1916410 0.1988608 0.1979612 0.1932637
## 2016-10-06 0.2206642 0.1899117 0.1990371 0.1971892 0.1931978
## 2016-10-07 0.2185401 0.1901396 0.2025173 0.1964232 0.1923797
## 2016-10-10 0.2210580 0.1896760 0.2004169 0.1966571 0.1921921
## 2016-10-11 0.2196504 0.1905023 0.2008771 0.1964979 0.1924722
## 2016-10-12 0.2210621 0.1902395 0.2017570 0.1951304 0.1918110
## 2016-10-13 0.2220521 0.1887895 0.2018489 0.1914668 0.1958427
## 2016-10-14 0.2216812 0.1885210 0.2001866 0.1986616 0.1909496
ep <- endpoints(roll_ms, on = rbp)
port_ms <- Return.portfolio( y.r_c, weights= roll_ms[ep,], verbose=TRUE)
## Warning in Return.portfolio.geometric(R = R, weights = weights, wealth.index =
## wealth.index, : The weights for one or more periods do not sum up to 1:
## assuming a return of 0 for the residual weights
port_ret <- cbind(port_eqw$returns, port_rp$returns, port_rpp$returns, port_ms$returns )
colnames(port_ret) <- c("EQW", "RP", "RPC", "MS")
# all portfolios start at same time period
port_ret <- na.omit( port_ret)
head(port_ret)
## EQW RP RPC MS
## 2017-09-14 -0.003398237 -0.0017763771 -0.003254401 0.0001900134
## 2017-09-15 0.004138981 0.0041374060 0.004020173 0.0015495520
## 2017-09-18 0.002269839 -0.0008175381 0.002253659 0.0030643950
## 2017-09-19 0.005305115 0.0049010666 0.005086788 0.0046377793
## 2017-09-20 0.005006286 0.0036120071 0.004575106 0.0002894237
## 2017-09-21 0.002311203 0.0018695351 0.002217784 0.0021454393
ta1 <- table.AnnualizedReturns(port_ret, scale=252, geometric = TRUE, Rf=rfr)
ta2 <- table.DownsideRisk(port_ret, scale=252, Rf=rfr, MAR =.00, p=.95)
ta3 <- Omega(port_ret, Rf=rfr)
SortinoRatio(port_ret)
## EQW RP RPC MS
## Sortino Ratio (MAR = 0%) 0.03002446 0.03076621 0.03015213 0.04455128
rbind(ta1, ta2, ta3)
## EQW RP RPC MS
## Annualized Return 0.055800 0.057600 0.056100 0.092400
## Annualized Std Dev 0.249100 0.239000 0.247900 0.207200
## Annualized Sharpe (Rf=0.96%) 0.183600 0.198900 0.185800 0.395700
## Semi Deviation 0.011500 0.011100 0.011400 0.010000
## Gain Deviation 0.010900 0.010400 0.010900 0.007500
## Loss Deviation 0.012400 0.012200 0.012400 0.010800
## Downside Deviation (MAR=0%) 0.011300 0.010900 0.011300 0.009800
## Downside Deviation (Rf=0.96%) 0.011300 0.011000 0.011300 0.009800
## Downside Deviation (0%) 0.011300 0.010900 0.011300 0.009800
## Maximum Drawdown 0.443500 0.440800 0.442300 0.361700
## Historical VaR (95%) -0.023600 -0.022500 -0.022900 -0.022300
## Historical ES (95%) -0.037300 -0.036300 -0.037100 -0.032800
## Modified VaR (95%) -0.024500 -0.023700 -0.024400 -0.022900
## Modified ES (95%) -0.049800 -0.050900 -0.049800 -0.046700
## Omega (L = 0%) 1.066798 1.069822 1.067234 1.098181