![]()
Python 台股 API 怎麼選?資料品質比起始年更決定回測成敗
用 Python 做台股分析,大部分時間其實卡在「把資料弄到手」:爬蟲被擋、欄位零散、財報要對齊公布日、價格要自己調除權息。搜尋「python 台股 api」「python 台股套件」「台股資料庫下載」時,最常見的選項是證交所 OpenAPI、yfinance、FinMind、twstock、券商 API 與 finlab。我們在 2026 年 6 月逐一實測,結果如下。
| 方法 | 取得方式 | 股價起始年 | 涵蓋檔數 | 免費額度 | 已調除權息? | 內建避前視偏差? | 一句話定位 |
|---|---|---|---|---|---|---|---|
| twstock | pip 套件(爬證交所) | 約 2010 | 上市為主 | 全免費 | ❌ 要自己調 | ❌ | 最輕量,但只有價量、易被擋 |
| 證交所 OpenAPI | 官方 REST API | 僅當日/近期 | 全市場 | 全免費 | ❌ | ❌ | 官方來源,STOCK_DAY_ALL 適合抓當日全市場,歷史要自己每天存 |
| yfinance | pip 套件(Yahoo 公開資料) | 約 2000 | 含台股 | 全免費 | ⚠️ 可取調整後價格,需檢查欄位 | ❌ | 有歷史,但台股代號、欄位與缺漏要自己驗 |
| FinMind | 開源 API + Python SDK | 1994 | 全市場 | 有免費分級 | ✅ 有還原股價表 | ❌(要自己對齊) | 資料表廣、起始早,適合做資料倉儲與研究 |
| 富果 Fugle | 券商 API | 約 2010 | 全市場 | 開戶後免費 | ✅ | ❌ | 穩定、可下單,需開戶綁券商 |
| finlab ⭐ | pip 套件 + API | 2007 | 2,748 | 每月免費額度 | ✅ 內建 etl:adj_close |
✅ index_str_to_date() |
股價+月營收+財報+籌碼一行同格式,回測即用 |
涵蓋檔數與起始年為 finlab 實測值(查詢於 2026-06,見文末可下載腳本);其餘來源為各官方文件公開資訊。FinMind 官方 PyPI 頁面列出
pip install FinMind、Python SDK、每日更新與 API 請求限制;yfinance 官方文件說明它是使用 Yahoo 公開 API 的開源工具,主要供研究與教育用途;證交所 OpenAPI 頁面列出/exchangeReport/STOCK_DAY_ALL為上市個股日成交資訊端點。
選資料源時,很多人只看「歷史最早到哪一年」,於是覺得 FinMind 從 1994、yfinance 從 2000 一定占優勢。但對回測來說,決定成敗的通常是另外兩件事:
- 除權息有沒有調:台股每年配息 3–5%,5 年累積報酬若不還原會被低估 15–25%,基準直接失真。
- 有沒有避開前視偏差:財報、月營收都有「公布日」,回測若用到當天還沒公布的數字,績效會虛高、實單卻做不出來。
finlab 的價格從 2007 才開始,比 FinMind 晚 13 年。代價換來的是:這兩件最容易出錯的事它預設處理好,而且股價、月營收、財報、籌碼用的是同一種表格、同一行 data.get()。對回測而言,這層差異往往比多 13 年歷史更重要。下表把搜尋意圖對到資料源:
| 搜尋問題 | 適合先看哪一段 | 快速答案 |
|---|---|---|
openapi.twse.com.tw/v1/exchangereport/stock_day_all、stock_day_all |
證交所 OpenAPI | 這是官方當日上市個股日成交資訊端點,適合抓當日全市場,不是完整歷史資料庫 |
FinMind、pip install finmind、finmind api 申請 |
FinMind vs finlab | FinMind 適合資料表探索與自建資料倉儲;申請認證金鑰後額度較高 |
yfinance 台股、yahoo finance api 台股 |
yfinance | 適合快速拿歷史價量,但台股欄位、調整後價格與缺漏要檢查 |
python 台股 api、python 台股套件 |
6 種方法比較 | 若目標是回測,資料對齊與除權息比「能抓到」更重要 |
台股資料庫下載、證交所api歷史資料 |
CSV / 本地資料庫 | 官方 OpenAPI 要每天存;finlab 可抓成 DataFrame 後存 CSV、parquet 或 SQLite |
前視偏差(Look-ahead bias):回測時不小心用到當下還沒被市場知道的資訊(例如還沒公布的財報),會讓策略在歷史上看起來很神,實盤卻完全複製不出來。
先把資料接到回測:用 FinLab Skill 建第一個可執行環境
如果你的目標是「可回測的台股資料」而不只是下載 CSV,建議先把環境接起來,再回頭比較各 API 的細節。把下方提示詞交給 AI,它會安裝 FinLab Skill、引導 finlab.login(),並用本文的 data.get() 範例抓第一張收盤價表。
| 你現在卡在哪 | 下一步 |
|---|---|
| 只想看今天全市場行情 | 先看證交所 OpenAPI 的 STOCK_DAY_ALL |
| 想比較 FinMind、yfinance、finlab | 讀完本文六種資料源比較 |
| 想馬上跑一個策略 | 複製下方提示詞,讓 AI 重現本文籌碼 × 月營收回測 |
用 AI 開始 FinLab
把這句話交給你的AI,它會帶你完成設定並做出第一個策略。
告訴你的AI:
幫我設定 FinLab Skill,用 Python 抓台股資料並重現這篇文章籌碼回測,請讀:https://finlab.finance/setup?relatedUrl=/blog/python-get-taiwan-stock-data
顯示程式碼
import finlab
finlab.login()
from finlab import data
close = data.get('price:收盤價')免費方案有每月資料額度(以 MB 計),做選股、回測、學習都夠用;需要更高頻率更新或更大量下載再升級。整個流程不需要寫爬蟲、不必背 API 文件,之後所有資料都是同一行 data.get('資料表:欄位')。如果你想看 AI agent 的安裝方式與支援工具,也可以看 FinLab AI Agent 說明。
2026 最新實測:6 種抓台股資料方法逐一示範
下面每種方法都附一段可複製的程式碼,讓你比較「拿一檔台積電(2330)收盤價要寫多少」。
方法一:twstock(最輕量,只有價量)
顯示程式碼
import twstock
stock = twstock.Stock('2330')
prices = stock.fetch_from(2024, 1) # 從 2024/01 抓到現在
print(prices[-1].close) # 最近一筆收盤價優點是零成本、安裝即用;缺點是它本質是爬證交所,抓太頻繁會被擋,而且只有價量,沒有財報、籌碼,除權息也要自己處理。適合做最簡單的價格小工具。
方法二:證交所 OpenAPI(官方,但只留最新)
顯示程式碼
import requests, pandas as pd
url = "https://openapi.twse.com.tw/v1/exchangeReport/STOCK_DAY_ALL"
df = pd.DataFrame(requests.get(url).json())
print(df.head()) # 全市場「當日」收盤、開高低、成交量這是證交所官方端點,資料正確、免費。你在 Google 看到的 openapi.twse.com.tw/v1/exchangereport/stock_day_all、/v1/exchangereport/stock_day_all、stock_day_all openapi.twse,多半都在找同一個資料集;實際文件頁面列出的路徑是 https://openapi.twse.com.tw/v1/exchangeReport/STOCK_DAY_ALL。
它的定位很清楚:抓上市個股當日全市場行情,不是下載完整歷史股價。若要用它建立台股歷史資料庫,你需要每天收盤後排程:
| 需求 | 證交所 OpenAPI 能不能滿足 | 實務做法 |
|---|---|---|
| 抓今天所有上市股票收盤價 | 可以 | 每日呼叫 STOCK_DAY_ALL |
| 回補 10 年歷史日資料 | 不適合 | 需改用歷史資料頁、其他資料源,或自行長期累積 |
| 建立本地台股資料庫 | 可以,但要自己維護 | 每天存成 CSV、parquet 或 SQLite |
| 做含息回測 | 不夠 | 還要處理除權息、下市資料與交易成本 |
這正是 ARON HACK 用富果 API 那篇也點出的痛點:證交所只留最新,得自行備份。若你的目標是「今天行情表」,OpenAPI 很好;若你的目標是「可回測的 10 年台股資料庫」,資料清洗與保存成本要先算進去。
方法三:yfinance(有歷史,但台股偶爾不穩)
顯示程式碼
import yfinance as yf
df = yf.download("2330.TW", start="2010-01-01", auto_adjust=False)
print(df[["Close", "Adj Close"]].tail())yfinance 使用 Yahoo Finance 公開資料,安裝簡單、歷史也夠長。台股代號要加 .TW 或 .TWO,例如上市台積電是 2330.TW,上櫃股票通常用 .TWO。這個工具很適合快速看價量,但正式回測前要做三件檢查:
| 檢查項目 | 為什麼重要 |
|---|---|
Close 與 Adj Close 是否都在 |
yfinance 版本與 auto_adjust 參數會影響調整後價格欄位 |
| 是否有缺日或整段缺漏 | 台股資料維護不如美股穩定,長回測要補交易日 |
| ETF、上櫃股、下市股是否齊全 | 台股策略常需要完整股票池,單檔下載容易有生存者偏誤 |
方法四:FinMind(開源、起始最早、資料表最廣)
顯示程式碼
pip install FinMind顯示程式碼
from FinMind.data import DataLoader
api = DataLoader()
df = api.taiwan_stock_daily(stock_id="2330", start_date="1994-01-01")
print(df.tail())FinMind 是值得尊敬的開源專案,官方說明涵蓋台股技術面、基本面、籌碼面、衍生性商品與海外資料,資料每日更新;PyPI 頁面也列出 pip install FinMind、Python SDK 與 API request 上限。若要提高額度,可到 FinMind 會員頁取得認證金鑰,再依官方文件登入。它最適合做「資料倉儲」與資料表探索。做嚴謹回測時,仍要自己處理幾件事:
| 題目 | FinMind 的優勢 | 回測時要自己補的工作 |
|---|---|---|
| 股價歷史 | 起始早,適合長期資料研究 | 還原價、下市股、股票池口徑要固定 |
| 資料表探索 | 資料表廣,技術面、基本面、籌碼面都有 | 不同資料表欄位格式要自己合併 |
| API 認證 | 可註冊取得金鑰,提高請求額度 | 需要管理金鑰、額度與批次下載 |
| 月營收、財報 | 有基本面資料 | 公布日要對齊交易日,避免前視偏差 |
FinMind vs finlab:資料倉儲和回測環境的差別
FinMind 和 finlab 不該簡化成誰比較好;它們服務的工作不一樣。
| 比較項目 | FinMind | finlab |
|---|---|---|
| 主要定位 | 開源金融資料平台與 API | 台股量化研究、資料、回測與選股流程 |
| 安裝方式 | pip install FinMind |
pip install finlab,也可用 FinLab Skill 讓 AI 安裝 |
| 資料取得 | DataLoader().taiwan_stock_daily(...) 等方法 |
data.get('資料表:欄位') 統一取得整個市場 |
| 適合情境 | 自建資料庫、探索資料表、做自訂資料工程 | 快速回測、因子研究、AI 對話改策略 |
| 最大優勢 | 起始年早、資料表多、開源生態 | 同格式資料、回測引擎、除權息與公布日對齊 |
| 主要成本 | 要自己清洗、合併、對齊資料 | 歷史起始年較晚,進階資料有額度與方案限制 |
如果你的目標是「把台股資料下載下來做自己的資料庫」,FinMind 很適合;如果你的目標是「用台股資料快速做選股回測」,finlab 的 data.get()、sim() 與 FinLab Skill 會少掉很多資料工程。
方法五:富果 Fugle(穩定、可下單,需開戶)
顯示程式碼
from fugle_marketdata import RestClient
client = RestClient(api_key="YOUR_KEY")
data = client.stock.historical.candles(symbol="2330", from_="2024-01-01")
print(data["data"][:3])富果是券商級 API,穩定、可同時下單,適合要把回測接到實盤的人。代價是要開戶綁券商、申請金鑰。資料品質好,但歷史約從 2010 起。
方法六:finlab(一行抓,且回測即用)⭐
前面五種有個共同問題:每換一種資料(價格、營收、籌碼),就要換一套 API、換一種欄位格式、自己對齊日期。finlab 把整個市場整理成統一的「日期 × 股票」表格,任何資料都用同一行指令:
顯示程式碼
from finlab import data
close = data.get('price:收盤價') # 一張表:列=日期,欄=股票代號,整個市場一次到手
print(close['2330'].tail()) # 看台積電最近幾天收盤價實際印出(查詢於 2026-06):
顯示程式碼
date
2026-06-01 2355.0
2026-06-02 2380.0
2026-06-03 2425.0
2026-06-04 2385.0
2026-06-05 2365.0
Name: 2330, dtype: float64要哪一檔就 close['2330'](代號用字串),不必一檔一檔抓。下一節我們把月營收、財報、籌碼也用同一行拿到。
一行抓多種資料:股價、月營收、財報、籌碼
finlab 與其他來源最大的差異在於換資料不換寫法。下表覆蓋數字為 2026-06 實測:
| 資料 | 一行指令 | 涵蓋檔數 | 起始 |
|---|---|---|---|
| 日收盤價 | data.get('price:收盤價') |
2,748 檔 | 2007(近 20 年) |
| 除權息還原價(基準用) | data.get('etl:adj_close') |
2,748 檔 | 2007 |
| 月營收年增率 | data.get('monthly_revenue:去年同月增減(%)') |
2,289 檔 | 2005(21 年) |
| 財報 ROE | data.get('fundamental_features:ROE稅後') |
2,832 檔 | 2013-Q1 |
| 投信買賣超 | data.get('institutional_investors_trading_summary:投信買賣超股數') |
2,668 檔 | 2012-05 |
| 外資買賣超 | data.get('institutional_investors_trading_summary:外陸資買賣超股數(不含外資自營商)') |
2,668 檔 | 2012-05 |
依資料類型,往下看對應策略
每一種資料都對應到一套可重現的台股策略實作。抓到資料後,依你想做的方向往下接:
| 資料類型 | 想做什麼 | 接著看哪一篇 |
|---|---|---|
| 月營收 | 用營收成長動能選股 | 月營收動能策略、月營收選股三種方法 |
| 財報 ROE | 用獲利品質拆解選股 | 杜邦分析選股 |
| 籌碼(法人買賣超) | 跟著法人資金動向 | 法人籌碼選股 |
| 美股 | 把同一套寫法搬到美股 | 美股資料庫使用指南 |
把台積電的股價、月營收 YoY、財報 ROE、籌碼一次印出來,你會看到它們長得「一模一樣」(都是同一種序列):
顯示程式碼
print(data.get('monthly_revenue:去年同月增減(%)')['2330'].tail())
# 2026-01-12 20.43
# 2026-02-10 36.81
# 2026-03-10 22.17
# 2026-04-10 45.19 ← 月營收年增 +45.19%
# 2026-05-11 17.49
print(data.get('fundamental_features:ROE稅後')['2330'].tail())
# 2025-Q1 8.08
# 2025-Q2 8.62
# 2025-Q3 9.36
# 2025-Q4 9.63
# 2026-Q1 10.06 ← 單季 ROE 逐季回升
print(data.get('institutional_investors_trading_summary:投信買賣超股數')['2330'].tail())
# 2026-06-03 647975
# 2026-06-04 537838
# 2026-06-05 2900428 ← 投信單日買超近 2,900 張(2026-06-05,來源:finlab)下面這張圖就是一行 data.get() 拿到的東西:台積電近 120 個交易日的股價,疊上投信(藍)、外資(綠)的單日買賣超。

籌碼(法人買賣超):投信、外資、自營商三大法人每天買進與賣出的差額(淨買賣超)。市場常把法人連續買超視為認同訊號,但這個直覺禁不禁得起回測,下一節用兩組對照來驗證。
用一個籌碼策略檢驗:這份資料能接上回測流程
資料乾不乾淨,跑一次回測就知道。我們用一個跨多種資料的籌碼策略實跑,順帶展示 finlab 的廣度:同一份程式碼裡同時用到籌碼(投信)、基本面(月營收)與價量(流動性),差別只是多打幾行 data.get()。
「跟著聰明錢」這個想法在學術上有根據,但效果好壞取決於怎麼用:
| 論文 | 一句話白話 |
|---|---|
| Grinblatt, Titman & Wermers (1995) | 共同基金普遍採取動能交易,基金買超的持股後續表現較佳。 |
| Jegadeesh & Titman (1993) | 過去 3–12 個月的贏家會續強(動能效應),法人連買常與價格動能同向。 |
| Barber, Lee, Liu & Odean (2009) | 用台灣完整成交資料證明:散戶交易長期承受顯著成本,法人交易相對占優。 |
| Cohen, Gompers & Vuolteenaho (2002) | 機構傾向在「現金流好消息」上加碼;籌碼若搭配基本面改善訊號更可靠。 |
這幾篇放在一起,指向一個可檢驗的假設:籌碼訊號搭配基本面把關時較可靠,只看籌碼則容易追在高點。下面用兩組對照回測這個假設。
對照組:投信連買 5 天就追,13 年只有 4.76% CAGR
常見的第一直覺是投信連續買超就跟。我們照這個直覺寫(連買 5 日、選買超最多的 20 檔、週頻換股):
顯示程式碼
trust = data.get('institutional_investors_trading_summary:投信買賣超股數')
vol = data.get('price:成交股數')
streak = (trust > 0).rolling(5).sum() >= 5 # 連續 5 日買超
liq = vol.average(20) > 500*1000 # 流動性過濾
pos = trust.rolling(5).sum()[streak & liq].is_largest(20)
from finlab.backtest import sim
report = sim(pos.loc['2013':], resample='W') # 週頻換股結果是 CAGR 4.76%、最大回撤 −51.8%、Sharpe 0.24。不但跑輸含息 0050(CAGR 19.86%),回撤也接近腰斬。這與 Barber et al. 的觀察一致:單純跟著法人短線進出的那一方,長期報酬並不理想。
優化組:籌碼強度 × 月營收動能,13 年 CAGR 30.1%
對照組的問題有兩個:用「買超股數」會偏向大型股,而且完全沒有基本面把關。優化組改成這樣:
- 投信買超強度 = 20 日投信淨買超 ÷ 20 日成交量(用占比而非絕對股數,降低大型股偏誤);
- 疊上月營收年增 > 0、且月營收創 12 個月新高(基本面把關);
- 用
rank把兩個訊號做複合排序選 15 檔,月頻換股,並用resample_offset='14D'對齊月營收公布日(避前視偏差、捕捉公布後的營收動能):
顯示程式碼
trust_intensity = (trust.rolling(20).sum() / vol.rolling(20).sum()) # 籌碼強度
rev = data.get('monthly_revenue:當月營收')
rev_yoy = data.get('monthly_revenue:去年同月增減(%)')
rev_high = rev.average(3) == rev.average(3).rolling(12).max() # 營收創高
score = trust_intensity.rank(axis=1, pct=True) + rev_yoy.rank(axis=1, pct=True)
cond = (vol.average(20) > 500*1000) & rev_high & (rev_yoy > 0)
position = score[cond].is_largest(15)
report = sim(position.loc['2013':], resample='M', resample_offset='14D')績效對照(2013-01 ~ 2026-06,基準 0050 用含息 etl:adj_close):
| 指標 | 對照組(天真追投信) | 優化組 ⭐(籌碼強度×營收) | 0050(含息) |
|---|---|---|---|
| 年化報酬(CAGR) | 4.76% | 30.15% | 19.86% |
| 月報酬 Sharpe | 0.23 | 1.05 | — |
| 月報酬 Sortino | 0.43 | 2.18 | — |
| 日報酬 Sortino | 0.37 | 1.71 | — |
| 最大回撤(MDD) | −51.8% | −41.7% | — |
| 月勝率 | 47.5% | 49.9% | — |
數字來源:finlab
sim()回測,基準 0050 採etl:adj_close(已調除權息)。月報酬 Sortino 2.18 通過風險調整門檻(≥1.5)。完整可重現腳本見文末下載。
把兩條曲線和大盤畫在一起。藍色是優化組,橘色是天真追籌碼的對照組,灰色虛線是含息 0050:

逐年來看,優化組在多數年份贏過 0050,且在 2018、2022 的空頭年回撤可控:

下面是完整互動式回測報告:月報酬熱力圖、權益曲線、年度績效、持股明細全在裡面,可直接在文章中操作:
回測方法與限制(這些數字怎麼算出來的)
漂亮的數字要先交代口徑才有意義。本策略的回測設定與已知限制如下:
| 項目 | 本文設定 |
|---|---|
| 回測區間 | 2013-01 ~ 2026-06,全段 in-sample;未做樣本外/滾動測試 |
| 交易成本 | 手續費以 0.1425% × 1/3(打三折)計;sim() 預設於賣出扣證交稅 0.3% |
| 滑價 | 未額外假設;實際衝擊取決於資金規模與個股成交量,本文未估算策略容量 |
| 股票池 | 全上市櫃,加 20 日均量 > 500 張的流動性過濾(避免回測買得到、實單買不到) |
| 排除類別 | 未特別排除金融股/KY 股/全額交割股;結果可能含此類偏誤 |
| 前視偏差 | 月營收用 resample_offset='14D' 對齊公布日;籌碼、價量為當日可得資料 |
| 權重與持股 | 等權,持股 15 檔,月頻換股 |
把這幾項攤開講,目的是讓你能判斷哪些數字可信、哪些要打折看。例如全段 in-sample 意味著參數可能對這 13 年的市況有後見之明,實單前值得自己再跑一次樣本外。
可以在這十幾行內把籌碼、月營收、流動性組成策略並回測,關鍵在於這些資料一行就拿到、格式統一、除權息與公布日都對齊好了。換成爬蟲方案,光把這三種資料對齊到同一張交易日表格,就要寫上百行清洗碼。想看更多因子組合,可參考 四因子選股實戰:複合因子贏過 0050 與 法人籌碼跟單術。
不離開這頁,直接跑一次真實回測
資料接上回測流程長什麼樣,用下面的回測器直接體驗:選一組因子、按執行,就會在瀏覽器裡用真實台股資料跑出淨值曲線與績效指標,不需要安裝任何環境。
台股策略回測器
回測區間 2020-01 ~ 2026-06| 指標(2020–2026) | 多因子複合 | 0050 含息 |
|---|---|---|
| 年化報酬(CAGR) | 36.8% | 35.2% |
| 日夏普比率 | 1.26 | 1.46 |
| 索提諾比率 | 1.96 | 2.5 |
| 最大回撤 | -47% | -34% |
| 平均持股數 | 40 檔 | 1(ETF) |
因子:營收成長、ROE 品質、價格動能、低波動。數字為 finlab sim() 實跑、已扣手續費與證交稅;過去績效不代表未來。
想用最新台股資料、自己改因子組合與持股數即時重算?登入 FinLab
後,整個回測會在你的瀏覽器跑真實 finlab 引擎(資料截至今日)。
把資料存成 CSV / 本地資料庫(離線重用)
抓下來的是標準 pandas DataFrame,要存檔、離線重用都很直覺:
顯示程式碼
close = data.get('price:收盤價')
close.to_csv('tw_close.csv') # 存成 CSV
close.to_parquet('tw_close.parquet') # 大檔建議 parquet,讀寫更快
# 存進 SQLite 本地資料庫
import sqlite3
con = sqlite3.connect('tw_stock.db')
close['2330'].to_frame('close').to_sql('tsmc_close', con, if_exists='replace')finlab 本身也會把抓過的資料快取在本地,同一個資料表第二次 data.get() 幾乎瞬間回應,不會重複消耗額度。
反爬蟲被擋怎麼辦?
如果你執意自己爬證交所/Yahoo,常見會踩到:
| 症狀 | 原因 | 實務解法 |
|---|---|---|
抓幾次後回 HTTP 403 / 429 |
同一 IP 請求過快被限流 | 加 time.sleep() 隨機延遲、降頻;嚴重時換 IP |
| 回傳空白或亂碼 | 沒帶 User-Agent、編碼錯 |
補 headers、用 big5/utf-8 正確解碼 |
| 抓到一半欄位變了 | 網站改版 | 寫防呆、定期維護解析器 |
| 歷史資料抓不到 | 證交所只留最新 | 自己每天排程存檔累積 |
爬蟲的維護成本是長期的:網站一改版,你的解析程式就跟著壞。這也是正式量化研究多半改用整理好的資料源的原因,把時間花在策略上,而不是跟反爬蟲機制周旋。finlab 走 API,不會被擋,資料表也由團隊維護更新。延伸閱讀:程式交易是什麼?從零開始的自動化交易、用 Python 計算 158 種技術指標、Python 選股與回測教學。
延伸閱讀:從台股資料到程式交易
這篇是 程式交易 裡「用 Python / 工具取得資料」的入門頁。延伸學習路徑:
- 想知道量化交易全貌 → 量化交易完整指南
- 想學怎麼選股 → 股票選股方法總覽
- 想看更多因子實測 → 台股單因子 vs 複合因子實測圖
- 想看籌碼面深入策略 → 法人籌碼跟單術、散戶反向指標策略
- 想串月營收事件 → 月營收動能與公布後漂移(PEAD)
常見問題(FAQ)
| 問題 | 回答 |
|---|---|
| Python 台股 API 要選哪個? | 若只是抓當日上市行情,證交所 OpenAPI 的 STOCK_DAY_ALL 夠用;若要快速抓歷史價量,yfinance 或 FinMind 上手快;若要做含息回測、月營收、財報與籌碼策略,finlab 的資料格式與回測流程比較完整。 |
| Python 股價怎麼抓? | 看需求選工具:只抓單檔最輕量用 twstock,twstock.Stock('2330') 加 fetch_from() 幾行就拿到 2330 的價量;要含歷史價量用 yfinance 的 yf.download("2330.TW"),上櫃股票通常用 .TWO;要一次拿整個市場,用 finlab 的 data.get('price:收盤價') 一行取得 2,748 檔(2007 起),單檔用 close['2330'] 取出,代號要用字串。 |
openapi.twse.com.tw/v1/exchangeReport/STOCK_DAY_ALL 是什麼? |
這是證交所 OpenAPI 的上市個股日成交資訊端點,常被搜尋成小寫 stock_day_all。它適合抓當日全市場行情,不是完整歷史資料庫;要做歷史回測,需要每天排程保存,或改用已整理好的歷史資料源。 |
| 證交所 API 有歷史資料嗎? | STOCK_DAY_ALL 主要提供當日全市場行情。證交所另有月報、個股日成交等歷史查詢頁,但格式、頻率、欄位與批次下載都要自己整理。若你要長期台股資料庫,重點是保存排程、除權息、下市股與交易日對齊。 |
| FinMind 和 finlab 差在哪? | FinMind 是開源金融資料平台,資料表多、起始年早,適合探索資料與自建資料庫;finlab 是台股量化研究與回測環境,強項是同一種表格格式、data.get()、sim()、除權息與公布日對齊。資料工程能力強的人可用 FinMind;想把時間放在策略驗證的人通常會偏向 finlab。 |
pip install finmind 要怎麼用? |
官方套件名稱在 PyPI 上是 FinMind,常見安裝指令是 pip install FinMind。安裝後可用 from FinMind.data import DataLoader,再呼叫 taiwan_stock_daily() 抓股價。若有認證金鑰,可依官方文件登入以提高請求額度。 |
| FinMind API 要申請嗎? | 不一定。FinMind 可不登入使用,但官方文件列出未登入與登入後的 request 上限不同;註冊並取得認證金鑰後,適合較大量或較穩定的批次下載。金鑰建議放環境變數,不要寫在程式碼或筆記裡。 |
| yfinance 可以抓台股嗎? | 可以,上市股票通常用 .TW,上櫃股票通常用 .TWO,例如 2330.TW。但 yfinance 官方定位是使用 Yahoo 公開 API 的研究工具,台股長回測要檢查缺日、欄位、auto_adjust 與 Adj Close,不要只下載一次就拿去做正式策略。 |
| 台股歷史資料最早到哪一年? | 看來源:FinMind 約 1994、yfinance 約 2000、finlab 股價 2007、月營收 2005;但對回測而言,除權息有沒有調、財報公布日有沒有對齊比起始年更關鍵。finlab 這兩點預設做好。 |
| 台股歷史資料下載有哪些管道? | 證交所 OpenAPI 只提供當日行情,要自己每天排程保存才能累積歷史;FinMind 約 1994 起、yfinance 約 2000 起、finlab 股價 2007 起且一次涵蓋 2,748 檔,可直接抓成 DataFrame,再用本文的 to_csv()、to_parquet() 或 SQLite 範例存成本地歷史資料庫。回測前先確認除權息已還原,finlab 直接用 etl:adj_close 即可。 |
| 台股資料庫下載後要存什麼格式? | 小型研究可存 CSV;中大型資料建議 parquet,比 CSV 更快更省空間;若要用 SQL 查詢單檔或多檔資料,可放 SQLite。本文示範 to_csv()、to_parquet() 與 SQLite。 |
| 證交所爬蟲限制怎麼處理? | 降低頻率、加入隨機延遲、補 User-Agent、處理編碼與欄位變動都必要。長期維護成本不低,尤其網站改版或限流時。若你的目標是策略研究,使用整理好的 API 通常比維護爬蟲省時間。 |
| 要先開戶嗎? | 不用。finlab、twstock、yfinance、FinMind 都只要註冊或直接 pip 安裝;只有富果 Fugle 這類券商 API 需要開戶綁券商。 |
| 免費版能抓多少? | finlab 免費方案有每月資料額度(以 MB 計),做選股與回測足夠;twstock、yfinance、證交所 OpenAPI 全免費但功能單一;FinMind 有免費分級。 |
| 盤中即時報價怎麼辦? | 本文資料以日頻為主,適合選股與回測。要盤中即時/逐筆,需用券商級即時 API(如富果),或 finlab 的即時資料方案。 |
| 有美股資料嗎? | finlab 有美股,指令格式相同;yfinance 對美股支援最完整;FinMind 也有海外資料表。 |
| 不會寫 Python 可以用 FinLab Skill 嗎? | 可以。把上方 FinLab Skill 安裝元件產生的提示詞交給 AI,它會協助安裝、抓資料並重現本文回測。你仍然可以看見 Python 程式碼,但主要操作可以用自然語言描述條件。 |
| 這些資料能拿去實單嗎? | 回測通過不代表實單一定賺。要考慮滑價、手續費、流動性與資金控管,且過去績效不代表未來,務必小額驗證。 |
📎 可下載資源
- 完整可重現回測腳本:strategy.py(籌碼強度 × 月營收動能,含對照組)
- 互動式回測報告:report_strategy.html、report_baseline.html
作者:FinLab 量化研究團隊,專注台股因子研究與回測工程,所有數字皆由 finlab 套件實跑,可用文末腳本自行重現。最後更新:2026-06。資料覆蓋數字查詢於 2026-06。投資有風險,過去績效不代表未來表現,本內容僅供教學參考,不構成投資建議,請依個人風險承受度審慎評估。
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

