主要内容

模拟股票价格

模拟多维市场模型

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

要模拟的市场模型为:

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

地点:

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

  • D对角线矩阵是Xt沿着对角线。

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

使用SDE对象表示市场模型

创建一个对象使用以代表股权市场模式。

  1. 加载Data_GlobalIdx2数据集:

    负载Data_GlobalIdx2prices =[数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时Dataset.SP];
  2. 将每日价格转换为收益:

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

    nVariables = size(returns, 2);expReturn = mean(返回);Sigma = std(收益);相关性= corrcoef(收益);T = 0;X = 100;X = X(ones(nVariables,1));
  4. 创建简单的匿名漂移和扩散函数,可通过(tXt):

    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 ------------------------------------------- StartTime: 0 StartState: 100 (6x1双阵列)相关性:6x6双阵列漂移:漂移速率函数F(t,X(t))扩散:扩散速率函数G(t,X(t))仿真:仿真方法/函数simByEuler

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

    在这种情况下,这些信息不足以明确地确定状态向量和布朗运动的维数。你通过指定初始状态向量来解析维数,StartState.SDE引擎已经分配了默认的模拟方法,simByEuler,到模拟参数。

使用SDEDDO对象表示市场模型

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

  1. 加载Data_GlobalIdx2数据集:

    负载Data_GlobalIdx2prices =[数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时Dataset.SP];
  2. 将每日价格转换为收益:

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

    nVariables = size(returns, 2);expReturn = mean(返回);Sigma = std(收益);相关性= corrcoef(收益);
  4. 创建漂移而且扩散对象的使用漂移而且扩散

    F =漂移(零(nVariables,1), diag(expReturn)))
    F = Class DRIFT:漂移率规格------------------------------------- Rate:漂移率函数F(t,X(t)) A: 6x1双阵列B: 6x6对角双阵列
    G =扩散(ones(nVariables,1), diag(sigma))
    G =类DIFFUSION:扩散速率规格--------------------------------------------- Rate:扩散速率函数G(t,X(t)) Alpha: 6x1双阵列Sigma: 6x6对角双阵列
  5. 通过漂移而且扩散对象sdeddo

    SDEDDO = SDEDDO (F, G,“相关”的相关性,...“StartState”, 100)
    SDEDDO =类SDEDDO: SDE从漂移和扩散对象--------------------------------------------------维度:状态= 6,布朗= 6 -------------------------------------------------- StartTime: 0 StartState: 100 (6x1双阵列)相关性:6x6双阵列漂移:漂移率函数F(t,X(t))扩散:扩散率函数G(t,X(t))仿真:仿真方法/函数simByEuler A: 6x1双阵列B: 6x6对角双阵列Alpha: 6x1双阵列Sigma:6x6对角线双阵列

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

    同样,每个对象的类都被清晰地标识出来,参数也像结构的字段一样显示出来。特别是将漂移和扩散对象的参数识别为时间和状态的可调用函数,F (t Xt而且G (t, Xt,分别。附加的参数,一个Bα,σ,是适当尺寸的数组,表示静态(非时变)参数。换句话说,X (t)tB (t) Xtα(t, Xt,Sigma X (t)t都是时间和状态的常数函数。

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

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

  1. 加载Data_GlobalIdx2数据集:

    负载Data_GlobalIdx2prices =[数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时Dataset.SP];
  2. 将每日价格转换为收益:

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

    nVariables = size(returns, 2);expReturn = mean(返回);Sigma = std(收益);相关性= corrcoef(收益);T = 0;X = 100;X = X(ones(nVariables,1));
  4. 创建一个sdeld对象使用sdeld

    SDELD = SDELD (0 (nVariables,1), diag(expReturn),...的(nVariables, 1),诊断接头(σ),“相关”...相关性,“StartState”, X)
    SDELD = Class SDELD: SDE with Linear Drift ----------------------------------------维数:State = 6, brown = 6 ---------------------------------------- StartTime: 0 StartState: 100 (6x1双阵列)相关性:6x6双阵列漂移:漂移速率函数F(t,X(t))扩散:扩散速率函数G(t,X(t))仿真:仿真方法/函数simByEuler A: 6x1双阵列B: 6x6对角双阵列Alpha: 6x1双阵列Sigma: 6x6对角双阵列
  5. 创建一个cev对象使用cev

    CEV = CEV (diag(expReturn), ones(nVariables,1),...诊断接头(σ),“相关”的相关性,...“StartState”, X)
    CEV = Class CEV: Constant Elasticity Variance ------------------------------------------ Dimensions: State = 6, Brownian = 6 ------------------------------------------ StartTime: 0 StartState: 100 (6x1双阵列)相关性:6x6双阵列漂移:漂移率函数F(t,X(t))扩散:扩散率函数G(t,X(t))仿真:仿真方法/函数simByEuler返回:6x6对角双阵列Alpha: 6x1双阵列Sigma: 6x6对角双阵列
  6. 创建一个“绿带运动”对象使用“绿带运动”

    GBM = GBM (diag(expReturn), diag(sigma),“相关”...相关性,“StartState”, X)
    GBM =类GBM:广义几何布朗运动------------------------------------------------维数:状态= 6,布朗= 6 ------------------------------------------------ StartTime: 0 StartState: 100 (6x1双阵列)相关性:6x6双阵列漂移:漂移率函数F(t,X(t))扩散:扩散率函数G(t,X(t))仿真:仿真方法/函数simByEuler返回:6x6对角双阵列Sigma: 6x6对角双阵列

    注意接口限制的顺序:

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

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

    • “绿带运动”对象只需要指定返回而且σ

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

    同时,cev而且“绿带运动”对象显示基础参数Bsdeld对象作为返回.这是一个通常与权益模型相关的直观名称。

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

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

    负载Data_GlobalIdx2prices =[数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时Dataset.SP];Returns = tick2ret(价格);nVariables = size(returns,2);expReturn = mean(返回);Sigma = std(收益);相关性= 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)具有相同初始值的数组One hundred.,对于所有指标。每行年代是对状态向量的观察吗Xt在时间t

  3. 绘制模拟路径。

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

    图中包含一个轴对象。标题为“多维市场模型单路径”的坐标轴对象包含6个类型线对象。这些物件代表加拿大、法国、德国、日本、英国、美国。

用SimByEuler方法模拟股票市场

因为simByEuler是有效的模拟方法,可以直接调用它,重写模拟参数的当前方法或函数(在本例中为simByEuler).下面的语句生成的价格路径与使用默认模拟方法模拟股票市场

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

    负载Data_GlobalIdx2prices =[数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时Dataset.SP];Returns = tick2ret(价格);nVariables = size(returns,2);expReturn = mean(返回);Sigma = std(收益);相关性= 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, nPeriods,“DeltaTime”, dt);
  3. 在相同初始条件下模拟10次试验,并进行检验年代

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

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

  4. 画出第一条路径。

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

    图中包含一个轴对象。标题为First Path of Multi-Dimensional Market Model的坐标轴对象包含6个类型为line的对象。这些物件代表加拿大、法国、德国、日本、英国、美国。

第一次实现年代和图中的路径是一样的。

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

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

  • 重载欧拉模拟方法,simByEuler,为最佳性能而设计

  • 一个函数,simBySolution,提供了基本随机微分方程的近似解,为精度而设计

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

    负载Data_GlobalIdx2prices =[数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时Dataset.SP];Returns = tick2ret(价格);nVariables = size(returns,2);expReturn = mean(返回);Sigma = std(收益);相关性= 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,...“nTrials”, 10000);谁X
    名称大小字节类属性X 250x6x10000 120000000 double

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

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

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

    图中包含一个轴对象。标题为Histogram of Prices after One Year: Canada (TSX Composite)的axis对象包含一个类型为Histogram的对象。

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

    rng (142857“旋风”) [S,T] =模拟(SDE, nPeriods,“DeltaTime”, dt,“nTrials”10);rng (142857“旋风”) [X,T] = simBySolution(GBM, nPeriods,...“DeltaTime”, dt,“nTrials”10);subplot(2,1,1) plot(T, S(:,:,1)), xlabel(“交易日”), ylabel (“价格”)标题(多暗淡市场模型的第一条路径:欧拉近似) subplot(2,1,2) plot(T, X(:,:,1)), xlabel(“交易日”), ylabel (“价格”)标题(多元暗淡市场模型的第一条路径:解析解

    图中包含2个轴对象。多暗淡市场模型路径:欧拉近似的轴对象1包含6个类型线对象。轴对象2标题为1的多暗淡市场模型路径:解析解包含6个类型线对象。

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

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

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

    图中包含一个轴对象。标题为Euler approximate Minus Exact Solution:Canada(TSX Composite)的坐标轴对象包含一个类型为line的对象。

simByEuler欧拉近似从字面上直接从运动方程求出随机微分方程,求出某个合适的值dt时间增量。这种简单的近似存在离散化误差。这种错误是由于选择的不一致造成的dt时间增量和理论上的连续时间参数。

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

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

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

来举例说明如何使用simBySolution若要优化解的精度,请参见金宝搏官方网站优化精度:关于解的精度和误差

诱导依赖性和相关性

这个例子说明了两种诱导状态向量的各个元素之间依赖关系的技术。它还说明了之间的相互作用σ而且相关

第一种方法生成相关的高斯变量,形成具有相关分量的布朗运动过程。然后用对角线波动率或风险敞口矩阵对这些成分进行加权σ

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

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

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

  1. 加载数据集:

    负载Data_GlobalIdx2prices =[数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时Dataset.SP];
  2. 将每日价格转换为收益:

    Returns = tick2ret(价格);
  3. 指定σ而且相关使用第一个技巧:

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

      expReturn = diag(mean(returns));%期望回报向量Sigma = diag(std(返回));收益波动率%
    2. 指定相关作为这些回报的样本相关矩阵。在这种情况下,布朗运动的分量是依赖的:

      相关性= corrcoef(收益);GBM1 = gbm(expReturn,sigma,“相关”...相关);
  4. 指定σ而且相关使用第二种技巧:

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

      协方差= cov(收益);Sigma = 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 (资产价格的) subplot(2,1,2) subplot(T, X2)“标准布朗运动的样本路径”)包含(“交易日”) ylabel (资产价格的

图中包含2个轴对象。轴对象1,标题为“相关布朗运动的样本路径”,包含6个类型为line的对象。axis对象2的标题为“来自标准布朗运动的样本路径”,包含6个类型为line的对象。

市场参数的动态行为

如在创建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;returns = tick2ret(Dataset.CAC);Sigma = std(返回)*根号(250);yield = Dataset.EB3M;产量= 360*log(1 +产量);
  3. 比较两种风险中性历史模拟方法的样本路径。比较两种风险中性历史模拟方法获得的样本路径,其中欧元同业拆借利率(Euribor)的日收益率作为无风险收益率的代表。

    1. 第一种方法将风险中性收益率指定为Euribor收益率的样本平均值,因此假设无风险收益率为常数(非动态):

      nPeriods =长度(yield);%模拟观测rng (5713“旋风”) obj = gbm(mean(yield),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(yield,“次”,(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),以及据nvar——- - - - - -1状态向量(Xt).它们还必须生成一个具有适当尺寸的数组,在第一种情况下是一个标量常数,在第二种情况下是一个标量,仅是时间的分段常数函数。

      你无须使用任何一个时间(t)或状态(Xt).在当前示例中,当传递时间和状态时,函数正确地求值,从而满足最小需求。当只传递时间时,它也能正确计算,这表明函数不需要状态向量Xt.重要的一点是,当你通过它时,它是有效的(tXt).

      此外,ts2func函数执行零阶保持器(ZOH)分段常数插值。分段常数参数的概念在SDE体系结构中普遍存在,并在中更详细地讨论优化精度:关于解的精度和误差

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

    rng (5713“旋风”) obj = gbm(r, diag(sigma),“StartState”, 100)
    obj =类GBM:广义几何布朗运动------------------------------------------------维数:状态= 1,布朗= 1 ------------------------------------------------ StartTime: 0 StartState: 100相关性:1漂移:漂移率函数F(t,X(t))扩散:扩散率函数G(t,X(t))仿真:仿真方法/函数simByEuler返回:函数ts2func/vector2Function Sigma: 0.231906
    X2 =模拟(obj,nPeriods,“DeltaTime”, dt);
  5. 比较两个模拟试验。绘制无风险参考率序列,以比较两个模拟试验:

    Subplot (2,1,1) plot(日期,100*收益率)datetick(“x”)包含(“日期”) ylabel (年化收益率(%))标题(无风险利率(3个月Euribor连续复利))子图(2,1,2)子图(T,X1,“红色”, T, X2,“蓝”)包含(的时间(年)) ylabel (“指数级”)标题(“固定vs.动态回报率:CAC 40”)({传奇“固定利率”“动态利率”},...“位置”“最佳”

    图中包含2个轴对象。标题为“无风险利率(3-Mo Euribor连续复合)”的Axes对象1包含类型为line的对象。标题为常量vs.动态回报率的坐标轴对象2:CAC 40包含2个类型为line的对象。这些对象表示恒定利率,动态利率。

    路径很接近但不精确。最后一个图中的蓝线使用了所有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 = gbm(rate,sigma,“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,nPeriods,“DeltaTime”, dt,...“nTrials”nTrials,“过程”, f.BlackScholes);
  3. 根据模拟的股票价格路径直接计算期权价格。因为这些是欧洲期权,所以忽略所有中间股票价格:

    调用=意味着(exp(率* T *马克斯(挤压(X(:,:)),罢工,0))
    Call = 13.9342
    把=意味着(exp(率* T *马克斯(罢工——紧缩(X (:,:)), 0))
    看跌= 6.4166
  4. 通过调用嵌套函数间接为选项定价:

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

    根据Black-Scholes期权公式计算出的理论看涨期权和看跌期权价格如下13.6953而且6.3497,分别。

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

另请参阅

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

相关的例子

更多关于