预测一项资产的表现并量化与这种预测相关的不确定性是一项困难的任务:由于缺乏观察到的市场数据,这一任务往往变得更加困难。
最近,中央银行对使用观察到的期权价格数据进行预测产生了兴趣,特别是在金融不确定的时期[1],[2]。一项资产的看涨期权和看跌期权受到市场对资产未来表现的看法的影响。本文介绍了一个基于MATLAB的工作流程®从市场上观察到的相对稀缺的期权价格数据开始,用于创建对资产表现的预测。这个工作流程中的主要步骤是:
- 从市场数据计算隐含波动率
- 使用SABR插值创建额外的数据点
- 估计隐含概率密度
- 模拟未来资产价格
- 用扇形图表示预测的不确定性
扇形图以易于理解的图形形式传达信息,使金融专业人员能够向非专业观众传达他们预测的预测和不确定性(图1)。
本文中使用的MATLAB代码可用于下载.
从市场数据计算隐含波动性
分析师面临的一个关键挑战正在获得少量可用市场数据的洞察力。用于创建额外数据点的一种技术是(k,σ) - 空间中的插值,其中k是击球价格,σ是资产波动性。要使用此技术,我们首先必须从市场数据中计算隐含的波动性。
我们假设,我们可以将击球价格对(或罢工价格对)遵守给定资产,并且我们还知道期权的潜在资产价格,无风险率和到期时间.我们使用以下符号将此数据存储在Matlab表中(图2)。
- K -执行价格($)
- C -买入价格($)
- P - PUT价格($)
- T -期权的到期时间(年)
- RF - 无风险速率(范围内的十进制数[0,1])
- S -标的资产价格($)
当我们在(K, σ)空间内插值时,资产波动率σ被测量为一个范围[0,1]的小数。我们首先通过使用Financial Toolbox™函数计算Black-Scholes隐含波动率来分别分析看涨价格数据blsimpv
:
D.sigmaCall = blsimpv (D。S, D.K, D.rf, D.T, d.c., [], [], [], {“电话”});
阴谋的结果显示,该数据集,最高的波动与相对应的端点的数据失效时间T = 0.25(图3),情节也表明波动增长随着罢工的价格远离一些中心值,这似乎是接近标的资产价格= 100。
创建其他数据点
有几种方法可以用来在(K, σ)空间中生成额外的点。更简单的方法包括对每个失效时间的数据拟合二次函数,或使用interp1.
构建立方样条插值的功能。我们选择使用SABR插值来创建额外的数据点,因为此技术通常可以在数据集的端点提供更准确的结果。
SABR模型是金融专业人士用来拟合的四参数随机波动率模型[3]波动率微笑,以得到的曲线的形状命名。拟合挥发性微笑是Matlab的两步过程。首先,我们使用的是校准SABR模型lsqnonlin
求解器从最优化工具箱™。这种校准使观测数据和候选SABR微笑之间的差异的范数最小化,从而产生SABR模型的最优参数向量。其次,我们将最优参数与Financial Instruments Toolbox™函数一起使用blackvolbysabr
插入所需的执行价格范围。
即使在拟合失效时间T = 0.25的棘手数据时,SABR技术也能很好地工作(图4)。
估计隐含概率密度
在(K, σ)空间内插值后,我们得到了足够的数据点来估计每个到期时间的隐含执行价格密度函数。为了做到这一点,我们使用了由Breeden和Litzenberger[4]开发的计算金融学原理,该原理表明,在时间T时资产价值的概率密度函数f(K)与资产调用价格C = C(K)的二阶偏导数成正比。
方法首先将数据转换为原始域((K, C)-空间)blsprice
功能:
T0 =独特(D.T);S =个终身制(1);射频= D.rf (1);为了k = 1:numel(T0) newC(:, k) = blprice (S, fineK, rf, T0(k), sigmaCallSABR(:, k));结尾
在这里,fineK
是否有一个定义执行价格范围的向量用于插值和sigmacallsabr.
是使用SABR插值创建的矩阵,其中列包含每个到期时间内的插值波动率微笑。
然后,我们相对于罢工价格计算数值部分衍生品。这可以使用Matlab有效地完成diff
功能。
dk = diff(样品);cdash = diff(newc)./ repmat(dk,1,尺寸(newc,2));cddash = diff(cdash)./ repmat(d2k,1,尺寸(cdash,2));
我们还使用逻辑索引来删除显示为此过程的不需要工件的虚假负值。每个到期时间的结果曲线表明,随着到期时间的增加,功能变得不那么完整(图5)。我们需要在我们可以使用它们来估计隐含的概率密度之前推断这些功能,因为它们没有在利息的罢工价格范围内定义完整的功能。
为了扩展这些函数在完全执行价格域上的定义,我们使用适合
函数从曲线拟合工具箱™。这样就很容易从这个插值来推断出所关心的范围。
为了pdfFitsCall{k} = fit(pdfK, approxCallPDFs(:, k),“线性”);结尾
在这里,pdfK
向量是否定义了执行价格和的必要范围approxCallPDFs
是在其列中存储每个失效时间隐含密度的近似的矩阵。推断和正常化每个函数下的面积,以确保我们有有效的概率密度函数,得到隐含密度(图6)。注意分配模式逐渐向上移动随着到期时间的增加,和似乎有增加的趋势波动。
模拟未来资产价格
现在我们有了未来所有时间资产价格的完整概率分布,我们可以从每个分布中随机抽样,以创建一个预测矩阵。我们需要根据上一步定义的概率分布,从给定的资产价格范围中随机抽样(带替换)。这个模拟可以直接使用兰德斯
函数来自统计和机器学习工具箱™。
nSamples = 1 e3;priceSimCall = NaN(numel(T0), nSamples);为了k = 1:numel(T0) priceSimCall(k,:) = randsample(fitKCall{k}, nSamples, true, fitValsCall{k});结尾
上面的MATLAB代码预先分配了一个名为priceSimCall
其中每一行代表未来的时间,每一列代表从相应的概率分布中得出的随机资产价格。该循环在每个将来的时间点上迭代,并且每次迭代创建一行priceSimCall
矩阵通过随机抽样从适当的分布。的第一个输入参数兰德斯
是fitKCall {k}
,这是一个包含资产执行价格的向量,可以从中抽取随机样本。第二个输入参数,nSamples
,为所需样本数量,第三个(真正的
)指定我们想要样品和替换。第四个输入参数fitValsCall {k}
概率分布是由兰德斯
绘制随机样本时的功能。请注意,使用顺序在此应用程序中执行的独立计算为了
-循环可以使用parfor
构造。对于较大的数据集,只要有多个处理核心可用来进行计算,并行化就允许应用程序易于伸缩。
创建扇形图
粉丝图通常用于将时间序列的投影未来演变与与预测值相关联的不确定性绘制。金融工具箱提供了一个fanplot
功能:创建扇形图。这个功能需要两个输入:历史数据和预测数据。我们将历史数据简单地定义为时间T = 0时对应资产价格S = 100的一个点,尽管如果我们有资产价格的历史数据,那么我们可以在这里合并它们。
历史= [0,S];
预测数据包括到期时间与前一步骤中执行的模拟结果一起。
ForecastCall = [T0,Plyseimcall];
然后,我们通过调用fanplot
功能。
forecastCall fanplot(历史)
扇形图中的中心线表示中位数轨迹,每个波段的边缘表示预测模拟矩阵的不同分位数(图7),离中心线最近的波段表示可能性更大的结果。在我们的例子中,预测的资产价格有上升的趋势,正如我们所预料的,预测的不确定性随着时间的推移而增加。
假设和进一步改进
为了提高最终预测的准确性,我们可以包含更多的数据点。我们还可以修改工作流程以适应概率分布,而不是使用外推以完成隐含密度函数的定义,尽管这可能引入不必要的分布假设。使用PUT价格数据重复该过程是一个好主意。平均从呼叫创建的预测,并将价格数据置于图1所示的风扇图表中。这种平均趋于平滑出小波动,并且通过仅使用一种类型的价格数据而引起的反偏差。
请注意,整个工作流程可以使用计算默示波动率的Matlab脚本自动化,通过插值创建其他数据点,估计隐含的概率密度,并在生成粉丝图表之前模拟未来的资产价格以显示结果。