Answer
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.
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.
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"
# }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")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.
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):
Related