因子投資 股票資料處理流程
★☆☆☆☆
大家喜歡喝蜂蜜檸檬愛玉嗎?
你想在園遊會賣檸檬飲料,可以自己準備材料和工具,手工現榨果汁。或者,妳也可以先買下整條食品「產業鏈」,在工廠大量生產,但我相信大家不會這樣做。(萬一讀者正是這種人,也歡迎聯絡我。)
作坊的靈活和工廠的效率各有優勢,因此我們在擴大規模之前,應該先檢視流程的合理性和品質。建立投資體系也一樣,大部分投資者的身分都是自然人,讓自己財富增加的最好方法就是提高投資績效,而不是roadshow或一昧模仿時髦技術。
所以,雖然我歡迎每個路過的讀者,但是本篇文章的目標觀眾,最好先有一套投資體系,才能將因子投資應用於實戰中。
1. 如果讀者被「因子投資」吸引,應該也會聽過很多數據處理的手段,還有隔壁量化多因子的各種帥氣模型。
不只因子投資,所有需要參考歷史資料的投資體系,都需要高品質的市場資訊,不過我認為心態比數據本身還重要。好的投資流程應該是從推論和策略出發,融合人類可以理解的概念,再藉由數據驗證和研究。或許各位會嚮往完全data driven的投資策略,但我覺得這對於大部分散戶的難度太高,甚至不切實際。換句話說,我們是藉由資料增強投資的優勢,而不是讓數據主導投資流程。
另外,我曾看過某投資作者,因為對股市數據獲取的要求較高,撰文嘲諷同行,「不懂產業分工而停留在低級的作坊模式,會阻礙自身市場競爭力的突破。」雖然這是實話,但我想一般讀者根本不會出來寫文章,更沒有時間、精力和資產規模把投資體系拓張到需要精密分工的程度。一個過高的標準不會造成進步,只會讓看到文章的人放棄。
回到投資本身,資料是重點,但是人們把錢花在升級其它環節,通常會更有投資效率。
記得當兵的時候,有位投資風格激進的同梯和我無話不談。我們曾經聊到購買Bloomberg Terminal,但後來我覺得資訊優勢帶來的超額收益難以量化,考慮再三也沒有下手。套句理財老師常說的,只要價格會讓我猶豫超過一天,代表我的「想要」還不是「必要」。
那麼,因子投資需要什麼種類的資料呢?
2. 風格因子模型
作為切入點,我們可以先觀察FF3/FF5/FF6, q⁴/q⁵, NM4 等經典多風格因子模型,思考資料的「解析度」。
公司「基本面」並不會快速改變,所以通常大家可以從月度或季度的資料開始。以市值因子為例,雖然股價每天不同,但是股數變動頻率很低,所以投資人可以自行計算結果,而不用購買現成資料。還有些資訊會隨著財報公布,到下一個季度之前都不會改變,所以投資人也買不到。
另外,「普通」日度價量資料幾乎都可以輕鬆免費取得。像在計算預期收益和Beta因子時,我曾下載Yahoo Finance美股一億筆資料,大概接近一小時。或是驗證「股息」是不是因子的時候,投資人也可以快速得到價格和分紅的直接資料,台股部分甚至有網站整理成可下載檔案,非常方便。
如果讀者完全不想花錢和時間,只想感受因子的歷來表現,當然也可以。Portfolio Visualizer是很好的工具,MSCI網站有各類因子指數可以供民眾檢視,最簡單的因子ETF走勢,也可以讓我們參考。(注意,金融機構會有商業包裝,像是低波動和高股息因子,屬於效力尚無共識但已經在售的商品。)
或許有人看到這裡會納悶,我剛剛提到了普通日度價量,那難道還有「特殊版本」嗎?
3. 量化多因子
廣義的多因子,有很大一個分支就是中高頻價量資料。我知道這和風格因子沒什麼關係,但我決定暫時離題,進入更小的時間尺度。
日度之下是日內,然後是小時、分鐘、秒,再來是Tick,那一個Tick又是怎麼產生的? 從市場的微觀結構來看,一個價格會是多組訂單的成交結果。Order book有bid/ask,而大家平常聽到的五檔/十檔之外還有更多levels, 至於訂單資訊中也會紀錄交易ID和訂單類型(例如撤單、hidden limit order...),所以交易者也可以從中挖掘出spread/深度等因子。
只要我們有了這些豐富的底層資料,自然也能順便還原出更長時間尺度的價格變化,所以日內、日度、周度、月度......全包,聽起來真完美。
然而實際上,股票的訂單流在跑,就像熱門直播的留言,不斷刷新,一秒內可以跑數十筆成交訂單。有本事處理這些資訊的人非常少,我寫了上百篇文章也才遇過一個讀者而已。先不要說live data feed,一般投資者連研究歷史資料都很困難。
妳可能會問,雖然資料更新很快,但下載回家慢慢分析不行嗎?
可以,但妳的電腦夠強嗎? 事實上,我曾經拿到少部分的美股資料,一秒鐘的訂單有1000多筆,時間精度是奈秒。單支股票一個小時的order book, level 50內,檔案可以達到1G以上,也就是500套天龍八部小說。美股有6.5小時的盤中交易資料,如果簡單估算,光是全市場「一日」的資訊量大概在數百T,要花幾十萬台幣買硬碟來儲存,同時要有價值數千萬的ram來處理數據。相較之下,資料費用反而微不足道。
現在各位可以想像,高頻因子和風格因子,雖然都屬於廣義的因子,但是兩群投資者幾乎沒有交集。
4. 選定合適的目標資料集之後,就可以進入處理環節。
最入門的版本,就是到各網站找免費資料,然後擷取自己需要的部分。例如妳喜歡某支高股息金融股,又相信股息是一種因子,想驗證含息報酬是否能跑贏大盤,於是比對歷年績效,做出結論。如果高興的話,你也可以把資料寫進日誌,方便日後檢視。
稍微進階一些,我建議大家最好下載CSV檔案。Yahoo Finance和台灣證交所都提供CSV檔,而我們用Excel就可以直接運算。舉個例子,常見的排序、繪圖、四則運算、線性回歸,都是簡單的工作。不要小看常見的工具,很多時候一把瑞士刀就能完成任務。
不過如果讀者真的照做,會遇到至少兩個問題。首先,Excel只有一百多萬行,而且當資料量增大時,運算效率會減低。我曾經在做因子和槓桿的trade study時,幾乎讓電腦當機,而且之後檔案還開不起來。況且,手動下載CSV,根本不適用於全市場資料,畢竟全球光是股票就有數萬個標的。
那我們認真一些,利用程式來幫忙。通常交易所和交易商會提供公開API(接口),我們只需要寫爬蟲,就可以直接得到資料。相似的,投資人向供應商購買資料,會拿到專屬的API key,而不同方案等級會有對應的限制,例如每小時幾萬個API call或每天幾G的總用量。
大家可以每次處理都重新抓資料,不過更好的方法是先架設資料庫,節省更新成本。就算不寫SQL,至少也要有個儲存資料的空間,方便日後分析。當然這裡我是在說因子投資,資料相對少,所以可以存在自己的機器中。如果讀者有處理大量資料的需求,也可以直接租用雲端伺服器,例如GCP或AWS.
接下來,拿個順手的分析程式,Python/MATLAB/R/C++都可以,也有些人會用專業軟體,例如時序分析的Eviews。整體而言,在因子投資領域,線性回歸、統計分析、因子排序、多空運算......等功能比較常用到,我相信每種語言都能勝任,大家舒適即可。有些人喜歡固定以一種語言處理所有任務,但我比較傾向於組合使用,可能和自身的學習經歷有關。順帶一提,因子分析和特徵提取的概念相似,而利用PCA處理因子收益的方式,實際上和機器學習領域有重疊,這也可以當成選擇程式語言的參考基準。
最後,我認為因子投資具有被動和長期的性質,所以對於運算效率的要求不高,這對投資人而言應該是好消息。
5. 因子怎麼融入投資組合?
不管是自行運算、找現成資料或是直接拿ETF,各位在處理因子之後,就可以套用「資產配置」和「組合優化」的既有概念。
舉個例子,我曾寫過Markowitz和均值方差最優化,本質是一種凸二次規劃求解。現在無論是用Excel或是MATLAB,我們都可以將因子當成一種資產,加入長短債和REITs等資產之後,畫出擴張的效率前緣(hopefully),這些步驟應用於Min variance最優化也類似。
Risk parity和一系列風險「預算」模型,如果從波動和收益的角度來看,和上述方法的理念相似。不過有些人會加入宏觀經濟因子的考量,例如橋水的Ray Dalio,而這部分和風格因子差距較大,我不做評論。
你說Black Litterman在哪裡? 我曾在文內提過至少有三種方式,能結合因子、投資者判斷和資產優化。最簡單的方式,依然是將大類資產替換成風格因子,例如用價值因子替換股票,然後寫出觀點向量,再藉由BL把資訊導入優化流程。然而廣義一些,如果進一步利用資產和風險因子化的優勢,投資者應該先從市場組成下手,再結合自身看法,例如ABL模型。第三種方法是Entropy pooling,觀點輸入形式包含了因子化共變異數矩陣、風險、報酬等,而且能無縫結合衍生商品,讓我看到一些P/Q quant 融合的希望。
6. 實作和投資
謀定而後動,先將理論框架轉化為演算法,再利用代碼實現思路,這樣才不會迷失在各種花俏模型中。
在技術分析時期,我也曾掉過很多陷阱,像是過擬合、未來資訊、忽略滑點,結果往往做出超完美垃圾模型。另外像是「數據清洗」也給我很大的教訓,因為數據量增大之後,人工很難找出資訊的瑕疵和錯誤,得不償失。
在執行各種優化模型或投資組合回測時,也需要考慮到機器性能和程式限制。舉個例子,有些語言很討厭巢狀迴圈,你要是忽略這種特性,速率可以差到上百倍,別問我怎麼會這麼清楚。或是浮點類型會有對應的精度,超出精度極限的運算很可能會產生無意義結果,而且驗算大概也能通過。
除了改善語法之外,一些既有函數或工具箱也能加速計算,例如多線平行運算。另外,投資人與其閉門造車,不如到網路上看別的作者如何解決效能問題。像是我曾經要實現投資組合的解析解,運算大型稠密矩陣,我依照工作性質分配任務,讓GPU和CPU幾乎都是滿載在跑,但依然頻繁失敗。後來我發現,用Monte Carlo可以大幅減少運算時間,不禁莞爾。對接近混沌的市場精確求解,本來就是一件自討苦吃的事情,而在轉換思路之後,我也解決技術問題。
經過因子分析之後,我們設計出理想的投資組合,也在市場下單,執行資產配置。這個環節完全可以手動處理,畢竟考慮到交易成本和因子投資的特性,出手頻率得以大幅降低。當然,如果是從自動交易或量化過來的朋友,也可以使用既有的下單機制。
7. 因子投資理念
我提供幾個常見問題,各位讀者可以自行思考。
因子投資,尤其是FF3以來的風格因子模型,和指數投資有許多相似之處。我支持利用各種因子改良投資組合,然而金融機構的smart beta ETF並不總是完美的工具。有些高曝露的因子ETF確實能達成目標,但是如果因子本身無效,那對應ETF也只不過是一種比較好聽的吸血商品。
另外,別忘了因子投資戰場上,還有一個派別屬於行為金融,從市場無效率出發,也取得豐碩成果。換句話說,有些人希望所有alpha都變成beta,但另一群人依然認為自己在利用alpha, 因此廣義而言,因子投資屬於被動和主動投資間的灰色地帶。
最重要的,在投資領域,所有努力都有可能白費,因此就算讀者有完整的因子投資體系,依然可能打輸大盤。利用數據驗證和測試,是一種加速的方式,而因子分析是一種研究方式,不是一張明牌,也不是獲利保證,所以雖然長期實證讓經典因子具有吸引力,投資人還是應該對自己的資產負責,了解因子背後的建構方法和獲利原因。
本系列的第三篇,我預計寫因子排序法。
註: 排序法是構建因子常見的方式,非常直觀,雖然ABL等模型並不使用。
另外再說一遍,我不是老師/Quant/營業員,也沒有資工/金工/財管......等背景。
所以,如果讀者朋友覺得我說錯了,也請直接踢館, thanks in advance.
參考:
The Augmented Black-Litterman Model
Portfolio Construction and Systematic Trading with Factor Entropy Pooling