Design of Portfolio of Stocks to Track an Index

Computation of sparse portfolios for financial index tracking, i.e., joint selection of a subset of the assets that compose the index and computation of their relative weights (capital allocation). The level of sparsity of the portfolios, i.e., the number of selected assets, is controlled through a regularization parameter. Different tracking measures are available, namely, the empirical tracking error (ETE), downside risk (DR), Huber empirical tracking error (HETE), and Huber downside risk (HDR). See vignette for a detailed documentation and comparison, with several illustrative examples. The package is based on the paper: K. Benidis, Y. Feng, and D. P. Palomar, "Sparse Portfolios for High-Dimensional Financial Index Tracking," IEEE Trans. on Signal Processing, vol. 66, no. 1, pp. 155-170, Jan. 2018. .



output: html_document: variant: markdown_github keep_md: true md_document: variant: markdown_github

Computation of sparse portfolios for financial index tracking, i.e., joint selection of a subset of the assets that compose the index and computation of their relative weights (capital allocation). The level of sparsity of the portfolios, i.e., the number of selected assets, is controlled through a regularization parameter. Different tracking measures are available, namely, the empirical tracking error (ETE), downside risk (DR), Huber empirical tracking error (HETE), and Huber downside risk (HDR). See vignette for a detailed documentation and comparison, with several illustrative examples.

The package is based on the paper:

K. Benidis, Y. Feng, and D. P. Palomar, "Sparse Portfolios for High-Dimensional Financial Index Tracking," IEEE Trans. on Signal Processing, vol. 66, no. 1, pp. 155-170, Jan. 2018. (https://doi.org/10.1109/TSP.2017.2762286)

Installation

# Installation from CRAN
install.packages("sparseIndexTracking")
 
# Installation from GitHub
# install.packages("devtools")
devtools::install_github("dppalomar/sparseIndexTracking")
 
# Getting help
library(sparseIndexTracking)
help(package = "sparseIndexTracking")
package?sparseIndexTracking
?spIndexTrack
 
# Citing this work
citation("sparseIndexTracking")

Vignette

For more detailed information, please check the vignette: GitHub-html-vignette and GitHub-pdf-vignette.

Usage of spIndexTrack()

We start by loading the package and real data of the index S&P 500 and its underlying assets:

library(sparseIndexTracking)
library(xts)
data(INDEX_2010)

The data INDEX_2010 contains a list with two xts objects: 2. SP500: A $T\times 1$ xts with the daily linear returns of the index S&P 500 during the same period.

Note that we use xts objects just for illustration purposes. The function spIndexTracking() can also be invoked passing simple data arrays or dataframes.

Based on the above quantities we create a training window, which we will use to create our portfolios, and a testing window, which will be used to assess the performance of the designed portfolios. For simplicity, here we consider the first six (trading) months of the dataset (~126 days) as the training window, and the subsequent six months as the testing window:

X_train <- INDEX_2010$X[1:126]
X_test <- INDEX_2010$X[127:252]
r_train <- INDEX_2010$SP500[1:126]
r_test <- INDEX_2010$SP500[127:252]

Now, we use the four modes (four available tracking errors) of the spIndexTracking() algorithm to design our portfolios:

# ETE
w_ete <- spIndexTrack(X_train, r_train, lambda = 1e-7, u = 0.5, measure = 'ete')
cat('Number of assets used:', sum(w_ete > 1e-6))
#> Number of assets used: 45
 
# DR
w_dr <- spIndexTrack(X_train, r_train, lambda = 2e-8, u = 0.5, measure = 'dr')
cat('Number of assets used:', sum(w_dr > 1e-6))
#> Number of assets used: 42
 
# HETE
w_hete <- spIndexTrack(X_train, r_train, lambda = 8e-8, u = 0.5, measure = 'hete', hub = 0.05)
cat('Number of assets used:', sum(w_hete > 1e-6))
#> Number of assets used: 44
 
# HDR
w_hdr <- spIndexTrack(X_train, r_train, lambda = 2e-8, u = 0.5, measure = 'hdr', hub = 0.05)
cat('Number of assets used:', sum(w_hdr > 1e-6))
#> Number of assets used: 43

Finally, we plot the actual value of the index in the testing window in comparison with the values of the designed portfolios:

plot(cbind("PortfolioETE" = cumprod(1 + X_test %*% w_ete$w), cumprod(1 + r_test)), 
     legend.loc = "topleft", main = "Cumulative P&L")
plot(cbind("PortfolioDR" = cumprod(1 + X_test %*% w_dr$w), cumprod(1 + r_test)),
     legend.loc = "topleft", main = "Cumulative P&L")
plot(cbind("PortfolioHETE" = cumprod(1 + X_test %*% w_hete$w), cumprod(1 + r_test)),
     legend.loc = "topleft", main = "Cumulative P&L")
plot(cbind("PortfolioHDR" = cumprod(1 + X_test %*% w_hdr$w), cumprod(1 + r_test)),
     legend.loc = "topleft", main = "Cumulative P&L")

Links

Package: GitHub.

README file: GitHub-readme.

Vignette: GitHub-html-vignette and GitHub-pdf-vignette.

News

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("sparseIndexTracking")

0.1.0 by Daniel P. Palomar, 10 months ago


https://github.com/dppalomar/sparseIndexTracking, https://www.danielppalomar.com, https://doi.org/10.1109/TSP.2017.2762286


Report a bug at https://github.com/dppalomar/sparseIndexTracking/issues


Browse source code at https://github.com/cran/sparseIndexTracking


Authors: Konstantinos Benidis [aut] , Daniel P. Palomar [cre, aut]


Documentation:   PDF Manual  


GPL-3 | file LICENSE license


Suggests xts, knitr, rmarkdown, bookdown, prettydoc


See at CRAN