function [val1, val2] = HARAmax1(X,XDistr,gama,CEqTolerance) %Copyright (c) 2001-2009 by Ales Cerny %usage [IP,alpha1] = HARAmax1(X,XDistr,gama,CertaintyEqTolerance) %computes IP and optimal portfolio for a single risky asset with excess %return X using normalized HARA utility (local risk aversion = 1) %************************************************************************% % HARAmax1.m - supplementary program to % % Ales Cerny (2009) Mathematical Techniques in Finance (2nd ed.) % % Princeton University Press http://press.princeton.edu/titles/9079.html % %************************************************************************% % This code is provided 'as-is', without any express or implied warranty. % % Permission is granted to anyone to use this code for any purpose, % subject to the following restrictions: % % 1. The origin of this code must not be misrepresented; you must not % claim that you wrote the original code. % 2. Modified code versions must be plainly marked as such, and must not % be misrepresented as being the original code. % 3. This notice may not be removed from any source distribution. % NOTICE TO STUDENTS: To avoid accusations of plagiarism, if you use this % code or its modifications in assessed work you should prepend it with a % note stating: % "This is the original/modified version of the code HARAmax1.m by % Ales Cerny (2009), Mathematical Techniques in Finance (2nd ed.), % Princeton University Press. The original version is available from % http://www.martingales.info/mtfweb2". % A similar acknowledgement should appear prominently inside your written % report. alpha = 0; CEqPrecision=2*CEqTolerance; %*******************% % the main loop % %*******************% while abs(CEqPrecision) >= CEqTolerance; wealth = 1 + X*alpha; u = (wealth.^(1-gama))*XDistr'; du = (1-gama)*(X.*(wealth.^(-gama)))*XDistr'; ddu = gama*(gama-1)*((X.^2).*(wealth.^(-gama-1)))*XDistr'; CE = u.^(1/(1-gama)); CEqPrecision = -1/2/(1-gama)*du^2/u/ddu*gama*CE/(1+gama*(CE-1)); alpha = alpha - du/ddu; end; val1=gama*(CE-1); val2=gama*alpha;