Path: blob/master/demo/demo_leverage_exposure_constraint.R
1433 views
#' ---1#' title: "Leverage Exposure Constraint Demo"2#' author: Ross Bennett3#' date: "7/17/2014"4#' ---56#' This script demonstrates how to solve a portfolio optimization problem with7#' leverage exposure constraints.8#'910#' Load the package and data11library(PortfolioAnalytics)12data(edhec)13R <- edhec[, 1:10]14funds <- colnames(R)1516#' Set up an initial portfolio object with basic constraints.17init.portf <- portfolio.spec(assets=funds)1819#' Add an objective to maximize mean return per unit expected shortfall.20init.portf <- add.objective(portfolio=init.portf, type="return", name="mean")21init.portf <- add.objective(portfolio=init.portf, type="risk", name="ES")2223#' The leverage_exposure constraint type is supported for random, DEoptim, pso,24#' and GenSA solvers. The following examples use DEoptim for solving the25#' optimization problem.2627#' Dollar neutral portfolio with max 2:1 leverage constraint.28dollar.neutral.portf <- init.portf29dollar.neutral.portf <- add.constraint(portfolio=dollar.neutral.portf,30type="weight_sum",31min_sum=-0.01, max_sum=0.01)32dollar.neutral.portf <- add.constraint(portfolio=dollar.neutral.portf,33type="box", min=-0.5, max=0.5)34dollar.neutral.portf <- add.constraint(portfolio=dollar.neutral.portf,35type="leverage_exposure", leverage=2)3637#' Run optimization using DEoptim as optimization backend.38dollar.neutral.opt <- optimize.portfolio(R=R, portfolio=dollar.neutral.portf,39optimize_method="DEoptim",40search_size=2000)41dollar.neutral.opt4243#' Set up leveraged portfolio with max 1.6:1 leverage exposure constraint.44leveraged.portf <- init.portf45leveraged.portf <- add.constraint(portfolio=leveraged.portf,46type="weight_sum",47min_sum=0.99, max_sum=1.01)48leveraged.portf <- add.constraint(portfolio=leveraged.portf,49type="box", min=-0.3, max=0.8)50leveraged.portf <- add.constraint(portfolio=leveraged.portf,51type="leverage_exposure", leverage=1.6)5253#' Run optimization using DEoptim as optimization backend.54leveraged.opt <- optimize.portfolio(R=R, portfolio=leveraged.portf,55optimize_method="DEoptim",56search_size=2000)57leveraged.opt58596061