建構股市盤後資料庫
在做量化分析時最常遇到的問題是如何能簡單、快速、正確及穩定的取得歷史資料。網路上是有很多免費的,但這些資料的取得其實並非完全沒有問題。例如 yahoo 在 2019 年初的時侯就因公司政策改變而曾經暫停過數個月的免費資料下載服務。另外這些免費的資料也有資料缺失的問題,可能某段時間的資料就不見了,或者像是一些指標性的資料(例如 SPY, 0050.tw) 在取得時會受到限制。還有在取得資料時的介面也會改變,這也導致你的系統在取得這些資料的介面也需同時修正。簡單來說,你對資料完整性跟穩定性的忍受程度是決定要不要擁有自己的資料庫的因素。
 
目前已經將美國過去二十年的每天開收盤價,交易量及除權息分割資料匯整進資料庫了,資料量約三千五百萬筆,容量約 7 GB。正式揮別過去在分析資料時,時不常就遇到資料不全,不正確或者連介面都出問題取不到資料的情況,有了統一及完整的資料庫後,分析工作也較為順利。
 
資料庫模組是 python 開發的,資料庫是 postgresql,下面是應用實例。
  • 載入模組,連接資料庫
from EZFine import MasterDal
dbconn = “postgresql://user:password@localhost:5432/EZFineMasterDB“
dal = MasterDal.from_connstr(dbconn)
  • 取得及更新盤後資料
    spy = dal.get_eod(‘spy’)
資料除了一般每天的開盤、最高、最低、收盤 (OHLC)及成交量外,還包括股息及分割資料,另外也提供依配息分割所調整的股價及成交量。
 
初始的資料庫建立後,你也可以直接線上手動更新單一個股或多股的收般資料
 
dal.load_alphavantageEod_online(‘SPY’)
dal.load_alphavantageEod_online([‘SPY’,’TLT’,’TIP”VTI’,’JNK’,’GLD’])
 
另外你也可整批更新全部的資料,不過這個程序會需要較長的時間。
dal.load_quandlEod_bulkCsv(“D:\Data\EOD_20200630.csv”)
  • 分析 spy 歷史調整收盤價 (adj_close)
 
簡短的兩行程式碼就可以立即了解單一個股的表現。不過只看單一個股是無法了解它的表現好壞,而且 spy 通常也是拿來當比較指標,所以我們可以一次性取得多個股票資料一起分析,一般都是把自已投資組合的個股代入分析。
  • 多股分析及比較
下面這個例子是取一般資產配置常會使用到的 ETF 來分析
 
				
					# get history of portfolio
prices = dal.get_eodBulk([‘SPY’,‘TLT’,‘TIP’,‘IGSB’,‘VTI’,‘VEU’,‘VGK’,‘VWO’,‘VNQ’,‘JNK’,‘GLD’])
				
			
由於各個股票的完整日期都不一致,系統會自動切齊。資料為調整後的收盤資料 (Adjusted Price)。
 
取得統計資訊
perf = prices.calc_stats()
 
先來看看所有股價在調整到同一基數上 (rebase) 的圖:
perf.plot()
 
再來看各股在過去 13 年來的統計資訊比較
perf.display()
 
從上表可以看到這十多年來,VEU, VGK, VWO 表現很有問題,它們都承擔了接近 SPY 的風險,但年化報酬卻約略 1%,也因為這個原因,我也把它們從投資組合中剃除。另外VNQ的表現也不夠好,雖然它的年化報酬有6.09%,但承擔的風險過高,最大跌幅達 67.44%, 而這也反應在它比較低的 Sharpe ratio, 只有約為 SPY 的 65% (0.34);而且它的表現和股票很相近,在投資組合中發揮的功效不大。
 
有時會需要看每年的表現
 
跟據資產配置理論,除了看各股的報酬及風險外,各股間相對的表現也相當重要,表現相異的個股組合可以有效的提高投資組合報酬及降低風險。
 
上圖中可以看到債券 (TLT, TIP,  IGSB) 的表現和股市基本上關聯性較低。雖然它的長期報酬相對於股票而言是比較低的,但它的 Sharp Ratio 相較於股票卻比較高的,這也是為何在資產配置中總是會需要債券的組合。
黃金 (GLD)的表現到是比較有趣。之前有聽過綠角在電視節目中提到黃金的長期報酬是很低的,所以也就沒在投資組合中配置黃金,但在這過去的十多年資料中顯示,黃金相對於債卷及股票也具有低相關的特性,雖然 sharp ratio 和股票相比仍有一小段差距,但如果您只看過去五年的表現就會發現它有可能還是不錯的投資標的。
 
不過多數人對於黃金的期待是它能夠穩定,波動不要太大,但事實上可能不是。像是它在2013年的表現比國美長期債還慘,報酬率為 -28.33%,但當年所有的股市都表現相當不錯。所以若要配置黃金為資產的一部份,必需知道它也有類似股票波動的心理準備。
 
下面這張表也是各股間關連程度的圖像化,透過圖像化的觀察可以很快的了解您的投資組合關連性是否太高。
 
perf.plot_scatter_matrix()
 
量化資料庫的運用不僅在上述的投資組合分析中相當方便,另一個更重要的應用是量化策略的模擬,也就是所謂的回測分析。所有的策略模擬第一步要解決的並不是要想出一個很好的策略,而是需要準備完整的量化資料庫,沒有正確的數據,再怎麼好的策略都是無法模擬它的正確性。