Type: | Package |
Title: | Enhanced Portfolio Optimization (EPO) |
Version: | 0.1.0 |
Maintainer: | Bernardo Reckziegel <bernardo_cse@hotmail.com> |
Description: | Implements the Enhanced Portfolio Optimization (EPO) method as described in Pedersen, Babu and Levine (2021) <doi:10.2139/ssrn.3530390>. |
License: | MIT + file LICENSE |
URL: | https://github.com/Reckziegel/epo, https://reckziegel.github.io/epo/ |
BugReports: | https://github.com/Reckziegel/epo/issues |
Encoding: | UTF-8 |
RoxygenNote: | 7.2.3 |
Imports: | assertthat (≥ 0.2.1), dplyr (≥ 1.1.2), rlang (≥ 1.1.1), xts (≥ 0.13.1) |
Suggests: | testthat (≥ 3.0.0) |
Config/testthat/edition: | 3 |
NeedsCompilation: | no |
Packaged: | 2023-08-17 12:21:49 UTC; USUARIO |
Author: | Bernardo Reckziegel [aut, cre, cph] |
Repository: | CRAN |
Date/Publication: | 2023-08-17 15:22:46 UTC |
Enhanced Portfolio Optimization (EPO)
Description
Computes the optimal portfolio allocation using the EPO method.
Usage
epo(
x,
signal,
lambda,
method = c("simple", "anchored"),
w,
anchor = NULL,
normalize = TRUE,
endogenous = TRUE
)
## Default S3 method:
epo(
x,
signal,
lambda,
method = c("simple", "anchored"),
w,
anchor = NULL,
normalize = TRUE,
endogenous = TRUE
)
## S3 method for class 'tbl'
epo(
x,
signal,
lambda,
method = c("simple", "anchored"),
w,
anchor = NULL,
normalize = TRUE,
endogenous = TRUE
)
## S3 method for class 'xts'
epo(
x,
signal,
lambda,
method = c("simple", "anchored"),
w,
anchor = NULL,
normalize = TRUE,
endogenous = TRUE
)
## S3 method for class 'matrix'
epo(
x,
signal,
lambda,
method = c("simple", "anchored"),
w,
anchor = NULL,
normalize = TRUE,
endogenous = TRUE
)
Arguments
x |
A data-set with asset returns. It should be a |
signal |
A |
lambda |
A |
method |
A |
w |
A |
anchor |
A |
normalize |
A |
endogenous |
A |
Value
The optimal allocation vector.
Examples
x <- diff(log(EuStockMarkets)) # stock returns
s <- colMeans(x) # it could be any signal
##################
### Simple EPO ###
##################
# Traditional Mean-Variance Analysis
epo(x = x, signal = s, lambda = 10, method = "simple", w = 0)
# 100% Shrinkage
epo(x = x, signal = s, lambda = 10, method = "simple", w = 1)
# 50% Classical MVO and 50% Shrinkage
epo(x = x, signal = s, lambda = 10, method = "simple", w = 0.5)
####################
### Anchored EPO ###
####################
benchmark <- rep(0.25, 4) # 1/N Portfolio
# Traditional Mean-Variance Analysis
epo(x = x, signal = s, lambda = 10, method = "anchored", w = 0.0, anchor = benchmark)
# 100% on the Anchor portfolio
epo(x = x, signal = s, lambda = 10, method = "anchored", w = 1.0, anchor = benchmark)
# Somewhere between the two worlds
epo(x = x, signal = s, lambda = 10, method = "anchored", w = 0.5, anchor = benchmark)