Two bugs
Two bugs have come to light. You are unlikely to hit either, but the first will silently give you wrong answers.
Lower bound only on turnover
If you generate random portfolios or do an optimization and ask for a lower bound on the turnover without a binding upper bound, then it drops the turnover constraint altogether. So you don't get the lower bound.
Using objects created in the Portfolio Probe Cookbook http://www.portfolioprobe.com/user-area/documentation/portfolio-probe-cookbook/ the following is an example:
bad <- random.portfolio(100, priceVector, long.only=TRUE, gross=grossVal, existing=curPortfol, turnover=c(1e5, Inf), out.trade=TRUE)
We can see that the turnover has been dropped because almost half of the portfolios violate the constraint:
> mean(valuation(bad, priceVector,
+ collapse=TRUE) < 1e5)
[1] 0.47
If the upper bound is infinite, there is no warning. But there is a warning if the upper bound is finite but too large to be binding. The warning looks like:
maximum turnover constraint (1e+300) is not binding
As long as your turnover bounds are finite and you don't get this warning, you will not hit the bug.
Only one portfolio from random.portfolio.utility
If you ask for one random portfolio from random.portfolio.utility, then it will give you two instead.
|