[R-SIG-Finance] Sharpe's algorithm for portfolio improvement

John P. Burkett burkett at uri.edu
Mon Aug 1 23:07:39 CEST 2011


Enrico Schumann wrote:
> what kind of "difficulty" did you encounter? If you would give more details
> on what you tried, and how, then people should be better able to help you. 
Thank you, Enrico, for your prompt and helpful response.  Focusing on 
Sharpe's algorithm, I originally omitted specifics about difficulties I 
have encountered with packages based on other algorithms.  However, in 
case it is of interest, I will now outline my project and difficulties. 
     I have about 120 monthly observations on gross real returns for 
about 30 assets. [Trying to mitigate estimation error, I've shrunk 
observed returns toward a common value as proposed by Philippe Jorion, 
"Bayes-Stein Estimation for Portfolio Analysis",
Journal of Financial and Quantitative Analysis, v. 21, n. 3 (Sept., 
1986), pp. 279-92.]   I initially specified the utility function as U = 
R/(0.5 + R) where R is R is the gross return on a portfolio and 
specified long-only constraints. The restriction that portfolio shares 
sum to 1 is handled by specifying n-1 variables (where n is the nubmer 
of assets) and making the share asset n be 1 minus the sum of other 
shares. If I apply DEoptim to a sufficiently small subset of the assets, 
it converges and  selects a plausible portfolio.  Yet if I ask DEoptim 
to analyze as many as 30 assets, it fails to converge in any number of 
iterations that I've tried.  Given the same problem, Rgenoud converged 
after 44 hours (more than 2 million generation, if memory serves).  I 
subsequently tried changing the utility function to ln(R) and asking 
Rgenoud to maximize that.  Thus far it has run for over 1.5 million 
generations without converging.  The portfolio shares have barely 
changed over many recent generations.  Perhaps I could just relax the 
default convergence criteria and declare the problem solved for 
practical purposes.  However, that might result in mistaking a local for 
a global maximum.  These experiences may just indicate that a 30 asset 
portfolio is hard to optimize using general purpose algorithms. Kris 
Boudt et al. note that "portfolio problems encountered in practice may 
require days to optimize on a personal computer" ("Large-scale portfolio 
optimization with DEoptim," p. 1). These experiences motivated my 
interest in trying an algorithm, such as that of Sharpe, designed 
specifically for portfolio optimization.

> I don't know the paper you mentioned, but I know a paper of W. Sharpe in
> which he suggests to do repeated zero-sum changes to the portfolio, like
> "increase one asset by x%, and decrease another one by x%". If that is what
> you mean, this can be done with a local search. 
The algorithm you describe sounds very much like that covered in the 
articles I cited in my previous note.  It's probably the same algorithm.

(But actually, other
> functions like DEoptim should work just as well. The DEoptim package even
> comes with a vignette that adresses portfolio optimisation.) 
Perhaps I should just be more patient with DEoptim or buy a faster computer!

> An example for a local search procedure is given in one of the vignettes of
> the NMOF package (which is available from
> https://r-forge.r-project.org/R/?group_id=1128 ), even though I am not sure
> how self-explanatory the vignette is.
Thank you for the NMOF reference.  I've printed "Examples and Extensions 
for the NMOF package" and tried the command
install.packages("NMOF", repos = "http://R-Forge.R-project.org")
That command elicited the following messages:
Warning in install.packages("NMOF", repos = 
"http://R-Forge.R-project.org") :
   argument 'lib' is missing: using 
'/home/john/R/i486-pc-linux-gnu-library/2.8'
trying URL 'http://R-Forge.R-project.org/src/contrib/NMOF_0.14-2.tar.gz'
Content type 'application/x-gzip' length 1352123 bytes (1.3 Mb)
opened URL
==================================================
downloaded 1.3 Mb

* Installing *source* package 'NMOF' ...
** R
** data
**  moving datasets to lazyload DB
** inst
** preparing package for lazy loading
** help
  >>> Building/Updating help pages for package 'NMOF'
      Formats: text html latex example
   DEopt                             text    html    latex   example
   EuropeanCall                      text    html    latex   example
   GAopt                             text    html    latex   example
   LSopt                             text    html    latex   example
   MA                                text    html    latex   example
   NMOF-package                      text    html    latex   example
   NS                                text    html    latex   example
   NSf                               text    html    latex   example
   PSopt                             text    html    latex   example
   TAopt                             text    html    latex   example
   bundData                          text    html    latex   example
   callHestoncf                      text    html    latex   example
   fundData                          text    html    latex   example
   gridSearch                        text    html    latex   example
   qTable                            text    html    latex   example

ERROR in file 'repairMatrix.Rd': Environment (text enclosed in {}) found 
in \title{...}.
The title must be plain text!

ERROR: building help failed for package 'NMOF'
** Removing '/home/john/R/i486-pc-linux-gnu-library/2.8/NMOF'

The downloaded packages are in
	/tmp/RtmpNAuDvf/downloaded_packages
Warning message:
In install.packages("NMOF", repos = "http://R-Forge.R-project.org") :
   installation of package 'NMOF' had non-zero exit status

***************************************

Any suggestions for how to successfully install NMOF would be greatly 
appreciated.

Best regards,
John



> 
> 
> Regards,
> Enrico
> 
> 
>   
> 
>> -----Ursprüngliche Nachricht-----
>> Von: r-sig-finance-bounces at r-project.org 
>> [mailto:r-sig-finance-bounces at r-project.org] Im Auftrag von 
>> John P. Burkett
>> Gesendet: Montag, 1. August 2011 18:49
>> An: R-SIG-Finance at r-project.org
>> Betreff: [R-SIG-Finance] Sharpe's algorithm for portfolio improvement
>>
>> An attractive sounding algorithm for maximizing the expected 
>> utility of of a portfolio was proposed by William F. Sharpe 
>> in "An algorithm for portfolio improvement," Advances in 
>> Mathematical Programming and Financial Planning, 1987, pp. 
>> 155-170 and summarized by the same author in "Expected 
>> utility asset allocation," Financial Analysts Journal, vol. 
>> 63, no. 5 (Sep.-Oct., 2007), pp. 18-30.
>>
>> Has this algorithm been implemented in R?
>>
>> If not, is there a substitute that is likely to work well for 
>> a user-specified concave utility function?  I've tried optim, 
>> DEoptim, and Rgenoud but encountered difficulty in getting 
>> them to converge for a long-only portfolio of around 30 assets.
>>
>> Best regards,
>> John
>>
>> --
>> John P. Burkett
>> Department of Economics
>> University of Rhode Island
>> Kingston, RI 02881-0808
>> USA
>>
>> _______________________________________________
>> R-SIG-Finance at r-project.org mailing list 
>> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
>> -- Subscriber-posting only. If you want to post, subscribe first.
>> -- Also note that this is not the r-help list where general R 
>> questions should go.
> 
> 


-- 
John P. Burkett
Department of Economics
University of Rhode Island
Kingston, RI 02881-0808
USA

phone (401) 874-9195



More information about the R-SIG-Finance mailing list