The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

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 tibble, a xts or a matrix.

signal

A double vector with the investor's belief's (signals, forecasts).

lambda

A double with the investor's risk-aversion preference.

method

A character. One of: "simple" or "anchored".

w

A double between 0 and 1. The shrinkage level increases from 0 to 1.

anchor

A double vector with the anchor (benchmark) in which the allocation should not deviate too much from. Only used when method = "anchored".

normalize

A boolean indicating whether the allocation should be normalized to sum 1 (full-investment constraint). The default is normalize = TRUE.

endogenous

A boolean indicating whether the risk-aversion parameter should be considered endogenous (only used when method = "anchored"). The default is endogenous = TRUE.

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)

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.