TW Market Data LogoTW Market Data

核心資料

市場與價格

TWSE / TPEx 日線、還原價格、指數與市場廣度

財務與成長

月營收、財報三表、財務指標與估值資料

籌碼與資金

三大法人與融資融券資料

公司與結構

公司與事件

公司基本資料、公告、事件、公司行動與股利

分類與結構

主題分類、指數分類與跨資料集 mapping

策略與量化

Features、Factor Data、Time Alignment 與 Screener

平台能力

API 存取

REST API、認證與第一個 request

查詢與工具

Search API、Query API、欄位清單與查詢範例

Tools / MCP

Agent workflow、MCP tools 與 OpenAPI 入口

方案價格文件觀點文章
EN儀表板

TW Market Data(TWMD)提供之歷史資料與統計,非投資建議;投資決策與風險由您自行判斷。

隱私政策|服務條款|幫助中心||EN|TW Market Data © 2026

解答

Taiwan's Three Institutional Investors (三大法人) Explained for Quant Developers

Taiwan's three institutional investors — foreign investors (外資), investment trusts (投信) and dealers (自營商), collectively the 三大法人 — are the institutional buy/sell aggregates the Taiwan Stock Exchange publishes after every trading day in its T86 report. For each listed stock you get the net shares each group bought or sold that day. It is a clean, official daily signal — but it is aggregate net flow, not order-level data.

Who the three are

  • Foreign investors (外資) — offshore institutions trading Taiwan equities (the largest and most watched group). Their net buying/selling is treated as a directional signal by most desks.
  • Investment trusts (投信) — domestic Taiwanese fund houses (mutual funds). Often used as a 'local smart money' read, especially near quarter-end window-dressing.
  • Dealers (自營商) — the proprietary and hedging books of brokerage firms. The smallest of the three and the noisiest, since a chunk is hedging rather than a directional view.

When and how the data is published

The Taiwan Stock Exchange publishes the T86 report after market close on each trading day (typically the same evening). It is one row per stock per trading day — end-of-day, not intraday. There is no live/streaming version of institutional flow; you get the settled daily figure once, after the session. For point-in-time correctness this matters: a signal computed 'as of' a given trading day should only use T86 rows whose publication time is on or before that day, otherwise you are peeking at flow that was not public when your model would have traded. Treat the flow for date D as knowable only after D's close.

How to read it — a real example

Query the institutional-flow dataset by symbol and date range. This is a real request and a real response row for TSMC (2330) on 2026-07-17:

curl "https://api.twmarketdata.com/v2/datasets/institutional-flow?symbol=2330&start_date=2026-06-01&end_date=2026-07-15" \
  -H "X-API-Key: sk_live_..."

# One real response row (2330, 2026-07-17):
# {
#   "symbol": "2330",
#   "date": "2026-07-17",
#   "foreign_net_buy_sell": -44183964.0,
#   "investment_trust_net_buy_sell": 1488520.0,
#   "dealer_net_buy_sell": 2759348.0,
#   "total_institutional_net_buy_sell": -39936096.0,
#   "source_role": "official_twse_t86"
# }

The fields you actually use

  • foreign_net_buy_sell — foreign investors' net shares (buy minus sell). Negative means net selling; on 2026-07-17 it was -44,183,964 for 2330.
  • investment_trust_net_buy_sell / dealer_net_buy_sell — the same net-share figure for trusts (+1,488,520) and dealers (+2,759,348).
  • total_institutional_net_buy_sell — the three summed (-39,936,096). source_role traces every row to the official TWSE T86 report.
  • Common use: count consecutive days of foreign net buying, or rank stocks by trust net flow near quarter-end.

Build a signal: a foreign-buying streak

A simple, widely-used read is the foreign net-buying streak — how many consecutive trading days foreign investors have been net buyers of a stock. Sort the rows by date and count the run of positive foreign_net_buy_sell values; a break resets it. Because the flow for each day is only public after that day's close, the streak as of today uses data through the prior session, which keeps it point-in-time safe.

import requests

rows = requests.get(
    "https://api.twmarketdata.com/v2/datasets/institutional-flow",
    params={"symbol": "2330", "start_date": "2026-06-01", "end_date": "2026-07-15"},
    headers={"X-API-Key": "sk_live_..."},
).json()["rows"]

streak = 0
for r in sorted(rows, key=lambda x: x["date"]):
    streak = streak + 1 if r["foreign_net_buy_sell"] > 0 else 0
print("current foreign net-buying streak:", streak, "days")

How the three are used in practice

The three groups are read differently. Foreign flow is the headline directional signal because foreigns hold the largest share of the free float in the large-cap names; a sustained foreign net-buy run in a stock like 2330 is watched closely. Investment-trust flow is read as domestic conviction and gets extra attention near quarter- and year-end, when funds are widely believed to shade positions for reporting (window dressing). Dealer flow is the noisiest of the three: a meaningful part is hedging against warrants and other book positions rather than a directional bet, so it is usually used as a secondary confirmation, not a standalone signal.

What this data does NOT tell you

The T86 figures are aggregate daily net flow, and it is worth being explicit about the gaps rather than letting a model assume them (these permanent limits are declared in /meta/boundaries):

  • No order flow — you see one net number per group per day, not individual orders, order sizes, or intraday timing. Don't reconstruct microstructure from it.
  • No foreign cost basis — the figure is net shares, not the price foreign investors paid or their average holding cost. You cannot infer their P&L or entry price from this dataset.
  • It is net, not gross: a small net number can hide large offsetting buys and sells.

相關連結

Institutional-flow dataset (docs)Institutional investor flow dataPrice-limit history (7%→10%)API 文件