模拟股票价格

模拟多维市场模型

本例比较了可分离多变量几何布朗运动过程的可选实现,该过程通常被称为a多维市场模式。它使用以下工具模拟股票指数投资组合的样本路径,sdeddo,sdeld,cev,“绿带运动”对象。

模拟的市场模型为:

d X t = μ X t d t + D ( X t ) σ d W t (1)

哪里:

  • μ是预期指数回报的对角矩阵。

  • D是一个对角矩阵吗Xt沿对角线。

  • σ是指数的回报的标准偏差的对角矩阵。

使用SDE对象表示市场模型

创建一个使用对象代表股票市场模型。

  1. 加载Data_GlobalIdx2数据集:

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAX数据集。尼克的数据集。富时Dataset.SP];
  2. 将每日价格转换为收益:

    返回= tick2ret(价格);
  3. 计算数据统计输入仿真方法:

    nVariables = size(return, 2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);t = 0;X = 100;X = X(一(nVariables,1));
  4. 创建简单的匿名漂移和扩散函数,可通过(t,Xt):

    F = @(T,X)DIAG(expReturn)* X;G = @(T,X)DIAG(X)* DIAG(SIGMA);
  5. 使用这些功能与创建一个对象表示市场模型方程1:

    SDE = SDE (F, G,“相关”的相关性,“StartState”,X)
    SDE = SDE类:随机微分方程- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -维度:状态= 6,布朗= 6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -开始时间:0 StartState: 100 (6 x1双阵列)相关性:6 x6双重数组漂移:漂移率函数F (t) X (t))扩散:扩散率函数G (t) X (t))模拟:模拟方法/函数simByEuler

    对象需要其他信息来确定模型的维数,因为函数传递给对象只有通过其(t,Xt)接口。换句话说,就是对象仅需要两个输入:一个漂移率函数和扩散率函数,都可以访问通过将采样时间和相应的状态向量(t,Xt)。

    在这种情况下,这个信息不足以明确地确定状态向量和布朗运动的维数。通过指定一个初始状态向量,将startState。SDE引擎已经指定了默认的模拟方法,simByEuler,模拟参数。

使用SDEDDO对象表示市场模型

创建一个sdeddo使用对象sdeddo代表市场模型方程1:

  1. 加载Data_GlobalIdx2数据集:

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAX数据集。尼克的数据集。富时Dataset.SP];
  2. 将每日价格转换为收益:

    返回= tick2ret(价格);
  3. 计算数据统计输入仿真方法:

    nVariables = size(return, 2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);
  4. 创建漂移扩散使用对象漂移扩散:

    F =漂移(0 (nVariables,1), diag(expReturn))
    F =类DRIFT:漂移率规格-------------------------------------率:漂移率函数F(T,X(t))的一个:6X1双阵列B:6x6的对角线双阵列
    G =扩散(1 (nVariables,1), diag(sigma))
    G =类扩散:扩散速率规格—速率:扩散速率函数G(t,X(t)) Alpha: 6x1双阵列Sigma: 6x6对角双阵列
  5. 通过漂移扩散对象sdeddo:

    SDEDDO (F, G,“相关”的相关性,“StartState”,100)
    SDEDDO =类SDEDDO:从漂移和扩散对象SDE --------------------------------------------------尺寸:状态= 6,布朗= 6 --------------------------------------------------开始时间:0将startState:100(6X1双阵列)相关:6×6阵列双漂移:漂移率函数f(t,X(t))的扩散:扩散率函数g(t,X(t))的模拟:模拟方法/函数simByEuler一个:6X1双阵列B:6x6的对角线双阵列阿尔法:6X1双阵列西格玛:6x6的对角线双阵列

    sdeddo对象需要两个输入对象,它们提供的信息比第4步中的两个函数提供的信息更多使用SDE对象表示市场模型。因此,维度更容易解决。事实上,每个指数的初始价格是一个标量(将startState=One hundred.)。这是在对比的是对象,它需要显式的状态向量来唯一地确定问题的维数。

    再次,类的每个对象被明确确定,和参数显示一个类似的结构的字段。特别是,将漂移和扩散对象的参数确定为时间和状态的可调函数,F (t Xt)G (t, Xt),分别。额外的参数,一个,B,α,σ,是适当尺寸的阵列,指示静态(非时变)的参数。换一种说法,X (t)t),B (t) Xt),α(t, Xt),Sigma X (t)t)是时间和状态的常数函数。

使用SDELD、CEV和GBM对象表示市场模型

创建sdeld,cev,“绿带运动”对象来表示市场模型中的方程1

  1. 加载Data_GlobalIdx2数据集:

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAX数据集。尼克的数据集。富时Dataset.SP];
  2. 将每日价格转换为收益:

    返回= tick2ret(价格);
  3. 计算数据统计输入仿真方法:

    nVariables = size(return, 2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);t = 0;X = 100;X = X(一(nVariables,1));
  4. 创建一个sdeld使用对象sdeld:

    SDELD = SDELD (0 (nVariables,1), diag(expReturn),的(nVariables, 1),诊断接头(σ),“相关”,相关性,“StartState”,X)
    SDELD =类SDELD:SDE与线性漂移----------------------------------------尺寸:状态= 6,布朗= 6 ----------------------------------------开始时间:0将startState:100(6X1双阵列)相关:6x6的双阵列漂移:漂移率函数f(t,X(t))的扩散:扩散率函数g(t,X(t))的模拟:模拟方法/函数simByEuler甲:双6X1阵列B:6x6的对角线双阵列阿尔法:6X1双阵列西格玛:6x6的对角线双阵列
  5. 创建一个cev使用对象cev:

    CEV = CEV(DIAG(expReturn),酮(nVariables,1),诊断接头(σ),“相关”的相关性,“StartState”,X)
    CEV =类CEV:恒定方差弹性- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -维度:状态= 6,布朗= 6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -开始时间:0 StartState: 100 (6 x1双阵列)相关性:6 x6双重数组漂移:漂移率函数F (t) X (t))扩散:扩散率函数G (t) X (t))模拟:模拟方法/函数simByEuler返回:6 x6对角双重数组α:6 x1双重数组σ:6 x6对角两数组
  6. 创建一个“绿带运动”使用对象“绿带运动”:

    GBM = GBM (diag(expReturn), diag(sigma),“相关”,相关性,“StartState”,X)
    GBM =类GBM:广义几何布朗运动- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -维度:状态= 6,布朗= 6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -开始时间:0 StartState: 100 (6 x1双阵列)相关性:6 x6双重数组漂移:漂移率函数F (t) X (t))扩散:扩散率函数G (t) X (t))模拟:模拟方法/函数simByEuler返回:6 x6对角线双重数组σ:6 x6对角两数组

    注意接口限制的连续性:

    • sdeld对象需要您指定一个,B,α,σ

    • cev对象需要您指定返回,α,σ

    • “绿带运动”对象要求您只指定返回σ

    然而,所有这三个对象表示相同的多维市场模式。

    同时,cev“绿带运动”对象显示底层参数B从派生sdeld对象作为返回。这是一个直观的名称,通常与股票模型相关。

使用默认模拟方法模拟股票市场

  1. 加载Data_GlobalIdx2数据集和使用来指定SDE模型使用SDE对象表示市场模型

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAX数据集。尼克的数据集。富时Dataset.SP];回报= tick2ret(价格);nVariables =大小(回报,2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);t = 0;X = 100; X = X(ones(nVariables,1)); F = @(t,X) diag(expReturn)* X; G = @(t,X) diag(X) * diag(sigma); SDE = sde(F, G,“相关”,相关性,“StartState”, X);
  2. 使用默认值模拟一个日历年(定义为大约250个交易日)内相关股票指数价格的单一路径模拟方法:

    nPeriods = 249;模拟观测%#DT = 1;%时间增量=1天RNG(142857,“旋风”) [S,T] =模拟(SDE, nperiod,“DeltaTime”,dt);谁年代
    类属性S 250x6 12000双

    输出数组年代是250×6 = (NPeriods + 1——- - - - - -nVariables——- - - - - -1)初始值相同的数组,One hundred.,为所有指数。每行年代是对状态向量的观察Xt在时间t

  3. 绘制模拟路径。

    情节(T,S),xlabel(“交易日”),ylabel('价钱')标题(“多维市场模型的单一路径”)({传奇“加拿大”“法国”“德国”'日本'“英国”'我们'},“位置”,“最佳”)

用辛氏方法模拟股票市场

因为simByEuler是一种有效的模拟方法,你可以直接调用它,重写模拟参数的当前方法或函数(在这种情况下是simByEuler)。下面的语句生成与生成的价格路径相同的价格路径使用默认模拟方法模拟股票市场:

  1. 加载Data_GlobalIdx2数据集和使用来指定SDE模型使用SDE对象表示市场模型

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAX数据集。尼克的数据集。富时Dataset.SP];回报= tick2ret(价格);nVariables =大小(回报,2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);t = 0;X = 100; X = X(ones(nVariables,1)); F = @(t,X) diag(expReturn)* X; G = @(t,X) diag(X) * diag(sigma); SDE = sde(F, G,“相关”,相关性,“StartState”, X);
  2. 使用以下命令模拟单个路径simByEuler

    nPeriods = 249;模拟观测%#DT = 1;%时间增量=1天RNG(142857,“旋风”) [S,T] = simByEuler(SDE, nperiod,“DeltaTime”,dt);
  3. 模拟10次试验使用相同的初始条件,并检查年代:

    RNG(142857,“旋风”) [S,T] =模拟(SDE, nperiod,“DeltaTime”,dt,“nTrials”10);谁年代
    名称大小字节类属性小号250x6x10 120000双

    现在是输出数组年代是一个NPeriods + 1——- - - - - -nVariables——- - - - - -NTrials时间序列排列。

  4. 绘制第一个路径。

    情节(T,S(:,:,1)),xlabel(“交易日”),ylabel('价钱')标题(“多维市场模型第一路径”)({传奇“加拿大”“法国”“德国”'日本'“英国”'我们'},“位置”,“最佳”)

第一次实现年代是相同的情节的路径。

使用GBM模拟方法模拟股票市场

最后,考虑使用模拟“绿带运动”仿真方法。可分“绿带运动”模型有两个具体的模拟方法:

  • 一个超载的欧拉模拟方法,simByEuler,为优化性能而设计

  • 一个函数,simBySolution,提供基本随机微分方程的近似解

  1. 加载Data_GlobalIdx2数据集和使用来指定SDE模型使用SDE对象表示市场模型, GBM模型为使用SDELD、CEV和GBM对象表示市场模型

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAX数据集。尼克的数据集。富时Dataset.SP];回报= tick2ret(价格);nVariables =大小(回报,2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);t = 0;X = 100; X = X(ones(nVariables,1)); F = @(t,X) diag(expReturn)* X; G = @(t,X) diag(X) * diag(sigma); SDE = sde(F, G,“相关”,相关性,“StartState”, X);GBM = GBM(DIAG(expReturn),诊断(Sigma公司),“相关”,相关性,“StartState”, X);
  2. 为了说明重载欧拉近似方法的性能益处,增加的试验与数10000

    nPeriods = 249;模拟观测%#DT = 1;%时间增量=1天RNG(142857,“旋风”) [X,T] =模拟(GBM, n周期,“DeltaTime”,dt,“nTrials”,10000);谁X
    类属性X 250x6x10000 120000000双精度

    输出X是一个更大的时间序列排列。

  3. 使用这个样本大小,检查加拿大的TSX复合材料的终端分布,以定性地验证数据的对数正态特征。

    直方图(挤压(X(结束,1,:)),30),xlabel('价钱'),ylabel(“频率”)标题(一年后的价格柱状图:加拿大(TSX综合指数))

  4. 模拟解决方案的10次试验,并绘制第一次试验:

    RNG(142857,“旋风”) [S,T] =模拟(SDE, nperiod,“DeltaTime”,dt,“nTrials”10);RNG(142857,“旋风”) [X,T] = simBySolution(GBM, n周期,“DeltaTime”,dt,“nTrials”10);subplot(2,1,1) plot(T, S(:,:,1)), xlabel(“交易日”),ylabel ('价钱')标题(多暗市场模型第一路径:欧拉近似) subplot(2,1,2) plot(T, X(:,:,1)), xlabel(“交易日”),ylabel ('价钱')标题(“多昏暗的市场模式的第1条路径:解析解”)

    在本例中,所有参数都是常量,并且simBySolution确实对准确的溶液进行采样。单个索引的任何给定的试验显示的细节,所述欧拉近似和精确解的价格路径接近,但不完全相同。

  5. 下图说明了这两种方法的区别:

    副区(1,1,1)情节(T,S(:,1,1) -  X(:,1,1),“蓝”)、网格('上')包含(“交易日”),ylabel(“差价”)标题(“欧拉近似-精确解:加拿大(TSX合成)”)

simByEuler欧拉近似直接从运动方程出发,对随机微分方程进行数值计算dt时间增量。这个简单的近似值存在离散化误差。这个错误是由于选择之间的差异dt时间增量,理论上是一个连续时间参数。

离散时间近似改进为DeltaTime接近零。欧拉法通常是最不精确和最通用的方法。仿真套件中提供的所有模型都有这种方法。

相比之下,simBySolution方法可以更准确地描述底层模型。该方法通过近似可分模型的封闭解来模拟价格路径。具体地说,它将欧拉方法应用于转换后的流程,这通常不是这个问题的确切解决方案“绿带运动”模型。这是因为模拟状态向量和真实状态向量的概率分布仅在分段常数参数下是相同的。

当所有模型参数是在每个观测周期分段恒定,模拟的过程是精确的在该状态向量采样的观测时间。由于所有的参数都是常量在这个例子中,simBySolution确实对准确的溶液进行采样。

举一个如何使用的例子simBySolution要优化解决方案的精度,请参见万博 尤文图斯优化精度:关于求解精度和错误

诱导依赖性和相关性

这个例子演示了两种技术,它们导致状态向量的各个元素之间的依赖关系。它也说明了两者之间的相互作用σ相关

第一种方法是生成相关高斯变量,形成一个包含相关分量的布朗运动过程。这些成分然后加权由一个对角波动率或曝光矩阵σ

第二种方法是生成独立的高斯变量,形成一个标准的布朗运动过程,然后根据期望协方差矩阵的下切尔斯基因子进行加权。虽然这些技术可以用于许多模型,但它们之间的关系最容易通过使用可分离变量来说明“绿带运动”模型(见采用GBM模拟方法模拟股票价格)。模拟的市场模型为:

d X t = μ X t d t + σ X t d W t

在哪里μ是一个对角矩阵。

  1. 加载数据集:

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAX数据集。尼克的数据集。富时Dataset.SP];
  2. 转换日的价格回报:

    返回= tick2ret(价格);
  3. 指定σ相关使用第一种技术:

    1. 使用第一种技术,指定σ作为资产的对角矩阵回归的标准偏差:

      expReturn = DIAG(均值(返回));期望返回向量σ=诊断接头(std(回报));收益波动率
    2. 指定相关作为这些收益的样本相关矩阵。在这种情况下,布朗运动的分量是相互依赖的:

      相关= corrcoef(回报);GBM1 =“绿带运动”(expReturn,σ,“相关”,相关);
  4. 指定σ相关使用第二种技巧:

    1. 使用第二种方法,指定σ作为资产收益率协方差矩阵的下Cholesky因子:

      协方差= x(回报);协方差σ= cholcov ()”;
    2. 相关到单位矩阵:

      GBM2 =“绿带运动”(expReturn,σ);

      在这里,西格玛同时捕捉资产收益不确定性的相关性和幅度。与此相反的第一技术中,布朗运动的部件是独立的。此外,这种技术接受一个单位矩阵的到默认分配相关,而且更直接。

  5. 使用这两种技术模拟1000次观察(大约4年的每日数据)的单个试验。默认情况下,所有状态变量都从1:

    rng (22814“旋风”)[X1,T] = simByEuler(GBM1,1000);%相关布朗运动rng (22814“旋风”) [X2,T] = simByEuler(GBM2,1000);%标准布朗运动

当基于相同的初始随机数状态时,每种技术生成相同的资产价格路径:

subplot(2,1,1) plot(T, X1)“相关布朗运动的样本路径”)ylabel (资产价格的) subplot(2,1,2) plot(T, X2)"标准布朗运动的样本路径")包含(“交易日”)ylabel (资产价格的)

市场参数的动态行为

正如讨论创建SDE对象时,可将对象参数视为MATLAB®可由公共接口访问的函数。这种可访问性提供了动态行为的印象,而不管底层参数是否真的是时变的。此外,由于参数可由公共接口访问,因此看似简单的线性结构实际上可能表示复杂的非线性设计。

例如,考虑该形式的单变量几何布朗运动(GBM)模型:

d X t = μ ( t ) X t d t + σ ( t ) X t d W t

在这个模型中,μ(t)波动,σ(t),是单独时间的动态参数。但是,当创建一个“绿带运动”对象表示底层模型时,此类动态行为必须可由公共(t,Xt)接口。这反映了一个事实“绿带运动”模型(和其他的)是受限制的参数化,它们派生自general类。

为方便起见,你可以指定受限模型参数,如“绿带运动”模型,作为传统的MATLAB数组的适当维数。在这种情况下,这样的数组表示更一般的动态情况的静态特殊情况(t,Xt)接口。

此外,当您将参数作为函数输入时,对象构造函数可以通过在初始时间和状态对它们求值来验证它们是否返回正确大小的数组。否则,对象构造函数不知道任何特定的函数形式。

下面的示例演示了一种包含动态行为的技术,方法是将传统的MATLAB时间序列数组映射到一个可调用的函数,该函数具有(t,Xt)接口。它还将该函数与具有常数参数的其他相同模型进行了比较。

因为时间系列阵列表示动态行为,必须由可访问功能由(捕获t,Xt接口,您需要实用程序来将传统的时间序列数组转换为时间和状态的可调用函数。下面的示例展示了如何使用转换函数实现这一点ts2func(时间序列到功能)。

  1. 加载数据。从2001年2月7日到2006年4月24日,每日载入包含三个月Euribor利率和法国CAC 40收市指数水平的历史数据集:

    加载Data_GlobalIdx2
  2. 模拟风险中性的样本路径。在CAC 40索引的使用几何布朗运动(模拟风险中性样品路径“绿带运动”)模型:

    d X t = r ( t ) X t d t + σ X t d W t

    在哪里r (t)代表收益的无风险收益率的变化。

    此外,假设你需要按年从日常的数据得出的相关信息(年度化数据是可选的,但有用相较于其他的例子),并且每个日历年度包括250个交易日:

    dt = 1/250;回报= tick2ret (Dataset.CAC);σ=性病(回报)* sqrt (250);收益率= Dataset.EB3M;收益率= 360*log(1 +收益率);
  3. 比较两种风险中性的历史模拟方法的样本路径。比较从两种风险中性的历史模拟方法中获得的样本路径,其中日Euribor收益率作为无风险收益率的代理。

    1. 第一种方法指定风险中性回报期Euribor产率的样品平均,因此假设一个常数(非动态)无风险收益:

      nPeriods =长度(收益率);%模拟观测rng (5713“旋风”) obj = gbm(平均(产量),diag(sigma),“StartState”,100)
      obj =类GBM:广义几何布朗运动- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -维度:状态= 1,布朗= 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -开始时间:0 StartState: 100相关:1漂移:漂移率函数F (t) X (t))扩散:扩散率函数G (t) X (t))模拟:模拟方法/函数simByEuler返回:0.0278117σ:0.231906
      (X1, T) =模拟(obj, nPeriods“DeltaTime”,dt);
    2. 相反,第二种方法将风险中性收益指定为Euribor收益率的历史时间序列。因此,它假定了一种动态的、但具有确定性的回报率;这个例子不能说明随机利率。要说明这种动态效果,请使用ts2func效用:

      r = ts2func(产量,“纽约时报”(0:nPeriods - 1));

      ts2func包的时间和状态的可调用的函数内的指定的时间序列排列,并带有可选的时间向量同步它。例如:

      r (0100)
      ANS = 0.0470

      计算函数在(t= 0,Xt= 100),并返回第一个观察到的Euribor收益率。但是,您也可以在任何中间时间对结果函数求值t和国家Xt:

      r (7.5,200)
      ANS = 0.0472

      此外,下面的命令在单独调用time时产生相同的结果:

      r (7.5)
      ANS = 0.0472

      后两个命令的等价性突出了一些重要的特性。

      当您将参数指定为函数时,它们必须在传递标量实值样本时间(t),和一个NVars——- - - - - -1状态向量(Xt)。它们还必须产生适当的尺寸的阵列,其中在第一种情况下是一个标量常数,以及在第二种情况下是一个标量,单独的时间分段常数函数。

      你无须使用任何一种时间(t)或州(Xt)。在当前的例子中,函数在经过时间和状态之后正确计算,从而满足最小需求。当仅传递时间时,它也能正确计算,这一事实仅仅表明该函数不需要状态向量Xt。重要的一点是,当你通过它的时候,它是有效的(t,Xt)。

      此外,ts2func功能执行零阶保持(ZOH)分段常数插值。的分段恒定参数的概念是在整个SDE架构普遍,并且更详细地在讨论优化精度:关于求解精度和错误

  4. 执行使用相同的初始随机数状态的第二模拟。完成通过使用相同的初始随机数的状态下进行所述第二仿真的比较:

    rng (5713“旋风”)OBJ = GBM(R,诊断(Sigma公司),“StartState”,100)
    obj =类GBM:广义几何布朗运动- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -维度:状态= 1,布朗= 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -开始时间:0 StartState: 100相关:1漂移:漂移率函数F (t) X (t))扩散:扩散率函数G (t) X (t))模拟:模拟方法/函数simByEuler返回:函数ts2func / vector2Functionσ:0.231906
    X2 =模拟(obj, nPeriods“DeltaTime”,dt);
  5. 比较两个模拟试验。画出系列无风险基准利率来比较两个模拟试验:

    次要情节(2,1,1)情节(日期、100 *收益率)datetick ('X')包含(“日期”)ylabel (的年化收益率(%))标题(无风险利率(3个月Euribor连续复合))副区(2,1,2)情节(T,X1,“红色”,T,X 2,“蓝”)包含(的时间(年))ylabel (“指数级”)标题(“固定与动态回报率:CAC 40”)({传奇“常数利率”“动态利率”},“位置”,“最佳”)

    路径是接近,但并不确切。在上图中的蓝线使用的所有历史数据欧元利率,并说明了历史模拟的审单。

定价股票期权

正如讨论确保利率为正,所有模拟和插值方法允许你指定一个或形式的更多的功能:

X t = f ( t , X t )

在每次采样结束时进行评估。

相关的示例说明了一个简单的、常见的期末处理函数,以确保非负利率。这个例子演示了一个处理函数,它允许您完全避免模拟输出。

在Black-Scholes-Merton框架内,考虑蒙特卡罗模拟欧洲股票期权的定价。假设股票具有以下特征:

  • 该股目前的交易价格为100美元。

  • 股票不支付股息。

  • 股票的波动率是每年50%。

  • 期权执行价格是95。

  • 期权到期三个月。

  • 无风险利率为每年10%。

为解决这一问题,采用常参数的单变量几何布朗运动(GBM)模型对标的股票的演化进行建模:

d X t = 0.1 X t d t + 0.5 X t d W t

此外,假设股票价格是每日模拟的,每个日历月包括21个交易日:

罢工= 95;率= 0.1;σ= 0.5;dt = 1/252;nPeriods = 63;T = nPeriods * dt;obj =“绿带运动”(速度,σ,“StartState”,100);

目标是模拟每日股票价格的独立路径,并计算欧洲期权的价格作为从现在起63天后到期时贴现终端期权收益的风险中性样本平均值。这个例子通过两种方法计算期权价格:

  • 一个蒙特卡罗模拟,它显式地请求将模拟的股票路径作为输出。然后使用输出路径为这些选项定价。

  • 一种按时间和状态可访问的期末处理函数,它记录每个样本路径的终端股票价格。此处理函数是作为访问共享信息的嵌套函数实现的。有关更多信息,请参见Example_BlackScholes.m

  1. 仿真之前,调用的示例文件来访问结束期间的处理功能:

    nTrials = 10000;独立试验次数(即路径)f = Example_BlackScholes (nPeriods nTrials)
    f =同场的结构:BlackScholes: @Example_BlackScholes/saveTerminalStockPrice CallPrice: @Example_BlackScholes/getCallPrice PutPrice: @Example_BlackScholes/getPutPrice
  2. 模拟10000个独立试验(样本路径)。请求模拟股票价格路径作为输出,并指定一个期末处理函数:

    rng (88161“旋风”) X = simBySolution(obj, nperiod,“DeltaTime”,dt,“nTrials”,nTrials,“流程”,f.BlackScholes);
  3. 直接从模拟股票价格路径计算期权价格。因为这些都是欧洲期权,所以忽略所有中间股票价格:

    调用=意味着(exp(率* T *马克斯(挤压(X(:,:)),罢工,0))
    电话= 13.9342
    把=意味着(exp(率* T *马克斯(罢工——紧缩(X (:,:)), 0))
    把= 6.4166
  4. 通过调用嵌套函数对期权进行间接定价:

    f.CallPrice(罢工,率)
    ANS = 13.9342
    f.PutPrice(罢工,率)
    ANS = 6.4166

    作为参考,理论看涨和看跌期权的价格从Black-Scholes期权公式计算的13.69536.3497,分别。

  5. 虽然步骤3和步骤4产生了相同的期权价格,但是后一种方法直接作用于每个样本路径的终端股票价格。因此,它的内存效率更高。在本例中,没有强制要求输出的理由。

也可以看看

||||||||||||||||||||

相关的例子

更多关于