主要内容

模拟股票价格

模拟多维市场模型

本例比较了可分离多元几何布朗运动过程的多种实现方法多维市场模式.它模拟了一个股票指数投资组合的样本路径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 ((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_GlobalIdx2价格=(数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时Dataset.SP];
  2. 将每日价格转换为收益:

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

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

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

    = SDEDDO (F, G,“相关”的相关性,...“StartState”, 100)
    SDEDDO = Class SDEDDO: SDE from Drift and Diffusion Objects -------------------------------------------------- Dimensions: State = 6, Brownian = 6 -------------------------------------------------- StartTime: 0 StartState: 100 (6x1双阵列)Correlation: 6x6双阵列Drift:漂移率函数F(t,X(t)) Diffusion:扩散率函数G(t,X(t)) Simulation:模拟方法/函数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_GlobalIdx2价格=(数据集。TSX数据集。CAC数据集。达克斯...数据集。尼克的数据集。富时Dataset.SP];
  2. 将每日价格转换为收益:

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

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

    SDELD = SDELD (zero (nVariables,1), diag(expReturn),...的(nVariables, 1),诊断接头(σ),“相关”...相关性,“StartState”, X)
    SDELD = Class SDELD: SDE with Linear Drift ---------------------------------------- Dimensions: State = 6, Brownian = 6 ---------------------------------------- StartTime: 0 StartState: 100 (6x6双阵)Correlation: 6x6双阵Drift:漂移率函数F(t,X(t)) Diffusion:扩散率函数G(t,X(t)) Simulation:仿真方法/函数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 (6x6双阵)Correlation: 6x6双阵Drift:漂移率函数F(t,X(t)) Diffusion:扩散率函数G(t,X(t)) Simulation:仿真方法/函数simByEuler Return: 6x6对角双阵Alpha: 6x1双阵Sigma: 6x6对角双阵
  6. 创建一个“绿带运动”对象使用“绿带运动”

    GBM = GBM (diag(expReturn), diag(sigma),“相关”...相关性,“StartState”, X)
    GBM = Class GBM:广义几何布朗运动------------------------------------------------维度:状态= 6,布朗= 6 ------------------------------------------------ StartTime: 0 StartState: 100 (6x1双阵)相关性:6x6双阵Drift:漂移率函数F(t,X(t)) Diffusion:扩散率函数G(t,X(t)) Simulation:仿真方法/函数simByEuler Return: 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, nperiod,)“DeltaTime”, dt);谁年代
    名称大小字节类属性S 250x6 12000 double

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

  3. 绘制模拟路径。

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

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

用SimByEuler方法模拟股票市场

因为simByEuler是一个有效的模拟方法,可以直接调用它,重写模拟参数的当前方法或函数(在本例中为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. 模拟单个路径使用simByEuler

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

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

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

  4. 画出第一条路径。

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

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

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

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

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

  • 一种重载欧拉模拟方法,simByEuler,旨在实现最佳性能

  • 一个函数,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);“绿带运动”=“绿带运动”(诊断接头(expReturn)诊断接头(σ),“相关”...相关性,“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综合指数的终端分布,以定性验证数据的对数正态特征。

    直方图(挤压(X(1,:)), 30),包含(“价格”), ylabel (“频率”)标题(“一年后价格直方图:加拿大(多伦多证券综合指数)”

    图中包含一个axes对象。标题为“一年后价格直方图:加拿大(TSX综合)”的axis对象包含一个类型为直方图的对象。

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

    rng (142857“旋风”) [S,T] =模拟(SDE, nperiod,)“DeltaTime”, dt,“nTrials”10);rng (142857“旋风”) [X,T] = simBySolution(GBM, nperiod,)...“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个轴对象。标题为1st Path of Multi-Dim Market Model:Euler Approximation的坐标轴对象1包含6个类型为line的对象。标题为1的轴对象2:Multi-Dim市场模型路径:解析解包含6个类型为直线的对象。

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

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

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

    图中包含一个axes对象。标题为Euler Approx - Exact Solution:Canada(TSX Composite)的axes对象包含一个类型为line的对象。

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

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

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

      expReturn =诊断接头(意味着(回报));期望返回向量%σ=诊断接头(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) title("相关布朗运动的样本路径") ylabel (资产价格的) subplot(2,1,2) plot(T, X2)"来自标准布朗运动的样本路径")包含(“交易日”) ylabel (资产价格的

图中包含2个轴对象。标题为Sample Paths from related Brownian Motion的Axes对象1包含6个类型为line的对象。标题为Sample Paths from Standard brown Motion的Axes对象2包含6个类型为line的对象。

市场参数的动态行为

讨论了在创建数据对象,对象参数可以计算,就像他们是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. 加载数据。加载包含三个月欧元银行间拆放利率和法国CAC 40指数收盘水平的每日历史数据集,时间跨度为2001年2月7日至2006年4月24日:

    负载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

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

      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. 比较两个模拟试验。绘制无风险参考率序列,以比较两个模拟试验:

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

    图中包含2个轴对象。标题为Risk Free Rate(3-Mo Euribor continuous - compound)的Axes对象1包含一个类型为line的对象。标题为Constant vs. Dynamic Rate of Return的axis对象2:CAC 40包含两个类型为line的对象。这些对象代表恒定利率,动态利率。

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

股票期权定价

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

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

    rng (88161“旋风”) X = simBySolution(obj, ncycles,“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

    根据布莱克-斯科尔斯期权公式计算出的理论买权价格和看跌期权价格可供参考13.6953而且6.3497,分别。

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

另请参阅

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

相关的例子

更多关于

Baidu
map