下載資料**不要再涓涓細流**,每一檔股票**慢慢下載**,每一天重複**慢慢等待**,現在是 5G 的時代,大數據這個名詞也已經用到爛,偏偏台股這種小數據,蒐集起來大費周章,不合理吧?今天就來解決這個問題。
如果你要比較 2026 年常見的 Python 台股 API、FinMind、yfinance、證交所 OpenAPI 與 finlab,請看新版整理:Python 台股 API 比較。本文保留「台股資料庫建置」的資料工程脈絡,重點是為什麼全市場資料需要統一格式、儲存與回測串接。
台股資料庫建置要解決的四件事
台股資料庫不是把 CSV 下載到電腦裡就結束。真正麻煩的是:欄位格式要一致、日期要對齊、除權息要處理、資料要能接回測。少掉任何一項,後面的策略數字都可能失真。
| 問題 | 如果沒處理 | 建置時該固定 |
|---|---|---|
| 股票代號格式 | 同一家公司在不同資料源出現不同欄位名稱 | 代號一律用字串,例如 2330 |
| 日期索引 | 月營收、財報與日股價無法正確合併 | 全部轉成可比較的日期索引 |
| 除權息 | 長期報酬被低估,ETF 或高股息股特別嚴重 | 回測基準使用還原價或含息資料 |
| 公布日 | 用到當時還沒公布的財報,產生前視偏差 | 財報與月營收對齊實際可得日 |
| 儲存格式 | 每次分析都重新抓,速度慢且容易被擋 | CSV、parquet 或資料庫固定版本 |
這些工作看起來不像「投資」,但它們決定投資研究能不能重現。若你只是查單檔股價,任何 API 都能用;若你要做全市場選股回測,資料庫就必須把股價、財報、月營收、籌碼整理成同一種表格。
![]()


財經資料庫比較
假如我告訴你,請找一款 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 Package 的好用之處!歡迎到 FB 粉專 追蹤我們,才不會錯過接下來的內容喔!或是頁面又上方註冊 Email ,有新的文章就會提醒你。
台股資料庫和 API 比較頁的分工
這篇文章談「資料庫怎麼建」,新版 Python 台股 API 比較談「API 怎麼選」。兩頁的搜尋意圖不同:
| 你搜尋的問題 | 建議閱讀 |
|---|---|
| Python 台股 API 哪個好 | Python 台股 API 比較 |
| FinMind、yfinance、證交所 OpenAPI 怎麼選 | Python 台股 API 比較 |
| 下載後怎麼整理成自己的台股資料庫 | 本文 |
| 股價、財報、月報怎麼統一成回測格式 | 本文 |
| 如何把資料接到選股策略 | Python 股票選股與回測教學 |
如果你的目標是快速跑策略,不需要自己從零建資料庫;用 data.get() 取資料,再把資料交給 sim() 回測即可。如果你的目標是研究資料工程、自己保存每一份資料快照,才需要完整規劃下載、清洗、版本管理與資料表格式。
欄位命名與版本管理
資料庫建好後,最容易被低估的是欄位命名。台股資料來自不同來源:證交所、櫃買、公開資訊觀測站、期交所、券商或第三方 API。每個來源對「公司代號」「日期」「成交量」「買賣超」「財報期別」的命名都不一樣。若沒有在匯入時統一,後面做合併與回測時就會一直轉欄位,錯誤也很難追。
| 欄位類型 | 建議做法 | 原因 |
|---|---|---|
| 股票代號 | 一律存成字串 | 避免 2330 與 02330、整數與字串混用 |
| 日期 | 一律轉成標準日期索引 | 方便和股價、月營收、財報對齊 |
| 財報期別 | 保留原始期別與公布日 | 回測需要知道資料何時可得 |
| 價格 | 同時保存原始價與還原價 | 短線訊號可看原始價,長期報酬要看還原價 |
| 來源版本 | 記錄抓取日期與來源 | 三個月後重跑時,才能解釋數字為何改變 |
版本管理也很重要。資料供應商會補資料、修正欄位、調整除權息,這些更新通常是好事,但會讓舊回測與新回測出現差異。比較嚴謹的做法,是每次發文或做研究時,保留當時的資料快照、策略程式與輸出報告。未來重新整理時,才知道差異來自資料更新、策略改動,還是市場多了一段新樣本。
把這些規則寫清楚後,台股資料庫才不只是「抓得到資料」,而是可以支撐研究、回測與文章更新的基礎設施。
常見問題(FAQ)
台股資料庫要自己建嗎?
看需求。只想做選股與回測,使用已整理好的資料源比較有效率;若你要保存自有資料快照、做資料工程研究,才需要自己建資料庫。
證交所 OpenAPI 可以當完整台股資料庫嗎?
不太適合。證交所 OpenAPI 很適合抓當日行情,但歷史資料、除權息、財報公布日與籌碼資料仍要另外處理。若要做回測,還需要把資料長期保存並校正。
FinMind 和 finlab 差在哪?
FinMind 適合探索資料表與自建資料倉儲;finlab 適合把台股資料直接接到回測、選股與策略研究。若目標是 API 比較,請看新版Python 台股 API 比較。
台股資料庫最容易出錯的是什麼?
最常見的是除權息與公布日。價格沒還原會讓長期報酬失真;財報資料若沒有按公布日對齊,回測就可能用到當時還沒知道的資訊。
用 Python 建資料庫要存成什麼格式?
小型研究可用 CSV;資料量變大後,parquet 會更適合分析;若要多人共用或提供服務,才需要資料庫系統。格式可以依需求選擇,欄位、日期與版本固定才是核心。
延伸閱讀
- 超簡單台股每日爬蟲教學:15 行 Python 下載股價
- 用 Python 抓取每月營收:30 行下載全台股月營收
- 財報爬蟲超簡單:一次抓綜合損益、資產負債、營益分析表
- 台股選股完整指南:基本面、技術面、籌碼面、消息面
投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

