寫給你的金融時間序列分析:應用篇

寫給你的金融時間序列分析:應用篇

來自專欄川流不息9 人贊了文章

1 書接前文

《寫給你的金融時間序列分析》系列想通過一系列文章使讀者了解金融時間序列的特點、熟悉金融時間序列分析的目的、並使用線性但實用的時間序列分析模型對投資品收益率進行預測並以此制定量化投資策略。

在本系列之前的三篇文章中,我們以對收益率建模為目標,按部就班的解釋了為實現這個目標所需要的每一塊「積木」。作為回顧,這三篇文章的結構為:

  • 基礎篇:介紹金融時間序列的特性和進行金融時間序列分析的目的;解釋時間序列分析中的核心概念:自相關性。
  • 初級篇:說明時間序列建模的過程;介紹時間序列分析中的最基本模型:白雜訊和隨機遊走。
  • 進階篇:介紹時間序列分析中常用的線性模型:自回歸模型、滑動平均模型、以及自回歸滑動平均模型。

本文是系列的最後一篇:應用篇。我們將利用 ARMA 對上證指數收益率序列建模,並以此產生交易信號、構建投資策略,以此展示時間序列分析在量化投資領域的應用。

2 對時間序列模型預測的正確預期

通過本系列之前的文章的介紹,我們已經知道,時間序列建模的目的是挖掘收益率序列的內在「特性」(自相關性),並在「該特性可以在未來重複」的假設下,對未來的收益率做判斷。如果我們想要根據這個收益率預測來構建交易信號——比如如果預測的收益率為正則買入;如果預測的收益率為負則空倉(因為不容易做空)——那麼就必須要對時間序列模型的預測效果有正確的認識。

來看一個例子。下圖是上證指數在 2017 年 4 月 24 日(含)之前 20 個交易日的收益率(註:為了建模,我們當然可以也應該使用更長的歷史數據;這裡為了繪圖清晰僅顯示 20 個歷史交易日的數據)。那麼一個時間序列模型對下一個交易日,即 2017 年 4 月 25 日,的收益率預測會是多少呢?該預測值會接近圖中的點 1、2、3 或者 4 嗎?

也許你已經注意到了,我故意挑選的這 4 個點都滿足一個條件,就是她們的絕對值都大於 0.5%(其中 1 和 4 兩個點的絕對值都高於 1%)。±0.5% 或者 ±1% 的日收益率對於上證指數可以算是正常的取值,因此我們是否應該預期時間序列模型的預測值也有類似的量級呢?

事實上,如果我們用 1 年的歷史數據來構建 ARMA 模型,並對 2017 年 4 月 25 日的收益率預測時,得到的預測值和它的 95% 的置信區間如下圖所示(下圖中,模型同時對 2017 年 4 月 25 日之後的 5 個交易日進行預測)。

可以看到,收益率的預測值實際上非常接近 0%,遠沒有到達 ±0.5% 或者 ±1% 的量級。且它的 95% 的置信區間非常寬。這樣的結果說明:

當我們用較長的一段歷史數據來對時間序列建模時,序列的內在自相關性相對於隨機雜訊來說非常微弱。模型能夠解釋的收益率的波動較隨機雜訊的波動來說微乎其微(上圖中綠色的樣本內擬合收益率和藍色的實際收益率之間的殘差很大很好的說明了這一點)。這樣的結果就是,模型對於收益率的預測的絕對值將會非常接近 0,且該預測值的標準差會很大,造成很寬的置信區間。

如果用白話來解釋上面這一大段話那就是:如果使用太長的歷史數據建模,則序列中表現出來的自相關性非常微弱,時間序列建模「然並卵」。

既然太長不行,那我們來看看少用點數據建模又如何。假如我們僅僅使用 10 個歷史收益率數據建模,則預測結果如下:

這會我們看到,數據少了以後,擬合收益率和實際收益率更加接近;而預測出來的收益率似乎在量級上也更加符合我們 ±0.5% 或者 ±1% 的預期。但是,對於這種預測結果我們敢相信嗎?

當我們用很短的一段歷史數據來對時間序列建模時,幾乎「確定、一定以及肯定」的會發生過擬合。事實上,上面的模型是一個帶有常數項的 AR(4) 模型,相當於用 10 個歷史數據來確定 5 個模型的參數。過擬合的結果是,模型過分解讀了樣本內的隨機擾動,以至於它對樣本外數據的預測準確性會非常差(該模型在樣本外有很大的方差)。我們無法肯定該模型捕捉到了多少收益率內在的特徵,但可以肯定的是它刻畫了樣本內的很多無效雜訊。

如果用白話來解釋上面這一大段話那就是:如果使用太短的歷史數據建模,則模型會過度關注樣本內的隨機擾動,因此時間序列建模依然「然並卵」。

歸根結底,ARMA 模型是一個統計建模的方法。因此和所有統計模型一樣,它在預測的時候既有偏差又有方差。此外,收益率序列中含有大量的隨機擾動,且頻率越高擾動越強(比如日內高頻數據比日數據的雜訊更大;日數據比周數據的雜訊更大)。這也為預測本身帶來了巨大的困難。因此,在使用時有正確的預期就非常重要。

上面的分析說明,由於收益率的特殊性(特別是我們研究的 A 股收益率的特殊性),使用太長或者太短的數據建模都沒什麼太大的作用。但是,只要預期正確,這些困難仍然不妨礙我們來嘗試一下。下面我們就用 ARMA 模型來為上證指數構建一個投資策略。

3 基於 ARMA 模型的投資策略

我們的投資標的為上證指數。回測期為 2013 年 7 月 19 日到 2017 年 4 月 24 日。基於時間序列建模的交易策略如下:

對於每一個交易日,使用之前的 60 個歷史日收益率(相當於 3 個月)滾動構建 ARMA 模型,並對該日的收益率預測。在選擇模型參數時,ARMA 的階數 p 和 q 的取值範圍均為 1 到 4,並根據 AIC 準則確定最優參數。如果收益率預測為正則在下一個交易日持倉;反之則空倉。不考慮交易成本。

上述策略在回測期的凈值和上證指數自身的凈值比較如下圖所示:

凈值曲線的具體參數如下:

從結果上看,基於 ARMA 建模的策略似乎還不錯:它較上證指數本身取得了更高的收益和更低的回撤,因此有更高的夏普率(當然,這部分「得益於」我們沒有考慮交易成本)。從凈值曲線圖上不難發現 ARMA 模型對收益率的預測滿足以下幾點:

  1. 預測較好的捕捉到了 2014 年底到 2015 年中旬的大牛市;
  2. 預測一定程度的躲過了 2015 年下半年開始到 2016 年初的幾波下跌;
  3. 從 2016 年 3 月份開始,ARMA 模型的走勢和基準指數接近。

從 ARMA 的參數上不難解釋出現上面結果的原因。下圖是 ARMA 模型中的常數項隨時間的變化。較 AR 或者 MA 部分的貢獻,常數項(收益率的漂移率)的量級對收益率的預測貢獻更大。顯然,ARMA 模型在牛市時有顯著為正的常數項,而在熊市的時候有顯著為負的常數項。而自 2016 年 3 月開始,常數項接近 0 但是大部分時間仍然為證,這樣的結果就是策略在大比例的時間中會持有上證指數,因此策略在這個時期的走勢和指數接近。

股災 n.0 之後,隨著監管的加強,除去隨機擾動之後的收益率再難呈現大牛大熊市時的那種大幅波動。具有中國特色的 A 股生生變成了具有美國特色的美股(長期有一個正的小幅漂移率,此外就是隨機擾動)。由於監管的變化,我國的股市已經悄然發生了結構性變化(regime change)。如果 A 股以後維持這種走勢,那麼最好的策略也許就是(量化)選股,即便是沒有對沖的純多頭選股也大有可為。

4 充滿希望?長回測期內再看 ARMA 模型

上面的結果也許讓人感到時間序列分析在量化投資中是充滿希望的。但正如本文第二節說明的那樣,時間序列分析有其自身存在的問題,且股票的收益率(尤其是高頻的收益率)預測這件事本身幾乎沒有什麼規律可循。

如果我們將回測期從過去 4 年拉長到過去 11 年(即考慮過去的兩個牛熊周期),結果會怎樣的?下圖是策略和基準指數的凈值曲線。策略可謂令人大跌眼鏡。

在回測期內,在尚未考慮交易成本的前提下,策略就遠遠地跑輸了指數。我們當然不能草草的下結論說 ARMA 模型沒有用。但是這個結果也清楚的告訴我們,如果想使用模型對收益率建模,我們必須對投資品和模型本身都非常了解,這樣才能將二者較好的結合在一起、使模型儘可能的反應投資品的特點。如果僅僅是胡亂的嘗試參數,結果往往是徒勞的。

5 結語

作為系列的最終章,本文介紹了如何應用 ARMA 模型對上證指數收益率進行預測,並以此產生交易信號、構建交易策略。在上一篇最後,我們提出了這樣一個問題:

時間序列分析到底是紙上談兵還是實戰利器?

也許通過本文中簡單的實證我們仍然無法確切的回答這個問題。但是,相信通過今天的文章,你能對時間序列建模的預測效果有一個正確的預期,這對於進一步使用預測結果至關重要。我們看到,在過去 4 年的回測期內,ARMA 模型還是取得了不錯的結果。更進一步的,即便時間序列模型的預測的準確性不足以使它被獨立的用於產生交易信號,它所傳達的信息也能夠為我們理解投資品本身提供一些啟發。

此外,我們當然可以嘗試使用更高級的時間序列分析模型,比如用 ARMA 模型預測收益率並結合 GARCH 模型預測收益率波動率。這會取得比單純的使用 ARMA 模型更加優異的效果。在海外,有人使用 ARMA + GARCH 模型對標普 500 建模並取得了不錯的效果(當然那和美股自身的長期慢牛且在股災時又可以做空有一定關係)。雖然困難重重,但是新模型的提出為我們對收益率建模提供了更廣闊的空間和前所未有的可能。

正如這世上沒有完美的模型一樣,交易中也沒有常勝的策略。我們要做的是找到適合自己投資標的以及符合自己交易風格的策略。努力提升交易水平的過程,也正是我們拓寬知識面、歷練心性、提高人生修為的過程。

(全系列完)

原創不易,請保護版權。如需轉載,請聯繫獲得授權,並註明出處,謝謝。已委託「維權騎士」(維權騎士_免費版權監測/版權保護/版權分發) 為進行維權行動。

推薦閱讀:

巧用指標拆解和連環替代,一招定位指標的最大影響因子
分類模型性能評估——Accuracy, Precision, Recall, F-Score...
【綜述類】 深度學習中的數據增強(上)
《利用Python進行數據分析·第2版》第11章(上) 時間序列
大話機器學習之窮人如何玩轉數據挖掘

TAG:時間序列分析 | 數據挖掘 | 量化 |