Learn R Programming

parma (version 1.7)

parmafrontier-methods: Efficient Frontier Generator

Description

Solves for the portfolios on the efficient frontier given a specification object.

Usage

parmafrontier(spec, n.points = 100, miny = NULL, maxy = NULL, type = NULL, 
solver = NULL, solver.control = list(), parma.control = list(ubounds = 10000, 
mbounds = 1e+05, penalty = 10000), cluster = NULL)

Value

A matrix object with columns for the weights, risk, reward and termination status of the solver (not available for the QP solver), and n.points rows. The user should investigate the non-converged solutions as well as remove any NA based rows (non-converged with error).

Arguments

spec

A parmaSpec object.

n.points

The number of portfolios to solve for along the frontier.

miny

(Optional) Minimum return from which to calculate the frontier. If not provided, will be calculated by a first pass optimization.

maxy

(Optional) Maximum return for which to calculate the frontier. If not provided, will be based on the maximum forecast.

type

The problem type to use (the show method on parmaSpec will indicate the available options).

solver

For a GNLP type problem the choice of global solver, either “cmaes” or “crs” from the nloptr package.

solver.control

A list with optional control parameters passed to the nloptr or cmaes solver.

parma.control

Internal NLP tuning parameters, where ‘ubounds’ represents the symmetric unconstrained parameter bounds in the fractional problem, ‘mbounds’ the multiplier upper bounds in the fractional formulation, ‘penalty’ the GNLP penalty parameter.

cluster

A precreated cluster object from the parallel package for the parallel evaluation of the frontier portfolios (see note).

Author

Alexios Galanos

Details

If using a cluster object, care should be taken since some of the LP based problems are quite memory intensive. Though some care some gone into using slam matrices and forcing garbage collection in intermediate setup steps of these problems, there is no guarantee that memory will not be quickly depleted for large problems using many cores/sockets.