因子投資 股票資料處理流程
★☆☆☆☆
大家喜歡喝蜂蜜檸檬愛玉嗎?
你想在園遊會賣檸檬飲料,可以自己準備材料和工具,手工現榨果汁。或者,妳也可以先買下整條食品「產業鏈」,在工廠大量生產,但我相信大家不會這樣做。(萬一讀者正是這種人,也歡迎聯絡我。)
作坊的靈活和工廠的效率各有優勢,因此我們在擴大規模之前,應該先檢視流程的合理性和品質。建立投資體系也一樣,大部分投資者的身分都是自然人,讓自己財富增加的最好方法就是提高投資績效,而不是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
Like my work? Don't forget to support and clap, let me know that you are with me on the road of creation. Keep this enthusiasm together!
- Author
- More