主要内容

portsim

相关资产收益的蒙特卡罗模拟

描述

例子

RetSeries= portsim (ExpReturnExpCovarianceNumObs模拟的相关回报NASSETS资产超过NUMOBS连续观测间隔。资产收益被模拟成常数漂移,常数波动的随机过程的比例增量,从而近似连续时间几何布朗运动。

例子

RetSeries= portsim (___RetIntervalsNumSim方法除了前面语法中的输入参数外,还使用一个或多个可选参数指定选项。

例子

全部折叠

这个例子展示了确切的预期模拟的方法。

考虑一个由五种资产组成的投资组合,其预期回报率、标准差和基于每日资产回报率的相关矩阵如下(其中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.809 0.6978 1.0000 0.4289 0.6855 0.4343 0.4926 0.4289 1.0000];

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

ExpCovariance = corr2cov(sigma, correlation)
ExpCovariance =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

假设一年中有252个交易日,并模拟两年内每日收益的两个样本路径(实现)。自ExpReturnExpCovariance是每天表达的吗RetIntervals = 1

StartPrice = 100;NumObs = 504;%两个日历年的日收益NumSim = 2;RetIntervals = 1;%一个交易日NumAssets = 5;

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

rng (“默认”);RetExact = portsim(ExpReturn, ExpCovariance, NumObs,...RetIntervals NumSim,“准确”);rng (0);RetExpected = portsim(ExpReturn, ExpCovariance, numbs,...RetIntervals NumSim,“预期”);

比较的均值和协方差RetExact输入(ExpReturnExpCovariance),你会发现它们几乎一模一样。

在这一点上,RetExactRetExpected都是504 × 5 × 2的数组。现在假设由这五种资产组成的权重相等的投资组合,并创建投资组合回报的数组,其中每一列代表这五种资产模拟回报的对应样本路径的投资组合回报。投资组合数组PortRetExactPortRetExpected由- 2 504 -矩阵。

Weights = ones(NumAssets, 1)/NumAssets;PortRetExact = 0 (nummobs, NumSim);PortRetExpected = 0 (nummob, NumSim);i = 1:NumSim PortRetExact(:,i) = RetExact(:,:,i) *权重;PortRetExpected(:,i) = RetExpected(:,:,i) * Weights;结束

最后,将模拟的投资组合收益转换为价格,并绘制数据。特别要注意的是确切的方法匹配预期收益和协方差,每个样本路径的最终投资组合价格实际上是相同的。这不是真的预期仿真方法。虽然这个例子考察的是投资组合,但同样的方法也适用于单个资产。因此,确切的当需要唯一路径来达到相同的终端价格时,模拟是最合适的。

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 (的投资组合的价格)标题(“预计方法”

图中包含2个轴。标题为精确方法的轴1包含两个类型为line的对象。标题为期望方法的坐标轴2包含两个类型为line的对象。

这个例子显示了两者之间的相互作用ExpReturnExpCovariance,RetIntervals.回想一下,portsim模拟一段时间内的相关资产回报dt,由方程给出

d 年代 年代 μ d t + σ d z μ d t + σ ε d t

在哪里年代为资产价格,μ为预期收益率,σ是资产价格的波动,还是ε表示标准化正态分布的随机图。

时间增量dt是由可选输入决定的RetIntervals,可以作为显式输入参数,也可以默认作为单位时间增量。不管怎样,周期ExpReturnExpCovariance,RetIntervals必须是一致的。例如,如果ExpReturnExpCovariance年,那么RetIntervals一定有好几年了。这一点经常被误解。

来说明它们之间的相互作用ExpReturnExpCovariance,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.809 0.6978 1.0000 0.4289 0.6855 0.4343 0.4926 0.4289 1.0000];

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

ExpCovariance = corr2cov(sigma, correlation);

假设每个日历年有252个交易日,并模拟一个四年期间的日回报的单一样本路径。自ExpReturnExpCovariance输入是表示每天,设置RetIntervals = 1

StartPrice = 100;NumObs = 1008;%四个日历年的每日收益RetIntervals = 1;%一个交易日NumAssets =长度(ExpReturn);randn (“状态”, 0);RetSeries1 = portsim(ExpReturn, ExpCovariance, numbs,...RetIntervals 1“预期”);

现在对每天的数据进行年化,从而通过乘法改变数据的周期性ExpReturnExpCovariance除以252RetIntervals到252年(RetIntervals=一年的1/252)。将随机数生成器重置为初始状态,就可以重新生成结果。

rng (“默认”);RetSeries2 = portsim(ExpReturn*252, ExpCovariance*252,...NumObs RetIntervals / 252 1,“预期”);

假设一个等权重的投资组合,计算与每个模拟收益系列相关的投资组合收益。

Weights = ones(NumAssets, 1)/NumAssets;PortRet1 = RetSeries2 * Weights;PortRet2 = RetSeries2 * Weights;

数据比较表明PortRet1PortRet2都是相同的。

这个例子演示了如何模拟一个单变量几何布朗运动过程。它是基于赫尔的一个例子,期权、期货和其他衍生品,第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是以年为单位表达的,这与事实相符吗ExpReturnExpCovariance是按年计算的。同时,ExpCovariance作为方差而不是更熟悉的标准偏差(波动率)输入。

设置随机数生成器状态,并在整个日历年252个交易日中模拟10,000次股票回报的试验(实现)。

rng (“默认”);RetSeries =挤(portsim(ExpReturn, ExpCovariance, NumObs,...RetIntervals NumSim,“预期”));

挤压函数的模拟返回结果的输出数组重新格式化252——- - - - - -1——- - - - - -10000更方便的数组252——- - - - - -10000数组中。(回想一下,portsim基本上是一个多变量仿真引擎)。

根据236页的赫尔公式12.4和12.5

E 年代 T 年代 0 e μ T v 一个 r 年代 T 年代 0 2 e 2 μ T e σ 2 T 1

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

股票价格= ret2tick(RetSeries, repmat(StartPrice, 1, NumSim));SampVar = var(StockPrices(end,:)))
SampVar = 101.4243

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

ExpValue = StartPrice*exp(ExpReturn) ExpVar =...StartPrice * StartPrice * exp (2 * ExpReturn) * (exp ((ExpCovariance)) - 1)
ExpValue = 24.4281 ExpVar = 103.5391

这些结果非常接近赫尔的例子12.2的结果。

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

[count, BinCenter] = hhv (hhv (count, BinCenter), 1);figure bar(BinCenter, count/sum(count), 1,“r”)包含(“终端股票价格”) ylabel (“概率”)标题(“Lognormal终端股票价格”

输入参数

全部折叠

每项资产的预期(平均)回报,指定为1——- - - - - -NASSETS向量。

数据类型:

资产回报协方差,指定为NASSETS——- - - - - -NASSETS矩阵。ExpCovariance必须是对称的和半正定的(没有负的特征值)。收益的标准差是ExpSigma =√诊断接头(ExpCovariance)).如果ExpCovariance是不是对称正半定矩阵,用nearcorr为相关矩阵建立一个正半定矩阵。

数据类型:

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

数据类型:

(可选)观测间隔时间,指定为正标量或观测次数NUMOBS——- - - - - -1向量。如果RetIntervals时,所有的间隔都假定有长度1

数据类型:

(可选)的模拟采样路径(实现)个数NUMOBS观测值,指定为正标量整数。的默认值NumSim1(单一的实现NUMOBS相关资产的回报)。

数据类型:

(可选)蒙特卡罗模拟的类型,指定为字符向量,其值为:

  • “准确”(默认)产生相关资产回报,其中样本均值和协方差与输入均值(ExpReturn)及协方差(ExpCovariance)规范。

  • “预期”产生相关资产回报,其中样本均值和协方差在统计上等于输入均值和协方差规范。(样本均值和协方差的期望值等于输入均值(ExpReturn)及协方差(ExpCovariance)规范。)

无论是方法,返回的样本均值和协方差按适当比例缩放RetIntervals

数据类型:字符

输出参数

全部折叠

相关的,正态分布的,比例资产回报的三维数组,返回为aNUMOBS——- - - - - -NASSETS——- - - - - -NUMSIM三维数组。

一段时间内的资产回报dt是由

d 年代 年代 μ d t + σ d z μ d t + σ ε d t

在哪里年代为资产价格,μ为预期收益率,σ是资产价格的波动,还是ε表示标准化正态分布的随机图。

笔记

  • 方法“准确”,所有实现的样本均值和协方差(按比例RetIntervals)匹配输入均值和协方差。当回报被转换成资产价格时,某一资产的所有终端价格就会趋于一致。虽然所有变现都是独立绘制的,但它们产生的终端资产价格相似。集方法“预期”避免这种行为。

  • 投资组合的回报PortWts是由PortReturn = porttwts * RetSeries(:,:,1)',在那里PortWts是一个矩阵,其中每一行包含一个投资组合的资产配置。每一行的PortReturn对应于在PortWts,每一列对应于从第一个实现(第一个平面)中获得的一个观察值RetSeries.看到portoptportstats用于组合规范和优化。

参考文献

赫尔,j.c。期权、期货和其他衍生品。普伦蒂斯·霍尔出版社,2003年。

之前介绍过的R2006a