跳至主要內容
台股研究 約 6 分鐘閱讀

台股資料庫建置教學:用 Python 整理財報、月報與股價資料

台股資料庫怎麼建?本文比較 CMoney 貓頭鷹、TEJ、FinMind 等資料源取得門檻,再示範用 Python 與 FinLab Package 一行 data.get('price:收盤價')下載股價、財報與月報,解決爬蟲、整理、儲存與串接回測的瓶頸。

下載資料**不要再涓涓細流**,每一檔股票**慢慢下載**,每一天重複**慢慢等待**,現在是 5G 的時代,大數據這個名詞也已經用到爛,偏偏台股這種小數據,蒐集起來大費周章,不合理吧?今天就來解決這個問題。

如果你要比較 2026 年常見的 Python 台股 API、FinMind、yfinance、證交所 OpenAPI 與 finlab,請看新版整理:Python 台股 API 比較。本文保留「台股資料庫建置」的資料工程脈絡,重點是為什麼全市場資料需要統一格式、儲存與回測串接。

台股資料庫建置要解決的四件事

台股資料庫不是把 CSV 下載到電腦裡就結束。真正麻煩的是:欄位格式要一致、日期要對齊、除權息要處理、資料要能接回測。少掉任何一項,後面的策略數字都可能失真。

問題 如果沒處理 建置時該固定
股票代號格式 同一家公司在不同資料源出現不同欄位名稱 代號一律用字串,例如 2330
日期索引 月營收、財報與日股價無法正確合併 全部轉成可比較的日期索引
除權息 長期報酬被低估,ETF 或高股息股特別嚴重 回測基準使用還原價或含息資料
公布日 用到當時還沒公布的財報,產生前視偏差 財報與月營收對齊實際可得日
儲存格式 每次分析都重新抓,速度慢且容易被擋 CSV、parquet 或資料庫固定版本

這些工作看起來不像「投資」,但它們決定投資研究能不能重現。若你只是查單檔股價,任何 API 都能用;若你要做全市場選股回測,資料庫就必須把股價、財報、月營收、籌碼整理成同一種表格。

Python 一行抓台股籌碼資料,展示資料庫接到回測後能產生完整策略結果

一行 data.get() 拿到的資料預覽,台積電股價疊三大法人籌碼

Python 爬蟲下載台股每月營收後輸出的 pandas dataframe 表格,包含公司代號與當月營收

財經資料庫比較

假如我告訴你,請找一款 Package 可以讓你徜徉在資料海之中,比較市面上的股票資料庫,你可能會找到以下幾個:

CMoeny 貓頭鷹

**CMoney 數據貓頭鷹,**之前好像還可以用,但是好像已經沒有在開發了,API 檔案裡面,所謂的「服務網站」好像沒有公開(或關閉了),所以不知如何使用。

TEJ 資料庫

不過要是你在學校,可以用** TEJ 可以下載到資料**,但是所謂的「達人方案」也需要每月 8888 ,能不能讓你發發發發,就不確定了。

坊間 Python 教學

查看部落格教學來下載,像是 2016 年,我開始在網路上分享的時候,也是先介紹怎麼寫不同的爬蟲,流量也都滿好的,因為大家都想知道怎麼抓資料,但是抓下來後,**網站改版爬蟲壞掉要修改?要怎麼整裡儲存?抓下來的資料要如何串接回測?**這些都非常瑣碎,導致很多人停留在這個階段就已經放棄了。

FinMind

當前最好的解決方案,是跟 FinLab 名字很像的 FinMind Package,秉持著開放的精神,讓你免費使用 600 次 request,每小時,其實已經很佛心了!但是台股有 2000 檔股票,代表你注定一小時沒辦法下載所有資料了。就算付費會員,資料下載下來,要怎麼合併整裡儲存,也是一番功夫呀

資料庫的掙扎

我當初想要建構一個回測平台,資料庫希望可以跟別人合作,但是資料庫廠商很保守,「這些資料要做什麼用的呢?」「你是要對外使用嗎?」「你先說你需要哪些資料,我們再來估價看看喔!」。對他們來講,資料是公司命脈,當然需要謹慎把關,商品本來就是要拉高價格,以提升毛利率。但對我來講,這些公開資料,應該是開放的,易取得的,可分享的假如大家都是想要賣資料庫,就注定了 Python 理財無法大眾化,因為大部分都卡死在資料處理這一關了,沒有一個好的資料庫,再好的回測系統也是枉然。

FinLab:從今天起,你有不同的選擇

2000 檔股票、15 年資料,一次下載,一勞永逸,一行打趴!

所以為了打造一個最好用的 Python 回測系統,只好先從資料庫開始了。我們真的也是花了非常多心力在做這個資料庫上,上百則條目,包含上市櫃興櫃的股價財報月報、三大法人、集保庫存,你想得到的幾乎都有啦。但如何讓大家「最快」的拿到「大量」資料,並且將伺服器「傳輸成本降到最低」?用 SQL 資料庫都絕對無法達成,所以我們連資料庫都一併重寫。就算我們手上已經有很多爬蟲,但我跟 Ben 還是經歷了將近一年的調整,終於做出了像樣的資料庫。最近還新增了加密貨幣的資料和回測,持續更新中。

這個市面上最好用的資料庫,只是為了回測而順便打造的!簡單說,這只是前菜,主餐還在後面!好的 Package,不需要多解釋,只是要兩行即可說明:

顯示程式碼
from finlab import data
data.get('price:收盤價')

FinLab data.get 收盤價,台股資料庫下載結果示意圖

接下來一系列,會帶你瞭解 FinLab Package 的好用之處!歡迎到 FB 粉專 追蹤我們,才不會錯過接下來的內容喔!或是頁面又上方註冊 Email ,有新的文章就會提醒你。

台股資料庫和 API 比較頁的分工

這篇文章談「資料庫怎麼建」,新版 Python 台股 API 比較談「API 怎麼選」。兩頁的搜尋意圖不同:

你搜尋的問題 建議閱讀
Python 台股 API 哪個好 Python 台股 API 比較
FinMind、yfinance、證交所 OpenAPI 怎麼選 Python 台股 API 比較
下載後怎麼整理成自己的台股資料庫 本文
股價、財報、月報怎麼統一成回測格式 本文
如何把資料接到選股策略 Python 股票選股與回測教學

如果你的目標是快速跑策略,不需要自己從零建資料庫;用 data.get() 取資料,再把資料交給 sim() 回測即可。如果你的目標是研究資料工程、自己保存每一份資料快照,才需要完整規劃下載、清洗、版本管理與資料表格式。

欄位命名與版本管理

資料庫建好後,最容易被低估的是欄位命名。台股資料來自不同來源:證交所、櫃買、公開資訊觀測站、期交所、券商或第三方 API。每個來源對「公司代號」「日期」「成交量」「買賣超」「財報期別」的命名都不一樣。若沒有在匯入時統一,後面做合併與回測時就會一直轉欄位,錯誤也很難追。

欄位類型 建議做法 原因
股票代號 一律存成字串 避免 233002330、整數與字串混用
日期 一律轉成標準日期索引 方便和股價、月營收、財報對齊
財報期別 保留原始期別與公布日 回測需要知道資料何時可得
價格 同時保存原始價與還原價 短線訊號可看原始價,長期報酬要看還原價
來源版本 記錄抓取日期與來源 三個月後重跑時,才能解釋數字為何改變

版本管理也很重要。資料供應商會補資料、修正欄位、調整除權息,這些更新通常是好事,但會讓舊回測與新回測出現差異。比較嚴謹的做法,是每次發文或做研究時,保留當時的資料快照、策略程式與輸出報告。未來重新整理時,才知道差異來自資料更新、策略改動,還是市場多了一段新樣本。

把這些規則寫清楚後,台股資料庫才不只是「抓得到資料」,而是可以支撐研究、回測與文章更新的基礎設施。

常見問題(FAQ)

台股資料庫要自己建嗎?

看需求。只想做選股與回測,使用已整理好的資料源比較有效率;若你要保存自有資料快照、做資料工程研究,才需要自己建資料庫。

證交所 OpenAPI 可以當完整台股資料庫嗎?

不太適合。證交所 OpenAPI 很適合抓當日行情,但歷史資料、除權息、財報公布日與籌碼資料仍要另外處理。若要做回測,還需要把資料長期保存並校正。

FinMind 和 finlab 差在哪?

FinMind 適合探索資料表與自建資料倉儲;finlab 適合把台股資料直接接到回測、選股與策略研究。若目標是 API 比較,請看新版Python 台股 API 比較

台股資料庫最容易出錯的是什麼?

最常見的是除權息與公布日。價格沒還原會讓長期報酬失真;財報資料若沒有按公布日對齊,回測就可能用到當時還沒知道的資訊。

用 Python 建資料庫要存成什麼格式?

小型研究可用 CSV;資料量變大後,parquet 會更適合分析;若要多人共用或提供服務,才需要資料庫系統。格式可以依需求選擇,欄位、日期與版本固定才是核心。


延伸閱讀

投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。

FinLab AI

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始

更多價值與基本面研究

查看全部