近期因為公司產品以及投資需求,需要針對一些投資策略做回測(backtesting),讓使用者可以更合理的判斷要怎麼使用我們公司的網站數據。這個過程做了不少研究也累積了一些經驗,在這篇文章整理了許多造成回測結果失準的原因,讓有興趣做回測的人可以參考,提升回測的準確性。
對於不瞭解回測是什麼的人,這邊簡單介紹一下。回測是指自己將自己的投資策略透過歷史資料驗證,模擬在過去的時間中實際交易股票,確認這個投資策略在過往的歷史數據中所能獲得的績效。具體例子可以參考這個網站的回測文章 https://www.finlab.tw/
有些人可能會覺得,為什麼要這麼麻煩的去做回測?理由很簡單:確認自己的策略是否真的有效、以及找出更有效的策略(或者只是單純覺得有趣)。雖然說過去有效的策略在未來未必持續有效,但是如果一個策略沒辦法通過歷史考驗,那不是更不能信任了嗎?而且很多策略看似合理,但是回測後才會發現原來績效並沒有比較好,例如「投資高 ROE 公司」的策略就有這樣的問題(請參考 https://statementdog.com/blog/archives/10552)
全世界規模最大的避險基金:橋水基金創辦人 Ray Dalio 在他的著作「原則:生活和工作」中,提到了他會透過回測來驗證他的想法是否正確,並且將想法透過程式自動化處理,做為決策的重要依據。如果連全世界最厲害的避險基金創辦人都認為透過回測驗證自己的投資想法是很重要的事情,那有心專注在投資的人,尤其是投資策略偏向量化分析、較少質化分析的投資人,是不是也應該去思考自己使用的策略是否真的有效?
不過回測並不是這麼容易的事情,尤其是基本面策略的回測,需要的知識與資源是有一定門檻的,導致做的人不多,做的好的人更是少。要做出「正確、有效的回測」,必須要滿足以下條件,缺少任何一項,都會導致沒辦法做出具高度參考價值的回測:
- 足夠的程式能力
- 足夠的會計知識
- 對回測地區的證券市場規則有足夠的了解
- 需要有高品質、跨度時間夠長的財務數據來源
不過即使具備這四項能力,還是很容易在回測過程做錯導致結果不準確。接下來說明幾種做回測時容易犯的錯誤,給有興趣做回測的人參考:
資料正確性與完整性
這其實是回測最難也最花時間的一部分,也因此在國外類似 Quantopian 這種線上回測平台很受歡迎,因為完全不用花費心力在蒐集和驗證資料上。
如果是自己抓取資料,建議使用公信力高的資料來源來避免此類偏誤,像是從公開資訊觀測站、證交所網站這類型的官方網站取得。
不過如果使用公開資訊觀測站的資料要小心,有時候上市櫃公司上傳的財報是錯誤的,通常過一陣子公司會修正財報重新上傳資料到公開資訊觀測站。(如果有發現公司上傳的資料有錯,可以向公開資訊觀測站或證交所回報,他們會請該公司修正。通常有反饋時他們很快就會修正。)
不過公司修正誤植的資料這件事情對回測來說是既微妙又幾乎無法處理的問題。畢竟回測是希望能模擬過去,而過去取得公司發佈的錯誤資料是一個「過去的事實」,所以理論上回測應該要用未修正的錯誤資料來進行。然而想要用未修正的錯誤資料進行回測會有兩個問題:
- 過去的錯誤資訊現在已經無法取得。
以台股來說,公開資訊觀測站只會保留修正後的資料,所以除非你從多年前就不斷的即時抓取當時的最新資料,或者找到其他資料源提供這個資訊,否則這個問題無解。 - 誤植的資料很可能錯得很離譜,使得你的策略績效受到影響。
上市公司如果提供了錯誤的數字,不出正負號錯誤或小數點位數點錯。例如 EPS 應該是 5,結果打成 -5 或 0.5。
如果你的策略持有股票數量偏低時,如此大幅度的數據錯誤很可能顯著影響你的策略績效。
使用了有問題的資料源
上市櫃公司在上傳當季財報時,會一併上傳「去年同期」的數據。一般人的直覺會認為本季財報揭露的去年同期數據會等於去年同期的財報揭露的當季數據,很遺憾的是並非如此。「去年同期」的數據,有些情況部分會計項目會與該公司去年提供的財報是不一致的。
如果你採用的數據源會利用新財報的去年同期數據取代舊數據,你的策略又有使用到這些會計項目,那你的回測基本上是失真的。
根據我們的調查,國內的部分市售財務數據資料庫有這個問題,務必留意此狀況。有趣的是不少國內學術領域的研究都是使用有此問題的資料庫,因此參考國內的論文回測結果時要特別留意。
程式邏輯有問題
寫程式要沒有bug是近乎不可能的事情,回測程式當然也不例外。總之程式記得要經過詳細的正確性驗證,且最好是自動化測試與人工驗證並行。
沒有考慮交易成本
雖說這有點太基本了…XD,不過還是會看到有些人做回測並沒有把交易成本考量進去,這對於週轉率越高的交易策略影響越大,很多策略原本績效很好,在考慮了交易成本後,反而變成了爛策略。
倖存者偏誤(survivorship bias)
沒有把已經下市櫃的公司的資料放進歷史資料中做回測,是回測相當常見的一個問題。這也是一個不太好處理的問題,因為有些公開資料一旦公司下市以後,就再也無法取得。
倖存者偏誤經常會導致高估策略的績效,畢竟若策略容易選到了未來會下市櫃的公司,那對績效而言絕對是很大的打擊。另外如果你的策略有限制買進公司只能是上市、上櫃或興櫃的其中之一或之二,那要確保回測時,能準確的在回測所運作的時間點,取得該公司正確的上市櫃、興櫃狀態。
錯誤的資料時間
以台股目前的規則,第四季的財報最晚要在隔年3/31前公佈。因此如果你的回測在每年的一二月就能取得前一年第四季的資料,那顯然就是有問題的。類似的問題還有一些要注意的:
- 金融業的年報公佈時間與其他產業不同。
- 規定發佈財報的最後一天若是假日,真正發佈財報的日期會遞延到下個交易日。
- 台股2013年起,年報發佈時間有修改,若你的策略是打算在年報一公佈後有交易行為,那麼2012前與2013後策略採取行動的時間是不同的。這一點又有一個陷阱,就是真正開始改變發佈時間的財報是2012第4季,不是2013第1季
回測涵蓋時間過短
如果回測所涵蓋的時間不夠長,那原則上回測績效數據的參考價值就不高。以 Joel Greenblatt 的 Magic Formula 來說,Joel Greenblatt 在打敗大盤的神奇公式這本書中有提到,他的 Magic Formula 在美股回測時,發現有可能會在任一年或任連續兩年的期間輸大盤,但是任三年連續時間都是贏大盤的。因此以這個策略來說,如果你的回測涵蓋時間只有兩年,那肯定會因為回測的起始時間不同而相比大盤有截然不同的結果。
原則上回測涵蓋時間最好超過兩次景氣循環,參考價值才比較高
前視偏誤 (look-ahead bias)
如果你的策略是「在當月本益比最低時買入」,那就是犯了前視偏誤。因為在當月結束前是沒有辦法知道最低價是多少,所以我們不應該設計這種策略來進行回測。
沒有處理增減資、發股利,或是美股分割股票的情況
這些事件會影響股價,因此沒有處理這件事情會導致報酬率計算失真。最常見的解決方式是利用還原權息股價來計算報酬率
漲停/跌停的股票買賣價格
真實世界股票漲停/跌停時很可能會買不到股票。這也是回測容易沒有考慮到的問題。
流動性低的股票買賣價格失真
在真實世界如果投資部位較大,又想購買流動性低的股票時,有可能會在買入的過程中,股價被你買到越來越高。這種偏誤會導致回測績效比策略實際績效來的好,而且這種問題通常很難準確處理。
沒有處理公司股號變動的情況
公司的股號的確是有可能會變動的,雖然並不是很常發生。這部分沒有處理好的話,會導致誤判公司下市。
以現實的角度來看,要考慮上面提到的所有面向難度不低,但還是建議除了最後兩點以外,前面的幾點要儘可能做好。
你對回測或基本面量化策略有興趣嗎?歡迎私訊 FB 一起聊聊
喜歡這篇文章的話可以拍拍手讓我知道哦~
按著不放可以快速多拍幾下 :)