如果可能的話,用來作測試的歷史資料應該越詳盡越好,以台北股市來說,台灣證券交易所提供的證券每日價格資料可以回溯到2004年,而櫃檯買賣中心則是2003年,一般市面常見的套裝軟體雖然可以提供1990年之前的資料,但是通常缺少已下市的股票資料,這可能會造成回測上出現倖存者偏差,因此還是必須以完整資料為主。
本次測試所用的歷史資料,在2004之前的部分主要來自TEJ的資料庫內容,除了每日的開高低收成交量之外,TEJ在除權息、增減資與分割合併等資料上的詳盡程度都很理想,在我們核對過三種不同來源的歷史資料後,發現TEJ在資料的正確性與完整度都是最高的,有興趣作歷史回測的朋友可以考慮採用TEJ的資料內容,許多學術機構都有訂閱這個資料庫,只要是學術研究用途,要獲取相關的資料內容並不困難(順帶一提,美股的歷史資料則是以CRSP或compustat這類的資料庫最為詳盡,最遠可以回溯到1925年,有提供這些資料庫訂閱的學術機構亦不少)
如同在之前介紹過的連續期貨價格調整,個股的價格資料也必須做調整來排除幽靈走勢的困擾,舉凡除權息或是分割合併增減資甚至彈性面額調整,都會造成股價在開盤時留下其實不存在的價格缺口;然而,跟期貨只需要在轉倉日時作價格平移便可完成連續價格調整相比,個股的價格調整要複雜得多:除息這種價格平移類型的調整是最好搞定的,但是除權或是減資這些動作必須要作倍數調整,時間一拉長,整個價格序列會變得很怪異(例如:出現低於零的價格),且無法直接使用調整後的價格進行技術指標的計算,這些因素在回測時都勢必要考慮在內
為了做出較準確的歷史回測,我們在回測時會從測試期間最前面的日期開始,先使用原始價格作指標的計算,如果測試期間有跨過需要作價格調整的事件,再進行相關的調整以取得正確的指標數字;就我所知,外面許多套裝軟體在回測時並不是這麼處理資料的,因此回測出來的結果經常出現落差,甚至是相關交易其實無法被執行等錯誤
而我們所使用的測試平台是oracle Database,這種關聯式資料庫的架構雖然較古老,但相當適合用來處理股票市場這種需要頻繁作橫向連結的資料類型;過去在測試單一市場資料時,excel就已經相當足夠,但若是要在數千個需要橫向連結的價格序列中作同一組演算法測試,Database會省事很多,這個概念也可以被應用在跨市分析上,例如想要作橫跨股匯債市跟大宗商品的投資組合測試,Database也是相當不錯的選擇
謝謝俊彥大
回覆刪除俊彥哥你好,想跟確認一下取的 TEJ資料,是否是 TEJ股價資料庫/調整股價(日)-除權息調整 裡的 "開高低收",還想請問之後的因子系統還會需要用到哪些資料(除了開高低收以外),這樣子我也可以一併先收集起來,十分感謝。
回覆刪除你好,我是建議有興趣做分析的項目都可以直接一併載下來,例如:
刪除company DB裡的基本資料中的TEJ產業別與子產業別
月營收盈餘中的營收發布日,單月營收(月增年增),
盈餘發布日,稅前後盈餘及EPS
資本形成中的增減資,除權息
股價資料庫裡的 未調整股價(日) 每天的開高低收成交量,週轉率,市值,股價淨值比
而調整後股價(日)的資料可以做為參考用,畢竟直接用已做完調整的價格序列在某些指標的計算上可能會有問題,所以還是建議用未調整股價搭配除權息以及增減資等數據自行調整
另外還有籌碼資料庫中的三大法人買賣超,持股比例
融資券餘額
當沖比重
這些都是可以嘗試做分析的,但不見得每個部份都能得到有意義的統計數據就是了
俊彥哥,
刪除感謝這麼用心的回覆,了解,我會多爬資料做研究的,再繼續等你因子分析的文章,感謝 !