portsim
相关资产收益的蒙特卡罗模拟
语法
描述
的相关收益RetSeries
= portsim (ExpReturn
,ExpCovariance
,NumObs
)NASSETS
资产超过NUMOBS
连续观测间隔。将资产收益模拟为恒漂移、恒波动随机过程的成比例增量,从而近似连续时间几何布朗运动。
除前面语法中的输入参数外,还使用一个或多个可选参数指定选项。RetSeries
= portsim (___,RetIntervals
,NumSim
,方法
)
例子
仿真方法的区别
的区别确切的
而且预期
模拟的方法。
考虑一个由五种资产组成的投资组合,具有以下预期收益、标准差和基于每日资产收益的相关矩阵(其中ExpReturn
而且(开关)
除以100将百分比转换为回报率)。
ExpReturn = [0.0246 0.0189 0.0273 0.0141 0.0311]/100;Sigmas = [0.9509 1.4259 1.5227 1.1062 1.0877]/100;相关性= [1.0000 0.4403 0.4735 0.4334 0.6855 0.4403 1.0000 0.7597 0.7809 0.4343 0.4735 0.7597 1.0000 0.6978 0.4926 0.4334 0.7809 0.6978 1.0000 0.4289 0.6855 0.4343 0.4926 0.4289 1.0000];
将相关性和标准差转换为协方差矩阵。
expco方差= corr2cov(西格玛斯,相关性)
ExpCovariance =5×5103× 0.0904 0.0597 0.0686 0.0456 0.0709 0.0597 0.2033 0.1649 0.1232 0.0674 0.0686 0.1649 0.2319 0.1175 0.0816 0.0456 0.1232 0.1175 0.1224 0.0516 0.0709 0.0674 0.0816 0.0516 0.1183
假设一个日历年有252个交易日,模拟两年内日收益的两个样本路径(实现)。自ExpReturn
而且ExpCovariance
是每日表达,定RetIntervals = 1
.
StartPrice = 100;NumObs = 504;两个日历年的日收益。NumSim = 2;RetIntervals = 1;一个交易日NumAssets = 5;
为了说明方法之间的区别,用每种方法模拟两个路径,从相同的随机数状态开始。
rng (“默认”);RetExact = portsim(ExpReturn, expco方差,NumObs,...RetIntervals NumSim,“准确”);rng (0);RetExpected = portsim(ExpReturn, expco方差,NumObs,...RetIntervals NumSim,“预期”);
比较的均值和协方差RetExact
输入(ExpReturn
而且ExpCovariance
),你会发现它们几乎完全相同。
在这一点上,RetExact
而且RetExpected
都是504 × 5 × 2数组。现在假设一个由五种资产组成的同等权重的投资组合,并创建投资组合收益数组,其中每一列代表五种资产模拟收益的对应样本路径的投资组合收益。投资组合数组PortRetExact
而且PortRetExpected
由- 2 504 -矩阵。
Weights = ones(NumAssets, 1)/NumAssets;PortRetExact = 0 (NumObs, NumSim);PortRetExpected = 0 (NumObs, NumSim);为i = 1:NumSim PortRetExact(:,i) = RetExact(:,:,i) *权重;PortRetExpected(:,i) = RetExpected(:,:,i) *权重;结束
最后,将模拟的投资组合收益转换为价格并绘制数据。特别要注意的是,自从确切的
方法匹配期望收益和协方差,每个样本路径的终端组合价格几乎相同。这对预期
仿真方法。尽管本例检查的是投资组合,但同样的方法也适用于单个资产。因此,确切的
当需要唯一的路径来达到相同的终端价格时,模拟是最合适的。
PortExact = ret2tick (PortRetExact,...repmat (StartPrice 1 NumSim));PortExpected = ret2tick (PortRetExpected,...repmat (StartPrice 1 NumSim));次要情节(2,1,1),情节(PortExact,“- r”) ylabel (的投资组合的价格)标题(的具体方法次要情节(2,1,2),图(PortExpected,“- b”) ylabel (的投资组合的价格)标题(“预计方法”)
之间的相互作用ExpReturn
,ExpCovariance
,RetIntervals
这个例子展示了之间的相互作用ExpReturn
,ExpCovariance
,RetIntervals
.回想一下,portsim
模拟在一段时间间隔内相关的资产收益dt,由方程给出
在哪里年代是资产价格,μ是预期收益率,σ是资产价格的波动,还是ε表示从标准化正态分布中随机抽取的图形。
时间增量dt是由可选输入决定的RetIntervals
默认情况下,可以作为显式输入参数,也可以作为单位时间增量。无论如何,的周期性ExpReturn
,ExpCovariance
,RetIntervals
必须是一致的。例如,如果ExpReturn
而且ExpCovariance
年,那么RetIntervals
一定是很多年了。这一点经常被误解。
来说明之间的相互作用ExpReturn
,ExpCovariance
,RetIntervals
,考虑一个由五种资产组成的投资组合,其预期收益、标准差和基于每日资产收益的相关矩阵如下所示。
ExpReturn = [0.0246 0.0189 0.0273 0.0141 0.0311]/100;Sigmas = [0.9509 1.4259 1.5227 1.1062 1.0877]/100;相关性= [1.0000 0.4403 0.4735 0.4334 0.6855 0.4403 1.0000 0.7597 0.7809 0.4343 0.4735 0.7597 1.0000 0.6978 0.4926 0.4334 0.7809 0.6978 1.0000 0.4289 0.6855 0.4343 0.4926 0.4289 1.0000];
将相关性和标准差转换为日收益的协方差矩阵。
expco方差= corr2cov(西格玛斯,相关性);
假设每个日历年有252个交易日,并模拟4年期间日收益的单一样本路径。自ExpReturn
而且ExpCovariance
输入每天表示,设置RetIntervals = 1
.
StartPrice = 100;NumObs = 1008;四年的日收益。RetIntervals = 1;一个交易日NumAssets =长度(ExpReturn);randn (“状态”, 0);RetSeries1 = portsim(ExpReturn, expco方差,NumObs,...RetIntervals 1“预期”);
现在将每日数据按年化,从而通过乘法改变数据的周期性ExpReturn
而且ExpCovariance
除以252,再除以RetIntervals
到252年(RetIntervals
= 1/252年)。将随机数生成器重置为初始状态,就可以重新生成结果。
rng (“默认”);RetSeries2 = portsim(ExpReturn*252, ExpCovariance*252,...NumObs RetIntervals / 252 1,“预期”);
假设一个同等权重的投资组合,计算与每个模拟收益序列相关的投资组合收益。
Weights = ones(NumAssets, 1)/NumAssets;PortRet1 = RetSeries2 *权重;PortRet2 = RetSeries2 *权重;
数据比较表明PortRet1
而且PortRet2
都是相同的。
单变量几何布朗运动
这个例子展示了如何模拟一个单变量几何布朗运动过程。它是基于在赫尔市发现的一个例子,期权、期货和其他衍生品,第5版(见236页的例子12.2)。除了验证赫尔的例子,它还通过一个相当大的蒙特卡洛模拟图形说明了终端股票价格的对数正态性。
假设你持有一支股票,初始价格为20美元,年化预期回报率为20%,波动率为40%。模拟该股票在一个完整日历年(252个交易日)中的每日价格过程。
StartPrice = 20;ExpReturn = 0.2;ExpCovariance = 0.4 ^ 2;NumObs = 252;NumSim = 10000;RetIntervals = 1/252;
RetIntervals
是用年来表示的,符合事实吗ExpReturn
而且ExpCovariance
是按年计算的。同时,ExpCovariance
输入为方差,而不是更熟悉的标准偏差(波动率)。
设置随机数生成器状态,并模拟在252个交易日的完整日历年中的10,000次股票回报试验(实现)。
rng (“默认”);RetSeries = squeeze(portsim(ExpReturn, ExpCovariance, NumObs),...RetIntervals NumSim,“预期”));
的挤压
函数重新格式化模拟返回的输出数组252
——- - - - - -1
——- - - - - -10000
阵列更方便252
——- - - - - -10000
数组中。(回想一下,portsim
基本上是一个多元模拟引擎)。
根据236页的赫尔方程12.4和12.5
将模拟收益序列转换为价格序列,并计算最终股票价格的样本均值和方差。
StockPrices = ret2tick(RetSeries, repmat(StartPrice, 1, NumSim));SampVar = var(股票价格(结束,:)))
SampMean = 24.4489 SampVar = 101.4243
将这些值与使用赫尔方程得到的值进行比较。
ExpValue = StartPrice*exp(ExpReturn) ExpVar =...StartPrice * StartPrice * exp (2 * ExpReturn) * (exp ((ExpCovariance)) - 1)
ExpValue = 24.4281 ExpVar = 103.5391
这些结果与Hull的例子12.2中的结果非常接近。
显示一个历年后终端股价的样本密度函数。从样本密度函数来看,终端股票价格的对数正态分布很明显。
[count, BinCenter] = hist(StockPrices(end,:), 30);图栏(BinCenter, count/sum(count), 1,“r”)包含(“终端股票价格”) ylabel (“概率”)标题(“正常终端股价”)
输入参数
ExpReturn
- - - - - -每种资产的预期(平均)收益
向量
每项资产的预期(平均)收益,用1
——- - - - - -NASSETS
向量。
数据类型:双
ExpCovariance
- - - - - -资产收益协方差
矩阵
资产回报协方差,指定为NASSETS
——- - - - - -NASSETS
矩阵。ExpCovariance
必须是对称的和正半定的(没有负的特征值)。收益率的标准差是ExpSigma =√诊断接头(ExpCovariance))
.如果ExpCovariance
不是对称正半正定矩阵,用吗nearcorr
为相关矩阵建立一个正半定矩阵。
数据类型:双
NumObs
- - - - - -在返回时间序列中连续观测的次数
积极的标量整数
在返回时间序列中连续观察的次数,指定为正标量整数。如果NumObs
作为空矩阵输入[]
的长度。RetIntervals
使用。
数据类型:双
RetIntervals
- - - - - -观察之间的间隔时间
1
(默认)|积极的标量|向量
(可选)观察之间的间隔时间,指定为正标量或观察数NUMOBS
——- - - - - -1
向量。如果RetIntervals
没有指定,所有的间隔都假定有长度1
.
数据类型:双
NumSim
- - - - - -的模拟样本路径(实现)的数目NUMOBS
观察
1
(默认)|积极的标量整数
(可选)的模拟样本路径(实现)的数目NUMOBS
观察值,指定为正标量整数。的默认值。NumSim
是1
(单一的实现NUMOBS
相关资产的回报)。
数据类型:双
方法
- - - - - -蒙特卡罗模拟的类型
“准确”
(默认)|特征向量
(可选)蒙特卡罗模拟的类型,指定为具有以下值之一的字符向量:
“准确”
(默认)生成相关的资产回报,其中样本均值和协方差与输入均值匹配(ExpReturn
)和协方差(ExpCovariance
)规范。“预期”
生成相关的资产回报,其中样本均值和协方差在统计上等于输入均值和协方差规格。样本均值和协方差的期望值等于输入均值ExpReturn
)和协方差(ExpCovariance
)规范。)
无论是方法
,返回的样本均值和协方差被适当缩放RetIntervals
.
数据类型:字符
输出参数
RetSeries
-相关的、正态分布的、成比例的资产回报的三维数组
数组
相关的,正态分布的,成比例的资产收益的三维数组,作为一个NUMOBS
——- - - - - -NASSETS
——- - - - - -NUMSIM
三维数组。
资产在一定时间间隔内的回报dt是由
在哪里年代是资产价格,μ是预期收益率,σ是资产价格的波动,还是ε表示从标准化正态分布中随机抽取的图形。
笔记
当
方法
是“准确”
,所有实现的样本均值和协方差(按RetIntervals
)匹配输入均值和协方差。当收益转化为资产价格时,一种资产的所有终端价格都非常接近。尽管所有变现都是独立绘制的,但它们产生的终端资产价格是相似的。集方法
来“预期”
避免这种行为。投资组合的收益
PortWts
是由PortReturn = porttwts * RetSeries(:,:,1)'
,在那里PortWts
是一个矩阵,其中每一行包含一个投资组合的资产配置。每一行的PortReturn
中确定的组合之一对应PortWts
的第一个实现(第一个平面)中,每一列对应一个观察值RetSeries
.看到portopt
而且portstats
用于投资组合规范和优化。
参考文献
[1]赫尔,j.c C期权、期货和其他衍生品。普伦蒂斯·霍尔出版社,2003年。
版本历史
之前介绍过的R2006a
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。