From sources-request at octave dot org Sun May 9 14:28:47 2004 Subject: Sharpe-optimal long-short portfolio (SOLSP) From: Vic Norton To: Date: Sun, 9 May 2004 15:27:26 -0400 --============_-1127991635==_============ Content-Type: text/plain; charset="us-ascii" ; format="flowed" Hello Sources-Octave, I am attaching a zipped version of my SOLSP code for your consideration. This routine computes Sharpe-optimal long and long-short portfolios relative to past returns and a given weighting of the past. Its usage is [xLG, xLS] = solsp(rtns, rtn0 [, wgts]) A more complete description is appended to the bottom of this note. You can find some background for this work on http://vic.norton.name/finance-math in the papers Two Funds Optimization: How to beat the market and sleep well at night. The Geometry of Risk and Reward. These papers only talk about long portfolios. You might also look at Sharpe's paper The Sharpe Ratio . Regards, Vic A description of the function follows. function [xLG, xLS] = solsp(rtns, rtn0, wgts) #----------------------------------------------------------------------- # # Usage: [xLG, xLS] = solsp(rtns, rtn0 [, wgts]) # # Purpose: Determine Sharpe-optimal long and long-short portfolios # corresponding to a given return matrix, "risk free" # return, and a given system of weights. # # Input: # rtns - m x n matrix of returns (m periods, n funds). # rtn0 - positive scalar (constant return) or m x 1 vector of # "risk free" returns. # wgts - weight vector of length m. # wgts > 0 and sum(wgts) = 1 is required. # The default is wgts(i) = 1/m, i = 1,..,m. # # Output: # xLG - n x 1 Sharpe-optimal long portfolio. # xLS - n x 1 Sharpe-optimal long-short portfolio. # # Definitions: # A _long-short portfolio_ x (in the given funds) is, by definition, # an n x 1 vector that satisfies sum(abs(x)) = 1. If the coefficients # of x are nonnegative, then x is a _long portfolio_. # # Given a long-short portfolio x, set # rwd(x) = rtns * x - rtn0. # (If rtn0 is a positive scalar, then rtn0 := rtn0 * ones(m, 1).) # The _expected reward_ of x is # E(x) = w' * rwd(x), # where w is wgts or wgts' depending on whether wgts is a column # vector or a row vector, respectively. The _variance_ of x is # V(x) = w' * ( ( rwd(x) - w * E(x) ) .^ 2 ). # The _Sharpe ratio_ of x is # S(x) = E(x) / sqrt(V(x)). # # One can think of the Sharpe ratio of a portfolio x as its (ex post) # ratio of reward to risk. # # Properties of the solutions: # 1. The solutions xLG and xLS are optimal in the sense that # there is no long portfolio x with S(x) > S(xLG), # and # there is no long-short portfolio x with S(x) > S(xLS). # In particular, S(xLS) >= S(xLG). # # 2. The solutions xLG and xLS are basic in the linear programming # sense. This means, in particular, that xLG and xLS have less # than m nonzero coefficients. # # Qualification: # Property 1 holds when "expected reward is a linear function of risk" # for the problem at hand. This will generally be true when the sample # size, m, is larger than the number of funds, n. When m <= n, and in # certain other cases, the solution portfolios, xLG and xLS, are # pseudo-optimal -- possibly not optimal, but usally close enough for # practical purposes. # # # Copyright (C) 2004 Vic Norton # # This Octave script is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This script is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this script; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307. # #----------------------------------------------------------------------- --============_-1127991635==_============ Content-Id: Content-Type: application/octet-stream; name="solsp.m.zip" Content-Disposition: attachment; filename="solsp.m.zip" Content-Transfer-Encoding: base64 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 EA8AAAAA --============_-1127991635==_============--