寫給你的金融時間序列分析:補(bǔ)完篇
發(fā)布時間:2019-08-09 | 來源: 川總寫量化
作者:石川
摘要:本文介紹時間序列分析中的 GARCH 模型,闡述使用 mean model 和 volatility model 對收益率序列聯(lián)合建模的方法。
1?引言
兩年前,我們推出了《寫給你的金融時間序列分析》系列,通過四篇文章介紹了金融數(shù)據(jù)時序分析建模的基礎(chǔ)知識。這四篇文章的內(nèi)容分別為:
基礎(chǔ)篇:介紹金融時序特性和進(jìn)行時間序列分析的目的;解釋時間序列分析中的核心概念:自相關(guān)性。
初級篇:說明時間序列建模的過程;介紹時間序列分析中的最基本模型:白噪聲和隨機(jī)游走。
進(jìn)階篇:介紹時間序列分析中常用的線性模型:AR、MA 以及 ARMA。
應(yīng)用篇:利用 ARMA 對上證指數(shù)收益率序列建模,并以此產(chǎn)生交易信號、構(gòu)建投資策略,以此說明時間序列分析在量化投資領(lǐng)域的應(yīng)用。
通過前述四篇文章的介紹可知,金融時間序列分析的核心是找到資產(chǎn)收益率序列的自相關(guān)性,并利用它。以 2012 年 1 月 1 日到 2019 年 7 月 31 日上證指數(shù)日頻對數(shù)收益率為例,假設(shè)使用 ARMA(3, 2) 對其建模,并考察其殘差。下圖展示了殘差時序以及它的 ACF 和 Partial ACF(PACF)。
從 ACF 和 PACF 上不難看出,在很多 lags 上,自相關(guān)系數(shù)是超過 95% 的置信區(qū)間的;而從最上面一副圖中也能明顯看出收益率序列的一大特征 —— 波動率聚類。如果把殘差取平方,并再次作圖,上述波動率聚類則會變得更加直觀。它在數(shù)學(xué)上被稱為條件異方差(conditional heteroskedasticity)。
上述結(jié)果意味著,僅使用 ARMA 對收益率序列建模是不夠的,它對條件異方差無能為力。為了解決這個問題需要對波動率建模,即使用 Generalized Autoregressive Conditional Heteroskedasticity(GARCH)模型。不介紹 GARCH 的時間序列分析系列大抵是不完整的;此外也有小伙伴留言說能不能寫寫 GARCH。所以今天就來補(bǔ)作業(yè)了,也因此給這篇文章起了個“補(bǔ)完篇”的名字。
考慮到本系列前四篇“狠狠”的參考了 quantstart.com 上相關(guān)文章的“優(yōu)良傳統(tǒng)”,我在本文第 3 小節(jié)介紹 GARCH 的數(shù)學(xué)模型時也會再次借鑒(參考文獻(xiàn)中有鏈接)。最后,再給 quantstart.com 打個 call(必須給足它 credits),它上面的所有文章都非常值得一讀。下文以資產(chǎn)收益率序列作為研究對象,介紹相關(guān)概念:第 2 節(jié)解釋模型的結(jié)構(gòu);第 3 節(jié)介紹 ARCH 和 GARCH 的數(shù)學(xué)背景知識;第 4 節(jié)說明如何使用 ARMA 和 GARCH 對收益率的條件均值和條件方差進(jìn)行聯(lián)合建模;第 5 節(jié)針對上證指數(shù)做簡單實證;第 6 節(jié)總結(jié)全文。
2?模型的結(jié)構(gòu)
首先來看看“條件異方差”一詞。波動率聚類說明不同階段收益率的方差是不同的,這就是異方差性(heteroskedastic)。而很多時候,資產(chǎn)收益率表現(xiàn)出高波動伴隨著高波動時期(大牛市或者股災(zāi)的時候),而低波動又往往伴隨著低波動,因此波動率之間是存在序列相關(guān)性的,這就是“條件”一詞的來源。將二者結(jié)合就有了條件異方差。
使用 GARCH 建模,是為了在 r_t 的線性自相關(guān)性之上考慮其方差之間的相關(guān)性,即把均值模型和波動率模型放在一個整體框架中考慮(Tsay 2010)。假設(shè) t – 1 時刻所有已知的信息為 F_{t-1},則當(dāng)給定 F_{t-1} 時,t 時刻收益率的條件均值和條件方差可寫為:
對于條件均值 μ_t,它可以是一個常數(shù),也可以使用我們已經(jīng)掌握的 ARMA 模型對其建模。一旦有了 μ_t 的模型,r_t 可以寫作:
上式中 ε_t 是 t 時刻的擾動或者新息。結(jié)合上式和條件方差的定義可知,t 時刻收益率 r_t 的條件方差由 ε_t 的方差決定:
從模型結(jié)構(gòu)不難看出,為了考慮條件異方差則需要對 ε_t 建模,而這正是 GARCH 的目標(biāo)。
3?ARCH 和 GARCH
在介紹 GARCH 之前不妨先來看看 ARCH,畢竟 GARCH 只是在它前面加了一個 G(generalized)從而將其推廣了。ARCH 由 Engle (1982) 提出,它是第一個對波動率建模的系統(tǒng)性框架。對于 ε_t,考慮如下模型(其中 ω_t 表示均值為 0、方差為 1 的白噪聲):
把 σ_t 的表達(dá)式帶回到 ε_t 中可得:
這個關(guān)于序列 {ε_t} 的模型稱作一階自回歸條件異方差模型,也就是最簡單的 ARCH(1) 過程 —— 括號里的系數(shù) 1 表明自回歸模型中只考慮了 lag = 1 階。為了直觀看出方差序列之間的關(guān)系,將上式兩邊平方:
上式清晰的顯示了 var(ε_t) 和 var(ε_{t-1}) 之間的關(guān)系。前面我們提到,{ε_t} 的模型是一個 ARCH(1) 過程。從 var(ε_t) 和 var(ε_{t-1}) 的關(guān)系可知,一個 ARCH(1) 過程的方差 —— 即 var(ε_t) —— 正是一個 AR(1),即一階自回歸過程。接下來我們照貓畫虎,將 ARCH(1) 簡單推廣到多階 lags,就得到 ARCH(p) 過程:
類似的,我們可以說一個 ARCH(p) 過程的方差是一個 AR(p),即 p 階自回歸過程;這相當(dāng)于對方差使用 AR(p) 來建模。既然能對方差用 AR(p) 來建模,那么很自然的一個問題就是,為什么不把 MA(q) 也加上得到方差的 ARMA(p, q) 模型呢?如此便引出了 GARCH(p, q)。對于 ε_t,考慮如下模型:
這就是大名鼎鼎的 GARCH(p, q) 模型 —— (p, q) 階的廣義自回歸條件異方差模型。有了 GARCH 我們就可以用它對收益率建模了。
4?使用 ARMA + GARCH 建模
本小節(jié)來看看如何在第二節(jié)介紹的體系下使用 ARMA(p, q) 和 GARCH(p', q') 來對 r_t 進(jìn)行聯(lián)合建模。為了區(qū)分條件均值模型和條件方差模型中的自回歸階數(shù),我特意用了 (p, q) 和 (p', q') 表示。將前面的內(nèi)容整合到一起得到關(guān)于 r_t 的模型如下:
當(dāng)我們對 r_t 建模時,需要同時指定 mean model(對 μ_t 建模)以及 volatility model(對 ε_t 建模)。上式使用了 ARMA(p, q) 作為 mean model,但根據(jù)實際問題也可以使用更簡單的模型,比如 μ_t = 常數(shù);使用了 GARCH(p', q') 作為 volatility model。最后使用已有的數(shù)據(jù)對這兩個模型的參數(shù)進(jìn)行聯(lián)合估計。在實際應(yīng)用中,無論使用 python 還是 R 的相關(guān) package,在調(diào)用時都要指定 mean model 和 volatility model。舉個例子,在 quantstart.com 上一篇使用 ARMA 對 mean 建模、用 GARCH 對 volatility 建模來交易 S&P500 指數(shù)的例子中,作者對兩個模型同時進(jìn)行了設(shè)定。
在具體 GARCH 建模時可以遵如下步驟(Tsay 2010):
1. 使用 ARMA 對 r_t 建模以消除任何線性依賴,確定最優(yōu)參數(shù) p 和 q(可以利用 AIC/BIC 來確定);
2. 對上述模型的殘差進(jìn)行 GARCH 分析;
3. 如果殘差中表現(xiàn)出顯著的條件異方差,則給定一個波動模型 GARCH(p', q');
4. 使用歷史數(shù)據(jù)對第一步中的 ARMA(p, q) 和第三步中的 GARCH(p', q') 進(jìn)行聯(lián)合參數(shù)估計;
5. 仔細(xì)檢驗第四步中擬合出的模型,如有必要則對其進(jìn)行修改。
以上五步構(gòu)成了對條件均值和條件方差的聯(lián)合建模,使用得到的模型就可以對未來的 r_t 以及 var(r_t) 進(jìn)行預(yù)測。在離開本節(jié)之前,我們再來介紹兩個使用 GARCH 建模時不十分正確的做法(希望能幫你排雷)。
錯誤做法一:用 ARMA(p, q) 的階數(shù)作為 GARCH(p', q') 的階數(shù)
網(wǎng)上一些資料中提過這樣的做法:首先是用 ARMA 對 r_t 建模、確定最優(yōu)的參數(shù) p 和 q;然后將它們作為波動率模型的階數(shù),即 GARCH(p, q),同時在聯(lián)合建模時僅假設(shè) mean model = constant。這種做法使用從 r_t 線性關(guān)系找到的 p 和 q 去對 r_t 的波動率的關(guān)系建模,然后又假設(shè) mean model 是常數(shù),著實令人費(fèi)解。
錯誤做法二:將 mean model 和 volatility model 拆開估計
這種做法聽上去更“靠譜”一些。首先是用 ARMA 對 r_t 建模,確定最優(yōu)參數(shù) p 和 q;然后使用 ARMA 模型的殘差為被解釋變量,對其進(jìn)行 GARCH(p', q') 建模;第二步中因為被解釋變量是殘差,因此 GARCH 模型的 mean model = 0,即假設(shè)殘差均值為零。這種做法看似合理,但是從條件均值角度來說,它也僅僅是利用了 ARMA 這一步(第二步的 GARCH 建模由于假設(shè) mean model = 0 因此對條件均值不再有影響),而沒有利用 ARMA + GARCH 的聯(lián)合估計考察異方差對收益率序列的影響。通常來說,就 ARMA 的參數(shù)而言,僅使用 ARMA 和聯(lián)合使用 ARMA + GARCH 的結(jié)果是有差異的。
舉個例子:使用 AR(2) 和 AR(2) + GARCH(1, 1) 兩種方法對收益率建模。
插播一句:有小伙伴可能會問,為什么用 AR 不用 ARMA。這是因為 python 中的 arch package 目前所支持的 mean model 中不包括 ARMA 模型,但包括 AR 模型。R 在這方面支持的更強(qiáng)大一些。
OK,回到例子。下表展示了兩種方法建模時,AR(2) 的參數(shù),可以看出它們之間的差異。
所以,GARCH 模型雖好,但是 use with care。我們應(yīng)時刻搞清楚是在對什么建模、怎么建模,mean model 是什么、volatility model 又是什么。
5?簡單實證
最后通過一個 toy example 來介紹 ARMA + GARCH 的應(yīng)用。以下對上證指數(shù)自 2012 年 1 月到 2019 年 7 月的日頻對數(shù)收益率進(jìn)行時間序列建模,并使用該模型預(yù)測下一個交易的收益率。如果預(yù)測為正則選擇持有上證指數(shù),反之則空倉;假設(shè)以收盤價成交且不考慮任何交易成本。在構(gòu)建策略時,采用長度為 T 的滾動窗口歷史數(shù)據(jù)。首先是用 AR 對收益率建模(因為 python arch package 不支持 ARMA 作為 mean model,所以僅使用 AR(p) 模型),并根據(jù) AIC 選擇最優(yōu) p 值(p 取值范圍為 0 到 5);然后以該 AR(p) 作為 mean model,并使用 GARCH(1, 1) 模型為 volatility model,進(jìn)行聯(lián)合參數(shù)估計。使用最終的模型預(yù)測下一個交易日收益率。此外作為比較,我們也考慮僅采用 AR(p) 來對收益率建模,而不考慮條件異方差的影響。
首先來看 T = 60 個交易日的情況。下圖展示了 AR 和 AR + GARCH 兩種策略的凈值和回撤曲線。就表現(xiàn)而言,它們均戰(zhàn)勝了上證指數(shù)本身(benchmark)。但是在股災(zāi)之后(波動率變大了),這兩種模型的表現(xiàn)發(fā)生了分化,就這個簡單實證而言,AR 的效果比 AR + GARCH 更好。
再來看看把滾動窗口長度換到 T = 252 的情況。結(jié)果和上面接近,依然是 AR 戰(zhàn)勝了 AR + GARCH 的組合。
從本小節(jié)的例子來看,加入了 GARCH 的策略似乎并沒有僅使用 AR 的策略優(yōu)異。我在最后的結(jié)語部分對此做簡單評價。
6?結(jié)語
作為“補(bǔ)完篇”,本文填了《寫給你的金融時間序列分析》最后一個大坑 —— GARCH;寫作的重點(diǎn)在于闡述使用 mean model 和 volatility model 對收益率序列聯(lián)合建模,以及在一個整合的框架下對兩種模型的參數(shù)進(jìn)行聯(lián)合估計。本文的第 5 節(jié)給出了一個簡單實證。因 python arch package 的功能所限,實證中的 mean model 僅采用了 AR 模型。感興趣的小伙伴不妨嘗試 R 的相關(guān) packages。從實證結(jié)果來看,加入 GARCH 似乎沒什么效果。但不要忘了,我們并沒有對 GARCH 的參數(shù)進(jìn)行任何優(yōu)化,也沒有額外利用其對波動率的建模來添加更加復(fù)雜的規(guī)則 —— 比如 volatility scaling。因此,僅僅基于這個簡單的例子難以對 GARCH 的貢獻(xiàn)做出任何正確的評判。
對于量化投資的研究來說,構(gòu)建出策略并看到回測出來的凈值曲線無疑是最令人激動的。然而,真正研究工作的核心卻在于搞懂每個模型的原理以及它的作用,而這個過程注定是枯燥的。Quantstart Team 在其時間序列分析系列文章(以及其他系列)中不厭其煩的介紹每個基礎(chǔ)模型,從簡單到復(fù)雜,像搭積木一樣為讀者構(gòu)建知識體系,令人敬佩。現(xiàn)在,我們有了時間序列分析的各個 building blocks。但是,能夠用它們做什么、如何去更科學(xué)的對收益率分析、預(yù)測,還需有經(jīng)驗的積累。最后,我想以下面這段出自 Quantstart 的話作為本系列的結(jié)束,也希望與各位共勉。
True quantitative trading research is careful, measured and takes significant time to get right. There is no quick fix or "get rich scheme" in quant trading.
參考文獻(xiàn)
Engle, R. F. (1982). Autoregressive conditional heteroscedasticity with estimates of the variance of United Kingdom inflation. Econometrica 50(4), 987 – 1008.
Tsay, R. S. (2010). Analysis of Financial Time Series (3rd ed). Wiley.
免責(zé)聲明:入市有風(fēng)險,投資需謹(jǐn)慎。在任何情況下,本文的內(nèi)容、信息及數(shù)據(jù)或所表述的意見并不構(gòu)成對任何人的投資建議。在任何情況下,本文作者及所屬機(jī)構(gòu)不對任何人因使用本文的任何內(nèi)容所引致的任何損失負(fù)任何責(zé)任。除特別說明外,文中圖表均直接或間接來自于相應(yīng)論文,僅為介紹之用,版權(quán)歸原作者和期刊所有。