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