估算资产定价的期权隐含概率分布
作者:Ken Deeley, MathWorks
预测一种资产的表现并量化与这种预测相关的不确定性是一项艰巨的任务:由于缺乏可观察到的市场数据,这一任务往往变得更加困难。
最近,各国央行有兴趣使用观察到的期权价格数据进行预测,特别是在金融不确定性[1]、[2]期间。一项资产的看涨期权和看跌期权受市场对该资产未来表现的预期影响。本文描述了一种工作流程®从市场上观察到的相对稀缺的期权价格数据开始,用于对资产的表现进行预测。这个工作流程的主要步骤是:
- 根据市场数据计算隐含波动率
- 使用SABR插值创建额外的数据点
- 估算隐含概率密度
- 模拟未来资产价格
- 用扇形图表示预测的不确定性
扇形图以可访问的图形形式传递信息,使金融专业人员能够向非专业观众传达他们的预测和不确定性(图1)。
本文中使用的MATLAB代码可用于下载.
从市场数据计算隐含波动率
分析师面临的一个关键挑战是如何从少量可用的市场数据中获得洞见。创建额外数据点的一种技术是(K, σ)空间内插,其中K是执行价格,σ是资产波动率。要使用这种方法,我们首先必须从市场数据中计算隐含波动率。
我们假设,至少,我们可以观察到给定资产的执行看涨期权价格对(或执行看跌期权价格对),并且我们还知道标的资产价格、无风险利率和期权的到期日。我们使用以下表示法(图2)将这些数据存储在MATLAB表中。
- K -执行价格($)
- C -看涨价格($)
- P -看跌期权价格($)
- T -期权的到期日(年)
- Rf -无风险利率(十进制数字范围[0,1])
- S -标的资产价格($)
当我们在(K, σ)空间内插值时,资产波动率σ被测量为一个范围为[0,1]的十进制数。我们首先通过使用金融工具箱™函数计算布莱克-斯科尔斯隐含波动率,分别分析看涨价格数据blsimpv
:
D. sigmacall;S, D.K, D.rf, D.T, dc, [], [], [], {“电话”});
结果图显示,对于该数据集,最高波动率与到期时间T=0.25对应的数据端点相关(图3)。图还显示,当执行价格远离某个中心值时,波动率增加,该中心值似乎接近基础资产价格S = 100。
创建额外的数据点
有几种方法可用于在(K, σ)-空间中生成额外的点。更简单的方法包括将二次函数拟合为每个过期时间的数据,或使用interp1
函数来构造三次样条插值。我们选择使用SABR插值来创建额外的数据点,因为这种技术通常可以在数据集的端点上给出更精确的结果。
SABR模型是金融专业人士用来拟合的一个四参数随机波动模型[3]波动率微笑它因产生的曲线形状而得名。在MATLAB中拟合波动微笑是一个分两步的过程。首先,我们对SABR模型进行标定lsqnonlin
优化工具箱™中的求解器。这种校准最小化了观测数据和候选SABR微笑之间的差范数,从而得到了SABR模型的最优参数向量。其次,我们将最佳参数与金融工具工具箱™功能结合使用blackvolbysabr
在执行价格的要求范围内插值。
SABR技术甚至可以很好地拟合到期时间T = 0.25对应的尴尬数据(图4)。
估算隐含概率密度
在(K, σ)空间内插值后,得到足够的数据点来估计每个到期日的隐含执行价格密度函数。为此,我们使用由Breeden和Litzenberger开发的计算金融原理[4],该原理指出,T时刻资产价值的概率密度函数f(K)与资产买入价格的二阶偏导数C = C(K)成正比。
对于每个过期时间,我们首先将数据转换到原始域((K, C)-空间)blsprice
功能:
T0 =唯一(D.T);S = d.s (1);rf = d.f rf(1);为k = 1:numel(T0) newC(:, k) = blsprice(S, fineK, rf, T0(k), sigmaCallSABR(:, k));结束
在这里,fineK
是否有一个定义执行价格范围的向量用于插值和sigmaCallSABR
是使用SABR插值创建的矩阵,其中列包含每个到期日的插值波动率微笑。
然后我们计算关于执行价格的数值偏导数。这可以在MATLAB中使用diff
函数。
dK = diff(sampleK);cash = diff(newC) ./ repmat(dK, 1, size(newC, 2));Cddash = diff(Cdash) ./ repmat(d2K, 1, size(Cdash, 2));
我们还使用逻辑索引来删除作为该过程中不需要的工件出现的虚假负数。每个到期日的结果曲线表明,随着到期日的增加,函数变得不那么完整(图5)。在使用这些函数来估计隐含概率密度之前,我们需要对这些函数进行外推,因为它们没有定义在执行价格范围内的完整函数。
为了将这些函数的定义扩展到整个执行价格领域,我们使用适合
函数从曲线拟合工具箱™。然后就很容易从这个插值中推断出覆盖感兴趣的范围。
为k = 1:numel(T0) pdfFitsCall{k} = fit(pdfK, approxcallpdf (:, k),“线性”);结束
在这里,pdfK
是否有一个矢量定义了执行价格和所需的范围approxCallPDFs
是一个矩阵,在其列中存储每个到期时间隐含密度的近似值。通过外推和归一化每个函数下的面积,以确保我们有有效的概率密度函数,我们得到隐含密度(图6)。注意,随着到期时间的增加,分布模式逐渐向上移动,而且似乎有随时间增加波动的趋势。
模拟未来资产价格
现在我们有了未来所有时间资产价格的完整概率分布,我们可以从每个分布中随机抽样,创建一个预测矩阵。我们需要根据上一步中定义的概率分布,从给定的资产价格范围中随机抽样(带有替换)。实现此模拟非常简单randsample
函数从统计和机器学习工具箱™。
nSamples = 13e3;priceSimCall = NaN(numel(T0), nSamples);为k = 1:numel(T0) priceSimCall(k,:) = randsample(fitKCall{k}, nSamples, true, fitValsCall{k});结束
上面的MATLAB代码预先分配了一个名为priceSimCall
每一行代表未来的时间每一列代表从相应的概率分布中得出的随机资产价格。循环遍历每个未来时间,每次迭代创建一行priceSimCall
矩阵的随机抽样从适当的分布。的第一个输入参数randsample
是fitKCall {k}
,一个包含资产执行价格的向量,从中抽取随机样本。第二个输入参数,nSamples
为所需样本数量,第三(真正的
)指定我们要用替换进行抽样。第四个输入参数fitValsCall {k}
是否使用了概率分布randsample
函数在绘制随机样本时。注意,在此应用程序中执行的独立计算是使用顺序的为
-循环可以使用parfor
构造。对于较大的数据集,只要有多个处理核可用于计算,并行化就允许应用程序易于扩展。
创建粉丝图
扇形图通常用于绘制时间序列的预测未来演变以及与预测值相关的不确定性。财务工具箱提供fanplot
函数用于创建风扇图。该函数需要两个输入:历史数据和预测数据。我们将历史数据定义为时间T = 0时的一个点,对应的资产价格S = 100,尽管如果我们有资产价格的历史数据,那么我们可以在这里合并它们。
history = [0, S];
预测数据包括过期时间以及在上一步中执行的模拟的结果。
forecastCall = [T0, priceSimCall];
的调用来创建扇形图fanplot
函数。
forecastCall fanplot(历史)
扇形图中的中心线表示中值轨迹,每个波段的边缘表示预测模拟矩阵的不同分位数(图7),最靠近中心线的波段表示更可能的结果。在我们的例子中,预测的资产价格有一个上升的趋势,正如我们所预期的,预测的不确定性随着时间的推移而增加。
假设和进一步改进
为了提高最终预测的准确性,我们可以加入更多的数据点。我们还可以修改工作流以适应概率分布,而不是使用外推来完成隐含密度函数的定义,尽管这可能引入不必要的分布假设。使用看跌期权数据重复这个过程是个好主意。对看涨和看跌价格数据的预测结果进行平均,得到图1所示的扇形图。这种平均倾向于平滑小的波动,并抵消仅使用一种价格数据所造成的偏差。
请注意,整个工作流程可以使用MATLAB脚本实现自动化,该脚本计算隐含波动率,通过插值创建额外的数据点,估计隐含概率密度,并在生成扇形图以显示结果之前模拟未来资产价格。
发布于2015 - 92950v00
参考文献
-
“未来通货膨胀的期权隐含概率分布,”Smith, T。英格兰银行季刊2012年第三季度
-
《金融危机期间期权价格的信息含量》,欧洲央行月报2011年2月
-
“管理微笑风险”,Hagan, p.s.等人,维尔莫特杂志
-
“期权价格中隐含的国家条件债权价格”,Breeden, d.t.和Litzenberger, R. H. (1978),商业杂志第51卷,621-51页。