第章资产组合计算.docx
《第章资产组合计算.docx》由会员分享,可在线阅读,更多相关《第章资产组合计算.docx(19页珍藏版)》请在冰豆网上搜索。
第章资产组合计算
第5章资产组合计算
资产组合是实务性比较强的内容,通过本章的学习,要求读者掌握协方差与相关系数之间的相互推导,熟悉资产组合基本理论,学会用MATLAB计算投资组合基本参数,如均值与方差、资产组合VaR,重点掌握资产组合有效前沿的计算,能够处理无风险利率以及借贷关系情况下的最优投资组合,会用MATLAB规划工具箱求解投资组合最优化问题。
资产组合基本原理
证券投资组合理论(PortfolioTheory)主要研究如何配置各种不同的金融资产,实现资产组合的最佳投资配置。
1952年美国学者马克维茨创立了资产组合理论,该理论在实践中得到广泛运用。
收益率序列与价格序列间的转换
1.将收益率序列转换为价格序列
在处理金融时间序列时,有时需要把收益率序列转换为价格序列。
在MATLAB中将收益率序列转换为价格序列的函数是ret2tick。
调用方式
[TickSeries,TickTimes]=ret2tick(RetSeries,StartPrice,RetIntervals,StartTime,Method)
输入参数
RetSeries%收益率序列
StartPrice%(0ptional)起始价格,默认值是1
RetIntervals%(0ptional)收益率序列的时间间隔,默认值是l
StartTime%(optional)价格开始计算的时间,默认值是0
Method%(Optionl)转换方法。
Method='Simple'表示简单,
;Method='Continous'表示连续法,
。
输出参数
TickSeries%价格序列
TickTimes%与价格对应的时间序列
例5-1己知资产收益率以及时间间隔如表所示
表资产收益率及时间
收益率
时间间隔(天)
182
91
92
起始价格为10元,起始时间为2000年12月18日,试求该资产价格时间序列,收益率采用离散方法。
在MATLAB中执行以下命令:
RetSeries=[,,]';
RetIntervals=[182,91,92]';
StartPrice=10;
StartTime=datenum('18-Dec-2000');
[TickSeries,TickTime]=ret2tick(RetSeries,StartPrice,RetIntervals,StartTime)
datestr(TickTimes)
ans=
18-Dec-2000
18-Jun-2001
17-Sep-2001
18-Dec-2001
这样就把收益率时间序列转换为价格时间序列,结果如表所示。
表资产各时间的价格
时间
18-Dec-2000
18-Jun-2001
17-Sep-2001
18-Dec-2001
价格
收益率
-
时间间隔
-
182
91
92
2.将价格序列转换为收益率序列
MATLAB中将价格序列转换为收益率序列的函数是tick2ret。
调用方式
[RetSeries,RetIntervals]=tick2ret(TickSeries,TickTimes,Method)
输入参数
TickSeries%价格序列
TimeTimes%价格序列对应的时间
Method%(Optionl)计算收益率的,Method='Simple'表示算术收益率;Method='Continous'表示连续法,即为对数计算法。
输出参数
RetSeries%收益率序列
RetIntervals%收益率时间间隔
例5-2已知股票的价格时间序列如表所示。
表股票各时间对应的价格
时间
0
6
9
12
价格
100
110
115
110
求出该股票的收益率时日序列。
在MATLAB中执行以下命令:
TickSeries=[100;110;115;110];
TickTimes=[0;6;9;12];
[RetSeries,RetIntervals]=tick2ret(TickSeries,TickTime)
协方差矩阵与相关系数矩阵间的转换
MATLAB中的corr2cov函数可以把相关系数矩阵转换为协方差矩阵
调用方式
Covariances=corr2cov(STDs,Correlations)
输入参数
STDs%标准差矩阵
Correlations%相关系数矩阵
输出参数
Covariance%协方差矩阵
例5-3已知资产组合中有3个品种,每个品种的资产收益率、标准差和相关系数如表所示。
表的相关数据
Returns=[,,];
STDs=[1,,];
Correlations=[1,,;,1,;,,1];
Covariances=corr2cov(STDs,Correlations)
资产组合收益率与方差
MATLAB中计算资产组合回报与方差的函数是portstats。
调用方式
[PortRisk,PortReturn]=portstats(ExpReturn,ExpCovariance,PortWts)
输入参数
ExpReturn%期望收益率向量
ExpCovariance%资产的协方差矩阵
PortWts%资产权重向量
输出参数
PortRisk%总资产的标准差
PortReturn%%总资产的收益
例5-4某资产组合中有3种资产A、B、C.组合中各资产的预期收益率分别为,,,权重分别为0.4,0.2,0.4,具体数据见程序
ExpReturn=[,,];
ExpCovariance=[,,;,,;,,]
PortWts=[,,;,,];
[PortRisk,PortReturn]=portstats(ExpReturn,ExpCovariance,PortWts)
PortRisk=
PortReturn=
从上述结果可以看到,这两个资产组合的标准差分别为、,资产回报分别,
例5-5假设资产组合中有5种资产,收益分别为,,,,,方差分别为,,,,,资产收益率各不相关,各资产权重分别为,,,,,计算该组合的收益率与方差。
returns=[0,1,,,,];
variances=[,,,,];
ws=[,,,,];
mean=sum(returns.*ws)
variance=sum(variance.*ws.^2)
资产组合VaR(ValueAtRisk)
一般被称为“风险价值”或“在险价值”,指在一定的置信水平下,某一金融资产(或证券组合)在未来特定的一段时间内的最大可能损失。
假定JP摩根公司在2004年置信水平为95%的日VaR值为960万美元,具含义指该公司可以以以95%的把握保证,2004年某一特定时点上的金融资产在未来24小时内,由于市场价格变动带来的损失不会越过960万美元,或者说,只有5%的可能损失超过960万美元。
与传统风险度量手段不同,VaR完全是基于统计分析基础上的的风险度量技术,它的产生足JP摩根公司用来计算市场风险的产物。
例5-6假设投资者拥有两种资产,资产总价他为10000000元,资产权重分别为1/4与3/4,这两种资产日波动率的均值分别为,,标准差分别为,,这两种资产之间的相关系数为,时间为10天,给定置信度为99%,求该资产VaR。
首先求总资产方差,公式如下
其中,
分别为资产组合权重,
为单个资产标准差,
为为这两种资产之间的相关系数。
一般地,可将式用向量与矩阵形式表示,记
,表示各资产的权重,
表示各种资产的标准差,资产协方差矩阵记入cov,则式可以改写为如下形式:
()
记号
表示向量转置。
如果记
,则有
有了资产组合方差,就可以计算出Var数值。
从正态分布表中可以查到对应于置信度99%(
)的
,在各种资产都是服从正态分布的假设下,资产Var值为
()
具体来讲,计算Var的步骤如下。
第1步:
输入资产权重向量w、各资产的标准差sigma、资产之间的相关系数cov,注意协方差矩阵一定是对称矩阵,需要计算时间长度
。
第2步:
权重向量点乘标准差向量。
第3步:
计算资产总的标准差
。
第4步:
对于给定置信度
,查正态分布表找到
第5步:
计算Varmit算Vat,
在Command窗口中执行如下命令:
w=[1/4,3/4];ret=[,];sigma=[,];
corrcoef=[1,;,1];delta=10;
pret=delta*dot(w,ret)
sig=w.*sigma;
tsig=sig*cov*sig'*delta;
var=10^7**sqrt(tsig))
10天VaR值为649300元。
实际上MATLAB中有专门计算Var值的函数,MATLAB巾的portrisk函数可以计算资产组合Var值,注意输入总资产期望收益与标准差,而不是组合中各种种资产的预期收益率与标准差。
调用方式
ValueAtRisk=portrrisk(PortReturn,PortRisk,RiskThreshold,PortValue)
输入参数
PortReturn%总资产的回报
PortRisk%总资产的标准差
RiskThreshold%概率阈值,默认值为
PortValue%资产总的价值
输出参数
ValueAtRisk%概率阈值下的单资产var值
例5-7已知资产年回报率为,标准差为,资产现在价值为1亿,求1%水平下资产在险价值。
在MATLAB中执行以下命令:
PortReturn=;
PortRisk=;
RiskThreshold=;
PortValue=1;
ValueAtRisk=portvrisk(PortReturn,PortRisk,RiskThreshold,PortValue)
该资产var等于,即该资产损失亿的可能性为1%。
需注意的是金融资产一般并不是正态,而是呈现出肥尾特征,其Var较正态分布大。
资产组合有效前沿
由于证券市场投资存在巨大风险,一般不主张把投资集中在一种产品上。
如果一个投资者投资于深证东泰股份(000506),2001年8月10日收盘价为14.10元,到了2006年2月21日收盘价为元,跌幅高达%,如果再要回到原来价位需要上涨倍,这样的机会是几乎不可能的,如果投资名踩中这样的陷阱恐怕很难再有翻身的机会。
运用组合理论可以有效地降低投资风险,其核心思想是在目标收益率给定的情况下,要求资产组合风险最小。
资产组合理论是由马克维茨(H.Markowitz)1952年提出均值方差理论模型
其中,
是协方差矩阵
,
表示第
种资产的收益率,
表示第
种资产在总资产中所占的份额。
两种风险资产组台收益期望与方差
假设有两种资产A、B,其收益率分别用
表示,协方差分别为
,记资产组合组合为
,资产组合收益率、方差分别为
,
分别表示投资的权重,则有
该资产组合期望收益率与方差为
这样资产组合收益率均值与方差如图所示。
图51资产组合收益率均值与方差
MATLAB工具箱中包含了资产均值方差有效前沿函数,这些都是基于MATLAB中的最优化理论工具箱。
马克维茨资产组合理论就是寻找一个有效组合。
所谓有效组合是指在同样风险水平下具有最高收益,这样不同收益及与最小风险构成有效前沿。
在不允许卖空情况下,求解有效组合目标函数为
这是一个约束条件为线性且含有不等式的二次规划方程,给定一个组合收益率就有个最小方差,组合收益与最小方差构成有效前沿关系,有效前沿如图所示。
522均值方差有效前沿
MATLAB中计算均值方差有效前沿的函数为frontcon。
调用方式
[PortRisk,PortReturn,PortWts]=frontcon(ExpReturn,ExpCovariance,
NumPorts,PortReturn,AssetBounds,Groups,GroupBounds)
输入参数
ExpReturn%资产组合中每项资产预期回报,为一行向量
ExpCovariance%各种资产之间的协方差矩阵,为对称矩阵
NumPorts%(Optional)在资产组合有效前沿上的点的个数,默认值是10个点。
PortReturn%(Optional)有效前沿上每个点的回报
AssetBounds%(Optional)每种资产权重的上限、下限区间
Groups%(Optional)如果G(i,j)=1表示第i个资产属于第j个群,G(i,j)=0表示第i个资产不属于第j个群
GroupBounds%(Optional)每种种群权重约束区间,默认值规定下限为0,上限为l
输出参数
PortRisk%组合的标准差
PortReturn%组合的回报
PortWts%组合中每个资产的权重
例5-8考虑一个三资产组合,分别为资产1、资产2与资产3,其预期收益率分别为、、,资产协方差矩阵如表所示,求该资产组合有效前沿。
在MATLAB中执行如下命令
ExpReturn=[,,];
ExpCovariance=[,,;,,;,,];
NumPorts=4;
[PortRisk,PortReturn,PortWts]=frontcon(ExpReturn,ExpCovariance,
NumPorts,PortReturn,AssetBounds,Groups,GroupBounds)
带约束条件资产组合有效前沿
投资组合中的问题很少有简单的约束,大多数情况下是多种约束,例如监管当局为了控制风险,对资产组中每种资产的比例加以种种限制,这时就需要考虑多种约束条件下的最优组合问题。
MATLAB利用均值-方差理论求解资产组合问题,首先是将约束条件写成矩阵形式,例如
或者
形式。
下面用一个例了说明。
例5-9某资产组合中有5种资产构成,第i种资产的预期回报率为
为第
种资产在总资产中的权重,考虑
具有如下形式:
上述约束条件写成矩阵形式如下
A=[1,0,0,0,0,;0,1,0,0,0,;0,0,1,0,0,;0,0,0,0,1,
-1,0,0,0,0,0;0,-1,0,0,0,0;0,0,-1,0,0,0;0,0,0,-1,0,0;0,0,0,0,-1,0;-1,-1,0,0,0,;-1,-1,-1,0,0,;1,1,0,0,0,;1,1,1,0,0,]
注意约束条件
可以分解成两个约束条件:
和
,分别对应于矩阵的第l行和第6行。
下面我们计算约束条件下资产
组合有效前沿。
调用方式
[PortRisk,PortReturn,PortWts]=portopt(ExpReturn,ExpCovariance,NumPorts,PortReturn,ConSet)
输入参数
ExpReturn%资产的期望回报率
ExpCovariance%资产的协方差
NumPorts%(Optional)资产组合中投资品种的个数
PortReturn%Optional)要求组合的回报率
ConSet%(Optional)约束条件
输出参数
PortRisk%资产组合的风险
PortReturn%资产组合的回报
PortWts%组合中各种资产的权重
例5-10设有两种资产,其回报率分别为,,协方差矩阵为
约束条件为
,求该资产组合有效前沿。
在MATLAB中执行如下命令:
ret=[,];cov=[,0;0,];
constr=[1,1,1;1,0,;-1,0,0;0,-1,];
portopt(ret,cov,[],[],constr)
图含约束条件均值方差有效前沿示意图
例5-11各资产的相关系数矩阵、预期回报率和标准差如表所示
试给出有效前沿。
在MATLAB中执行如下命令
Returns=[,,];STDs=[,,];Correlations=[1,,;,1,;,,1];
Covariances=corr2cov(STDs,Correlations)
portopt(Returns,Covariances,20)%绘出组合的有效前沿
%然后选择权重
rand('state',0);
Weights=rand(1000,3);
Total=sum(Weights,2);
Weights(:
1)=Weights(:
1)./Total;
Weights(:
2)=Weights(:
2)./Total;
Weights(:
3)=Weights(:
3)./Total;
输入资产组合有效前沿,以及相关资产组合,绘出各个资产组合风险与收益,代码如下:
[PortRisk,PortReturn]=portstats(Returns,Covariances,,Weights);
holdon
plot(PortRisk,PortReturn,'.r')
title('均值-方差有效前沿以及各个资产组合风险与收益')
xlabel('风险(标准差)')
ylabel('期望收益率')
holdoff
这样资产组合有效前沿和各种资产组合风险与收益点如图所示。
均值-方差有效前沿以及各种资产组合风险与收益
考虑无风险资产及借贷情况下的资产配置
资产组合有效前沿上的点很多,如何选择一个有效点呢?
投资者需要根据目标函数权衡风险与回报。
MATLAB中投资者目标函数如下:
其中,
表示未来回报,
表示投资者风险厌恶系数,一般在2-4之间,
是资产标准差。
投资者决策就是使目标函数最大化,然后对资产进行配置。
MATLAB中考虑无风险资产时的资产配置函数是portalloc,其功能是根据风险-收益最优原则配置每项资产,其中包括无风险资产。
调用方式
[RiskyRisk,RiskyReturn,RiskyFraction,OverallRisk,OverallReturn]
=portalloc(PortRisk,PortReturn,PortWts,RisklessRate,BorrowRate,RiskAversion)
输入参数
PortRisk%有效前沿上每项资产的方差
PortReturn%有效前沿上每项资产的回报
PortWts%有效前沿上每项资产的权重
RisklessRate%无风险利率
BorrowRate%(Optional)借款利率,默认为没有借贷
RiskAversion%(Optional)投资者的风险厌恶系数,大多数投资者的风险厌恶系数在2~4之间,通常选择3
输出参数
RiskyRisk%风险资产部分的标准差
RiskyReturn%风险资产部分的回报
RiskyWts%风险资产的权重
RiskyFraction%总资产中风险资产的分数
OverallRisk%总资产的标准差
Overa11Return%总资产的回报
例已知一个组合中含有3种资产,每种资产的预期回报与协方差矩阵如表所示。
表各种资产的预期回报、协方差
资产A
资产B
资产C
预期回报
协
方
差
资产A
资产B
资产C
无风险利率为,借贷利率为,投资者的风险厌恶系数为3,要求考虑无风险资产和借贷情况下的最优资产配置。
在MATLAB中执行如下命令:
ExpReturn=[,,];
ExpCovariance=[,,;,,;,,];
[PortRisk,PortReturn,PortWts]=portopt(ExpReturn,ExpCovariance);
%由于没有输入位于有效前沿上的点的数目,MATLAB默认有效前沿上选取10个点,每个点代表一种组台,每个组合的标准差保存在PortRisk中,收益率保存在PortReturn中,组合中各资产的权重保存在PortWts中。
下面调用portalloc函数求出考虑无风险资产,以及允许借货时的资产配置,代码如下:
RisklessRate=;
BorrowRate=;
[RiskyRisk,RiskyReturn,RiskyFraction,OverallRisk,OverallReturn]=portalloc(PortRisk,PortReturn,PortWts,RisklessRate,BorrowRate,RiskAversion)
从结果表明,最优组合的标准差为,收益率为,每项资产的权重分别为、、。
总资产中风险资产配置的权重为,总资产的回报率为,总资产的标难差为。
如果选取有效前沿上的20个点,得到结果如下:
[PortRisk,PortReturn,PortWts]=portopt(ExpReturn,ExpCovariance,20);
[RiskyRisk,RiskyReturn,RiskyFraction,OverallRisk,OverallReturn]=portalloc(PortRisk,PortReturn,PortWts,RisklessRate,BorrowRate,3)
从结果中我们可以知道,最优组合的标准差为,组合的收益率为,每项资产的权重分别为、、,总资产中风险资产配置的权重为1.1869,总资产的回报为0.1902,总资的产标准差为0.15297,除了资产配置差别比较大,第一项资产配置进一步减小,其他差别并不大。
线性规划求解资产组台问题
线性规划是研究目标函数和约束条件均为线性的最优化问题,线性规划的标准形式如下
其中,
是目标函数矩阵,
是约束条件矩阵,
是向量。
标准形式线性问题简称LP(LinearProgramming)问题,MATLAB中用lp函数求解线性规划问题。
MATLAB中的线性规划形式如下
其中,
是向量,
是不等式约束和等式约束的矩阵
调用方式
x=limprog(f,A,b)
x=linprog(f,A,b,Aeq,beq,lb,ub)
其中,
分别为标准线性规划模型中的参数;参数
分别为变量x的上界和下界。
例5-13某资产组合中有3种资产,各资产的收益率分别为、,、。
要求资产l与资产3的权重小于资产2的权重,且没有卖空。
求解使得上述收益率最大的投资组合
首先确定目标函数为:
资产约束条件可写为
在MATLAB中执行如下命令:
f=[,,]';A=[1,-1,1];b=0,Aeq=[1,1,1];beq=1;lb=[0,0,]';ub=[1,1,1]';
x=linprog(f,A,b,Aeq,beq,lb,ub)
最后得出资产1、资产2、资产3的权重分别为、、。
下面我们考虑二次规划求解资产组合,二次规划问题(QuadraticProgramming)的标准形式如下
其中,
为权重向量,
为对称矩阵。
约束条什分成两个部分,前一部分约束条件是不等式,后一部分约束条件是等式。
在资产组台问题中,
多为协方差矩阵;
在MATLAB中求解此类问题的函数是quadprog。
调用方式
x=quadproq(H,q,A,h)
x=quadprog(H,r,q,A,