如何用 Python 抓三大法人買賣超?

打 GET /v2/datasets/institutional-flow,帶 symbol(必填)與 start_date / end_date,回應每列就是一個交易日的三大法人買賣。淨額欄位是 foreign_net_buy_sell、investment_trust_net_buy_sell、dealer_net_buy_sell,合計是 total_institutional_net_buy_sell。要加總前先看 market 欄位——上市與上櫃是兩套資料,混在一起會重複計。

三大法人

外資(及陸資)、投信、自營商,台股每日盤後公布的三種機構買賣超;資料來自 TWSE T86。

可以直接跑的 Python

這支一定要帶金鑰。免金鑰試玩只在「免費層資料集」加上五檔示範代號(2330、2317、2454、0050、2603)同時成立時才通,三大法人屬於 Starter 層,不在其中——不帶金鑰打會直接回 401 missing_api_key。

import requests

r = requests.get(
"https://api.twmarketdata.com/v2/datasets/institutional-flow",
headers={"X-API-Key": "sk_live_你的金鑰"},
params={"symbol": "2330", "start_date": "2026-06-01", "end_date": "2026-07-15", "limit": 5},
timeout=20,
)
r.raise_for_status()

for row in r.json()["rows"]:
print(row["date"], row["market"], row["foreign_net_buy_sell"], row["total_institutional_net_buy_sell"])

回應裡真正有的欄位

  • date、symbol、market — market 是 TWSE 或 TPEx,決定這列屬於哪個市場。
  • foreign_buy / foreign_sell、investment_trust_buy / investment_trust_sell、dealer_buy / dealer_sell — 買進與賣出兩邊分開。
  • foreign_net_buy_sell、investment_trust_net_buy_sell、dealer_net_buy_sell — 各自的淨額。
  • total_institutional_net_buy_sell — 三者合計淨額。
  • foreign_holding_ratio、institutional_participation_ratio — 外資持股比例與法人參與度。
  • provider、source_role、lineage、updated_at — 這筆從哪裡來、什麼時候更新的。

雷:跨市場加總會重複計

上市(TWSE)和上櫃(TPEx)是兩套獨立公布的資料。如果你把一段期間的所有列直接 sum(),而沒有先用 market 欄位篩,同一個概念會被算兩次,得到的「全市場買超」偏高。要算單一市場就先過濾 market;要算全市場,先確認你手上的列沒有同一 symbol 同一 date 出現兩次。

更新時間

三大法人是盤後資料,收盤後才公布,當天盤中查不到當天的數字。做每日排程時把時間排在盤後,並用 updated_at 確認你拿到的是最新那一版。

常見問題

1可以一次抓全市場所有個股嗎?
symbol 是必填參數,所以是一檔一檔查。要做全市場掃描就迴圈跑你的股票池,並注意方案的查詢配額。
2外資買超的單位是什麼?
回應欄位是原始數值,單位跟隨 TWSE T86 的公布口徑。要跨檔比較大小前,先用同一個欄位、同一個市場比,不要拿買賣超金額跟股數混用。
3資料從哪一年開始?
涵蓋起點依資料集而定,實際可查區間以資料集頁上標示的為準——那裡的數字是從資料庫直接生成的,不是手寫的。

想自己查這些資料?免費註冊

相關文章