7第5章 资产组合计算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章
资产组合计算
资产组合是实务性比较强的内容,通过本章的学习,要求读者掌握协方差与 相关系数之间的相互推导,熟悉资产组合基本理论,学会用 MATLAB 计算投资组 合基本参数, 如均值与方差、 资产组合 VaR, 重点掌握资产组合有效前沿的计算, 能够处理无风险利率以及借贷关系情况下的最优投资组合,会用 MATLAB 规划工 具箱求解投资组合最优化问题。
returns=[0,1,0.12,0.14,0.16,0.2]; variances=[0.02,0.03,0.01,0.05,0.02]; ws=[0.1,0.2,0.3,0.2,0.2]; mean=sum(returns.*ws) variance=sum(variance.*ws.^2)
5.1.4 资产组合 VaR(Value At Risk)
ExpReturn=[0.1,0.2,0.15]; ExpCovariance=[0.0100,-0.0061,0.0042;-0.0061,0.0400,-0.0252;0.0042,-0.0252,0.0225] PortWts=[0.4,0.2,0.4;0.2,0.4,0.2];
[PortRisk,PortReturn]=portstats(ExpReturn,ExpCovariance,PortWts)
Var 总资产 ( t - Z1- t
(5.4)
ቤተ መጻሕፍቲ ባይዱ
具体来讲,计算 Var 的步骤如下。 第 1 步:输入资产权重向量 w、各资产的标准差 sigma、资产之间的相关系数 cov,注意协方差矩阵一定是对称矩阵,需要计算时间长度 t 。 第 2 步:权重向量点乘标准差向量。 第 3 步:计算资产总的标准差 。 第 4 步:对于给定置信度 ,查正态分布表找到 Z1 第 5 步:计算 Varmit 算 Vat, Var 总资产 ( t - Z1- t
1 w11 2 [ w11 , w 2 2 ] 1 w 2 2
其中, w1 , w 2 分别为资产组合权重, 1, 2 为单个资产标准差, 为为这两 种资产之间的相关系数。 一般地,可将式(5.1)用向量与矩阵形式表示,记 w [ w1 , w 2 ,..., w n ] ,表示 各资产的权重, [1 , 2 ,..., n ] 表示各种资产的标准差,资产协方差矩阵记入 cov,则式(5.1)可以改写为如下形式:
在 Command 窗口中执行如下命令:
w=[1/4,3/4];ret=[0.003,0.002];sigma=[0.02,0.01]; corrcoef=[1,0.8;0.8,1];delta=10; pret=delta*dot(w,ret) sig=w.*sigma; tsig=sig*cov*sig'*delta; var=10^7*(pret-2.3263*sqrt(tsig))
PortRisk = 0.0560 0.0550 PortReturn = 0.1400 0.1300
从上述结果可以看到,这两个资产组合的标准差分别为 0.056、0.055,资 产回报分别 0.1400,0.1300 例 5-5 假设资产组合中有 5 种资产, 收益分别为 0.1, 0.12,0.14,0.16,0.2, 方差分别为 0.02,0.03,0.01,0.05,0.02,资产收益率各不相关, 各资产权重分别 为 0.1,0.2,0.3,0.2,0.2,计算该组合的收益率与方差。
5.1.3 资产组合收益率与方差
MATLAB 中计算资产组合回报与方差的函数是 portstats。 调用方式 [PortRisk,PortReturn]=portstats(ExpReturn,ExpCovariance,PortWts) 输入参数 ExpReturn % 期望收益率向量 ExpCovariance % 资产的协方差矩阵 PortWts % 资产权重向量 输出参数 PortRisk % 总资产的标准差 PortReturn % % 总资产的收益 例 5-4 某资产组合中有 3 种资产 A、B、C.组合中各资产的预期收益率分 别为 0.1,0.2,0.15,权重分别为 0.4,0.2,0.4,具体数据见程序
一般被称为“风险价值”或“在险价值” ,指在一定的置信水平下,某一金 融资产(或证券组合)在未来特定的一段时间内的最大可能损失。假定 JP 摩根 公司在 2004 年置信水平为 95%的日 VaR 值为 960 万美元, 具含义指该公司可以 以以 95%的把握保证,2004 年某一特定时点上的金融资产在未来 24 小时内, 由于市场价格变动带来的损失不会越过 960 万美元,或者说,只有 5%的可能损 失超过 960 万美元。与传统风险度量手段不同,VaR 完全是基于统计分析基础上 的的风险度量技术,它的产生足 JP 摩根公司用来计算市场风险的产物。 例 5-6 假设投资者拥有两种资产,资产总价他为 10000 000 元,资产权重 分别为 1/4 与 3/4,这两种资产日波动率的均值分别为 0.003,0.002,标准差 分别为 0.02,0.01,这两种资产之间的相关系数为 0.8,时间为 10 天,给定置 信度为 99%,求该资产 VaR。 首先求总资产方差,公式如下
5.1.2 协方差矩阵与相关系数矩阵间的转换
MATLAB 中的 corr2cov 函数可以把相关系数矩阵转换为协方差矩阵 调用方式 Covariances=corr2cov(STDs,Correlations) 输入参数 STDs %标准差矩阵 Correlations %相关系数矩阵 输出参数 Covariance % 协方差矩阵
10 天 VaR 值为 649 300 元。 实际上 MATLAB 中有专门计算 Var 值的函数,MATLAB 巾的 portrisk 函数可以 计算资产组合 Var 值,注意输入总资产期望收益与标准差,而不是组合中各种 种资产的预期收益率与标准差。 调用方式 ValueAtRisk=portrrisk(PortReturn,PortRisk,RiskThreshold,PortValue) 输入参数 PortReturn %总资产的回报 PortRisk % 总资产的标准差 RiskThreshold % 概率阈值,默认值为 0.05 PortValue % 资产总的价值 输出参数 ValueAtRisk %概率阈值下的单资产 var 值 例 5-7 已知资产年回报率为 0.0029,标准差为 0.0308,资产现在价值为 1 亿, 求 1%水平下资产在险价值。 在 MATLAB 中执行以下命令: PortReturn=0.0029; PortRisk=0.0308; RiskThreshold=0.01; PortValue=1; ValueAtRisk=portvrisk(PortReturn,PortRisk,RiskThreshold,PortValue) 该资产 var 等于 0.0688,即该资产损失 0.0688 亿的可能性为 1%。需注意 的是金融资产一般并不是正态,而是呈现出肥尾特征,其 Var 较正态分布大。
5.1 资产组合基本原理
证券投资组合理论(Portfolio Theory)主要研究如何配置各种不同的金融资 产,实现资产组合的最佳投资配置。1952 年美国学者马克维茨创立了资产组合 理论,该理论在实践中得到广泛运用。
5.1.1 收益率序列与价格序列间的转换
1.将收益率序列转换为价格序列 在处理金融时间序列时, 有时需要把收益率序列转换为价格序列。 在 MATLAB 中将收益率序列转换为价格序列的函数是 ret2tick。 调用方式 [TickSeries,TickTimes]=ret2tick(RetSeries,StartPrice,RetIntervals,St artTime,Method) 输入参数 RetSeries %收益率序列 StartPrice %(0ptional)起始价格,默认值是 1 RetIntervals %(0ptional)收益率序列的时间间隔,默认值是 l StartTime %(optional)价格开始计算的时间,默认值是 0 Method %(Optionl) 转 换 方 法 。 Method='Simple' 表 示 简 单, p t 1 Pt (1 rt 1 ) ;Method='Continous'表示连续法, Pt 1 Pt e rt 1 。 输出参数 TickSeries %价格序列 TickTimes %与价格对应的时间序列 例 5-1 己知资产收益率以及时间间隔如表 5.1 所示 表 5.1 资产收益率及时间 收益率 0.10 0.05 -0.05 时间间隔(天) 182 91 92 起始价格为 10 元,起始时间为 2000 年 12 月 18 日,试求该资产价格时间序 列,收益率采用离散方法。 在 MATLAB 中执行以下命令:
例 5-3 已知资产组合中有 3 个品种,每个品种的资产收益率、标准差和相 关系数如表 5.5 所示。 表 5.5 的相关数据 Returns=[0.1,0.15,0.12]; STDs=[1,0.8,0.18]; Correlations=[1,0.8,0.4;0.8,1,0.3;0.4,0.3,1]; Covariances=corr2cov(STDs,Correlations)
(w.)cov(w, ) ˆ w. ,则有 记号 表示向量转置。如果记 ˆ cov( ˆ ) ˆ t 2
(5.2)
有了资产组合方差,就可以计算出 Var 数值。从正态分布表中可以查到对应于 置信度 99%( 0.01 )的 Z1 2.3263 ,在各种资产都是服从正态分布的假设 下,资产 Var 值为
RetSeries=[0.10,0.05,-0.05]'; 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 这样就把收益率时间序列转换为价格时间序列,结果如表 5.2 所示。 表 5.2 资产各时间的价格 时间 18-Dec-2000 18-Jun-2001 17-Sep-2001 18-Dec-2001 价格 10.0000 11.0000 11.5500 10.9725 收益率 0.10 0.05 -0.05 时间间隔 182 91 92 2.将价格序列转换为收益率序列 MATLAB 中将价格序列转换为收益率序列的函数是 tick2ret。 调用方式 [RetSeries,RetIntervals]=tick2ret(TickSeries,TickTimes,Method) 输入参数 TickSeries %价格序列 TimeTimes % 价格序列对应的时间 Method %(Optionl)计算收益率的,Method='Simple'表示算术收 益率;Method='Continous'表示连续法,即为对数计算法。 输出参数 RetSeries %收益率序列 RetIntervals %收益率时间间隔 例 5-2 已知股票的价格时间序列如表 5.3 所示。 表 5.3 股票各时间对应的价格 时间 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 计算投资组 合基本参数, 如均值与方差、 资产组合 VaR, 重点掌握资产组合有效前沿的计算, 能够处理无风险利率以及借贷关系情况下的最优投资组合,会用 MATLAB 规划工 具箱求解投资组合最优化问题。
returns=[0,1,0.12,0.14,0.16,0.2]; variances=[0.02,0.03,0.01,0.05,0.02]; ws=[0.1,0.2,0.3,0.2,0.2]; mean=sum(returns.*ws) variance=sum(variance.*ws.^2)
5.1.4 资产组合 VaR(Value At Risk)
ExpReturn=[0.1,0.2,0.15]; ExpCovariance=[0.0100,-0.0061,0.0042;-0.0061,0.0400,-0.0252;0.0042,-0.0252,0.0225] PortWts=[0.4,0.2,0.4;0.2,0.4,0.2];
[PortRisk,PortReturn]=portstats(ExpReturn,ExpCovariance,PortWts)
Var 总资产 ( t - Z1- t
(5.4)
ቤተ መጻሕፍቲ ባይዱ
具体来讲,计算 Var 的步骤如下。 第 1 步:输入资产权重向量 w、各资产的标准差 sigma、资产之间的相关系数 cov,注意协方差矩阵一定是对称矩阵,需要计算时间长度 t 。 第 2 步:权重向量点乘标准差向量。 第 3 步:计算资产总的标准差 。 第 4 步:对于给定置信度 ,查正态分布表找到 Z1 第 5 步:计算 Varmit 算 Vat, Var 总资产 ( t - Z1- t
1 w11 2 [ w11 , w 2 2 ] 1 w 2 2
其中, w1 , w 2 分别为资产组合权重, 1, 2 为单个资产标准差, 为为这两 种资产之间的相关系数。 一般地,可将式(5.1)用向量与矩阵形式表示,记 w [ w1 , w 2 ,..., w n ] ,表示 各资产的权重, [1 , 2 ,..., n ] 表示各种资产的标准差,资产协方差矩阵记入 cov,则式(5.1)可以改写为如下形式:
在 Command 窗口中执行如下命令:
w=[1/4,3/4];ret=[0.003,0.002];sigma=[0.02,0.01]; corrcoef=[1,0.8;0.8,1];delta=10; pret=delta*dot(w,ret) sig=w.*sigma; tsig=sig*cov*sig'*delta; var=10^7*(pret-2.3263*sqrt(tsig))
PortRisk = 0.0560 0.0550 PortReturn = 0.1400 0.1300
从上述结果可以看到,这两个资产组合的标准差分别为 0.056、0.055,资 产回报分别 0.1400,0.1300 例 5-5 假设资产组合中有 5 种资产, 收益分别为 0.1, 0.12,0.14,0.16,0.2, 方差分别为 0.02,0.03,0.01,0.05,0.02,资产收益率各不相关, 各资产权重分别 为 0.1,0.2,0.3,0.2,0.2,计算该组合的收益率与方差。
5.1.3 资产组合收益率与方差
MATLAB 中计算资产组合回报与方差的函数是 portstats。 调用方式 [PortRisk,PortReturn]=portstats(ExpReturn,ExpCovariance,PortWts) 输入参数 ExpReturn % 期望收益率向量 ExpCovariance % 资产的协方差矩阵 PortWts % 资产权重向量 输出参数 PortRisk % 总资产的标准差 PortReturn % % 总资产的收益 例 5-4 某资产组合中有 3 种资产 A、B、C.组合中各资产的预期收益率分 别为 0.1,0.2,0.15,权重分别为 0.4,0.2,0.4,具体数据见程序
一般被称为“风险价值”或“在险价值” ,指在一定的置信水平下,某一金 融资产(或证券组合)在未来特定的一段时间内的最大可能损失。假定 JP 摩根 公司在 2004 年置信水平为 95%的日 VaR 值为 960 万美元, 具含义指该公司可以 以以 95%的把握保证,2004 年某一特定时点上的金融资产在未来 24 小时内, 由于市场价格变动带来的损失不会越过 960 万美元,或者说,只有 5%的可能损 失超过 960 万美元。与传统风险度量手段不同,VaR 完全是基于统计分析基础上 的的风险度量技术,它的产生足 JP 摩根公司用来计算市场风险的产物。 例 5-6 假设投资者拥有两种资产,资产总价他为 10000 000 元,资产权重 分别为 1/4 与 3/4,这两种资产日波动率的均值分别为 0.003,0.002,标准差 分别为 0.02,0.01,这两种资产之间的相关系数为 0.8,时间为 10 天,给定置 信度为 99%,求该资产 VaR。 首先求总资产方差,公式如下
5.1.2 协方差矩阵与相关系数矩阵间的转换
MATLAB 中的 corr2cov 函数可以把相关系数矩阵转换为协方差矩阵 调用方式 Covariances=corr2cov(STDs,Correlations) 输入参数 STDs %标准差矩阵 Correlations %相关系数矩阵 输出参数 Covariance % 协方差矩阵
10 天 VaR 值为 649 300 元。 实际上 MATLAB 中有专门计算 Var 值的函数,MATLAB 巾的 portrisk 函数可以 计算资产组合 Var 值,注意输入总资产期望收益与标准差,而不是组合中各种 种资产的预期收益率与标准差。 调用方式 ValueAtRisk=portrrisk(PortReturn,PortRisk,RiskThreshold,PortValue) 输入参数 PortReturn %总资产的回报 PortRisk % 总资产的标准差 RiskThreshold % 概率阈值,默认值为 0.05 PortValue % 资产总的价值 输出参数 ValueAtRisk %概率阈值下的单资产 var 值 例 5-7 已知资产年回报率为 0.0029,标准差为 0.0308,资产现在价值为 1 亿, 求 1%水平下资产在险价值。 在 MATLAB 中执行以下命令: PortReturn=0.0029; PortRisk=0.0308; RiskThreshold=0.01; PortValue=1; ValueAtRisk=portvrisk(PortReturn,PortRisk,RiskThreshold,PortValue) 该资产 var 等于 0.0688,即该资产损失 0.0688 亿的可能性为 1%。需注意 的是金融资产一般并不是正态,而是呈现出肥尾特征,其 Var 较正态分布大。
5.1 资产组合基本原理
证券投资组合理论(Portfolio Theory)主要研究如何配置各种不同的金融资 产,实现资产组合的最佳投资配置。1952 年美国学者马克维茨创立了资产组合 理论,该理论在实践中得到广泛运用。
5.1.1 收益率序列与价格序列间的转换
1.将收益率序列转换为价格序列 在处理金融时间序列时, 有时需要把收益率序列转换为价格序列。 在 MATLAB 中将收益率序列转换为价格序列的函数是 ret2tick。 调用方式 [TickSeries,TickTimes]=ret2tick(RetSeries,StartPrice,RetIntervals,St artTime,Method) 输入参数 RetSeries %收益率序列 StartPrice %(0ptional)起始价格,默认值是 1 RetIntervals %(0ptional)收益率序列的时间间隔,默认值是 l StartTime %(optional)价格开始计算的时间,默认值是 0 Method %(Optionl) 转 换 方 法 。 Method='Simple' 表 示 简 单, p t 1 Pt (1 rt 1 ) ;Method='Continous'表示连续法, Pt 1 Pt e rt 1 。 输出参数 TickSeries %价格序列 TickTimes %与价格对应的时间序列 例 5-1 己知资产收益率以及时间间隔如表 5.1 所示 表 5.1 资产收益率及时间 收益率 0.10 0.05 -0.05 时间间隔(天) 182 91 92 起始价格为 10 元,起始时间为 2000 年 12 月 18 日,试求该资产价格时间序 列,收益率采用离散方法。 在 MATLAB 中执行以下命令:
例 5-3 已知资产组合中有 3 个品种,每个品种的资产收益率、标准差和相 关系数如表 5.5 所示。 表 5.5 的相关数据 Returns=[0.1,0.15,0.12]; STDs=[1,0.8,0.18]; Correlations=[1,0.8,0.4;0.8,1,0.3;0.4,0.3,1]; Covariances=corr2cov(STDs,Correlations)
(w.)cov(w, ) ˆ w. ,则有 记号 表示向量转置。如果记 ˆ cov( ˆ ) ˆ t 2
(5.2)
有了资产组合方差,就可以计算出 Var 数值。从正态分布表中可以查到对应于 置信度 99%( 0.01 )的 Z1 2.3263 ,在各种资产都是服从正态分布的假设 下,资产 Var 值为
RetSeries=[0.10,0.05,-0.05]'; 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 这样就把收益率时间序列转换为价格时间序列,结果如表 5.2 所示。 表 5.2 资产各时间的价格 时间 18-Dec-2000 18-Jun-2001 17-Sep-2001 18-Dec-2001 价格 10.0000 11.0000 11.5500 10.9725 收益率 0.10 0.05 -0.05 时间间隔 182 91 92 2.将价格序列转换为收益率序列 MATLAB 中将价格序列转换为收益率序列的函数是 tick2ret。 调用方式 [RetSeries,RetIntervals]=tick2ret(TickSeries,TickTimes,Method) 输入参数 TickSeries %价格序列 TimeTimes % 价格序列对应的时间 Method %(Optionl)计算收益率的,Method='Simple'表示算术收 益率;Method='Continous'表示连续法,即为对数计算法。 输出参数 RetSeries %收益率序列 RetIntervals %收益率时间间隔 例 5-2 已知股票的价格时间序列如表 5.3 所示。 表 5.3 股票各时间对应的价格 时间 0 6 9 12 价格 100 110 115 110 求出该股票的收益率时日序列。 在 MATLAB 中执行以下命令: TickSeries=[100;110;115;110]; TickTimes=[0;6;9;12]; [RetSeries,RetIntervals]=tick2ret(TickSeries,TickTime)