Answer
This answer is currently available in Chinese only; an English version is coming soon.
三大法人買賣超怎麼抓?TWSE T86 端點用法與欄位陷阱
三大法人逐檔買賣超可以從 TWSE 的 T86 端點取得,免金鑰,而且和多數開放資料端點不同——它可以指定日期,一次回傳該交易日的全市場資料。最常見的錯誤是自己把欄位加總:外資與自營商各自拆成多個子欄位,重複相加會把數字算大。
這個端點是什麼
T86 是臺灣證券交易所的「三大法人買賣超日報」,逐檔提供外資、投信、自營商當日的買進、賣出與買賣超股數。2026-07-31 實測指定 2026-07-30 回傳 13,262 筆、指定 2024-03-15 回傳 16,051 筆,證實它確實依日期回傳當日資料,而不是只給最新快照。
curl "https://www.twse.com.tw/rwd/zh/fund/T86?date=20260730&selectType=ALL&response=json"和開放資料端點不一樣的地方
值得特別注意:T86 屬於 www.twse.com.tw 的報表 API,和 openapi.twse.com.tw 的開放資料端點是不同系列。開放資料端點多半只回最新一期,T86 則接受 date 參數,可以一天一天往回抓。回傳結構也不同——不是單純的陣列,而是含 stat、date、fields、data 的物件,欄位名放在 fields、資料放在 data 的二維陣列裡,需要自己把兩者對齊。
欄位陷阱:不要自己加總
這是實務上最容易算錯的地方。回傳共 19 個欄位,其中外資被拆成「外陸資(不含外資自營商)」與「外資自營商」兩組,自營商則被拆成「自行買賣」與「避險」兩組,另外還有一個彙總的自營商買賣超欄位。如果把看起來像外資或自營商的欄位全部相加,同一筆會被算兩次。要總計時,直接使用官方已經算好的最後一欄「三大法人買賣超股數」。
- 外陸資買賣超股數(不含外資自營商) 與 外資自營商買賣超股數 —— 兩者相加才是外資合計。
- 自營商買賣超股數(自行買賣) 與 自營商買賣超股數(避險) —— 兩者相加等於已彙總的自營商買賣超股數。
- 投信買賣超股數 —— 單一欄位,無子項。
- 三大法人買賣超股數 —— 官方彙總,做總計請直接用這欄。
單位是股數,不是張數或金額
所有數量欄位的單位是「股」。台股習慣以「張」(1,000 股)計量,要換算需自行除以 1,000;這個端點也不提供買賣超金額,需要金額時得自行併入當日價格計算。
非交易日會明確告訴你沒有資料
這點比多數端點友善:2026-07-31 實測指定 2026-07-26(週日)時,回傳的 stat 欄位為查無資料訊息且沒有資料列,而不是默默回到上一個交易日。寫排程時應該先檢查 stat 是否為 OK 再寫入,避免把錯誤訊息當成空資料處理。
import requests
def fetch_t86(date_yyyymmdd: str):
url = "https://www.twse.com.tw/rwd/zh/fund/T86"
params = {"date": date_yyyymmdd, "selectType": "ALL", "response": "json"}
payload = requests.get(url, params=params, timeout=30).json()
if payload.get("stat") != "OK":
return [] # 非交易日或查無資料
fields = payload["fields"]
return [dict(zip(fields, row)) for row in payload["data"]]
rows = fetch_t86("20260730")
print(len(rows))需要長期歷史或跨市場時
T86 一次只回一天,要建立多年歷史就得逐日呼叫並保存,且需自行處理非交易日、格式異動與上櫃(TPEx 另有自己的端點與欄位命名)。TW Market Data 的三大法人資料集把上市與上櫃整理進同一套 schema,可依股票與日期區間查詢,已知缺口保留揭露而不以推測值補洞。
curl "https://api.twmarketdata.com/v2/datasets/institutional-flow?symbol=2330&limit=10" \
-H "X-API-Key: <你的金鑰>"Related