最近對於股票有一點興趣,剛好又修完一門關於ETL的課程,想說就來撈撈看股市資料,加以分析。儘管CMoney上的股市資訊就已經相當足夠了,有技術分析、到價提醒等等好用的功能,但能看到的歷史資料範圍有限,所以還是徒手來試試看,希望能做一個自己的理財工具XD


怎麼撈資料呢

台灣股市資料當然還是以"臺灣證券交易所"公布的歷史資料為準,但在截取上需要花一些功夫,所以我先用yahoo finance api來取資料,之後丟進自己的資料庫。這邊列出幾個管道的比較:

  • 臺灣證券交易所:資料準確,從88年1月5日起開始提供。
  • Yahoo Finance API:從2000年開始提供,不過據說資料有些有誤,個人實測後也發現沒有過年前補上班(2016/01/30星期六)這天的資料,完整性有待商榷。不過有別人寫好的python package yahoo-finance
  • Grs台灣上市上櫃股票價格擷取:台灣的股市資料python package,資料來源為證券交易所網站與證券櫃檯買賣中心。 python package連結 python grs
  • Google Finance API:官方寫說於2011年停用。不過好像還可以取得資料,可以參考這篇:使用Yahoo/Google API取得歷史股價資料
  • Google財經:透過網頁顯示歷史資料,去用爬蟲程式抓資料,一個頁面最多顯示200筆。對於要爬大量資料是較為麻煩的方法。
    • 舉例:抓取TPE1517利奇,範圍1999-01-01往後200天
    • http://www.google.com.hk/finance/historical?q=TPE%3A1517&startdate=1999-01-01&num=200&start=4000&ei=Mh6vVsiXGsGT0gSAk4moCw

關於Yahoo/Google Finance API,這邊也有一個網頁Finance APIs,告訴你怎麼抓CSV/YQL格式的資料,也有簡單PHP與C#範例,抓下來後要自己解析就是了。


程式範例

這是一個簡單的python程式,使用Yahoo Finance API抓取,接到JSON格式資料。

Requirement: yahoo_finance

$ pip install yahoo_finance

from yahoo_finance import Share
import datetime

def getStock(id):
stock = Share(str(id)+'.TW')
today = datetime.date.today() #todays date
data = stock.get_historical('2016-01-28', str(today))
return data

print getStock(2353)

程式執行截圖

yahoo_finance


參考資料

使用Yahoo/Google API取得歷史股價資料

免費下載十八年的歷史股價

Finance APIs