R語言基于Garch波動率預(yù)測的區(qū)制轉(zhuǎn)移交易策略
原文鏈接:http://tecdat.cn/?p=17526
原文出處:拓端數(shù)據(jù)部落公眾號
?
本文提出了一種算法,可以根據(jù)市場波動性在均值回歸和趨勢跟隨策略之間進行切換。研究了兩種模型:一種使用歷史波動率,另一種使用Garch(1,1)波動率預(yù)測。均值回歸策略使用RSI(2)建模:RSI(2)時為Long,否則為Short。趨勢跟蹤策略以SMA 50/200交叉建模:當(dāng)SMA(50)> SMA(200)時為Long,否則為Short。
以下代碼從Yahoo Fiance加載歷史價格,并比較買入和持有,均值回歸和趨勢跟蹤策略的效果:
????#*****************************************************************
????# 加載歷史數(shù)據(jù)
????#******************************************************************
????load.packages('quantmod')??
????tickers = 'SPY'
?
????data <- new.env()
????getSymbols(tickers, src = 'yahoo', from = '1970-01-01', env = data, auto.assign = T)
???????
????#*****************************************************************
????# 代碼策略
????#******************************************************************
????prices = d
????# 購買并持有
????data$weight[
?????????
????# 均值回歸(MR)策略
????rsi2 = bt.apply.ma
?????????
????# 趨勢跟蹤(TF)策略
????sma.short = apply.matrix(prices, SMA, 50)
????sma.long = apply.matrix(prices, SMA, 200)
????data$weight[] = NA
????#*****************************************************************
????# 創(chuàng)建報告
????#******************************************************************
????plotb
??

?
接下來,讓我們創(chuàng)建一個基于歷史市場波動性在均值回歸和趨勢跟隨策略之間切換的策略。
#*****************************************************************
#根據(jù)歷史市場波動情況進行區(qū)制轉(zhuǎn)移
#使用252天的回溯期按百分比對當(dāng)前波動率進行分類
#******************************************************************
?
# #區(qū)制轉(zhuǎn)移歷史
data$weight[] = NA
????data$weight[] = iif(vol.rank > 0.5,
????????????????iif(rsi2 <
l=capital, trade.summary=T)
?
#*****************************************************************
#創(chuàng)建報告
#******************************************************************
report(regime, mr)
??
?

?
接下來,我們創(chuàng)建一個GARCH(1,1)波動率預(yù)測。
有一些R包可以適合GARCH模型。我將考慮tseries軟件包中的garch函數(shù)和fGarch軟件包中的garchFit函數(shù)。tseries軟件包中的garch函數(shù)速度很快,但并不總能找到解決方案。fGarch軟件包中的garchFit函數(shù)速度較慢,但收斂得更加一致。為了演示garch函數(shù)和garchFit函數(shù)之間的速度差異,我創(chuàng)建了一個簡單的基準(zhǔn)測試:
#*****************************************************************
# 基準(zhǔn)化Garch算法
#******************************************************************
temp = garchSim(n=252)
?
test1 <- function() {
????fit1=garch(temp, order = c(1, 1), control = garch.control(trace = F))
}
test2 <- function() {
????fit2=garchFit(~ garch(1,1), data = temp, include.mean=FALSE, trace=F)
}
?????????
benchmark(
????test1(),
????test2(),
????columns=
)
?
garchFit函數(shù)平均比garch函數(shù)慢6倍。因此,要預(yù)測波動率,我將嘗試在找到解決方案時使用garch函數(shù),否則將嘗試使用garchFit函數(shù)。
#*****************************************************************
#使用Garch預(yù)測波動率
#來自tseries的garch速度很快,但是并不能始終收斂
#fGarch的garchFit速度較慢,但收斂一致
#******************************************************************
load.packages('tseries,fGarch')
?????????
# Sigma[t]^2 = w + a* Sigma[t-1]^2 + b*r[t-1]^2
garch.predict.one.day <- function(fit, r1) {
????hl = tail( fitted(fit)[,1] ,1)????
?
# 與預(yù)測相同( fit, n.ahead=1, doplot=F)[3]
garchFit.predict.one.day <- funct
?
garch.vol = NA * hist.vol
for( i in (252+1):nperiods
err ) FALSE, warning=function( warn ) FALSE )
?????????????????????
????if( !is.logical( fit
garch(1,1), data = temp, include.mean=FALSE, trace=F),
????????????????????error=function( err ) FALSE, warning=function( warn ) FALSE )
?????????????????????
????????if( !is.logical(
現(xiàn)在,讓我們創(chuàng)建一個基于GARCH(1,1)波動率預(yù)測在均值回歸和趨勢跟蹤策略之間切換的策略。
#*****************************************************************
# 使用Garch進行區(qū)制轉(zhuǎn)移
#******************************************************************????????
vol.rank = percent.rank(SMA(percent.rank(garch.v
# 區(qū)制轉(zhuǎn)移Garch
data$weight[] = NA
????data$weight[] = iif(vol.rank > 0.5,
????????????????iif(rsi2 < 50, 1, -1),
????????????????iif(sma.short > sma.l
#*****************************************************************
#創(chuàng)建報告
#******************************************************************
report(regime.switching)

?
?
使用GARCH(1,1)波動率預(yù)測的轉(zhuǎn)換策略要比使用歷史波動率的策略稍好。?
您可以采用多種不同的方法將預(yù)測合并到模型和交易策略中。R有非常豐富的軟件包集,用于建模和預(yù)測時間序列。?

最受歡迎的見解
1.HAR-RV-J與遞歸神經(jīng)網(wǎng)絡(luò)(RNN)混合模型預(yù)測和交易大型股票指數(shù)的高頻波動率
2.R語言中基于混合數(shù)據(jù)抽樣(MIDAS)回歸的HAR-RV模型預(yù)測GDP增長
3.波動率的實現(xiàn):ARCH模型與HAR-RV模型
4.R語言ARMA-EGARCH模型、集成預(yù)測算法對SPX實際波動率進行預(yù)測
5.GARCH(1,1),MA以及歷史模擬法的VaR比較
6.R語言多元COPULA GARCH 模型時間序列預(yù)測
7.R語言基于ARMA-GARCH過程的VAR擬合和預(yù)測
8.matlab預(yù)測ARMA-GARCH 條件均值和方差模型
9.R語言對S&P500股票指數(shù)進行ARIMA + GARCH交易策略
