R語言對(duì)S&P500股票指數(shù)進(jìn)行ARIMA + GARCH交易策略|附代碼數(shù)據(jù)
原文鏈接:http://tecdat.cn/?p=7207
在本文中,我想向您展示如何應(yīng)用S&P500股票市場(chǎng)指數(shù)的交易策略(點(diǎn)擊文末“閱讀原文”獲取完整代碼數(shù)據(jù))。
通過組合ARIMA和GARCH模型,從長(zhǎng)期來看,我們可以超過“買入并持有”方法。
策略概述
該策略在“滾動(dòng)”預(yù)測(cè)的基礎(chǔ)上執(zhí)行:
對(duì)于每一天,股票指數(shù)的對(duì)數(shù)收益的前_k_天被用作擬合最佳ARIMA和GARCH模型的窗口。?
組合模型用于對(duì)第二天的收益進(jìn)行預(yù)測(cè)。
如果預(yù)測(cè)為負(fù),則在上一個(gè)收盤時(shí)做空股票,而如果預(yù)測(cè)為正,則做多。
如果預(yù)測(cè)與前一天的方向相同,則什么都不會(huì)改變。
策略實(shí)施
第一個(gè)任務(wù)是在R中安裝和導(dǎo)入必要的庫:
如果已經(jīng)安裝了庫,則可以簡(jiǎn)單地導(dǎo)入它們:
> library(quantmod)
> library(lattice)
> library(timeSeries)
> library(rugarch)
完成后,將把該策略應(yīng)用于S&P500。
然后,我們可以創(chuàng)建標(biāo)準(zhǔn)普爾500的“收盤價(jià)”的對(duì)數(shù)收益率差分序列,并去除初始NA值:
根據(jù)Akaike信息準(zhǔn)則,循環(huán)過程將為我們提供“最佳”擬合ARMA模型,然后我們可以將其用于輸入GARCH模型:
> ? ? final.aic <- Inf
> ? ? final.order <- c(0,0,0)
> ? ? for (p in 0:5) for (q in 0:5) {
> ? ? ? ? if ( p == 0 && q == 0) {
> ? ? ? ? ? ? next
> ? ? ? ? }
>
> ? ? ? ? arimaFit = tryCatch( arima(spReturnsOffset, order=c(p, 0, q)),
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?error=function( err ) FALSE,
> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?warning=function( err ) FALSE )
>
> ? ? ? ? if( !is.logical( arimaFit ) ) {
> ? ? ? ? ? ? current.aic <- AIC(arimaFit)
> ? ? ? ? ? ? if (current.aic < final.aic) {
> ? ? ? ? ? ? ? ? final.aic <- current.aic
> ? ? ? ? ? ? ? ? final.order <- c(p, 0, q)
> ? ? ? ? ? ? ? ? final.arima <- arima(spReturnsOffset, order=final.order)
> ? ? ? ? ? ? }
> ? ? ? ? } else {
> ? ? ? ? ? ? next
> ? ? ? ? }
> ? ? }

如果GARCH模型無法收斂,那么我們只需將日期設(shè)置為產(chǎn)生“長(zhǎng)期”預(yù)測(cè) 。
為了準(zhǔn)備CSV文件的輸出,我創(chuàng)建了一個(gè)字符串,其中包含用逗號(hào)分隔的數(shù)據(jù),并帶有第二天的預(yù)測(cè)方向:
> ? ? if(is(fit, "warning")) {
> ? ? ? forecasts[d+1] = paste(index(spReturnsOffset[windowLength]), 1, sep=",")
> ? ? ? print(paste(index(spReturnsOffset[windowLength]), 1, sep=","))
> ? ? } else {
> ? ? ? fore = ugarchforecast(fit, n.ahead=1)
> ? ? ? ind = fore@forecast$seriesFor
> ? ? ? forecasts[d+1] = paste(colnames(ind), ifelse(ind[1] < 0, -1, 1), sep=",")
> ? ? ? print(paste(colnames(ind), ifelse(ind[1] < 0, -1, 1), sep=","))
> ? ? }
> }
倒數(shù)第二步是將CSV文件輸出 。
確保在與forecasts.csv
文件相同的目錄中運(yùn)行:
forecasts?= open("forecasts.csv",?"r").readlines()
至此,我們已將更正的指標(biāo)文件存儲(chǔ)在中forecasts_new.csv
。
策略結(jié)果
現(xiàn)在,我們已經(jīng)生成了指標(biāo)CSV文件,我們需要將其效果與“買入并持有”進(jìn)行比較。
我們首先從CSV文件中讀取指標(biāo)并將其存儲(chǔ)為spArimaGarch
:
然后,我們將ARIMA + GARCH預(yù)測(cè)的日期與S&P500的原始收益集相交。
一旦獲得ARIMA + GARCH策略的收益,就可以為ARIMA + GARCH模型和“買入并持有”創(chuàng)建資產(chǎn)曲線。最后,我們將它們合并為一個(gè)數(shù)據(jù)結(jié)構(gòu):
> spArimaGarchCurve = log( cumprod( 1 + spArimaGarchReturns ) )
> spBuyHoldCurve = log( cumprod( 1 + spIntersect[,2] ) )
> spCombinedCurve = merge( spArimaGarchCurve, spBuyHoldCurve, all=F )
最后,我們可以在同一圖上繪制兩條收益曲線:
> xyplot(
> ? spCombinedCurve,
> ? superpose=T,
> ? col=c("darkred", "darkblue"),
> ? lwd=2,
> ? key=list(
> ? ? text=list(
> ? ? ? c("ARIMA+GARCH", "Buy & Hold")
> ? ? ),
> ? ? lines=list(
> ? ? ? lwd=2, col=c("darkred", "darkblue")
> ? ? )
> ? )
> )
資產(chǎn)曲線如下:

點(diǎn)擊標(biāo)題查閱往期內(nèi)容

R語言動(dòng)量交易策略分析調(diào)整后的數(shù)據(jù)

轉(zhuǎn)存失敗重新上傳取消
左右滑動(dòng)查看更多

轉(zhuǎn)存失敗重新上傳取消
01

02

03

04

ARIMA + GARCH策略的股票曲線與S&P500的“買入并持有”
如您所見,在65年的時(shí)間里,ARIMA + GARCH策略的表現(xiàn)明顯優(yōu)于“買入并持有”。但是,您還可以看到,大部分收益發(fā)生在1970年至1980年之間。
因此,在將此類模型建立之前將其應(yīng)用于歷史序列真的合適嗎?另一種選擇是開始將模型應(yīng)用于最新數(shù)據(jù)。實(shí)際上,我們可以考慮一下從2005年1月1日至今的最近十年的表現(xiàn):

從2005年至今,ARIMA + GARCH策略與S&P500的“買入并持有”股票曲線
現(xiàn)在,我們已經(jīng)完成了ARIMA和GARCH模型的討論,我想通過考慮長(zhǎng)狀態(tài)空間模型和協(xié)整時(shí)間序列來繼續(xù)進(jìn)行時(shí)間序列分析討論。
時(shí)間序列的這些后續(xù)領(lǐng)域?qū)⑾蛭覀兘榻B一些模型,這些模型可以改善我們的預(yù)測(cè),這將大大提高我們的交易獲利能力和/或降低風(fēng)險(xiǎn)。

本文摘選《R語言對(duì)S&P500股票指數(shù)進(jìn)行ARIMA + GARCH交易策略》,點(diǎn)擊“閱讀原文”獲取全文完整資料。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
R語言ARMA GARCH COPULA模型擬合股票收益率時(shí)間序列和模擬可視化
ARMA-GARCH-COPULA模型和金融時(shí)間序列案例
時(shí)間序列分析:ARIMA GARCH模型分析股票價(jià)格數(shù)據(jù)
GJR-GARCH和GARCH波動(dòng)率預(yù)測(cè)普爾指數(shù)時(shí)間序列和Mincer Zarnowitz回歸、DM檢驗(yàn)、JB檢驗(yàn)
【視頻】時(shí)間序列分析:ARIMA-ARCH / GARCH模型分析股票價(jià)格
時(shí)間序列GARCH模型分析股市波動(dòng)率
PYTHON用GARCH、離散隨機(jī)波動(dòng)率模型DSV模擬估計(jì)股票收益時(shí)間序列與蒙特卡洛可視化
極值理論 EVT、POT超閾值、GARCH 模型分析股票指數(shù)VaR、條件CVaR:多元化投資組合預(yù)測(cè)風(fēng)險(xiǎn)測(cè)度分析
Garch波動(dòng)率預(yù)測(cè)的區(qū)制轉(zhuǎn)移交易策略
金融時(shí)間序列模型ARIMA 和GARCH 在股票市場(chǎng)預(yù)測(cè)應(yīng)用
時(shí)間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價(jià)格
R語言風(fēng)險(xiǎn)價(jià)值:ARIMA,GARCH,Delta-normal法滾動(dòng)估計(jì)VaR(Value at Risk)和回測(cè)分析股票數(shù)據(jù)
R語言GARCH建模常用軟件包比較、擬合標(biāo)準(zhǔn)普爾SP 500指數(shù)波動(dòng)率時(shí)間序列和預(yù)測(cè)可視化
Python金融時(shí)間序列模型ARIMA 和GARCH 在股票市場(chǎng)預(yù)測(cè)應(yīng)用
MATLAB用GARCH模型對(duì)股票市場(chǎng)收益率時(shí)間序列波動(dòng)的擬合與預(yù)測(cè)
R語言GARCH-DCC模型和DCC(MVT)建模估計(jì)
Python 用ARIMA、GARCH模型預(yù)測(cè)分析股票市場(chǎng)收益率時(shí)間序列
R語言中的時(shí)間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價(jià)格
R語言ARIMA-GARCH波動(dòng)率模型預(yù)測(cè)股票市場(chǎng)蘋果公司日收益率時(shí)間序列
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進(jìn)行股價(jià)預(yù)測(cè)
R語言時(shí)間序列GARCH模型分析股市波動(dòng)率
R語言ARMA-EGARCH模型、集成預(yù)測(cè)算法對(duì)SPX實(shí)際波動(dòng)率進(jìn)行預(yù)測(cè)
matlab實(shí)現(xiàn)MCMC的馬爾可夫轉(zhuǎn)換ARMA - GARCH模型估計(jì)
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進(jìn)行股價(jià)預(yù)測(cè)
使用R語言對(duì)S&P500股票指數(shù)進(jìn)行ARIMA + GARCH交易策略
R語言用多元ARMA,GARCH ,EWMA, ETS,隨機(jī)波動(dòng)率SV模型對(duì)金融時(shí)間序列數(shù)據(jù)建模
R語言股票市場(chǎng)指數(shù):ARMA-GARCH模型和對(duì)數(shù)收益率數(shù)據(jù)探索性分析
R語言多元Copula GARCH 模型時(shí)間序列預(yù)測(cè)
R語言使用多元AR-GARCH模型衡量市場(chǎng)風(fēng)險(xiǎn)
R語言中的時(shí)間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價(jià)格
R語言用Garch模型和回歸模型對(duì)股票價(jià)格分析
GARCH(1,1),MA以及歷史模擬法的VaR比較
matlab估計(jì)arma garch 條件均值和方差模型
R語言POT超閾值模型和極值理論EVT分析