什么是波动率指数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是波动率指数相关的知识,希望对你有一定的参考价值。

原文链接:http://tecdat.cn/?p=19129

 

摘要


在学术界和金融界,分析高频财务数据的经济价值现在显而易见。它是每日风险监控和预测的基础,也是高频交易的基础。为了在财务决策中高效利用高频数据,高频时代采用了最先进的技术,用于清洗和匹配交易和报价,以及基于高收益的流动性的计算和预测。

 

高频数据的处理


在本节中,我们讨论高频金融数据处理中两个非常常见的步骤:(i)清理和(ii)数据聚合。

> dim(dataraw);[1] 48484 7> tdata$report;initial number no zero prices select exchange48484 48479 20795sales condition merge same timestamp20135 9105> dim(afterfirstclean)[1] 9105 7

高频数据的汇总


通常不会在等间隔的时间点记录价格,而许多实际波动率衡量方法都依赖等实际间隔的收益。有几种方法可以将这些异步和/或不规则记录的序列同步为等距时间数据。
最受欢迎的方法是按照时间汇总,它通过获取每个网格点之前的最后价格来将价格强制为等距网格。

> # 加载样本价格数据> data("sample");> # 聚合到5分钟的采样频率:> head(tsagg5min);PRICE2008-01-04 09:35:00 193.9202008-01-04 09:40:00 194.6302008-01-04 09:45:00 193.5202008-01-04 09:50:00 192.8502008-01-04 09:55:00 190.7952008-01-04 10:00:00 190.420> # 聚合到30秒的频率:> tail(tsagg30sec);PRICE2008-01-04 15:57:30 191.7902008-01-04 15:58:00 191.7402008-01-04 15:58:30 191.7602008-01-04 15:59:00 191.4702008-01-04 15:59:30 191.8252008-01-04 16:00:00 191.670

在上面的示例中,价格被强制设置为5分钟和30秒的等距时间网格。此外,aggregates函数内置于所有已实现的度量中,可以通过设置参数align.by和align.period来调用该函数。在这种情况下,首先将价格强制等间隔的常规时间网格,然后根据这些常规时间段内执行观察值的收益率来计算实际度量。这样做的优点是,用户可以将原始价格序列输入到实际度量中,而不必担心价格序列的异步性或不规则性。

带有时间和波动率计算的价格示例:

> #我们假设stock1和stock2包含虚拟股票的价格数据:> #汇总到一分钟:> Price_1min = cbind(aggregatePrice(stock1),aggregatePrice(stock2));> #刷新时间聚合:refreshTime(list(stock1,stock2));> #计算跳跃鲁棒的波动性指标> #基于同步数据rBPCov(Price_1min,makeReturns=TRUE);> #计算跳跃和噪声鲁棒的波动性度量> #基于非同步数据:

实际波动性度量

高频数据的可用性使研究人员能够根据日内收益的平方来估计实际波动性(Andersen等,2003)。实际上,单变量波动率估计的主要挑战是应对(i)价格的上涨和(ii)微观结构噪声。因此多变量波动率估计也引起了人们的注意。高频软件包实施了许多新近提出的实际波动率方法。

下面的示例代码说明了日内周期的估计:

> #计算并绘制日内周期> head(out);                           returns vol dailyvol periodicvol2005-03-04 09:35:00 -0.0010966963 0.004081072 0.001896816 2.1515392005-03-04 09:40:00 -0.0005614217 0.003695715 0.001896816 1.9483792005-03-04 09:45:00 -0.0026443880 0.003417950 0.001896816 1.801941

 

 

波动性预测


学术研究人员普遍认为,如果进行适当的管理,对高频数据的访问将带来优势,可以更好地预测未来价格变化的波动性。早在2003年Fleming等人(2003年)估计,投资者将愿意每年支付50到200个点,来预测投资组合绩效的收益,这是通过使用高频收益率而不是每日收益率来进行波动率预测的。 

尽管HAR和HEAVY模型的目标相同,即对条件波动率进行建模,但它们采用的方法不同。HAR模型专注于预测收盘价变化。HAR模型的主要优点是,它易于估计(因为它本质上是一种可以用最小二乘方估计的线性模型), HEAVY模型的主要优点在于,它可以模拟收盘价和收盘价的条件方差。此外,HEAVY模型具有动量和均值回归效应。与HAR模型相反,HEAVY模型的估计是通过正态分布的最大似然来完成的。接下来的本文更详细地介绍HAR模型和HEAVY模型,当然还要讨论并说明如何使用高频收益率来估计这些模型。

 

HAR模型

示例


将HARRV模型拟合到道琼斯工业指数,我们加载每日实际波动率。

> #每天获取样本实际波动率数据> DJI_RV = realized$DJI; #选择 DJI> DJI_RV = DJI_RV[!is.na(DJI_RV)]; #删除缺失值


第二步,我们计算传统的异构自回归(HAR)模型。由于HAR模型只是线性模型的一种特殊类型,因此也可以通过以下方式实现:harModel函数的输出是lm的子级harModel lm,线性模型的标准类。图绘制了harModel函数的输出对象,水平轴上有时间,在垂直轴上有观察到的实际波动率和预测的实际波动率(此分析是在样本中进行的,但是模型的估计系数可以显然用于样本外预测)。从图的检查中可以清楚地看出,harModel可以相对快速地拟合波动水平的变化,

[1] "harModel" "lm"> x;Model:RV1 = beta0 + beta1 * RV1 + beta2 * RV5 + beta3 * RV22Coefficients:beta0 beta14.432e-05 1.586e-01r.squared adj.r.squared0.4679 0.4608> summary(x);Call:"RV1 = beta0 + beta1 * RV1 + beta2 * RV5 + beta3 * RV22"Residuals:Min 1Q Median 3Q Max-0.0017683 -0.0000626 -0.0000427 -0.0000087 0.0044331Coefficients:Estimate Std. Error t value Pr(>|t|)beta0 4.432e-05 3.695e-05 1.200 0.2315beta1 1.586e-01 8.089e-02 1.960 0.0512 .beta2 6.213e-01 1.362e-01 4.560 8.36e-06 ***beta3 8.721e-02 1.217e-01 0.716 0.4745---Signif. codes: 0 ^a˘ A¨ Y***^a˘ A´ Z 0.001 ^a˘ A¨ Y**^a˘ A´ Z 0.01 ^a˘ A¨ Y*^a˘ A´ Z 0.05 ^a˘ A¨ Y.^a˘ A´ Z 0.1 ^a˘ A¨ Y ^a˘ A´ Z 1Residual standard error: 0.0004344 on 227 degrees of freedomMultiple R-squared: 0.4679, Adjusted R-squared: 0.4608F-statistic: 66.53 on 3 and 227 DF, p-value: < 2.2e-16


HARRVCJ模型拟合


估计harModel的更复杂版本。例如,在Andersen等人中讨论的HARRVCJ模型。可以使用示例数据集估算,如下所示:

> data = makeReturns(data); #获取高频收益数据> xModel:sqrt(RV1) = beta0 + beta1 * sqrt(C1) + beta2 * sqrt(C5) + beta3 * sqrt(C10)+ beta4 * sqrt(J1) + beta5 * sqrt(J5) + beta6 * sqrt(J10)Coefficients:beta0 beta1 beta2 beta3 beta4 beta5-0.8835 1.1957 -25.1922 38.9909 -0.4483 0.8084beta6-6.8305r.squared adj.r.squared0.9915 0.9661


最后一个示例是仅将日内收益作为输入就可以估算的一种特殊类型HAR模型。

 

HEAVY模型

 

将HEAVY模型拟合到道琼斯工业平均指数。第一步,我们加载道琼斯工业平均指数。然后,我们从该库中选择每日收益和每日实际核估计(Barndorff-Nielsen等,2004)。现在,作为HeavyModel输入的数据矩阵的第一列为收益率,第二列为Realized Kernel估计值。我们进一步将参数设置为采样期内日收益率和平均实际核估计方差。现在,我们来估算HEAVY模型。根据模型的输出,图绘制了由模型中的第二个方程式估算的条件方差。

 

> # heavy模型在DJI上的实现:> returns = returns[!is.na(rk)]; rk = rk[!is.na(rk)]; # 删除NA> startvalues = c(0.004,0.02,0.44,0.41,0.74,0.56); #初始值> output$estparams[,1]omega1 0.01750506omega2 0.06182249alpha1 0.45118753alpha2 0.41204541beta1 0.73834594beta2 0.56367558

流动性

交易量和价格

交易量和价格通常作为单独的数据对象提供。对于许多与交易数据有关的研究和实际问题,需要合并交易量和价格。由于交易量和价格可能会收到不同的报告滞后影响,因此这不是一个简单的操作(Leeand Ready 1991)。函数matchTradesQuotes可用于匹配交易量和价格。根据Vergote(2005)的研究,我们将价格设置为2秒作为默认值。

 

流动性衡量

可以使用函数tqLiquidity根据匹配的交易量和价格数据计算流动性指标。表中计算了主要实现的流动性衡量指标,并且可以用作函数tqLiquidity的参数。
以下示例说明了如何:(i)匹配交易和报价,(ii)获取交易方向,以及(iii)计算流动性衡量指标。

> #加载数据样本> #匹配交易量和价格数据> tqdata = matchTradesQuotes(tdata,qdata);> #在tqdata中显示信息> colnames(tqdata)[1:6];[1] "SYMBOL" "EX" "PRICE" "SIZE" "COND" "CORR"> #根据Lee-Ready规则推断的交易方向> #计算有效价差> es = tqLiquidity(tqdata,type="es");

最受欢迎的见解

1.HAR-RV-J与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频波动率

2.WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较

3.波动率的实现:ARCH模型与HAR-RV模型

4.R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测

5.使用R语言随机波动模型SV处理时间序列中的随机波动率

6.R语言多元COPULA GARCH 模型时间序列预测

7.R语言基于ARMA-GARCH过程的VAR拟合和预测

8.R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

9.R语言对S&P500股票指数进行ARIMA + GARCH交易策略

参考技术A 1987的全球股灾后,为稳定股市与保护投资者,纽约证券交易所(NYSE)于1990年引进了断路器机制(Circuit-breakers),当股价发生异常变动时,暂时停止交易,试图降低市场的波动性来恢复投资者的信心。但断路器机制引进不久,对于如何衡量市场波动性市场产生了许多新的认识,渐渐产生了动态显示市场波动性的需求。因此,在NYSE采用断路器来解决市场过度波动问题不久,芝加哥期权交易所从1993年开始编制市场波动率指数(Market Volatility Index,VIX),以衡量市场的波动率。
CBOE 在1973年4月开始股票期权交易后,就一直有通过期权价格来构造波动率指数的设想,以反映市场对于的未来波动程度的预期。其间有学者陆续提出各种计算方法,Whaley(1993)[1] 提出了编制市场波动率指数作为衡量未来股票市场价格波动程度的方法。同年,CBOE开始编制VIX 指数,选择S&P100 指数期权的隐含波动率为编制基础,同时计算买权与卖权的隐含波动率,以考虑交易者使用买权或卖权的偏好。
VIX表达了期权投资者对未来股票市场波动性的预期,当指数越高时,显示投资者预期未来股价指数的波动性越剧烈;当VIX指数越低时,代表投资者认为未来的股价波动将趋于缓和。由于该指数可反应投资者对未来股价波动的预期,并且可以观察期权参与者的心理表现,也被称为“投资者情绪指标”(The investor fear gauge )。经过十多年的发展和完善,VIX指数逐渐得到市场认同,CBOE于2001年推出以NASDAQ 100指数为标的的波动性指标 (NASDAQ Volatility Index ,VXN); CBOE2003年以S&P500指数为标的计算VIX指数,使指数更贴近市场实际。2004年推出了第一个波动性期货(Volatility Index Futures)VIX Futures, 2004年推出第二个将波动性商品化的期货,即方差期货 (Variance Futures),标的为三个月期的S&P500指数的现实方差(Realized Variance)。2006年,VIX指数的期权开始在芝加哥期权交易所开始交易
计算波动率指数(VIX)需要的核心数据是隐含波动率,隐含波动率由期权市场上最新的交易价格算出,可以反映市场投资者对于未来行情的预期。其概念类似于债券的到期收益率(Yield To Maturity):随着市场价格变动,利用适当的利率将债券的本金和票息贴现,当债券现值等于市场价格时的贴现率即为债券的到期收益率,也就是债券的隐含报酬率。在计算过程中利用债券评价模型,通过使用市场价格可反推出到期收益率,这一收益率即为隐含的到期收益率。本回答被提问者采纳
参考技术B 股市指数说白了,就是由证券交易所或金融服务机构编制的、表明股票行市变动的一种供参考的数字。
通过指数,对于当前各个股票市场的涨跌情况我们可以直观地看到。
股票指数的编排原理还是比较错综复杂的,就不在这儿详细分析了,点击下方链接,教你快速看懂指数:新手小白必备的股市基础知识大全
一、国内常见的指数有哪些?
根据股票指数的编制方法和性质来进行分类,股票指数可以分为这五种:规模指数、行业指数、主题指数、风格指数和策略指数。
其中,出现频率最多的是规模指数,就好像广为认知的“沪深300”指数,是说有300家大型企业股票在沪深市场上有很好的代表性和流动性,且交易活跃的一个整体情况。
再者,“上证50 ”指数的性质也是规模指数,也就是说其意味着上海证券市场代表性好、规模大、流动性好的50只股票的整体情况。

行业指数它其实是某一行业整体状况的一个代表。比如说“沪深300医药”就算是一个行业指数,代表沪深300中的医药行业股票,也对该行业公司股票整体表现作出了一个反映。
主题指数代表的是某一主题的整体情况,例如人工智能、新能源汽车等等,相关指数“科技龙头”、“新能源车”等。
波动率指数(Volatility Index,VIX)也称为投资者恐慌指数,反映了投资者对未来证券市场波动性的预期。由此可以观察投资者的心理表现。当波动率指数越高时,意味着投资者预期未来股价指数的波动性越剧烈;当波动率指数越低时,意味着投资者认为未来的股价波动将趋于缓和。
想了解更多的指数分类,可以通过下载下方的几个炒股神器来获取详细的分析:炒股的九大神器免费领取(附分享码)
二、股票指数有什么用?
前文告诉我们,指数一般选择了市场中的一些股票,而这些股票非常具有代表意义,因此通过指数,我们可以快速了解市场整体涨跌情况,进而了解市场的热度,甚至对于未来的走势也可以预测一二。具体则可以点击下面的链接,获取专业报告,学习分析的思路:最新行业研报免费分享

应答时间:2021-09-06,最新业务变化以文中链接内展示的数据为准,请点击查看

波动率预测:基于CNN的图像识别策略(附代码)


作者:Chuan Bai   编译:1+1=6


1

前言

金融市场主要处理时间序列方面的问题,围绕时间序列预测有大量的算法和工具。 今天,我们使用CNN来基于回归进行预测,并与其他一些传统算法进行比较,看看效果如何。


我们这里关注的是市场波动率,具体来说,就是股市开盘前后的波动率。


2

问题

我们觉得,开盘前的波动率(vol)可能是一个很好的指标。如果我们能够准确地预测波动率,我们就可以利用它做些事情。


3

数据准备

2016年1月至2020年3月富时100指数合约数据。


波动率预测:基于CNN的图像识别策略(附代码)


可视化:


波动率预测:基于CNN的图像识别策略(附代码)


我们感兴趣的数据是价格的波动率,本质上就是价格的标准差。我们构造的波动性指标是:用最高价减去最低价(分钟bar),同时应用一个大小为N的移动平均窗口。

波动率预测:基于CNN的图像识别策略(附代码)

原则上,当价格大幅波动时,波动率应该变大,为了测试这一点,我们随机选择一个交易日,然后根据当天的vol和价格来确认这一点。


波动率预测:基于CNN的图像识别策略(附代码)


为了比较所有交易日的波动率,我们绘制了基于时序的波动率。波动率是根据5分钟的时间窗口计算的。每个点代表最后5分钟的体积,在1070天内每分钟计算一次。


波动率预测:基于CNN的图像识别策略(附代码)


可以看到,这些峰值似乎在一小时内重复出现,例如在0000和0100、0700和0800处出现峰值。让我们来画出热力图来检查这些值。


波动率预测:基于CNN的图像识别策略(附代码)


我们可以看到时间是Daylight Saving Time(夏令时),所以需要将夏令时调整为GMT(格林尼治标准时间),如下所示:


波动率预测:基于CNN的图像识别策略(附代码)


在某些时期,波动率很大。贯穿热力图的实线表明,在某些时间,波动性持续较高,这些都是合理的。


  • 0100:CFD开始进行交易

  • 0700:欧盟股市盘前

  • 0800:英国股市开盘

  • 1200:中午

  • 1430:美国股市开盘

  • 1630:英国股市收盘


我们还可以看到,在2020年3月的几天里,波动率很高。


波动率预测:基于CNN的图像识别策略(附代码)


如果我们想要利用波动率,它应该越高越好,那么最高的时间应该是股市开盘的时候,即0800。如果我们可以用开盘前一小时的波动率来预测开盘后5分钟的波动率(通常这一时间段是一天中波动率最大的时候),那么我们可以围绕这个时间段去进行交易。


波动率预测:基于CNN的图像识别策略(附代码)


上图显示了2016年至2020年期间所有交易日的总波动率。我们可以看到,波动率往往在0800点市场开盘后立即回升,几分钟后回落。


我们假设开盘前和开盘后的波动率之间存在相关性。因此,如果我们在开盘前1小时和开盘后5分钟分别画出波动率的平均值,它们应该总体上会有一个上升趋势,确实如此:


波动率预测:基于CNN的图像识别策略(附代码)


x轴是开盘前1小时的平均波动率,y轴是开盘后5分钟的平均波动率。两者虽有相关性,但它们之间存在很多变量,因此不是一个可靠的预测因子。例如,根据这个图表,如果开盘前的平均波动率为7.5,我们有理由假设市场开盘后的波动率在5到25之间,这没啥帮助。


4

进一步讨论

我们基本上对开盘前和开盘后的波动率做了线性回归分析。接下来我们加入一些稍微复杂的算法。将1070个样本分为三组:训练、验证和测试。


  • 训练:0-699(截止2018-10-09)

  • 验证:700-899(截止2019-07-25)

  • 测试:900-1070(截止2020-03-25)


▌方法1:线性回归


由于数据有分组,所以线性回归的统计数据与使用完整数据集生成的统计数据略有不同。


波动率预测:基于CNN的图像识别策略(附代码)


从上面的图我们可以看出,相关性仍然很强,但可决系数很低,我们不能用这个方法来解释开盘后的波动率变化。


改进预测的方法之一是增加特征的数量,这就导致了多变量(元)回归。在这种情况下,我们可以利用开盘前一小时的分钟(1min)来预测开盘后的波动率:


波动率预测:基于CNN的图像识别策略(附代码)


统计数据上整体有所改善,但仍然不行,这里所有的线性回归都使用statsmodel库中的OLS。


import statsmodels.api as sm

def lingres(X, y, title=''):
    X_test = X[900:]
    y_test = y[900:]
    X = X[:700]
    y = y[:700]
    
    model = sm.OLS(y, X).fit()
    predictions = model.predict(X)
    plot_out(y, predictions, title + ' Train')
    predictions = model.predict(X_test)
    plot_out(y_test, predictions, title + ' Test')
    return model


▌方法2:梯度提升法


在进行预测特别是分类时,梯度增强是标准的方法,它将为我们提供一个非常好的基准,以便后面做进一步改进。


这里我们使用LightGBM,输入到模型中的特征本质上与多元回归相同。


from lightgbm import LGBMRegressor
from sklearn.model_selection import cross_validate

regr = LGBMRegressor()
scores = cross_validate(regr, X, y, cv=5, scoring=['neg_mean_squared_error', 'r2'])
scores
#{'fit_time': array([0.242456, 0.243822, 0.285033, 0.266963, 0.213427]),
# 'score_time': array([0.003387, 0.003706, 0.004177, 0.003168, 0.003078]),
# 'test_neg_mean_squared_error': array([ -3.989691, -1.751312, -1.646064, -2.936831, -11.072056]),
# 'test_r2': array([0.473771, 0.327672, 0.443433, 0.042896, 0.609157])}


通过5种不同的交叉验证评估,该模型在我们数据样本的不同切面上表现不是很稳定,这表明在我们的数据在不同部分存在某种不平衡的离群样本。尽管当我们更深入地研究预测过程时,这可能是一个问题,但就本文而言,只要我们有相同的训练、验证和测试集,我们就不需要过多担心,因为这是我们的第一次尝试。


如前所述,我们需要在不同的方法中保持样本的一致性,因此我们只训练前700个样本,并预测样本900+个样本 。


train_index = [x for x in range(700)]
test_index = [x for x in range(900, 1070)]
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
regr.fit(X_train, y_train)
y_hat = regr.predict(X_test)
y_train_hat = regr.predict(X_train)


训练集和测试集结果:


波动率预测:基于CNN的图像识别策略(附代码)


训练结果比方法1好,R方为0.94,但测试集的预测失败了。虽然它在测试集中表现不是很好,但仍然比我们使用纯线性回归所做的预测要好。


▌方法3:MLP(神经网络)


当我们在预测中有如此大的方差时,神经网络可能能够描述输入特征之间的复杂关系,并发现它们之间的隐藏关系。


我们使用FastAI作为深度学习库来构建底层网络,目前FastAI是建立在PyTorch之上的。大家可以描述自定义的PyTorch模型并将其传递到FastAI以获得FastAI提供的训练工具。


波动率预测:基于CNN的图像识别策略(附代码)

https://www.fast.ai/


我们使用与LightGBM相同的输入和输出集,并将数据输入到2个隐层的MLP网络中,每个隐层有300个神经元。


from fastai.tabular import *

dep_var = 'target'
y.name = dep_var
mlp_df = pd.concat([X, y], axis=1)
procs = [Normalize]

data = TabularDataBunch.from_df('.', mlp_df.iloc[:900], dep_var, valid_idx=range(700, 900), procs=procs)
learn = tabular_learner(data, layers=[300,300], loss_func=mse, metrics=[r2_score, explained_variance])

learn.lr_find(start_lr=1e-6, num_it=50, end_lr=1e-1)
learn.recorder.plot()
learn.fit_one_cycle(3, slice(3e-4), wd=0.2


经过几次迭代训练,我们可以得到类似这样的预测结果。


波动率预测:基于CNN的图像识别策略(附代码)

波动率预测:基于CNN的图像识别策略(附代码)

波动率预测:基于CNN的图像识别策略(附代码)


我们可以看到,由于最近市场的波动,测试集中的波动率最高,因此验证数据集对我们的测试数据不具有代表性。然而,与之前的方法相比,在统计数据方面表现较好。


5

基于图像识别的回归分析

在基于图像的回归之前,我们的目标参数需要做一点修改,因为在转换过程中我们会丢失数值。因为在转换成图像之前,每个时间窗口内的值都被归一化了。


为了弥补这一缺陷, 我们用开盘前后的平均价格比作为我们的目标。通过这种方式,我们向神经网络提出了一个问题:与盘前波动率相比,开盘后的波动率会有多大?例如,如果开盘前的平均波动率是10,而开盘后的波动率是50,我们的目标是预测5而不是原始的50。


为了防避免这种问题的发生,我们训练了一个MLP网络,其与前面的方法具有相同的结构、相同的数据。


波动率预测:基于CNN的图像识别策略(附代码)

波动率预测:基于CNN的图像识别策略(附代码)

波动率预测:基于CNN的图像识别策略(附代码)


注:由于在除法计算后出现了巨大的峰值,所以波动率上限为30,如下所示:


波动率预测:基于CNN的图像识别策略(附代码)Raw vol_after / vol_before


波动率预测:基于CNN的图像识别策略(附代码)

Capped@30 vol_after / vol_before


与原始值的预测相比,MLP的间接预测结果略差,但差别不大。现在我们有了CNN网络可以比较的基准。


6

图像转换

借助Gramian Angular Field和pyts库的帮助下,我们现在可以根据点之间的极坐标关系将任何时间序列转换成图像。


波动率预测:基于CNN的图像识别策略(附代码)

https://arxiv.org/pdf/1506.00327.pdf


在下面的代码中,其每天创建一个图像,每个图像描述开盘前60分钟的波动率。


from pyts.image import GramianAngularField
from matplotlib import pyplot as plt

from multiprocessing import Pool, cpu_count

gadf = GramianAngularField(image_size=60, method='difference')
X_gadf = gadf.fit_transform(X)

def convert_img(idx):
    fig = plt.figure()
    ax = plt.subplot(111)
    try:
        fname = f'imgs/{idx}.png'
        if os.path.exists(fname):
            return
    except:
        return
    ax.imshow(X_gadf[idx], cmap='rainbow', origin='lower')
    ax.set_title('')
    ax.set_xticks([])
    ax.set_yticks([])
    fig.savefig(fname, bbox_inches='tight')
    
p = Pool(cpu_count())
_ = p.map(convert_img, (i for i in range(1070)))


对于CNN网络来说,它本质上是使用ResNET34作为底层,然后在顶部加上一个[1024,512]稠密层,并使用一个简单的线性激活节点执行最终的回归。


data = (ImageList.from_csv('imgs', 'labels.csv')
                 .split_by_idxs(list(range(700)), list(range(700, 900)))
                 .label_from_df()
                 .databunch())

learner = cnn_learner(data, models.resnet34, loss_func=mae, metrics=[r2_score])
learner.model[1]
# Sequential(
# (0): AdaptiveConcatPool2d(
# (ap): AdaptiveAvgPool2d(output_size=1)
# (mp): AdaptiveMaxPool2d(output_size=1)
# )
# (1): Flatten()
# (2): BatchNorm1d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
# (3): Dropout(p=0.25, inplace=False)
# (4): Linear(in_features=1024, out_features=512, bias=True)
# (5): ReLU(inplace=True)
# (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
# (7): Dropout(p=0.5, inplace=False)
# (8): Linear(in_features=512, out_features=1, bias=True)
# )


经过反复的训练,我们得到了这样的结果:


波动率预测:基于CNN的图像识别策略(附代码)

波动率预测:基于CNN的图像识别策略(附代码)


我们可以看到,即使预测相同的目标,基于图像的回归也比MLP对应的回归表现得好得多。


不通方法的比较:


我们可以看到,MLP在预测绝对波动率值时的表现优于其他所有方法,而CNN在预测相对波动率时在各个方面都优于同一网络。


因此,在进行时间序列预测时,CNN是一个很好的选择,尽管它确实需要大量的计算能力来进行图像转换和训练。


2020年第 71 篇文章
你点的每个“在看”,都是对我们最大的鼓励

以上是关于什么是波动率指数的主要内容,如果未能解决你的问题,请参考以下文章

如何用excel计算bs模型中的波动率

如何证明到达率遵循指数分布?

talib 中文文档:# Volatility Indicator Functions 波动率指标函数

科普 | 什么是比特币的恐惧与贪婪指数?

请问CLI中地指数啥意思,以及CLI的英文全称

股票tdx指数怎么看的啊