主要内容

Portsim.

蒙特卡罗相关资产回报仿真

描述

例子

Retseries.= portsim(expreturn.expcovariance.numobs.模拟股票的相关收益尼索斯资产过度暴民连续观察间隔。资产返回被模拟为恒定漂移,恒定波动性随机过程的比例增量,从而近似连续时间几何布朗运动。

例子

Retseries.= portsim(___Retintervals.numsim.方法除了上一个语法中的输入参数之外,使用一个或多个可选参数指定选项。

例子

全部收缩

此示例显示了精确的预期模拟方法。

考虑基于日常资产回报的以下预期返回,标准偏差和相关矩阵的五个资产的投资组合(其中expreturn.SIGMAS.除以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 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];

将相关性和标准偏差转换为协方差矩阵。

Expcovariance = Corr2cov(Sigmas,Colrelation)
扩展协方差=5×510-3× 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.每天表达,设置重间隔=1

StartPrice = 100;numobs = 504;%两个日历年度回报numsim = 2;Retintervals = 1;%一个交易日NumAssets=5;

为了说明方法之间的区别,请从相同的随机数状态开始,用每种方法模拟两条路径。

RNG('默认');Retexact = portsim(Expreturn,Expcovariance,numobs,...退休间隔,'精确的');RNG(0);重新标准= portsim(expreturn,expcariance,numobs,...退休间隔,“预期的”);

比较均值和协方差重返者输入输入(expreturn.expcovariance.),您将观察到它们几乎相同。

这一点,重返者重新标准均为504×5×2阵列。现在假设由五个资产形成的同等加权组合,并创建每个列代表五个资产的模拟回报的相应样本路径的投资组合返回的投资组合返回数组。投资组合阵列Portretexact.portretexpected.是504乘2的矩阵。

重量= =(numasset,1)/ numasset;Portrosexact = Zeros(numobs,numsim);Portrosexpected = Zeros(numobs,numsim);为了i = 1:numsim portretexact(:,i)= Retexact(:,:,i)*权重;PortrexedExpected(:,i)=重新标准(:,:,i)*权重;结尾

最后,将模拟的产品组合转换为价格并绘制数据。特别地,注意自以来精确的方法匹配预期的返回和协方差,终端组合价格对于每个样本路径几乎相同。这不是真的预期模拟方法。虽然本示例检查投资组合,但同样的方法也适用于单个资产。因此,精确的当需要唯一路径以达到相同的终端价格时,模拟是最合适的。

portExact = Ret2Tick(Portretexact,...repmat(StartPrice,1,NumSim));PortExpected=ret2tick(PortRetExpected,...Repmat(StartPrice,1,NumSim)));子图(2,1,1),plot(portexact,“-r”)伊拉贝尔('投资组合价格') 标题(“精确方法”)子地块(2,1,2)、地块(PortExpected、,'-b')伊拉贝尔('投资组合价格') 标题('预期方法'

图包含2个轴对象。具有标题精确方法的轴对象1包含2个类型的型号。具有标题预期方法的轴对象2包含2个类型的线。

此示例显示了之间的相互作用expreturn.expcovariance.,及Retintervals..回想一下Portsim.在一段时间间隔内模拟相关资产回报DT.,由等式给出

D. S. S. = μ. D. T. + σ. D. Z. = μ. D. T. + σ. ε. D. T.

哪里S.是资产价格,μ.是预期的回报率,σ.是资产价格的波动性,以及ε.表示标准正态分布的随机抽取。

时间增量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 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];

将相关性和标准差转换为每日收益的协方差矩阵。

Expcovariance = Corr2Cov(SIGMA,相关);

假设每历户每年252个交易日,并在为期四年期间模拟每日退货的单一样本路径。自从此以来expreturn.expcovariance.输入表示为每日,设置重间隔=1

StartPrice=100;NumObs=1008;%每日收益的四个日历年Retintervals = 1;%一个交易日numasset =长度(expreturn);Randn(“国家”,0);RetSeries1 = portsim(Expreturn,Expcovariance,numobs,...重新间隔,1,“预期的”);

现在通过乘法来改变数据的周期性,从而改变数据的周期性expreturn.expcovariance.除以252再除以Retintervals.到252(Retintervals.一年的1/252)。将随机数生成器重置为其初始状态,您可以重现结果。

RNG('默认');RetSeries2 = Portsim(Expreturn * 252,Expcovariance * 252,...numobs,Retintervals / 252,1,“预期的”);

假设与每个模拟回波系列相关联的同等加权组合和计算组合返回。

重量= =(numasset,1)/ numasset;Portret1 = Retseries2 *权重;Portret2 = Retseries2 *权重;

数据的比较显示Portret1.Portret2.是相同的。

这个例子展示了如何模拟一元几何布朗运动过程。它以赫尔的一个例子为基础,期权,期货和其他衍生品,第5版(请参见第236页的示例12.2)。除了验证HULL的示例之外,它还以相当大的蒙特卡罗模拟来说明终端股价的LOGNORMAL属性。

假设您拥有初始价格为20美元的库存,年化预期返回20%,波动率为40%。在一个完整的日历年度(252个交易日),模拟此库存的日常价格流程。

StartPrice=20;ExpReturn=0.2;expConvariation=0.4^2;NumObs=252;NumSim=10000;RetIntervals=1/252;

Retintervals.在年份表达,与此事实一致expreturn.expcovariance.按年度计算。也,expcovariance.作为方差输入而不是更熟悉的标准偏差(波动率)。

设置随机数发生器状态,并在252个交易日的全日历年度模拟股票的10,000名试验(实现)。

RNG('默认');Retseries =挤压(Portsim(Expreturn,Expcovariance,Numobs,...退休间隔,“预期的”));

函数用于重新格式化来自252-经过-1-经过-10000数组更方便252-经过-10000大批。(回想起那个Portsim.基本上是一个多变量模拟引擎)。

根据第236页赫尔方程12.4和12.5

E. S. T. = S. 0. E. μ. T. V. 一种 R. S. T. = S. 0. 2 E. 2 μ. T. E. σ. 2 T. 1

将模拟收益率序列转换为价格序列,并计算最终股价的样本均值和方差。

StockPrices = Ret2Tick(Retseries,Repmat(StartPrice,1,NumSim));SAMPMEAN =卑鄙(Stockprics(END,:))SAMPVAR = var(股票(结束,:))
SampMean=24.4489 SampVar=101.4243

将这些值与使用赫尔方程获得的值进行比较。

Expvalue = StartPrice * exp(Expreturn)Expvar =...StartPrice*StartPrice*exp(2*ExpReturn)*(exp((exp协方差))-1)
Expvalue = 24.4281 Expvar = 103.5391

这些结果非常接近船体示例12.2中所示的结果。

显示一个日历年后终端股价的样本密度函数。从样本密度函数看,终端股价的对数正态分布是明显的。

[count,BinCenter]=历史(股票价格(结束:),30);图形栏(BinCenter,count/sum(count),1,'r')xlabel('终端股价')伊拉贝尔('可能性') 标题(“对数正态终端股价”

输入参数

全部收缩

每项资产的预期(平均)回报,指定为1-经过-尼索斯向量。

数据类型:双倍的

资产回归协方差,指定为一个尼索斯-经过-尼索斯矩阵。expcovariance.必须对称且半正定(无负特征值)。回报的标准偏差为ExpSigma=sqrt(diag(exp协方差)).如果expcovariance.不是对称半正定矩阵,使用尼尔科尔为相关矩阵创建正半纤维矩阵。

数据类型:双倍的

返回时间序列中的连续观测数量,指定为正标量整数。如果numobs.输入为空矩阵[],长度Retintervals.使用。

数据类型:双倍的

(可选)观察之间的间隔时间,指定为正标量或许多观察暴民-经过-1向量。如果Retintervals.未指定,假设所有间隔都有长度1

数据类型:双倍的

(可选)模拟样本路径(实现)的数量暴民观察,指定为正标量整数。默认值numsim.1(b)单一实现暴民相关资产收益)。

数据类型:双倍的

(可选)蒙特卡罗模拟的类型,指定为具有以下值之一的字符向量:

  • '精确的'(默认)生成相关资产返回,其中示例均值和协方差与输入匹配(expreturn.)和协方差(expcovariance.)规格。

  • “预期的”生成相关资产返回,其中样本均值和协方差统计上等于输入均值和协方差规范。(样本均值和协方差的预期值等于输入意味着(expreturn.)和协方差(expcovariance.) 规格。)

对于任何一种方法,返回的样本均值和协方差适当地缩放Retintervals.

数据类型:char

输出参数

全部收缩

相关性,正常分布,比例资产返回的三维阵列,作为a暴民-经过-尼索斯-经过-努姆三维阵列。

资产在长度间隔内返回DT.是由

D. S. S. = μ. D. T. + σ. D. Z. = μ. D. T. + σ. ε. D. T.

哪里S.是资产价格,μ.是预期的回报率,σ.是资产价格的波动性,以及ε.表示标准正态分布的随机抽取。

笔记

  • 什么时候方法'精确的',所有实现的样本平均值和协方差(按Retintervals.)匹配输入均值和协方差。当返回转换为资产价格后,给定资产的所有终端价格都在密切协议。虽然所有的实现都是独立绘制的,但它们产生了类似的终端资产价格。放方法“预期的”避免这种行为。

  • 来自投资组合的返回portwts.是由Portreturn = portwts * Retseries(:,:,1)', 在哪里portwts.是一个矩阵,其中每行包含投资组合的资产分配。每一排港口收益对应于其中识别的投资组合之一portwts.,并且每个列对应于从第一实现(第一平面)中采取的观察结果之一Retseries.。看波特普Portstats.用于投资组合规范和优化。

参考

[1] 赫尔,J.C。期权,期货和其他衍生品。Prentice-Hall,2003年。

在R2006a之前引入