I am trying to understand how to maximize Sharpe ratio in portfolio optimization.

$\boxed{\begin{align}\max\>&\frac{r^Tx-r_f}{\sqrt{x^TQx}}\\ & \sum_i x_i = 1\\ & x_i\ge 0\end{align}}$

In order to solve this problem using general QP solver, according to a post, we could transform the problem into the following:

$\boxed{\begin{align}\min\>&y^TQy\\ & \sum_i (r_i-r_f) y_i = 1\\ & \sum_i y_i = \kappa\\ & Ay \sim \kappa b \\ & y_i,\kappa \ge 0\end{align}}$

and retrieve optimal by $x^*_i := y^*_i / \kappa^*$.

I got lost with the math. How did it work?

  • 1
    $\begingroup$ This question may be related quant.stackexchange.com/questions/39137/… and the Tutuncu reference mentioned therein (Tutuncu/Cournejols is also referenced in a footnote of the post you linked) $\endgroup$
    – Alex C
    May 3, 2018 at 21:07
  • 1
    $\begingroup$ There is a brief discussion on Pages 159-160 of the Cornuejols Tutuncu book, which is available online math.ku.dk/~rolf/CT_FinOpt.pdf Is that helpful? $\endgroup$
    – Alex C
    May 5, 2018 at 1:06

2 Answers 2


Q is given. Q is a 11 by 11 matrix.

f = [0;0;0;0;0;0;0;0;0;0;0];
n = 10;
rf = 0.0082;
% Optimization problem data
lb = zeros(n+1,1);
ub = inf*ones(n+1,1);
Aeq = [( AvrReturn- rf)' 0;ones(1,n) -1];
beq = [1; 0];
A = [eye(n),-1*ones(n,1)];
b = zeros(n,1);
[x4 fval4,exitflag,output] = quadprog(H,f,A,b,Aeq,beq,lb,ub)
y = x4(1:n);
k = x4(n + 1);
x = x4/k;
  • $\begingroup$ Nice code. In the call to quadprog, the first argument is H. Should that be Q? Isn't Q 10 by 10? (10 being the number of risky securities, i.e. the length of x and y, which in the program is called $n$). $\endgroup$
    – nbbo2
    Apr 14, 2020 at 21:36
  • $\begingroup$ Also, should the last line be x = y/k; ? x4 is too big, length is (n+1). $\endgroup$
    – nbbo2
    Apr 14, 2020 at 21:42
  • 1
    $\begingroup$ Yea it should be Q to align with the question above but in my working I used H. Q is 10 by 10 based the number of assets. I added a column of zeros and a row of zeros to it 11 by 11 matrix, in order for the program to run, otherwise it won't run. $\endgroup$ Apr 16, 2020 at 14:47
  • $\begingroup$ Yea noob2, is okay writing the last line as x = y/k. $\endgroup$ Apr 16, 2020 at 14:54
  • $\begingroup$ I will not upvote this answer without some fixes. It does not work as written. We need to show code that takes Q (10 by 10), assumed given, and creates an 11 by 11 matrix H that is used later. Otherwise no one knows where H in line 9 comes from. $\endgroup$
    – nbbo2
    May 15, 2020 at 7:28

A nice algorithmic solution is given by the master himself, W. F. Sharpe, in his paper "An Algorithm for Portfolio Improvement", October 1978, Graduate School of Business, Stanford University.

  • $\begingroup$ The code is here web.stanford.edu/~wfsharpe/mat/gqp.txt the paper is here gsb.stanford.edu/faculty-research/working-papers/… $\endgroup$
    – Alex C
    Sep 8, 2018 at 22:12
  • 1
    $\begingroup$ The problem that Kalvelagen is addressing in his post and the problem that Sharpe solves are not the same. Sharpe finds a line with a given slope that is tangent to the efficient frontier. The problem in this post is to find, among all lines that go through the risk free point $(0,r_f)$ (and which of course all have different slopes) to find the one that is tangent to the efficient frontier. Sharpe does not have the risk free rate in his algorithm, while it is a key parameter in this problem. $\endgroup$
    – nbbo2
    Sep 8, 2018 at 22:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.