预测一项资产的表现,并量化与这种预测相关的不确定性,是一项困难的任务:由于缺乏观察到的市场数据,这项任务往往会变得更加困难。
最近,央行有兴趣使用观察到的期权价格数据来创建预测,特别是在金融不确定性达到[1]、[2]的时期。资产的看涨和看跌期权受市场对资产未来表现的预期影响。本文描述了一个用MATLAB实现的工作流®用于创建资产的性能预测,从从市场观察到的相对稀缺的期权价格数据开始。本工作流程的主要步骤如下:
- 从市场数据计算隐含波动率
- 创建使用SABR插额外的数据点
- 估计隐含概率密度
- 模拟未来资产价格
- 用扇形图表示预测的不确定性
在可访问的图形形式,使金融专业人员其预测投影和不确定性传达给普罗大众风扇图表传达信息(图1)。
在这篇文章中所使用的MATLAB代码可供下载。
从市场数据计算隐含波动率
分析师面临的一个关键挑战是从少量可用的市场数据中获得洞察力。创建额外数据点的一种技术是(K,σ)-空间内插,其中K是执行价格,σ是资产波动率。要使用这种技术,我们首先必须从市场数据计算隐含波动率。
我们假设,至少,我们可以观察给定资产的执行看涨期权价格对(或执行看跌期权价格对),我们还知道期权的标的资产价格、无风险利率和到期时间。我们使用下面的符号将这些数据存储在一个MATLAB表中(图2)。
- K -执行价格($)
- Ç - 赎回价格($)
- P——卖出价(美元)
- 笔 - 期权的到期时间(年)
- rf——无风险利率(小数在[0,1]范围内)
- S -标的资产价格($)
当我们在(K,σ)空间,该资产的波动,σ被内插,如在[0,1]的范围内的十进制数来测量。我们首先通过计算布莱克 - 斯科尔斯通话价格数据分别分析使用财务工具箱™功能隐含波动率blsimpv
:
D。sigmaCall = blsimpv (D。年代,D。K, D。射频,D。T, D。C, [], [], [], {'呼叫'});
阴谋的结果显示,该数据集,最高的波动与相对应的端点的数据失效时间T = 0.25(图3),情节也表明波动增长随着罢工的价格远离一些中心值,这似乎是接近标的资产价格= 100。
创建其他数据点
有几种方法可以用于生成额外的点(K,σ)讨论。更简单的方法包括对每个到期时间的数据拟合二次函数,或使用interp1公司
函数构造三次样条插值。我们选择使用SABR插值来创建额外的数据点,因为这种技术通常可以在数据集的端点给出更精确的结果。
该模型SABR是由金融专业人员配合使用四参数随机波动模型[3]波动性微笑,以结果曲线的形状命名。在MATLAB中拟合波动率微笑是一个两步过程。首先,我们使用lsqnonlin
求解从优化工具箱™。此校准最小化所观察到的数据和候选SABR微笑之间的差值的范数,从而导致该SABR模型最佳参数的向量。其次,我们采用的最优参数与金融工具工具箱™功能一起blackvolbysabr
在执行价格的必要范围内插入。
SABR技术甚至可以很好地拟合到期时间T = 0.25时的尴尬数据(图4)。
估计隐含概率密度
在(K,σ)空间内插之后,我们获得了足够的数据点中的每个终止时间,在估计隐含执行价格密度函数。要做到这一点,我们使用由布里登和Litzenberger [4]开发了一种计算金融原理,其中指出的概率密度函数f(K)在时刻资产价值的T是正比于资产呼叫价格的第二偏导数C = C(K)。
我们首先使用数据转换到原始域((K,C)空间),每个到期时间blsprice
功能:
T0 =独特(D.T);S =个终身制(1);射频= D.rf (1);对于k = 1:numel(T0) newC(:, k) = blsprice(S, fineK, rf, T0(k), sigmaCallSABR(:, k));结束
在这里,fineK
用于内插定义执行价格范围内的矢量和sigmaCallSABR公司
是使用SABR插值创建的矩阵,其中的列包含每个到期时间的插值波动微笑。
然后我们计算与执行价格有关的数值偏导数。这可以在MATLAB中使用diff
功能。
dK=diff(sampleK);Cdash=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, approxCallPDFs(:, k),“线性”);结束
在这里,pdfK
向量是否定义了执行价格和approxCallPDFs
是一个矩阵存储所述近似隐含密度在它的列的每个到期时间。每个函数外推下并归一化面积,以确保我们具有有效的概率密度函数,我们得到暗示的密度(图6)。请注意,分销模式逐渐向上移动,以增加到期的时间,而且似乎是朝着增加波动一段时间的趋势。
模拟未来资产价格
现在,我们在未来的任何时候都对资产价格的完整的概率分布,我们可以随机样本从每个分发创建一个预测矩阵。我们根据在先前步骤中所定义的概率分布从资产价格的给定范围需要随机样品(具有替换)。这种模拟是直接使用实施随机抽样
从统计和机器学习工具箱™功能。
NSAMPLES = 1E3;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}
的概率分布随机抽样
函数时绘制随机样本。请注意,在此应用程序中使用顺序对于
-loops可以使用被并行parfor
构造。对于更大的数据集,只要有多个处理核心可供计算,并行化就可以使应用程序易于伸缩。
创建扇形图
扇形图通常用于绘制时间序列的预测未来演变以及与预测值相关的不确定性。财务工具箱提供fanplot
函数用于创建扇形图。此功能需要两个输入:历史数据和预测数据。我们定义的历史数据,在时间t = 0只是一个点对应资产价格S = 100,但如果我们有历史数据对资产价格那么我们可以在这里将其纳入。
= [0, S];
预测数据包括失效时间以及在上一步骤中执行的模拟结果。
forecastCall=[T0,价格调用];
然后,我们创建了扇形图与该呼叫fanplot
功能。
fanplot(历史,forecastCall)
风扇图中的中央线代表中位数的轨迹,并且每个带的边缘代表了预测模拟矩阵(图7)的不同位数,与最靠近中心线频带指示更可能的结果。在我们的例子中,处于突出资产价格上升的趋势,正如我们所期望的,随着时间的推移预测的不确定性增加。
假设和进一步改进
为了提高最终预测的准确性,我们可以加入更多的数据点。我们也可以修改工作流以适应概率分布,而不是使用外推来完成隐含密度函数的定义,尽管这可能会引入不需要的分布假设。使用卖出价格数据重复这个过程是个好主意。在图1所示的扇形图中,对从调用和放置价格数据中创建的预测进行平均。这样的平均值往往会消除小的波动,并抵消由于只使用一种价格数据而造成的偏差。
请注意,整个工作流程可以使用一个MATLAB脚本实现自动化,该脚本计算隐含波动率,通过插值创建其他数据点,估计隐含概率密度,并在生成扇形图以显示结果之前模拟未来资产价格。