1. Learn
  2. /
  3. Courses
  4. /
  5. Intermediate Portfolio Analysis in R

Exercise

Single-Period optimization

There are two functions for running the optimization, optimize.portfolio() and optimize.portfolio.rebalancing(). This exercise will focus on single period optimization and the next exercise will use optimize.portfolio.rebalancing() for optimization with periodic rebalancing. optimize.portfolio() supports single-period optimization. Key arguments include R for the asset returns, portfolio for the portfolio specification object, and optimize_method to specify the optimization method used to solve the problem. In many cases, it is useful to specify trace = TRUE to store additional information for each iteration/trial of the optimization.

The following optimization methods are supported:

  • DEoptim: Differential evolution
  • random: Random portfolios
  • GenSA: Generalized Simulated Annealing
  • pso: Particle swarm optimization
  • ROI: R Optimization Infrastructure for linear and quadratic programming solvers

The optimization method you choose should be based on the type of problem you are solving. For example, a problem that can be formulated as a quadratic programming problem should be solved using a quadratic programming solver, whereas a non-convex problem should be solved using a global solver such as DEoptim.

In this exercise, we will define the portfolio optimization problem to maximize mean return and minimize portfolio standard deviation with a standard deviation risk budget where the minimum percentage risk is 5% and the maximum percentage risk is 10%, subject to full investment and long only constraints. The risk budget objective requires a global solver so we will solve the problem using random portfolios. The set of random portfolios, rp, is generated using 500 permutations for this exercise.

Instructions

100 XP

The portfolio specification has already been created and is named port_spec. Also in your workspace are the returns, asset_returns.

  • Run a single-period optimization with trace set to TRUE using "random" as the optimization method. Assign the optimization output to a variable named opt.
  • Print the output of the optimization.