Python 抓台股資料,該怎麼選資料來源?
先確定你要做的是哪一種事,再回頭看資料源需要具備什麼性質。做展示或學習,官方開放端點免註冊就能開始;做需要重現的回測,就要能查歷史區間、保留已下市個股、而且有辦法判斷每筆數字最早何時可知。下面六個問題可以拿去檢查任何來源,包括我們——最後一節誠實列出我們不符合的項目。
六個問題,決定你需要什麼
- 你需要回溯多久的歷史?只要「從現在開始」,自己每天存官方快照就夠;要既有的多年歷史,就需要一個已經累積好的來源。
- 你的股票池要不要包含已下市個股?做回測要,做現況監控不用。查不到下市代號的來源,回測結果會偏高。
- 你需要判斷「這筆數字最早何時可知」嗎?做財報或營收相關的回測要,做技術面不一定要。
- 你要不要跨上市與上櫃?要的話,注意兩邊在官方是分開的端點與欄位命名。
- 你需要即時嗎?需要的話,盤後型的來源(包括我們)都不適用,要找行情商。
- 你願意自己維護排程、清洗與補漏嗎?願意的話免費路線完全可行;不願意的話,你買的是時間不是資料。
怎麼驗一個來源,而不是聽別人說
每一項都可以自己打一次確認,不用相信任何人的介紹文(包括這一篇)。以下是我會做的五個檢查。
- 拿一個你知道已經下市的代號去查。查不到,就有生存者偏差。
- 查一段兩年前的日期區間。只回最新一天,代表它是快照型來源,歷史要你自己累積。
- 看財報或月營收有沒有辦法對應到公告時點。只有期末日、無從判斷公告時間,就無法避免前視偏誤。
- 看缺漏怎麼呈現。被前值或 0 悄悄填平的序列,事後看不出來。
- 看日期與數值的型別。民國年字串與字串型數字都要自己轉,那是你的工時。
如果你要做的是展示、教學或一次性分析
官方開放端點免註冊、免金鑰、直接 GET 就回 JSON,是第一手來源,做這類用途完全足夠。代價是它回的是最新一期快照、日期是民國年、數值是字串,而且上市與上櫃分屬不同端點——這些都是你自己處理得來的工。
如果你要做的是需要重現的回測
那你需要的性質是:能查歷史區間、保留已下市個股的價史、以及能判斷每筆數字最早可知的時點。這三項缺一,回測結果就會系統性偏樂觀,而且偏差不會顯示在績效報表上——這也是為什麼它值得在選來源時就先確認,而不是等做完再回頭懷疑。
如果你要接 AI agent 或自動化流程
你會需要穩定的結構、可程式化的探索方式,以及每筆資料能回推來源。我們這邊每筆回應帶 provider、source_role 與 lineage,並提供 llms.txt 與 openapi.json 供程式探索。這對人類讀者用處不大,對 agent 有差。
我們符合哪些、不符合哪些
- 符合:可查歷史區間;保留已停止交易個股的價史;上市與上櫃併入同一套 schema 並以 market 標明;日期與數值已轉型;每筆帶來源與 lineage。
- 不符合:沒有即時報價,這裡是歷史與盤後資料。
- 不符合:沒有一個統一的 as_of 查詢參數幫你做時點過濾,公告日欄位目前也還在回填——現階段要靠法定公告時點自己算知道日。
- 不符合:沒有全站統一的缺漏欄位,不同資料集的缺漏訊號不一樣。
- 部分符合:已還原股價不直接提供,提供的是官方調整因子,後復權由你自己算。
可以並用,不必二選一
很常見的組合是:用官方開放端點做每日增量、用一份已累積的歷史補齊過去,兩邊資料同源所以對得起來。選來源不是選陣營,是選哪一段工作你要自己做。
常見問題
1免費的來源夠用嗎?
看你要做什麼。展示、學習、一次性分析,官方開放端點就夠而且是第一手。需要多年歷史、下市個股、或公告時點依據時,缺的不是「免費或付費」,是那三項性質。
2怎麼知道一個來源有沒有生存者偏差?
拿一個你確定已經下市的代號去查。查得到完整價史就沒有,查不到就有。這個檢查一分鐘做得完,比看任何介紹文可靠。
3你們最不適合什麼情況?
需要即時報價的情況。這裡是歷史與盤後資料,盤中要即時價格請找行情商。另外如果你只需要「從今天開始」的資料、也不介意自己維護排程,官方開放端點就足夠了。
4為什麼這篇不直接比較各家?
因為適配比排名有用。同一個來源對做展示的人剛好,對做嚴謹回測的人就不夠——差別在需求不在優劣。上面那份檢查清單可以拿去驗任何來源,包括我們,這比一張評分表誠實。
想自己查這些資料?免費註冊。