TAIFEX 期貨部位 vs TWSE T86 現貨買賣超 — 法人籌碼兩組獨立訊號的差別與整合讀法
觀察台股法人動向,多數工具與財經報導預設以 TWSE T86 的每日買賣超數字作為唯一來源。這個做法在現貨層面是足夠的,但在大盤方向判讀上存在一個結構性的資料缺口:法人在期貨市場的未平倉部位,與現貨市場的買賣超是兩組互相獨立的訊號,分別來自不同的交易所、不同的 API endpoint,資料不互通。本文整理兩個端點的結構差異、欄位命名實況、以及整合讀法。
① 兩個端點的角色定位
| 面向 | TWSE T86(現貨) | TAIFEX 三大法人期貨(/v1/MarketDataOfMajorInstitutionalTradersDetailsOfFuturesContractsBytheDate) |
|---|---|---|
| 交易所 | 台灣證券交易所 (TWSE) | 台灣期貨交易所 (TAIFEX) |
| 市場 | 股票現貨市場 | 期貨市場 |
| 資料意義 | 法人在哪些個股買進 / 賣出了股票 | 法人在哪些期貨契約持有多方 / 空方未平倉部位 |
| API 來源 | https://www.twse.com.tw/rwd/zh/fund/T86 | https://openapi.taifex.com.tw/v1/MarketDataOfMajorInstitutionalTradersDetailsOfFuturesContractsBytheDate |
| 欄位語言 | 中文欄位名(如 外陸資買賣超股數(不含外資自營商)) | 英文欄位名(如 OpenInterest(Net)、TradingVolume(Long)) |
| 更新頻率 | 每交易日收盤後(約 17:30) | 每交易日收盤後 |
| 預設回傳 | 指定日期的個股清單(需帶 date query param) | 最近交易日的期貨契約清單(預設最新,無需 date param) |
兩個端點回傳的都是「三大法人」(外資 / 投信 / 自營商)的數據,但回答的是完全不同的問題:T86 回答「法人昨天買了哪些股票」,TAIFEX 端點回答「法人目前持有多少期貨部位」。
② TWSE T86 結構回顧
T86 的完整技術細節見 TWSE T86 欄位命名實況(本文不重複展開)。以下僅列出與 TAIFEX 對照時的關鍵差異點。
T86 以個股為單位,每一筆 record 代表一支股票在當日三類主體的買賣超:
GET https://www.twse.com.tw/rwd/zh/fund/T86?date={YYYYMMDD}&selectType=ALL&response=json
回傳 JSON 含 fields 陣列(中文欄位名)與 data 二維陣列(各股逐列)。欄位包含:
外陸資買賣超股數(不含外資自營商) ← 外資現貨淨買賣
投信買進股數 / 投信賣出股數 ← 投信現貨進出
自營商買進股數 / 自營商賣出股數 ← 自營商現貨進出
T86 資料單位為股數(shares),代表法人實際發生的現貨交易量。T86 不含期貨訊息。
③ TAIFEX 三大法人期貨端點:結構與欄位實況
TAIFEX OpenAPI(https://openapi.taifex.com.tw/)為 Swagger UI,swagger.json 位於 https://openapi.taifex.com.tw/swagger.json,base server 為 https://openapi.taifex.com.tw/v1。
三大法人期貨部位的主要端點(依 Swagger,2026-05-20 實測):
| 端點 path | 中文說明 |
|---|---|
/MarketDataOfMajorInstitutionalTradersDetailsOfFuturesContractsBytheDate | 三大法人 — 區分各期貨契約 — 依日期 |
/MarketDataOfMajorInstitutionalTradersGeneralBytheDate | 三大法人 — 彙整(不分契約)— 依日期 |
兩個端點不只回傳粒度(分契約 vs. 彙整)不同,欄位結構本身也有三處差異:(1) General 端點沒有 ContractCode 欄位;(2) 金額欄位單位不同——Details 為 (Thousands) 千元,General 為 (Millions) 百萬元(相差 1000 倍);(3) 未平倉契約金額 key 的大小寫不同——Details 為 ContractValueofOpenInterest...、General 為 ContractValueOfOpenInterest...(of vs Of)。兩端點僅共用 8 個 key(Date、Item、TradingVolume(Long/Short/Net)、OpenInterest(Long/Short/Net)),其餘 6 個金額 key 的名稱與單位皆不同。若誤以為兩端點結構一致而共用同一段解析程式,會撞到欄位不存在、或金額差 1000 倍卻不報錯的隱性錯誤。
欄位結構(2026-05-20 實測,回傳格式為 JSON 陣列)
每筆資料的欄位名稱(由 swagger.json schema 與實際回傳雙重對照):
| 欄位 key | 中文說明 | 單位 |
|---|---|---|
Date | 日期 | AD 8 碼 YYYYMMDD(如 "20260520") |
ContractCode | 商品名稱(期貨契約名稱) | 中文字串(如 "臺股期貨") |
Item | 身份別(法人類別) | "自營商" / "投信" / "外資及陸資" |
TradingVolume(Long) | 多方交易口數 | 字串(需轉 int) |
TradingValue(Long)(Thousands) | 多方交易契約金額(千元) | 字串 |
TradingVolume(Short) | 空方交易口數 | 字串 |
TradingValue(Short)(Thousands) | 空方交易契約金額(千元) | 字串 |
TradingVolume(Net) | 多空交易口數淨額 | 字串(正 = 多方多於空方) |
OpenInterest(Long) | 多方未平倉口數 | 字串 |
OpenInterest(Short) | 空方未平倉口數 | 字串 |
OpenInterest(Net) | 多空未平倉口數淨額 | 字串(正 = 未平倉多頭部位淨多) |
實際回傳範例(單筆,2026-05-20 臺股期貨自營商):
// 來源: GET https://openapi.taifex.com.tw/v1/MarketDataOfMajorInstitutionalTradersDetailsOfFuturesContractsBytheDate
// 資料日期 2026-05-20
{
"Date": "20260520",
"ContractCode": "臺股期貨",
"Item": "自營商",
"TradingVolume(Long)": "14693",
"TradingValue(Long)(Thousands)": "118019292",
"TradingVolume(Short)": "14120",
"TradingValue(Short)(Thousands)": "113482405",
"TradingVolume(Net)": "573",
"TradingValue(Net)(Thousands)": "4536887",
"OpenInterest(Long)": "6772",
"ContractValueofOpenInterest(Long)(Thousands)": "54396892",
"OpenInterest(Short)": "4324",
"ContractValueofOpenInterest(Short)(Thousands)": "34767181",
"OpenInterest(Net)": "2448",
"ContractValueofOpenInterest(Net)(Thousands)": "19629711"
}
TAIFEX 端點的 Date 欄位為 AD 8 碼(YYYYMMDD),與 TWSE BWIBBU_d 的 Date 格式相同,但不同於 TWSE STOCK_DAY_ALL 的 ROC 7 碼格式(詳見 TWSE OpenAPI 的日期格式陷阱)。整合兩個來源的資料時,日期 format 需分別 parse。
④ 兩組訊號的意義差別與容易混讀的地方
交易量 vs 未平倉部位:兩個維度的區分
TAIFEX 端點同時提供兩類數字:
TradingVolume(Net)(當日多空交易量淨額):反映當天新增了多少多方或空方成交,是「今天的動作方向」OpenInterest(Net)(未平倉多空口數淨額):反映截至今日法人持有的期貨部位累積方向,是「目前站哪邊」
對大盤方向判讀而言,OpenInterest(Net) 通常比 TradingVolume(Net) 更具有持續性訊號意義。單日交易量大但未平倉未增加,可能是換手(平倉舊部位同時建新部位),未必代表方向性增加。
期貨多空不等同現貨看多看空
期貨部位的方向解讀比現貨複雜,原因在於法人使用期貨的目的不只有方向性押注:
- 避險操作:持有大量現貨的法人(如外資的 ETF 持倉)可能在期貨市場建立空頭部位作為對沖,此時期貨空頭不代表「看空台股」,而是「對沖現貨部位的價格波動風險」
- 跨市場套利:期現貨間的價差套利策略會同時在兩個市場建立對立部位
- 換月展倉:期貨合約有到期日,臨近到期時大量未平倉部位需要展倉(換到下一個月份契約),展倉產生的交易量不代表方向性訊號
因此,TAIFEX 三大法人期貨部位若外資 OpenInterest(Net) 為負(空頭淨多),不能直接等同「外資看空台股」,需要同時對照外資的現貨持倉方向(T86 累積數據)才能判斷是否為避險部位。
自營商期貨訊號的雜訊源
三大法人中,自營商在期貨市場的操作雜訊源與現貨相似但不同:
- 現貨自營商的雜訊來自「避險操作混入 T86 合計欄位」(見 三類法人資金的性質差別)
- 期貨自營商的雜訊來自避險部位的機械性調整:當自營商有大量認購 / 認售權證未到期,需要動態調整期貨部位來維持中性避險,這類操作每天都會產生交易量,但不代表方向性判斷
⑤ 兩端點的整合取值 pattern
若工作流需要同時讀取現貨法人買賣超(T86)與期貨法人未平倉部位(TAIFEX),最小的兩端點組合如下:
// 1. 現貨三大法人買賣超 (TWSE T86)
// 欄位為中文名,date 參數為 YYYYMMDD 西元 8 碼
const twseT86Url =
`https://www.twse.com.tw/rwd/zh/fund/T86?date=${dateYYYYMMDD}&selectType=ALL&response=json`;
// 2. 期貨三大法人未平倉部位 (TAIFEX OpenAPI v1)
// 欄位為英文名,預設回傳最新交易日,無需 date param
const taifexUrl =
`https://openapi.taifex.com.tw/v1/MarketDataOfMajorInstitutionalTradersDetailsOfFuturesContractsBytheDate`;
// 3. 從 TAIFEX response 抓臺股期貨外資及陸資未平倉淨額
// 對齊 ContractCode === '臺股期貨' && Item === '外資及陸資'
// 注意:TAIFEX 的 Item 值是「外資及陸資」而非「外資」· 字串完全比對失敗不會報錯(見 §⑥)
function getTaifexForeignOpenInterestNet(data) {
const row = data.find(
(r) => r.ContractCode === '臺股期貨' && r.Item === '外資及陸資'
);
if (!row) {
throw new Error('TAIFEX: 臺股期貨外資及陸資 row not found');
}
return parseInt(row['OpenInterest(Net)'], 10);
}
// 4. 兩端點的日期都是西元 8 碼 YYYYMMDD,可直接比對同一交易日
// TWSE T86 date param: YYYYMMDD (傳入 query param)
// TAIFEX Date 欄位: "20260520" (response 內 key)
假日 / 非交易日行為
| 端點 | 假日行為 |
|---|---|
| TWSE T86 | 回傳 { "stat": "很抱歉,沒有符合條件的資料!", "total": 0 }(逗號為全形 U+FF0C,非 HTTP error。穩健判斷建議用 stat !== 'OK' 或 total === 0,而非對 message 做字串完全比對) |
TAIFEX /v1/...BytheDate | 建議以 Date 欄位確認回傳的資料日期是否符合預期交易日,避免因 API 預設回傳「最近交易日」而造成日期不一致 |
⑥ 整合判讀時的常見誤解
誤解一:看到外資期貨空頭淨多就代表外資看空
如上文所述,外資持有大量 TWSE 現貨時,期貨空頭可能是對沖而非方向性看空。期貨部位的方向意義需要放回現貨持倉的脈絡下解讀,兩個端點的數字要並列觀察。
誤解二:T86 買賣超跟期貨多空淨額應該方向一致
兩個訊號在時間維度上也不對齊:T86 是「昨日發生的交易」,TAIFEX 未平倉是「截至今日的累積部位」。法人可能在現貨市場連續買超(T86 正),同時在期貨市場維持空頭未平倉(TAIFEX OpenInterest(Net) 負)作為整體部位的風險管理,兩個數字方向相反不代表矛盾,是兩個市場的不同操作層次。
誤解三:TAIFEX 的臺股期貨就代表所有台股相關期貨
TAIFEX /MarketDataOfMajorInstitutionalTradersDetailsOfFuturesContractsBytheDate 回傳多個契約(臺股期貨、電子期貨、金融期貨、小型臺指期貨、微型臺指期貨等,共 22 個契約列於 futContractsDate 頁面)。財經新聞報導的「外資期貨多空」通常指的是臺股期貨(ContractCode === '臺股期貨')的未平倉淨額,若要觀察市場整體期貨籌碼,需決定是否加總多個契約,而加總時小型 / 微型契約的口數與大台的代表規模不同,不能直接加總口數作為等量代表。
⑦ TAIFEX 端點的其他可用資料
TAIFEX OpenAPI v1(共 135 個端點,2026-05-20 實測)中,與法人籌碼判讀直接相關的還有:
| 端點 path | 說明 |
|---|---|
/OpenInterestOfLargeTradersFutures | 大額交易人(大戶)未平倉部位 |
/PutCallRatio | Put/Call Ratio(選擇權多空比) |
/MarketDataOfMajorInstitutionalTradersDetailsOfOptionsContractsBytheDate | 三大法人選擇權部位(分契約) |
需特別注意:MarketDataOfMajorInstitutionalTradersDetailsOfFuturesContractsBytheDate 是三大法人端點,其 Item 欄位只有三個值——外資及陸資 / 投信 / 自營商,不存在 Item === '個人'(散戶 / 個人投資人)這個值。若程式對此端點做 r.Item === '個人' 篩選,會永遠拿到 0 筆且不報錯,算不出任何散戶多空比——這正是 §⑥ 所警告的字串完全比對陷阱。
散戶 / 個人多空比無法從三大法人端點直接讀取,TAIFEX 也不提供預先計算的「散戶多空比」欄位,須另行推導:慣例上以未沖銷總量扣除三大法人與大額交易人部位推算。大額交易人(大戶)未沖銷部位見 /OpenInterestOfLargeTradersFutures 端點(欄位含 Top5Buy / Top5Sell / Top10Buy / Top10Sell / OIOfMarket)。
See also
- TWSE T86 欄位命名實況 — 不報錯的取值失敗為何容易發生 — T86 中文欄位名稱的完整細節,以及子字串比對導致取值失敗卻不報錯的機制
- 外資、投信、自營商的訊號差別與盤前判讀邏輯 — 三類主體的資金性質差異,以及自營商避險部位的訊號干擾問題
- TWSE OpenAPI 的日期格式陷阱 — 五種日期格式並存的整合風險,TAIFEX 的 AD 8 碼與 TWSE BWIBBU_d 格式相同
- TWSE T86 endpoint:
https://www.twse.com.tw/rwd/zh/fund/T86 - TAIFEX OpenAPI Swagger:
https://openapi.taifex.com.tw/ - floviq 盤前推播模板(整合 T86 現貨法人數據):https://portaly.cc/floviq
修正紀錄
先前版本有以下更正:
- §③:兩端點除粒度外,欄位結構另有三處差異(General 缺
ContractCode、金額單位差 1000 倍、未平倉金額 key 大小寫不同)。 - §⑤:T86 假日訊息的逗號為全形,非半形。
- §⑦:散戶多空比無法從此端點直接讀取,須另行推導。
※ 本文描述 TWSE T86 現貨買賣超端點與 TAIFEX 三大法人期貨部位端點的資料結構差異與整合讀法 · 不構成投資建議,投資請自行評估風險。
資料來源:TWSE T86 endpoint · TAIFEX OpenAPI v1 · TAIFEX swagger.json · TAIFEX futContractsDate 頁面
如果這篇對你有用: