【量化交易系列二】量化交易的注意事項 (一)

在進行量化交易時(關於量化交易的介紹,請見這篇),必須特別留意以下事項:

1. 資料庫務必正確

工程領域常說的一句話:垃圾進,垃圾出!(Garbage in, garbage out),如果你的資料庫不正確,不管統計方法用的再好,得出來的結論還是沒有任何意義。

但怎麼知道資料庫正確與否? 其實我們很難完全確認,若該資料庫是學術圈論文常在使用、或某些權威機構發表的研究報告所引用,通常比較正確,畢竟一大堆專業研究人員都在使用,要發現錯誤是比較容易的;另外官方機構所公布的資料,通常也比較可信。當然,你永遠無法確認資料庫是否100%正確無誤,即使是內部資料庫工程師也未必知情,但你可以利用一些小測試,去確認資料庫是否存有嚴重瑕疵。

舉例來說,我在查閱公司過往的報酬率時,曾經發現某幾間公司的表現好到不像是真的,仔細檢驗後才發現,原來公司股票過往有反向分割(反向分割的介紹請見這篇),但資料庫沒有更新到,所以報酬率自然就高估了;另一個例子是,公司居然還沒上市就有股價了!所以若你的資料庫來源不夠權威,你可以自己做點抽樣檢查,並且專找那些比較冷門、或是資本結構有重大改變的公司,來檢查資料庫中的報酬率或歷史財務比率是否正確,如果數字跟你預估及計算的差太多,就可能是資料庫有問題了!(或你算錯了?)


2. 是否排除生存者偏差

當你聲稱某種投資方法有效時,應該要包含那些因財務危機而下市、或被併購而消失的企業。如果你回測了某種投資方法,資料卻沒包含消失的公司,可能就會發現投資組合的表現好不少,因為資料中沒有已消失的公司,回測時你自然就不會買到這些公司,而破產下市的公司通常都會讓投資人在該檔股票損失100%,所以回測結果當然就令人滿意了。

因此當你看到有人利用Yahoo FinanceGoogle Finance做回測時就要好好檢視,因為這兩個免費資料庫是沒有排除生存者偏差的。我過去就曾犯了這個錯誤,好在修正生存者偏差後,報酬率沒有差異太多。(真是運氣好!)


3. 是否考慮到公司的歷史成交值或市值

當你利用歷史數據回測時,如果一間企業在過去那個時點沒有任何成交量,或是公司太小而你的資金太大,你就不可能買進。這種狀況就會讓你的報酬率降低不少,因為你如果要買的到股票,價格必須要高於市價才能夠全數成交,你的買進成本自然就墊高了;賣出則相反,由於你要賣股的金額太大,導致賣出的股價下降,可能會低於市價不少,一買一賣,報酬率當然就降低了。

要完全修正這個問題,可以事先設定一定市值或成交值的公司。當然此舉仍然不能完全解決問題,因為你充其量只能設定買前幾日的成交值或市值,無法設定回測「當天」的,畢竟只有一天結束後才真的知道公司的成交值或市值有多少,除非你有日內資料,也就是每個交易日當中,每分鐘甚至每秒的交易資訊。

所以若不能完全排除,建議回測後,將算得的年化報酬率自行調低一些。


文章未完,請見下一篇量化交易的注意事項 (二)