马柯维茨均值-方差模型在丰富的金融投资理论中,组合投资理论占有非常重要的地位,金融产品本质上各种金融工具的组合。
现代投资组合理论试图解释获得最大投资收益与避免过分风险之间的基本权衡关系,也就是说投资者将不同的投资品种按一定的比例组合在一起作为投资对象,以达到在保证预定收益率的前提下把风险降到最小或者在一定风险的前提下使收益率最大。
从历史发展看,投资者很早就认识到了分散地将资金进行投资可以降低投资风险,扩大投资收益。
但是第一个对此问题做出实质性分析的是美国经济学家马柯维茨(Markowitz)以及他所创立的马柯维茨的资产组合理论。
1952年马柯维茨发表了《证券组合选择》,标志着证券组合理论的正式诞生。
马柯维茨根据每一种证券的预期收益率、方差和所有证券间的协方差矩阵,得到证券组合的有效边界,再根据投资者的效用无差异曲线,确定最佳投资组合。
马柯维茨的证券组合理论在计算投资组合的收益和方差时十分精确,但是在处理含有较多证券的组合时,计算量很大。
马柯维茨的后继者致力于简化投资组合模型。
在一系列的假设条件下,威廉·夏普(William F. Sharp)等学者推导出了资本资产定价模型,并以此简化了马柯维茨的资产组合模型。
由于夏普简化模型的计算量相对于马柯维茨资产组合模型大大减少,并且有效程度并没有降低,所以得到了广泛应用。
1 模型理论经典马柯维茨均值-方差模型为:21min max ()..1p T p n i i X XE r X R s t x σ=⎧⎪=∑⎪⎪=⎨⎪⎪=⎪⎩∑T 其中,12(,,...,)T n R R R R =;()i i R E r =是第i 种资产的预期收益率;12(,,...,)T n X x x x =是投资组合的权重向量;()ij n n σ⨯=∑是n 种资产间的协方差矩阵;()p p R E r =和2p σ分别是投资组合的期望回报率和回报率的方差。
点睛:马柯维茨模型以预期收益率期望度量收益;以收益率方差度量风险。
在教课书中通常以资产的历史收益率的均值作为未来期望收益率,可能会造成“追涨的效果”,在实际中这些收益率可能是由研究员给出;在计算组合风险值时协方差对结果影响较大,在教课书中通常以资产的历史收益率的协方差度量资产风险与相关性,这种计算方法存在预期误差,即未来实际协方差矩阵与历史协方差矩阵间的存在偏差。
例1.以华北制药、中国石化、上海机场三只股票,如何构使用马柯维茨模型构建投资2 收益与风险计算函数 portstats 函数计算公式:()T p E r X R =2p X X σ=∑T其中,12(,,...,)T n R R R R =;()i i R E r =是第i 种资产的预期回报率;12(,,...,)T n X x x x =是投资组合的权重向量;()ij n nσ⨯=∑是n 种资产间的协方差矩阵;()p p R E r =和2p σ分别是投资组合的期望回报率和回报率的方差。
函数语法:[PortRisk, PortReturn] = portstats(ExpReturn, ExpCovariance, PortWts) 输入参数:ExpReturn :资产预期收益率ExpCovariance :资产的协方差矩阵 PortWts :资产权重 输出参数:PortRisk :资产组合风险(标准差) PortReturn :资产组合预期收益(期望)例:在例1中,假设等权重配置华北制药、中国石化、上海机场,则资产组合的风险与收益为多少? M 文件:Portstatstest.mExpReturn = [0.000540 0.000275 0.000236]; ExpCovariance = 0.0001*[5.27 2.80 1.74; 2.80 4.26 1.67; 1.74 1.67 2.90 ]; PortWts=1/3*ones(1,3);[PortRisk, PortReturn] = portstats(ExpReturn, ExpCovariance,PortWts) >>PortRisk = 0.016617 PortReturn = 3.5033e-004注释: ones(n,m)为生产元素都为1的n ×m 矩阵, ones(1,3)=[1,1,1]. PortWts=1/3*[1,1,1]=[1/3, 1/3, 1/3]3 有效前沿计算函数马柯维茨均值-方差模型为经典的带约束的二次优化问题,在给定期望收益时,方差最小解唯一(可行解域为凸),frontcon 使用,matlab 优化工具箱的fmincon 函数进行求解,fmincon 函数说明请参看附录。
frontcon 函数算法:11min min =max ()..1..1p p T Ti p nni i i i X XX XX R e E r X R s t x s t x σσ==⎧=∑⎧⎪⎪⎪=∑⎪⎪⎪⎪⎧=⇒⎨⎨⎪⎨⎪⎪=⎪⎪⎪=⎩⎪⎪⎩⎪⎩∑∑T T 给定i e 计算相应风险最小的组合,即得到有效前沿上一点(有效组合),给定一系列ie 可以有效描绘出有效前沿。
组合的收益介于单个资产的最大收益与最小收益之间,例如示例中最大收益为0.0540%、最小收益为0.0236%,i e 为根据NumPorts 在最大收益与最小收益间进行等分即可。
函数语法:[PortRisk, PortReturn, PortWts] = frontcon(ExpReturn, ExpCovariance, NumPorts, PortReturn, AssetBounds, Groups, GroupBounds, varargin)输入参数:ExpReturn :资产预期收益率;ExpCovariance :资产的协方差矩阵;NumPorts :(可选)有效前沿上输出点的个数,默认为10; PortReturn :(可选)给定有效前沿上输出回报点个数; AssetBounds :(可选)每种资产权重的上下限,例如,上海机场的最大持仓比例为10%; Groups :(可选)资产分组,Groups (i,j )=1表示第j 个资产属于第i 个群(例如,行业);GroupBounds :每个资产群约束(例如,某个行业配置能超过20%) 输出函数:PortRisk :资产组合风险(标准差) PortReturn :资产组合预期收益(期望) PortWts :资产组合中各资产权重例: 在例1中,如何配置华北制药、中国石化、上海机场,则资产组合为有效组合? M 文件:frontcontest.m程序源码:ExpReturn = [0.000540 0.000275 0.000236]; ExpCovariance =0.0001* [5.27 2.80 1.74; 2.80 4.26 1.67; 1.74 1.67 2.90 ]; NumPorts =10;[PortRisk, PortReturn, PortWts] = frontcon(ExpReturn,ExpCovariance,NumPorts)>> PortRisk = 1.0e-002* 1.56531.57591.60741.65861.72771.81281.91292.02842.15672.2956PortReturn =1.0e-003 *0.28430.31270.34110.36950.39800.42640.45480.48320.51160.5400PortWts =0.1274 0.2456 0.6270 0.2270 0.1979 0.5751 0.3265 0.1503 0.5232 0.4261 0.1026 0.4713 0.5257 0.0549 0.4194 0.6253 0.0072 0.3675 0.7196 0 0.2804 0.8131 0 0.18690.9065 0 0.09351.0000 -0.0000 0.0000图1 投资组合有效前沿图直接运行frontcon(ExpReturn,ExpCovariance, NumPorts)则可画出图1;如果各个资产投资上限为50%,求解有效前沿?程序源码:ExpReturn = [0.000540 0.000275 0.000236];ExpCovariance = 0.0001*[5.27 2.80 1.74;2.80 4.26 1.67;1.74 1.672.90 ];NumPorts =10;AssetBounds=[0,0,0;0.5,0.5,0.5]%设置资产上限[PortRisk, PortReturn, PortWts] = frontcon(ExpReturn,ExpCovariance, NumPorts,[],AssetBounds)计算结果:1.0e-002*PortRisk =1.58181.58421.59141.60341.62001.64081.66491.69201.74121.9449PortReturn =1.0e-003 *0.30240.31400.32570.33740.34910.36080.37250.38410.39580.4075PortWts =0.1768 0.3232 0.50000.2209 0.2791 0.50000.2650 0.2350 0.50000.3091 0.1909 0.50000.3532 0.1468 0.50000.3954 0.1173 0.48730.4363 0.0977 0.46600.4773 0.0781 0.44460.5000 0.2005 0.29950.5000 0.5000 0.00004 约束条件下有效前沿在实际构建投资组合时候要考虑到合法合规或者风险管理等限制条件,这样会给组合构建带来约束,例如基金“双百分只十规则”:基金投资于一证券的市值不能超过基金资产的10%,基金投资于一上市公司股票不能超过该公司市值的10%;Matlab求解约束条件下有效前沿的为portopt函数;函数语法:[PortRisk, PortReturn, PortWts] = portopt(ExpReturn, ExpCovariance, NumPorts, PortReturn, ConSet, varargin)输入参数:ExpReturn:资产预期收益率ExpCovariance:资产的协方差矩阵NumPorts:(可选)有效前沿上输出点的个数,默认为10PortReturn:(可选)给定有效前沿上输出点回报ConSet:组合约束,一般通过portcons进行设置Varargin: 主要为优化算法中的一些参数输出函数:PortRisk:资产组合风险(标准差)PortReturn:资产组合预期收益(期望)PortWts:资产组合中各资产权重注释:portcons函数ConSet = portcons(varargin)portcons该函数比较复杂,本书使用举例的方式进行说明。