Hi all, I am currently optimising a small portfolio I have created as a part of my research project in Excel. I am unable to find the appropriate package to port this into R. My problem set up is as follows Minimise ABS(Sum(Xi-Xi')+10*Sum(XiMi)/Mavg) Subject to: 0 <= Xi <= 0.05 ABS(Sum(Xi)) = 0.2 where Mi - Market Cap of Stock i Xi - Initial weight of Stock i Xi' - New weight of Stock i Mavg = Average weighted market cap of portfolio. My portfolio has a long as well as a short side, therefore the ABS. The minimisation function is basically a penalty on the change from initial weight and the distance from the Average market cap. My problem is that I need to optimise a vector X with the weights instead of one weight at a time... i.e. I need to be able to change all the stocks in the portfolio simultaneously. I am able to do this EASILY in Excel, but have not found any straightforward application/formulation in R. Any help would be much appreciated. Regards Puneet Singh MBA Student Indian Institute of Management Calcutta, India __________________________________ Send a seasonal email greeting and help others. Do good.
Brian D Ripley
2004-Dec-10 12:42 UTC
[R] Porting optimisation setup from Excel Solver to R
On Fri, 10 Dec 2004, Puneet Singh wrote:> Hi all, > > I am currently optimising a small portfolio I have > created as a part of my research project in Excel. I > am unable to find the appropriate package to port this > into R. My problem set up is as follows > > Minimise ABS(Sum(Xi-Xi')+10*Sum(XiMi)/Mavg) > > Subject to: > 0 <= Xi <= 0.05 > ABS(Sum(Xi)) = 0.2But Sum(Xi) >= 0, so the ABS is unneeded. So I presume the minimization is over (Xi), but you have not said.> where > Mi - Market Cap of Stock i > Xi - Initial weight of Stock i > Xi' - New weight of Stock i > Mavg = Average weighted market cap of portfolio.I suspect you have the meanings of Xi and Xi' reversed here.> My portfolio has a long as well as a short side, > therefore the ABS. The minimisation function is > basically a penalty on the change from initial weight > and the distance from the Average market cap.That's quite a long way from the formula you gave us.> My problem is that I need to optimise a vector X with > the weights instead of one weight at a time... i.e. I > need to be able to change all the stocks in the > portfolio simultaneously. I am able to do this EASILY > in Excel, but have not found any straightforward > application/formulation in R.R is not a spreadsheet nor a general-purpose optimizer: Excel will find it very hard to do most of the things R can do. So why not use Excel? It's actually easy to solve this problem theoretically, especially once you notice that you are minimizing ABS(0.2 + 10*Sum(XiMi)/Mavg - Sum(Xi')) and the last term is a constant. But I suspect you have made several mistakes in specifying it, and will leave it to you to sort this out. It is likely that you can set up your intended problem as a linear program, and although R is not the obvious program to solve an LP, it does have at least three packages that can do so. -- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595