floviq logo floviq
← 筆記 · 2026-05-21 · mechanics

TAIFEX 期貨部位 vs TWSE T86 現貨買賣超 — 法人籌碼兩組獨立訊號的差別與整合讀法

觀察台股法人動向,多數工具與財經報導預設以 TWSE T86 的每日買賣超數字作為唯一來源。這個做法在現貨層面是足夠的,但在大盤方向判讀上存在一個結構性的資料缺口:法人在期貨市場的未平倉部位,與現貨市場的買賣超是兩組互相獨立的訊號,分別來自不同的交易所、不同的 API endpoint,資料不互通。本文整理兩個端點的結構差異、欄位命名實況、以及整合讀法。


① 兩個端點的角色定位

面向TWSE T86(現貨)TAIFEX 三大法人期貨(/v1/MarketDataOfMajorInstitutionalTradersDetailsOfFuturesContractsBytheDate
交易所台灣證券交易所 (TWSE)台灣期貨交易所 (TAIFEX)
市場股票現貨市場期貨市場
資料意義法人在哪些個股買進 / 賣出了股票法人在哪些期貨契約持有多方 / 空方未平倉部位
API 來源https://www.twse.com.tw/rwd/zh/fund/T86https://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(DateItemTradingVolume(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大額交易人(大戶)未平倉部位
/PutCallRatioPut/Call Ratio(選擇權多空比)
/MarketDataOfMajorInstitutionalTradersDetailsOfOptionsContractsBytheDate三大法人選擇權部位(分契約)

需特別注意:MarketDataOfMajorInstitutionalTradersDetailsOfFuturesContractsBytheDate三大法人端點,其 Item 欄位只有三個值——外資及陸資 / 投信 / 自營商不存在 Item === '個人'(散戶 / 個人投資人)這個值。若程式對此端點做 r.Item === '個人' 篩選,會永遠拿到 0 筆且不報錯,算不出任何散戶多空比——這正是 §⑥ 所警告的字串完全比對陷阱。

散戶 / 個人多空比無法從三大法人端點直接讀取,TAIFEX 也不提供預先計算的「散戶多空比」欄位,須另行推導:慣例上以未沖銷總量扣除三大法人與大額交易人部位推算。大額交易人(大戶)未沖銷部位見 /OpenInterestOfLargeTradersFutures 端點(欄位含 Top5Buy / Top5Sell / Top10Buy / Top10Sell / OIOfMarket)。


See also


修正紀錄

先前版本有以下更正:

  • §③:兩端點除粒度外,欄位結構另有三處差異(General 缺 ContractCode、金額單位差 1000 倍、未平倉金額 key 大小寫不同)。
  • §⑤:T86 假日訊息的逗號為全形,非半形。
  • §⑦:散戶多空比無法從此端點直接讀取,須另行推導。

※ 本文描述 TWSE T86 現貨買賣超端點與 TAIFEX 三大法人期貨部位端點的資料結構差異與整合讀法 · 不構成投資建議,投資請自行評估風險。

資料來源:TWSE T86 endpoint · TAIFEX OpenAPI v1 · TAIFEX swagger.json · TAIFEX futContractsDate 頁面