[R-SIG-Finance] solve.QP (for portfolio optimization)
Brian G. Peterson
brian at braverock.com
Wed Jan 10 13:03:24 CET 2007
On Wednesday 10 January 2007 02:49, guillaume.nicoulaud at halbis.com wrote:
> Dear all,
> I use solve.QP for Markowitz-like portfolio optimization purposes and I
> am trying to set some basic constraints. So far I have achieved to pass
> the followings:
<...>
> And now here is what I would like to do:
>
> - Setting a target number of non-zero weights (I want - say - 30 longs
> and shorts...)
>
> - Setting a target gross exposure e.g. sum(abs(wi)) == 2
>
> Does anybody has a piece of code I could adapt to do this? Is there any
> other function that I could use with same level of flexibility than
> solve.QP?
I see the Patrick and Christian have already replied to this post as well,
so I'll try not to be redundant.
If you can define your constraints as linear constraints, you may be able
to use linear programming such as the simplex() fn in R to construct the
surface to optimize over.
It appears to be a general truism that I've discovered as I dig deeper
into the optimization problem that the more constraints you place on a
portfolio, the more likely you are to not create a smooth surface, and
open yourself to problems of local maxima/minima.
In one of my early forrays into optimization in R, Patrick suggested 'A
Data-driven optimization heuristic for downside risk minimization' by
Gilli et al. which discussed a technique called threshold accepting which
allows the setting of multiple arbitrary heuristic and quantitative
constraints. This would be very useful as an optimization mechanism, but
also be quite problem-dependent, and not simple to implement in R.
Techniques such as threshold accepting (suggested by Patrick to me),
genetic algorithm (suggested to you by Christian), simulated annealing,
bayesian optimization, or utility function based optimization (using
brute force or sub-sampling) can avoid the local maxima/minima problem.
Since you appear to want to stick with Markowitz-style optimization for
now, one "easy" approach that I can recommend is to use a pricing model,
such as CAPM or Arbitrage Pricing Theory, that is appropriate to your
problem space to separate your long and short portfolios *before*
attempting optimization. Markowitz or similar optimizations will work
fine for your long portfolio, and you'll need to evaluate whether
Markowitz will work well for your short portfolio. You may find, as many
others in the optimization literature have, that the short portfolio
requires a different optimization approach.
If you're looking for a reference,
Introduction to Modern Portfolio Optimization with
NuOPT, S-PLUS and S+Bayes
by Bernd Scherer, R. Douglas Martin
Is quite a good overview, and although the code is for S-Plus, many/most
of the functions have good analogs in R.
Regards,
- Brian
--
http://braverock.com/brian/resume-quant.pdf
More information about the R-SIG-Finance
mailing list