[2017/07/10 更新] Yahoo API已關閉,目前只能透過爬網頁的方式撈取資料

ichart not working in my app (2017/05/22)

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


怎麼撈資料呢

台灣股市資料當然還是以"臺灣證券交易所"公布的歷史資料為準,但在截取上需要花一些功夫,所以我先用 Yahoo Finance API來撈資料。這邊列出幾個方法的比較:

  • 臺灣證券交易所:資料準確,從88年1月5日起開始提供
  • Yahoo Finance API[已停用]:從2000年開始提供,資料可能會有遺漏,比如缺少過年前補上班(2016/01/30星期六)這天的交易資料,完整性有待商榷。直接用這個套件就行了 yahoo-finance
  • Grs台灣上市上櫃股票價格擷取:台灣的股市資料python套件,資料來源為證券交易所網站與證券櫃檯買賣中心。請參考 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格式資料

$ 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)

程式執行截圖


參考資料