模拟股票价格

模拟多维市场模型

这个例子比较了可分离的多元几何布朗运动过程的替代实现,通常被称为多维市场模式.它模拟了股权指数产品组合的样本路径sdeddosdeldcev,和“绿带运动”对象。

模拟的市场模型为:

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.SP];
  2. 将每日价格转换为回报:

    返回= tick2ret(价格);
  3. 将数据统计信息计算为仿真方法:

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

    F = @(t,X) diag(expReturn) * X;G = @(t,X) diag(X) * diag(sigma);
  5. 使用以下函数创建一个对象代表市场模型方程1

    = 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模拟方法/函数

    对象需要额外的信息来确定模型的维数,因为传递给物体仅通过它们(tXt)接口。换句话说对象只需要两个输入:漂移率函数和扩散率函数,都可以通过通过采样时间和相应的状态向量(tXt).

    在这种情况下,这些信息不足以明确确定状态向量和布朗运动的维数。你可以通过指定一个初始状态向量来解决维度,startstate..SDE引擎分配了默认的仿真方法,辛贝尔,模拟参数。

代表使用SEDDDO对象的市场模型

创建一个sdeddo物体使用sdeddo的市场模型方程1

  1. 加载Data_GlobalIdx2数据集:

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

    返回= tick2ret(价格);
  3. 将数据统计信息计算为仿真方法:

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

    F =漂移(0 (nVariables,1), diag(expReturn)))
    F =类漂移:漂移率规格-------------------------------率:漂移率函数f(t,x(t))a:6x1双数组b:6x6对角线双数组
    G =扩散(ones(nVariables,1), diag(sigma))
    G =类扩散:扩散速率规格---------------------------------------速率:扩散速率函数g(t,x(t))alpha:6x1双数组sigma:6x6对角线双数组
  5. 通过漂移扩散对象sdeddo

    sdeddo = sdeddo(f,g,“相关”相关,相关,...“StartState”, 100)
    SDE SDEDDO =类SDEDDO:从漂移和扩散对象  -------------------------------------------------- 维度:状态= 6,布朗= 6  -------------------------------------------------- 开始时间:0 StartState: 100 (6 x1双阵列)关系:6 x6双重数组漂移:漂移率函数F (t) X (t))扩散:模拟:模拟方法/函数simByEuler A: 6x1双阵B: 6x6对角双阵Alpha: 6x1双阵Sigma: 6x6对角双阵

    sdeddo对象需要两个输入对象,该对象提供比来自步骤4的两个函数更多的信息使用SDE对象表示市场模型.因此,维度更容易解决。实际上,每个指数的初始价格都是标量(startstate.100.).这与对象,该对象需要显式状态向量来唯一确定问题的维数。

    再次,每个对象的类都被清楚地识别,并且参数显示像结构的字段。特别是将漂移和扩散对象的参数识别为时间和状态的可调用函数,F (t XtG (t, Xt,分别。额外的参数,一个Bα,和σ,为适当尺寸的数组,表示静态(非时变)参数。换句话说,X (t)tB (t) Xtalpha(t,xt,和Sigma X (t)t是时间和状态的常数函数。

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

创造sdeldcev,和“绿带运动”对象代表市场模型方程1

  1. 加载Data_GlobalIdx2数据集:

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

    返回= tick2ret(价格);
  3. 将数据统计信息计算为仿真方法:

    nvariables = size(返回,2);expReturn =意味着(回报);σ=性病(回报);相关= corrcoef(回报);t = 0;X = 100;x = x(那些(nvarialbles,1));
  4. 创建一个sdeld物体使用sdeld

    SDELD = SDELD (0 (nVariables,1), diag(expReturn),...那些(nvariables,1),diag(sigma),“相关”...相关性,“StartState”, X)
    sdeld = class sdeld:sde与线性漂移--------------------------------------------:state = 6,布朗= 6 ---------------------------------------------0 Startstate:100(6x1双数组)相关性:6x6双阵列漂移:漂移率函数f(t,x(t))扩散:扩散速率函数g(t,x(t))仿真:仿真方法/功能simbyeuler a:6x1双阵列B:6x6对角线双数组alpha:6x1双数组sigma:6x6对角线双数组
  5. 创建A.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返回:6x6对角线双阵列Alpha: 6x1双阵列Sigma: 6x6对角线双阵列
  6. 创建A.“绿带运动”物体使用“绿带运动”

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

    注意接口限制的连续性:

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

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

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

    然而,这三个对象代表了相同的多维市场模型。

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

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

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

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时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,nperiods,“DeltaTime”, dt);谁年代
    名称大小字节类属性S 250x6 12000 double

    输出数组年代是250×6 =(nperiods + 1——- - - - - -nVariables——- - - - - -1)数组具有相同的初始值,100.,所有索引。每一排年代是对状态向量的观察吗Xt当时t

  3. 绘制模拟路径。

    plot(t,s),xlabel('交易日'),Ylabel('价格')标题(“多维市场模型的单路径”)({传奇“加拿大”“法国”'德国''日本'“英国”“我们”},...'位置'“最佳”

用SimByEuler方法模拟股票市场

因为辛贝尔是一种有效的仿真方法,可以直接调用它,覆盖模拟参数的当前方法或功能(在这种情况下是辛贝尔).下列语句生成的价格路径与在使用默认模拟方法模拟股票市场

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

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时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. 使用。模拟单个路径辛贝尔

    nperiods = 249;模拟观测的% #dt = 1;%时间递增= 1天RNG(142857,“旋风”) [S,T] = simByEuler(SDE, nPeriods,“DeltaTime”, dt);
  3. 在相同的初始条件下模拟10次试验,并进行检验年代

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

    现在输出数组年代是一个nperiods + 1——- - - - - -nVariables——- - - - - -ntrial时间序列阵列。

  4. 绘制第一条路径。

    绘图(t,s(:,:,1)),xlabel('交易日'),Ylabel('价格')标题(“多维市场模式的第一条路径”)({传奇“加拿大”“法国”'德国''日本'“英国”“我们”},...'位置'“最佳”

第一次意识到年代与图中的路径相同。

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

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

  • 一种重载欧拉模拟方法,辛贝尔,专为最佳性能而设计

  • 一个函数,Simbysolution.,提供了潜在的随机微分方程的近似解,为精度而设计

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

    加载Data_GlobalIdx2价格=(数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时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),DIAG(SIGMA),“相关”...相关性,“StartState”,x);
  2. 为了说明重载的欧拉近似方法的性能益处,增加了试验的数量10000

    nperiods = 249;模拟观测的% #dt = 1;%时间递增= 1天RNG(142857,“旋风”) [X,T] =模拟(GBM, nPeriods,“DeltaTime”,dt,...'ntrial', 10000);谁X
    Name Size Bytes Class Attributes X 250x6x10000 120000000 double

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

  3. 使用此样本大小,检查加拿大TSX复合材料的终端分布,以定性地验证数据的逻辑字符。

    直方图(挤压(X(1,:)), 30),包含('价格'),Ylabel(“频率”)标题(加拿大一年后的价格直方图(TSX Composite)

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

    RNG(142857,“旋风”)[S,T] =模拟(SDE,nperiods,“DeltaTime”,dt,'ntrial'10);RNG(142857,“旋风”)[x,t] = simbysolution(gbm,nperiods,...“DeltaTime”,dt,'ntrial'10);subplot(2,1,1) plot(T, S(:,: 1)), xlabel('交易日'), ylabel ('价格')标题(多元暗淡市场模型的第一条路径:欧拉近似)子图(2,1,2)绘图(t,x(:,:,1)),xlabel('交易日'), ylabel ('价格')标题(“多元暗淡市场模型的第一条路径:解析解”

    在此示例中,所有参数都是常量,并且Simbysolution.确实取样了精确的溶液。任何给定试验的单一索引的细节表明,欧拉近似值和确切的解决方案的价格路径是关闭的,但不相同。

  5. 以下绘图说明了两种方法之间的差异:

    子图(1,1,1)绘图(t,s(:,1,1) -  x(:,1,1),“蓝”)、网格('开')xlabel('交易日'),Ylabel(“差价”)标题('欧拉大约减去精确解决方案:加拿大(TSX复合材料)'

辛贝尔欧拉近似字面上直接从运动方程计算随机微分方程,为一些合适的值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.SP];
  2. 将每日价格转换为回报:

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

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

      expreturn = diag(均值(返回));期望回报向量%σ=诊断接头(std(回报));回报的%波动性
    2. 指定相关作为这些返回的样本相关矩阵。在这种情况下,布朗运动的组件依赖于:

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

    1. 使用第二种技术,指定σ作为资产返回协方差矩阵的较低弦因因素:

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

      GBM2 = GBM(Expreturn,Sigma);

      在这里,Sigma.捕捉资产回报不确定性的相关性和大小。与第一种方法不同,布朗运动的各分量是独立的。此外,该技术接受单位矩阵的默认赋值相关,并且更直接。

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

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

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

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

市场参数的动态行为

如讨论的那样创建SDE对象,对象参数可以评估,就像它们是MATLAB®通用接口可访问的功能。这种可访问性提供了动态行为的印象,而不管底层参数是否真的是时变的。此外,由于参数可以通过公共接口访问,表面上简单的线性结构实际上可能代表复杂的非线性设计。

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

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

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

方便,您可以指定受限制模型的参数,例如“绿带运动”模型,作为传统的MATLAB数组适当的维数。在本例中,这样的数组表示更一般的动态情况的静态特殊情况(tXt)接口。

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

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

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

  1. 加载数据。加载从2001年2月7日到2006年4月24日期间的每日历史数据集,其中包含三个月欧元银行间同业拆借利率和法国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(平均值(产量),诊断(sigma),“StartState”, 100)
      obj =类GBM:广义几何布朗运动  ------------------------------------------------ 维度:状态= 1,布朗= 1  ------------------------------------------------ 开始时间:0 StartState: 100相关:1漂移:漂移率函数F (t) X (t))扩散:扩散率函数G (t) X (t))模拟:返回值:0.0278117 Sigma: 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),并返回首次观测到的欧元银行间同业拆借利率收益率。但是,您也可以在任何中间时间对结果函数进行计算t和国家Xt

      r (7.5,200)
      ANS = 0.0472.

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

      r (7.5)
      ANS = 0.0472.

      这些最后两个命令的等价性突出了一些重要的功能。

      当将参数指定为函数时,它们必须在传递标量、实值采样时间(t),和一个据nvar——- - - - - -1状态向量(Xt).它们还必须生成一系列适当的尺寸,这在第一种情况下是标量常数,并且在第二种情况下是单独的标量,单独的分段常量函数。

      你不需要使用这两个时间(t)或州(Xt).在当前的示例中,当经过的时间后跟状态时,该函数将正确计算,从而满足最小需求。当只经过时间时,它也能正确计算,这一事实只是表明函数不需要状态向量Xt.需要说明的重要一点是,当你通过它时,它就会工作(tXt).

      此外,这是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))模拟:返回:函数ts2func/vector2Function Sigma: 0.231906
    X2 =模拟(obj, nPeriods“DeltaTime”,dt);
  5. 比较两个模拟试验。绘制无风险参考率序列,以比较两个模拟试验:

    次要情节(2,1,1)情节(日期、100 *收益率)datetick ('x')xlabel(“日期”)ylabel(的年化收益率(%))标题(“无风险利率(3-Mo欧元银行间同业拆借利率连续复利)”)子图(2,1,2)绘图(t,x1,“红色”,t,x2,“蓝”)xlabel(的时间(年))ylabel('指数级')标题('持续与动态返回率:CAC 40')({传奇'不变利率'“动态利率”},...'位置'“最佳”

    路径很近,但不是精确的。最后一个地块中的蓝线使用所有历史欧元班数据,并说明了历史模拟的单一试验。

定价股权选项

如讨论的那样确保利率为正,所有的模拟和插值方法都允许您指定表单的一个或多个函数:

X t f t X t

在每个样本时间结束时进行评估。

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

考虑在布莱克-斯科尔斯-默顿框架内通过蒙特卡罗模拟为欧洲股票期权定价。假设该股票具有以下特征:

  • 该股目前的交易价格为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/getCallPrice PutPrice: @Example_BlackScholes/getPutPrice
  2. 模拟10000个独立试验(样本路径)。请求模拟的股价路径作为输出,并指定周期结束处理函数:

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

    呼叫=均值(exp(-rate * t)* max(挤压(x(x(ext:,:)) -  strike,0))
    电话= 13.9342
    把=意味着(exp(率* T *马克斯(罢工——紧缩(X (:,:)), 0))
    把= 6.4166
  4. 通过调用嵌套函数间接价格选择选项:

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

    供参考,理论呼叫和从黑人学审查选项公式计算的价格是13.69536.3497,分别。

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

另请参阅

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

相关的例子

更多关于