Path: blob/master/sandbox/leverage_example.R
1433 views
1# Examples demonstrating the difference of specifying a leverage constraint2# using max_sum compared to leverage_exposure.34library(PortfolioAnalytics)56data(edhec)7R <- edhec8funds <- colnames(R)910# Set up an initial portfolio object with basic constraints11init.portf <- portfolio.spec(assets=funds)1213# Add an objective to maximize mean return per unit expected shortfall14init.portf <- add.objective(portfolio=init.portf, type="return", name="mean")1516# dollar neutral portfolio17dollar.neutral.portf <- init.portf18dollar.neutral.portf <- add.constraint(portfolio=dollar.neutral.portf,19type="weight_sum",20min_sum=-0.01, max_sum=0.01)21dollar.neutral.portf <- add.constraint(portfolio=dollar.neutral.portf,22type="box", min=-0.5, max=0.5)2324# Here is a dollar neutral portfolio with no constraint on leverage25opt1 <- optimize.portfolio(R=R, portfolio=dollar.neutral.portf,26optimize_method="DEoptim", search_size=2000,27trace=TRUE)28sum(opt1$weights)2930# Total portfolio leverage is actually greater than 431sum(abs(opt1$weights))3233# now add the leverage exposure constraint for 2:1 leverage34dollar.neutral.portf <- add.constraint(portfolio=dollar.neutral.portf,35type="leverage_exposure", leverage=2)36# Run optimization37opt2 <- optimize.portfolio(R=R, portfolio=dollar.neutral.portf,38optimize_method="DEoptim",39search_size=2000)40sum(opt2$weights)41sum(abs(opt2$weights))4243# Leveraged portfolio44leveraged.portf <- init.portf4546# Add a "leverage" constraint using max_sum47leveraged.portf <- add.constraint(portfolio=leveraged.portf,48type="leverage",49min_sum=1.29, max_sum=1.31)50leveraged.portf <- add.constraint(portfolio=leveraged.portf,51type="box", min=-0.3, max=0.6)5253opt3 <- optimize.portfolio(R=R, portfolio=leveraged.portf,54optimize_method="DEoptim",55search_size=2000)56sum(opt3$weights)5758# total portfolio leverage is approximately 3.959sum(abs(opt3$weights))6061# add a leverage exposure constraint62leveraged.portf <- add.constraint(portfolio=leveraged.portf,63type="leverage_exposure", leverage=1.5)6465# change min_sum and max_sum such that the weights sum to 166leveraged.portf$constraints[[1]]$min_sum <- 0.9967leveraged.portf$constraints[[1]]$max_sum <- 1.016869# Run optimization70opt4 <- optimize.portfolio(R=R, portfolio=leveraged.portf,71optimize_method="DEoptim",72search_size=2000)73sum(opt4$weights)74# total portfolio leverage is less than 1.575sum(abs(opt4$weights))76777879