模拟股票价格

模拟多维市场模型

这个例子比较了通常被称为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.DAXDataset.NIK Dataset.FTSE 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.DAXDataset.NIK Dataset.FTSE Dataset.SP];
  2. 转换每日价格回报:

    回报= tick2ret(价格);
  3. 计算统计数据输入到模拟方法:

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

    F =漂移(零(nVariables,1),诊断(expReturn))
    F =类漂移:漂移率规范——速率:漂移率函数F(t,X(t)) A: 6x1双数组B: 6x6对角双数组
    G =扩散(个(nVariables,1),诊断(SIGMA))
    G =类DIFFUSION:扩散速度规范---------------------------------------------率:扩散率函数g(t,X(t))的阿尔法:6X1双阵列西格玛:6x6的对角线双阵列
  5. 通过漂移扩散对象sdeddo:

    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=100)。这是在对比的是对象,它需要一个显式的状态向量来唯一确定问题的维数。

    同样,每个对象的类被清楚地标识出来,参数的显示类似于结构的字段。特别是,将漂移和扩散目标的参数识别为时间和状态的可调用函数,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.DAXDataset.NIK Dataset.FTSE Dataset.SP];
  2. 转换每日价格回报:

    回报= tick2ret(价格);
  3. 计算统计数据输入到模拟方法:

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

    = SDELD (0 (nVariables,1)),酮(nVariables,1),诊断(Sigma公司),“相关”,相关性,“StartState”, X)
    SDE SDELD =类SDELD:线性漂移,维度:状态= 6,布朗= 6——开始时间:0 StartState: 100 (6 x1双阵列)相关性:6 x6双重数组漂移:漂移率函数F (t) X (t))扩散:扩散率函数G (t) X (t))模拟:模拟方法/函数simByEuler: 6 x1双阵列B: 6 x6对角双重数组α:6 x1双重数组σ:6 x6对角双数组
  5. 创建一个cev对象使用cev:

    CEV = CEV (diag(expReturn), ones(nVariables,1),诊断(Sigma公司),“相关”,相关性,“StartState”, X)
    CEV =类CEV:方差不变弹性------------------------------------------ 尺寸:状态= 6,布朗= 6 ----------------------------------------- 开始时间:0将startState:100(6X1双阵列)相关:6×6阵列双漂移:漂移率函数f(t,X(t))的扩散:扩散率函数g(t,X(t))的模拟:模拟方法/功能simByEuler回程:6x6的对角线双阵列阿尔法:6X1双阵列西格玛:6x6的对角线双阵列
  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.DAXDataset.NIK Dataset.FTSE Dataset.SP];回报= tick2ret(价格);nVariables =尺寸(返回,2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);t = 0;X = 100;X = X ((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,nPeriods,“DeltaTime”, dt);谁是年代
    名称大小字节类属性为250x6 12000倍

    输出数组年代是一个250×6 =(NPeriods + 1-通过-nVariables-通过-1)具有相同初始值的数组,100,为所有索引。每一行的年代是状态向量的观测值吗Xt在时间t

  3. 画出模拟路径。

    情节(T, S),包含(“交易日”), ylabel (“价格”)标题(“多维市场模式的单一路径”)图例({'加拿大''法国''德国'“日本”“英国”'我们'},'位置',“最佳”)

模拟股市使用SimByEuler方法

因为simByEuler是一种有效的模拟方法,您可以直接调用它,重写模拟参数的当前方法或函数(在本例中为simByEuler)。以下语句产生相同的价格的路径中产生的模拟股市使用默认模拟方法:

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

    负载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAXDataset.NIK Dataset.FTSE Dataset.SP];回报= tick2ret(价格);nVariables =尺寸(返回,2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);t = 0;X = 100;X = X ((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,nPeriods,“DeltaTime”,DT,'nTrials'10);谁是年代
    名称大小字节类属性为250x6x10 120000倍

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

  4. 画出第一条路径。

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

第一次实现年代和小区里的小路完全一样。

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

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

  • 一种重载欧拉仿真方法,simByEuler,实现性能优化

  • 一个函数,simBySolution,提供了一个基本的随机微分方程的近似解,设计的准确性

  1. 加载Data_GlobalIdx2数据集和使用指定SDE模型中使用SDE对象表示市场模型,以及GBM模型代表市场模型使用SDELD,CEV和GBM对象

    负载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAXDataset.NIK Dataset.FTSE Dataset.SP];回报= tick2ret(价格);nVariables =尺寸(返回,2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);t = 0;X = 100;X = X ((nVariables, 1));F = @(T,X)DIAG(expReturn)* X; G = @(t,X) diag(X) * diag(sigma); SDE = sde(F, G,“相关”,相关性,“StartState”, X);“绿带运动”=“绿带运动”(诊断接头(expReturn)诊断接头(σ),“相关”,相关性,“StartState”, X);
  2. 为了说明重载欧拉近似方法的性能优势,将试验次数增加到10000

    nPeriods = 249;模拟观测%#DT = 1;时间增量% = 1天rng (142857“旋风”)[X,T] =模拟(GBM,nPeriods,“DeltaTime”,DT,'nTrials',10000);谁是X
    名称大小字节类属性X 250x6x10000 1.2双

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

  3. 采用该试样尺寸,考察加拿大的TSX综合的终端分配定性验证数据的对数正态分布特征。

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

  4. 模拟解决方案的10项试验并绘制一审:

    rng (142857“旋风”)[S,T] =模拟(SDE,nPeriods,“DeltaTime”,DT,'nTrials'10);rng (142857“旋风”)[X,T] = simBySolution(GBM,nPeriods,“DeltaTime”,DT,'nTrials'10);plot(T, S(:,:,1)), xlabel(“交易日”), ylabel (“价格”)标题(“多dim市场模型的第一条路径:欧拉近似”)副区(2,1,2)情节(T,X(:,:,1)),xlabel(“交易日”), ylabel (“价格”)标题(“多昏暗的市场模式的第1条路径:解析解”)

    在这个例子中,所有的参数都是常数,simBySolution确实对精确解进行采样。对于任何给定的试验,单个指数的细节表明,欧拉近似的价格路径和精确解是接近的,但不完全相同。

  5. 下图展示了两种方法之间的区别:

    (T, S(:,1,1) - X(:,1,1)'蓝色'),网格(“上”)xlabel(“交易日”), ylabel (“差价”)标题(“欧拉约减精确解:加拿大(TSX综合)”)

simByEuler欧拉近似直接从运动方程中求出随机微分方程的某一适当值dt时间增量。这个简单的近似,从离散误差受到影响。这个错误是由于差异的选择之间dt时间增量,理论上是连续时间参数。

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

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

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

有关如何使用一个例子simBySolution优化解决方案的准确性,看到万博 尤文图斯优化精度:关于求解精度和误差

诱导依赖和关联

本实施例说明两种技术诱导的状态向量的各个元素之间的依赖。这也说明之间的相互作用σ相关

第一种方法产生相关的高斯变量,形成具有相关分量的布朗运动过程。这些组成部分然后加权对角线挥发性或暴露矩阵σ

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

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

在哪里μ是对角矩阵。

  1. 加载数据集:

    负载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC Dataset.DAXDataset.NIK Dataset.FTSE Dataset.SP];
  2. 转换日的价格回报:

    回报= tick2ret(价格);
  3. 指定σ相关使用第一种方法:

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

      expReturn =诊断接头(意味着(回报));期望返回向量%西格玛= DIAG(STD(返回));回报率的波动%
    2. 指定相关那些返回的样品相关矩阵。在这种情况下,布朗运动的组件都依赖:

      相关= corrcoef(回报);GBM1 = GBM(expReturn,SIGMA,“相关”,相关);
  4. 指定σ相关利用第二技术:

    1. 使用第二种方法,指定σ作为资产回报协方差矩阵的下部的Cholesky因数:

      协方差= COV(返回);西格玛= cholcov(协方差)';
    2. 相关为单位矩阵:

      GBM2 = GBM(expReturn,SIGMA);

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

  5. 模拟使用这两种技术观察1000(大约4年的日常数据)审单。默认情况下,所有的状态变量在启动1:

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

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

副区(2,1,1)情节(T,X1)标题(“从相关布朗运动样本轨道”)ylabel(“资产价格”) (2,1,2) (T, X2)“标准布朗运动的样本路径”)xlabel(“交易日”)ylabel(“资产价格”)

市场参数的动态行为

讨论了在创建数据对象,对象参数可以按照MATLAB进行计算®功能通过一个共同的接口访问。此辅助提供的动态行为的印象,无论底层参数是否是真正的随时间变化的。此外,由于参数可以访问由公共接口,看似简单的线性构建体可实际上代表复杂的,非线性的设计。

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

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

在这种模式下,返回,μ(t)和波动性,σ(t),是独处的时间动态参数。但是,创建一个时“绿带运动”对象表示底层模型时,该动态行为必须可被公共(t,Xt)接口。这反映了一个事实“绿带运动”模型(及其他)被限制,从一般的派生参数化类。

为了方便,您可以指定受限制模型的参数,例如“绿带运动”车型适当尺寸的传统MATLAB阵列。在这种情况下,这样的阵列代表由可访问(更一般的动态情况的静态特例t,Xt)接口。

此外,当你输入参数,功能,对象构造可以验证他们通过在初始时间和状态评价他们返回正确大小的数组。否则,对象构造没有任何特别的功能形式的知识。

下面的示例演示了一种技术,它通过将一个传统的MATLAB时间序列数组映射到一个具有(t,Xt)接口。它还功能与恒定参数的其他方面相同的模型进行比较。

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

  1. 加载数据。加载包含2001年2月7日至2006年4月24日期间三个月欧元同业拆借利率和法国CAC 40收盘指数水平的每日历史数据集:

    负载Data_GlobalIdx2
  2. 模拟风险中性的样品路径。使用几何布朗运动模拟cac40指数的风险中性样本路径(“绿带运动”)模型:

    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(平均值(产率),诊断(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

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

      r (7.5)
      ans = 0.0472

      最后这两个命令的等价重点介绍了一些重要的功能。

      当您将参数指定为函数时,它们必须在传递一个标量、实值采样时间(t),和一个NVars-通过-1状态向量(Xt)。它们还必须生成一个合适的维数数组,在第一种情况下是一个标量常数,在第二种情况下是一个标量,仅是时间的分段常数函数。

      你无须使用这两种时间(t)或状态(Xt)。在当前的例子中,当时间流逝之后的状态,从而满足最低要求的功能正确评估。当简单的通过只是时间也计算正确的事实表明,该功能不需要状态向量Xt。最重要的一点要提出的是,它的工作原理,当你通过它(t,Xt)。

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

  4. 使用相同的初始随机数状态执行第二次模拟。使用相同的初始随机数状态进行第二次模拟,完成比较:

    RNG(5713,“旋风”) obj = gbm(r, diag(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”)xlabel(“日期”)ylabel('年收益率(%)')标题(“无风险利率(3月龄期Euribor连续复合的)”次要情节(2,1,2)情节(T, X1,“红色”, T, X2,'蓝色')xlabel(的时间(年))ylabel(“指数级”)标题(“回归的常数与动态速率:CAC 40”)图例({“固定利率计算”“动态利率”},'位置',“最佳”)

    路径很近,但不精确。最后一个图中的蓝线使用了所有的历史Euribor数据,并说明了对历史模拟的一次尝试。

股票期权定价

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

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 =结构体字段:CallPrice: @Example_BlackScholes/saveTerminalStockPrice CallPrice: @Example_BlackScholes/getCallPrice PutPrice
  2. 模拟10000次独立试验(样本路径)。请求模拟股票价格路径作为输出,并指定一个周期结束处理函数:

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

    调用=平均(EXP(-rate * T)* MAX(挤压(X(年底,:,:)) - 罢工,0))
    电话= 13.9342
    把= -rate * T)*最大平均(EXP((击 - 挤压(X(年底,:,:)),0))
    把= 6.4166
  4. 通过调用嵌套函数的价格选择间接:

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

    由布莱克-斯科尔斯期权公式计算出的理论看涨期权和看跌期权价格为13.69536.3497,分别。

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

另请参阅

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

相关的例子

更多关于