POP Portfolio Construction Changes



Major Releases


Version 4: Interim release June 2008 (Windows only).

• Improved efficiency.

• Additional constraints: user-supplied integer constraints. For example, between 7 and 8 assets from a particular sector are to be in the portfolio.

• Additional constraints: linear and integer constraints specific to long-side and/or short-side.

• Ability to scale the bounds of linear constraints in monetary value and/or weights.

• Additional new argument to portfolio.optimizer and random.portfolio called "positions" that can streamline the specification of limits on the size of positions and trades for each asset.

• A new function trade.distance that gives the distance between two portfolios.

• A restart mechanism that allows more exact optimization (at the expense of more time).

• The results of print and summary are more logical.



Version 3: Official release December 2005.



• Greatly improved efficiency for large optimization problems.

• Additional constraints: portfolio thresholds; number to close; cost limits; lower bounds for variance, tracking error, portfolio size and number to trade constraints; upper bounds for alpha constraints.

• Forced trades are now supported.

• Most warning messages can now be suppressed if desired.

• The randport.eval function has been added.

• Error checking has been improved.



Version 2: Official release September 2004.

• Improved optimization efficiency.

• Trading costs with arbitrary exponents.

• Trade threshold constraints.


Bug Fixes


Fixes in version 4

Affected: random.portfolio in all previous versions
Date of change: 2008 September 02
Description: The starting spot for random portfolios were too similar to each other. This had an effect when there were minimal constraints. The new behavior goes to the other extreme -- starting spots are too dissimilar. However, that is a much easier problem to compensate for.

Affected: portfolio.optimizer
Date of change: 2008 September 02
Description: The visible result of the bug was that forced trades were sometimes not enforced.

Affected: portfolio.optimizer and random.portfolio in version 4.03
Date of change: 2008 July 09
Description: If there was no existing portfolio and portfolio threshold values were given, then all threshold constraints were ignored.


Affected: portfolio.optimizer and random.portfolio in version 3.xx
Date of change: 2008 June 18
Description: Under some circumstances in a long-short portfolio the number of shares traded in some assets could jump beyond their stated limits.


Fixes in version 3

Affected: portfolio.optimizer and random.portfolio in version 3.03
Date of change: 2006 March 24
Description: When the maximum number of assets to trade was small relative to the number of assets in the existing portfolio (at least 7 times smaller and often even smaller than that), then R or S-PLUS could crash. If a crash did not occur, then the computation was correct.


Affected: portfolio.optimizer and random.portfolio in version 3.03
Date of change: 2006 March 24
Description: R or S-PLUS would generally crash when one or more trades were forced to have a non-integer value. The current fix is merely to check for this and create an error if this is requested. The plan is to allow this (with a warning) in version 4.


Affected: portfolio.optimizer in version 3.03
Date of change: 2006 March 24
Description: (esoteric) When the output was to be a Clist, then some of the names were not legal C variable names.


Fixes in version 2

Affected: portfolio.optimizer S code versions 004 and 005
Date of change: 2004 November 25
Description: portfolio.optimizer could sometimes have an error when trying to add rows for benchmarks into the constraint matrix.


Affected: portfolio.optimizer S code version 004
Date of change: 2004 November 25
Description: portfolio.optimizer could sometimes have an error in S-PLUS because of how S-PLUS and R differ when "any" is given a zero-length argument. The revised version also contains some more safety for the "max.weight" argument.


Date of change: 2004 September 25

The internal random seed is now properly initialized. In version 1 the first few random portfolios generated in a call with exceedingly simple constraints could be not very random. It is doubtful that this ever had any effect in practice.

"factor.model.stat" didn't compute the standard deviation correctly when there were missing values for the variable.

A minor problem with "weight" in "factor.model.stat" has been fixed.

"factor.model.stat" now handles infinite values, and assets with zero volatility.

More sensible behavior is exhibited when net.value=0 is declared.


Fixes in version 1

Affected: portfolio.optimizer C code version 1.01
Date of change: 2003 June 25
Description: portfolio.optimizer could sometimes get trading costs wrong for assets that were closed out of long-short portfolios.


Affected: portfolio.optimizer C code version 1.01
Date of change: 2003 June 25
Description: Starting solutions could be degraded. The change ensures that starting solutions are not altered unless they violate constraints.


Affected: portfolio.optimizer S code version 001
Date of change: 2003 June 25
Description: If net.value was given as zero for a long-short portfolio in portfolio.optimizer, it used to give the net.value range as (0, 0). Now the range is (-b, b) where b is the allowance times the maximum gross value.


Affected: portfolio.optimizer S code version 001
Date of change: 2003 June 25
Description: A clearer error message is now given if no monetary values are given to portfolio.optimizer for a long-short portfolio.


Affected: pop.verify S code version 001
Date of change: 2003 June 25
Description: pop.verify now tests if the C code for random.portfolio runs.


Affected: Windows NT
Date of change: 2003 June 25
Description: The dll is now built differently to avoid an unfortunate interaction between Windows NT and the software protection.