Title: | Enhanced Portfolio Optimization (EPO) |
---|---|
Description: | Implements the Enhanced Portfolio Optimization (EPO) method as described in Pedersen, Babu and Levine (2021) <doi:10.2139/ssrn.3530390>. |
Authors: | Bernardo Reckziegel [aut, cre, cph] |
Maintainer: | Bernardo Reckziegel <[email protected]> |
License: | MIT + file LICENSE |
Version: | 0.1.0.9000 |
Built: | 2024-11-19 03:54:48 UTC |
Source: | https://github.com/reckziegel/epo |
Computes the optimal portfolio allocation using the EPO method.
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 )
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 )
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 |
The optimal allocation vector.
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)
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)