使用R語言對S&P500股票指數進行ARIMA + GARCH交易策略

原文連接:http://tecdat.cn/?p=7207

在本文中,我想向您展現如何應用S&P500股票市場指數的交易策略。算法

經過組合ARIMAGARCH模型,從長期來看,咱們能夠超過「買入並持有」方法。網絡

策略概述

該策略在「滾動」預測的基礎上執行:數據結構

  1. 對於每一天,股票指數的對數收益的前_k_天被用做擬合最佳ARIMA和GARCH模型的窗口。 
  2. 組合模型用於對次日的收益進行預測。
  3. 若是預測爲負,則在上一個收盤時作空股票,而若是預測爲正,則作多。
  4. 若是預測與前一天的方向相同,則什麼都不會改變。

策略實施

第一個任務是在R中安裝和導入必要的庫:spa

若是已經安裝了庫,則能夠簡單地導入它們:code

> library(quantmod)
> library(lattice)
> library(timeSeries)
> library(rugarch)

完成後,將把該策略應用於S&P500。 blog

而後,咱們能夠建立標準普爾500的「收盤價」的對數收益率差分序列,並去除初始NA值:遞歸

根據Akaike信息準則,循環過程將爲咱們提供「最佳」擬合ARMA模型,而後咱們能夠將其用於輸入GARCH模型:rem

>     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模型沒法收斂,那麼咱們只需將日期設置爲產生「長期」預測 。 字符串

爲了準備CSV文件的輸出,我建立了一個字符串,其中包含用逗號分隔的數據,並帶有次日的預測方向:get

>     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=",")) 
>     }
> }

倒數第二步是將CSV文件輸出 。

確保在與forecasts.csv文件相同的目錄中運行:

forecasts = open("forecasts.csv", "r").readlines()

至此,咱們已將更正的指標文件存儲在中forecasts_new.csv

策略結果

如今,咱們已經生成了指標CSV文件,咱們須要將其效果與「買入並持有」進行比較。

咱們首先從CSV文件中讀取指標並將其存儲爲spArimaGarch

而後,咱們將ARIMA + GARCH預測的日期與S&P500的原始收益集相交。

一旦得到ARIMA + GARCH策略的收益,就能夠爲ARIMA + GARCH模型和「買入並持有」建立資產曲線。最後,咱們將它們合併爲一個數據結構:

> 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")
>     )
>   )
> )

資產曲線以下:

ARIMA + GARCH策略的股票曲線與S&P500的「買入並持有」

如您所見,在65年的時間裏,ARIMA + GARCH策略的表現明顯優於「買入並持有」。可是,您還能夠看到,大部分收益發生在1970年至1980年之間。

所以,在將此類模型創建以前將其應用於歷史序列真的合適嗎?另外一種選擇是開始將模型應用於最新數據。實際上,咱們能夠考慮一下從2005年1月1日至今的最近十年的表現:

從2005年至今,ARIMA + GARCH策略與S&P500的「買入並持有」股票曲線

如今,咱們已經完成了ARIMA和GARCH模型的討論,我想經過考慮長狀態空間模型和協整時間序列來繼續進行時間序列分析討論。

時間序列的這些後續領域將向咱們介紹一些模型,這些模型能夠改善咱們的預測,這將大大提升咱們的交易獲利能力和/或下降風險。


參考文獻

1.HAR-RV-J與遞歸神經網絡(RNN)混合模型預測和交易大型股票指數的高頻波動率

2.R語言中基於混合數據抽樣(MIDAS)迴歸的HAR-RV模型預測GDP增加

3.波動率的實現:ARCH模型與HAR-RV模型

4.R語言ARMA-EGARCH模型、集成預測算法對SPX實際波動率進行預測

5.GARCH(1,1),MA以及歷史模擬法的VaR比較

6.R語言多元COPULA GARCH 模型時間序列預測

7.R語言基於ARMA-GARCH過程的VAR擬合和預測

8.matlab預測ARMA-GARCH 條件均值和方差模型

9.R語言對S&P500股票指數進行ARIMA + GARCH交易策略

相關文章
相關標籤/搜索