R语言HAR和HEAVY模型分析高频金融数据波动率

简介: R语言HAR和HEAVY模型分析高频金融数据波动率

摘要

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

 

高频数据的处理

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

 





> dim(dataraw);
[1] 48484 7


> tdata$report;


initial number  no zero prices  select exchange
48484  48479  20795


sales condition merge same timestamp
20135 9105
> dim(afterfirstclean)
[1] 9105 7

高频数据的汇总

通常不会在等间隔的时间点记录价格,而许多实际波动率衡量方法都依赖等实际间隔的收益。有几种方法可以将这些异步和/或不规则记录的序列同步为等距时间数据。

最受欢迎的方法是按照时间汇总,它通过获取每个网格点之前的最后价格来将价格强制为等距网格。



> # 加载样本价格数据


> data("sample");


> # 聚合到5分钟的采样频率:




> head(tsagg5min);
PRICE
2008-01-04 09:35:00 193.920
2008-01-04 09:40:00 194.630
2008-01-04 09:45:00 193.520
2008-01-04 09:50:00 192.850
2008-01-04 09:55:00 190.795
2008-01-04 10:00:00 190.420
> # 聚合到30秒的频率:


> tail(tsagg30sec);
PRICE
2008-01-04 15:57:30 191.790
2008-01-04 15:58:00 191.740
2008-01-04 15:58:30 191.760
2008-01-04 15:59:00 191.470
2008-01-04 15:59:30 191.825
2008-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 periodicvol
2005-03-04 09:35:00 -0.0010966963 0.004081072 0.001896816  2.151539
2005-03-04 09:40:00 -0.0005614217 0.003695715 0.001896816  1.948379
2005-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 * RV22
Coefficients:


beta0  beta1
4.432e-05  1.586e-01




r.squared  adj.r.squared
0.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.0044331


Coefficients:
Estimate Std. Error t value Pr(>|t|)
beta0 4.432e-05 3.695e-05 1.200 0.2315
beta1 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 1
Residual standard error: 0.0004344 on 227 degrees of freedom
Multiple R-squared: 0.4679, Adjusted R-squared: 0.4608
F-statistic: 66.53 on 3 and 227 DF, p-value: < 2.2e-16

HARRVCJ模型拟合

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







> data = makeReturns(data); #获取高频收益数据




> x
Model:


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.8084
beta6
-6.8305
r.squared  adj.r.squared
0.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.01750506
omega2 0.06182249
alpha1 0.45118753
alpha2 0.41204541
beta1 0.73834594
beta2 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");

相关文章
|
3月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
58 3
|
3月前
R语言基于表格文件的数据绘制具有多个系列的柱状图与直方图
【9月更文挑战第9天】在R语言中,利用`ggplot2`包可绘制多系列柱状图与直方图。首先读取数据文件`data.csv`,加载`ggplot2`包后,使用`ggplot`函数指定轴与填充颜色,并通过`geom_bar`或`geom_histogram`绘图。参数如`stat`, `position`, `alpha`等可根据需要调整,实现不同系列的图表展示。
|
3月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
3月前
|
机器学习/深度学习 算法 前端开发
R语言基础机器学习模型:深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型,各有其独特的优势和适用范围。了解并熟练掌握这两种模型,对于数据科学家和机器学习爱好者来说,无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型,并在实际项目中灵活应用。
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
7月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
7月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
4月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
4月前
|
资源调度 数据挖掘
R语言回归分析:线性回归模型的构建与评估
【8月更文挑战第31天】线性回归模型是统计分析中一种重要且实用的工具,能够帮助我们理解和预测自变量与因变量之间的线性关系。在R语言中,我们可以轻松地构建和评估线性回归模型,从而对数据背后的关系进行深入的探索和分析。