拓端tecdat|R語言HAR和HEAVY模型分析高頻金融數(shù)據(jù)波動率
原文鏈接:http://tecdat.cn/?p=19129
原文出處:拓端數(shù)據(jù)部落公眾號
摘要
在學術(shù)界和金融界,分析高頻財務(wù)數(shù)據(jù)的經(jīng)濟價值現(xiàn)在顯而易見。它是每日風險監(jiān)控和預(yù)測的基礎(chǔ),也是高頻交易的基礎(chǔ)。為了在財務(wù)決策中高效利用高頻數(shù)據(jù),高頻時代采用了最先進的技術(shù),用于清洗和匹配交易和報價,以及基于高收益的流動性的計算和預(yù)測。
高頻數(shù)據(jù)的處理
在本節(jié)中,我們討論高頻金融數(shù)據(jù)處理中兩個非常常見的步驟:(i)清理和(ii)數(shù)據(jù)聚合。
?
> 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
高頻數(shù)據(jù)的匯總
通常不會在等間隔的時間點記錄價格,而許多實際波動率衡量方法都依賴等實際間隔的收益。有幾種方法可以將這些異步和/或不規(guī)則記錄的序列同步為等距時間數(shù)據(jù)。
最受歡迎的方法是按照時間匯總,它通過獲取每個網(wǎng)格點之前的最后價格來將價格強制為等距網(wǎng)格。
> # 加載樣本價格數(shù)據(jù)
> 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
在上面的示例中,價格被強制設(shè)置為5分鐘和30秒的等距時間網(wǎng)格。此外,aggregates函數(shù)內(nèi)置于所有已實現(xiàn)的度量中,可以通過設(shè)置參數(shù)align.by和align.period來調(diào)用該函數(shù)。在這種情況下,首先將價格強制等間隔的常規(guī)時間網(wǎng)格,然后根據(jù)這些常規(guī)時間段內(nèi)執(zhí)行觀察值的收益率來計算實際度量。這樣做的優(yōu)點是,用戶可以將原始價格序列輸入到實際度量中,而不必擔心價格序列的異步性或不規(guī)則性。
帶有時間和波動率計算的價格示例:
> #我們假設(shè)stock1和stock2包含虛擬股票的價格數(shù)據(jù):
> #匯總到一分鐘:
> Price_1min = cbind(aggregatePrice(stock1),aggregatePrice(stock2));
> #刷新時間聚合:
refreshTime(list(stock1,stock2));
> #計算跳躍魯棒的波動性指標
> #基于同步數(shù)據(jù)
rBPCov(Price_1min,makeReturns=TRUE);
> #計算跳躍和噪聲魯棒的波動性度量
> #基于非同步數(shù)據(jù):
實際波動性度量
高頻數(shù)據(jù)的可用性使研究人員能夠根據(jù)日內(nèi)收益的平方來估計實際波動性(Andersen等,2003)。實際上,單變量波動率估計的主要挑戰(zhàn)是應(yīng)對(i)價格的上漲和(ii)微觀結(jié)構(gòu)噪聲。因此多變量波動率估計也引起了人們的注意。高頻軟件包實施了許多新近提出的實際波動率方法。
下面的示例代碼說明了日內(nèi)周期的估計:
> #計算并繪制日內(nèi)周期
> 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

波動性預(yù)測
學術(shù)研究人員普遍認為,如果進行適當?shù)墓芾?,對高頻數(shù)據(jù)的訪問將帶來優(yōu)勢,可以更好地預(yù)測未來價格變化的波動性。早在2003年Fleming等人(2003年)估計,投資者將愿意每年支付50到200個點,來預(yù)測投資組合績效的收益,這是通過使用高頻收益率而不是每日收益率來進行波動率預(yù)測的。?
盡管HAR和HEAVY模型的目標相同,即對條件波動率進行建模,但它們采用的方法不同。HAR模型專注于預(yù)測收盤價變化。HAR模型的主要優(yōu)點是,它易于估計(因為它本質(zhì)上是一種可以用最小二乘方估計的線性模型), HEAVY模型的主要優(yōu)點在于,它可以模擬收盤價和收盤價的條件方差。此外,HEAVY模型具有動量和均值回歸效應(yīng)。與HAR模型相反,HEAVY模型的估計是通過正態(tài)分布的最大似然來完成的。接下來的本文更詳細地介紹HAR模型和HEAVY模型,當然還要討論并說明如何使用高頻收益率來估計這些模型。
?
HAR模型
示例
將HARRV模型擬合到道瓊斯工業(yè)指數(shù),我們加載每日實際波動率。
> #每天獲取樣本實際波動率數(shù)據(jù)
> DJI_RV = realized$DJI; #選擇 DJI
> DJI_RV = DJI_RV[!is.na(DJI_RV)]; #刪除缺失值
第二步,我們計算傳統(tǒng)的異構(gòu)自回歸(HAR)模型。由于HAR模型只是線性模型的一種特殊類型,因此也可以通過以下方式實現(xiàn):harModel函數(shù)的輸出是lm的子級harModel lm,線性模型的標準類。圖繪制了harModel函數(shù)的輸出對象,水平軸上有時間,在垂直軸上有觀察到的實際波動率和預(yù)測的實際波動率(此分析是在樣本中進行的,但是模型的估計系數(shù)可以顯然用于樣本外預(yù)測)。從圖的檢查中可以清楚地看出,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的更復(fù)雜版本。例如,在Andersen等人中討論的HARRVCJ模型??梢允褂檬纠龜?shù)據(jù)集估算,如下所示:
> data = makeReturns(data); #獲取高頻收益數(shù)據(jù)
> 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
最后一個示例是僅將日內(nèi)收益作為輸入就可以估算的一種特殊類型HAR模型。
HEAVY模型
將HEAVY模型擬合到道瓊斯工業(yè)平均指數(shù)。第一步,我們加載道瓊斯工業(yè)平均指數(shù)。然后,我們從該庫中選擇每日收益和每日實際核估計(Barndorff-Nielsen等,2004)。現(xiàn)在,作為HeavyModel輸入的數(shù)據(jù)矩陣的第一列為收益率,第二列為Realized Kernel估計值。我們進一步將參數(shù)設(shè)置為采樣期內(nèi)日收益率和平均實際核估計方差?,F(xiàn)在,我們來估算HEAVY模型。根據(jù)模型的輸出,圖繪制了由模型中的第二個方程式估算的條件方差。
> # heavy模型在DJI上的實現(xiàn):
> 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

流動性
交易量和價格
交易量和價格通常作為單獨的數(shù)據(jù)對象提供。對于許多與交易數(shù)據(jù)有關(guān)的研究和實際問題,需要合并交易量和價格。由于交易量和價格可能會收到不同的報告滯后影響,因此這不是一個簡單的操作(Leeand Ready 1991)。函數(shù)matchTradesQuotes可用于匹配交易量和價格。根據(jù)Vergote(2005)的研究,我們將價格設(shè)置為2秒作為默認值。
流動性衡量
可以使用函數(shù)tqLiquidity根據(jù)匹配的交易量和價格數(shù)據(jù)計算流動性指標。表中計算了主要實現(xiàn)的流動性衡量指標,并且可以用作函數(shù)tqLiquidity的參數(shù)。
以下示例說明了如何:(i)匹配交易和報價,(ii)獲取交易方向,以及(iii)計算流動性衡量指標。
> #加載數(shù)據(jù)樣本
> #匹配交易量和價格數(shù)據(jù)
> tqdata = matchTradesQuotes(tdata,qdata);
> #在tqdata中顯示信息
> colnames(tqdata)[1:6];
[1] "SYMBOL" "EX" "PRICE" "SIZE" "COND" "CORR"
> #根據(jù)Lee-Ready規(guī)則推斷的交易方向
> #計算有效價差
> es = tqLiquidity(tqdata,type="es");

最受歡迎的見解
1.HAR-RV-J與遞歸神經(jīng)網(wǎng)絡(luò)(RNN)混合模型預(yù)測和交易大型股票指數(shù)的高頻波動率
2.WinBUGS對多元隨機波動率模型:貝葉斯估計與模型比較
3.波動率的實現(xiàn):ARCH模型與HAR-RV模型
4.R語言ARMA-EGARCH模型、集成預(yù)測算法對SPX實際波動率進行預(yù)測
5.使用R語言隨機波動模型SV處理時間序列中的隨機波動率
6.R語言多元COPULA GARCH 模型時間序列預(yù)測
7.R語言基于ARMA-GARCH過程的VAR擬合和預(yù)測
8.R語言隨機搜索變量選擇SSVS估計貝葉斯向量自回歸(BVAR)模型
9.R語言對S&P500股票指數(shù)進行ARIMA + GARCH交易策略