三者がそれぞれ何をしているのか、どこからが大きいのか、そして実測値で崩せる三つの読み違い。
外国人が買い越した日に指数が上がった、これでシグナルを見つけたと思う。しかし外国人の買いはその日の出来高の一部そのものです——値動きと買い越しは、同じ一つの出来事を二度数えているにすぎません。この記事では機関投資家売買超過の公式な定義、実際の値域、そして最も誤読されやすい三点を、実測値で一度に片づけます。
機関投資家の売買超過は、台湾証券取引所が毎営業日公表する数値です。内容は外国人・中国系投資家、投資信託、自己売買部門という三種類の機関が、その日に買った金額(または株数)から売った金額(または株数)を引いたもの。プラスはその種別が買い越し、マイナスは売り越しを意味します。
TWSE の三種別の定義は「誰であるか」であって「何をしたか」ではありません(レポート注記の原文、2026-09-17 取得):
| 機関 | TWSE の定義(原文) |
|---|---|
| 自己売買部門 | 「自己売買部門とは証券会社の自己勘定口座をいう。」 |
| 投資信託 | 「投資信託とは国内の証券投資信託ファンドをいう。」 |
| 外国人・中国系投資家 | 「外国人・中国系投資家とは、『華僑及び外国人の証券投資管理弁法』及び『大陸地区投資人の台湾における証券投資及び先物取引管理弁法』に基づき登録した投資者等をいう。」 |
市場全体の機関投資家売買代金統計表(BFI82U)は 6 行を返し、単位は TWD です。個別銘柄の機関投資家売買超過日報(T86)は銘柄ごとに開示され、単位は株です(2026-09-15 の実測で 15,840 銘柄)。BFI82U の 6 行のうち外国人自己売買部門は独立した 1 行ですが、Blave のデータ系列ではこの行は 2024-08-16 以降、毎日 0 です。
されません。TWSE はレポート注記ではっきり書いています:
つまり機関投資家売買超過は原始約定のスナップショットであり、公表後に記帳訂正で遡って調整されることはありません。この点は信用買い残高とちょうど逆です——信用買い残高の与信機関は翌日もまだ帳簿を調整しており、TWSE は「前日残高」を基準とするよう明言しています(〈信用買い残高の使い方〉参照)。同じ需給データでも二つの指標はデータの性質が異なり、リサーチでの扱いも同じであってはなりません。
公表は引け後の当日午後です。TWSE の公式ページに時刻の明文はないため、本稿では分単位の言い方はしません。
一日のネット売買超過の分布、単位は億 TWD。期間 2025-09-17~2026-09-16、n=242、Blave の機関投資家データ系列(上場市場)より:
| 機関 | p05 | p25 | 中央値 | p75 | p95 | 平均 | 買い越し日の割合 |
|---|---|---|---|---|---|---|---|
| 外国人 | −892.6 | −377.0 | −52.3 | +165.2 | +603.3 | −86.2 | 43.8% |
| 投資信託 | −77.0 | −20.0 | +14.6 | +71.0 | +160.9 | +27.6 | 59.9% |
| 自己売買部門 | −301.1 | −104.9 | −14.3 | +60.5 | +153.3 | −34.6 | 47.1% |
| 合計 | −1,077.3 | −380.7 | −45.4 | +227.0 | +683.8 | −93.1 | 46.3% |
「今日のこの数値は大きいのか」に答えるには、符号より絶対値の水準帯を見るほうが有用です(同期間、n=242):
| 機関(億 TWD) | 絶対値の中央値 | p80 | p90 | p99 | 期間最大 |
|---|---|---|---|---|---|
| 外国人 | 262 | 545 | 757 | 1,340 | 1,883 |
| 投資信託 | 42 | 88 | 135 | 267 | 383 |
| 自己売買部門 | 75 | 156 | 206 | 548 | 822 |
外国人の一日の売買超過が 260 億 TWD 前後というのは日常茶飯事で、この期間の上位 10% に入るには 757 億 TWD 超が必要です。投資信託は規模が一段小さく、中央値はわずか 42 億 TWD——三者を同じ物差しで見ると、投資信託の「大きな動き」が何事もないように見えてしまいます。
多くの人は機関投資家データを読むとき、自己売買部門のネット額を証券会社の自己売買デスクの方向感だと受け取ります。しかし TWSE は自己売買部門を「自己売買」と「ヘッジ」の二列に分けて開示しており、後者の規模は前者をはるかに上回ります。
直近 60 営業日の実測(TWSE BFI82U を日次で直接取得、2026-06-24~2026-09-16、n=60):
| 観察項目 | 数値 |
|---|---|
| ヘッジが自己売買部門の売買代金に占める割合(買+売) | 78.0% |
| ヘッジのネット額が自己売買部門の絶対ネット額に占める割合(日次中央値) | 76.6% |
| ヘッジの日平均売買代金 vs 自己売買の日平均 | 769 億 TWD vs 218 億 TWD |
| 期間平均ネット額 | ヘッジ −81.1 億 TWD/日、自己売買 −8.3 億 TWD/日 |
| 両者が同方向の日数/日次相関 | 73.3%/r=0.716 |
言い換えれば、あなたが見ている「自己売買部門の買い越し」は、その規模の八割近くがヘッジの列から来ています。合算して見るとヘッジが支配的ですが、完全に決まるわけでもありません(r=0.716)——自己売買部門の方向を読むなら、最低でも二列を分けて見る必要があります。
しません。foreign、investment_trust、dealer の三列を足しても、ニュースにある「機関投資家合計」とは合いません——計算を間違えたわけではありません。
TWSE の公式合計は四項目の和です:外国人・中国系投資家(外国人自己売買部門を除く)+投資信託+自己売買部門(自己売買)+自己売買部門(ヘッジ)。外国人自己売買部門の列は公式合計に算入されません。しかし Blave API の dealer 列は外国人自己売買部門を取り込んでいるため、三列の和=公式合計+当日の外国人自己売買部門ネット額となります。
2019-06-03 の市場全体を例にとると(FinMind の元データ、単位 TWD):
| 項目 | ネット額 | 公式合計に算入 |
|---|---|---|
| 外国人・中国系投資家 | +4,256,940,836 | する |
| 投資信託 | −470,794,770 | する |
| 自己売買部門(自己売買) | +234,212,750 | する |
| 自己売買部門(ヘッジ) | −634,731,645 | する |
| 外国人自己売買部門 | −1,635,530 | しない |
| 公式合計 | +3,385,627,171 | 上の四項目の和 |
上の四項目の和は公式合計と一円の狂いもなく一致し、除外されているのは外国人自己売買部門のあの −1,635,530 TWD——そしてそれは Blave API の dealer 列の中にあります。2018–2024 では合計 1,553 営業日で三列の和が公式合計と一致しません。2024-08-16 以降この列は 0 のままなので直近の差はゼロですが、過去区間の乖離は実在します。
したがってニュースや公式発表の数値と合わせたいなら、三列を自分で足すのではなく total 列を直接読んでください——total は公式合計そのものであり、各列の和として算出されたものではありません。直近データだけなら両者は同じです。区間が 2024 年以前にまたがり、かつ外国人自己売買部門を単独で切り出したい場合は、BFI82U の元レポートに戻ってください。そこでは独立した 1 行であり、Blave API に対応する列はありません。
dealer に取り込むのは Blave 独自の慣例です。このデータで 2024 年以前にまたがるリサーチをする際は、この差分を自分で織り込んでください。当日は高い相関、翌日はコイン投げに近い。本稿で最も持ち帰るべき一行です。
期間 2025-09-17~2026-09-16、売買超過と加権指数リターンの相関係数、n=230(相関のサンプルは値域表の 242 より 12 日少なく、これは指数データに 12 営業日の欠損があるためです。二つの n を混同しないでください):
| 対象 | 当日の指数リターンとの r | 翌日の指数リターンとの r |
|---|---|---|
| 外国人 | +0.773 | +0.097 |
| 投資信託 | +0.119 | +0.004 |
| 自己売買部門 | +0.716 | +0.003 |
| 合計 | +0.824 | +0.079 |
当日の高い相関は機械的なものです。機関投資家の買いはその日の出来高の一部そのものであり、価格の上昇と機関投資家の買い越しは同じ一つの出来事の二通りの記録にすぎません。本当に価値のある問いは翌日についてであり、そこでの相関係数は +0.097 しか残りません。
勝率も同じ結論です。外国人が買い越した日の翌日上昇確率は 59.0%(n=100)、売り越した日は 52.7%(n=129)、全サンプルのベースは 55.5%。差は存在しますが、サンプルを 5 年(n=1,200)に広げると 56.4% 対 54.4%(ベース 55.3%)まで縮みます。しかも翌日の平均リターンはむしろ売り越した日のほうが高く——売り越し日 +0.286%、買い越し日 +0.256%。勝率はやや高く平均リターンはやや低い、両者は打ち消し合います。
分けて見てください。同じ期間(2025-09-17~2026-09-16、n=242)で三者の方向はそもそも滅多に揃いません:
| 観察項目 | 数値 |
|---|---|
| 外国人と投資信託が同方向だった営業日 | 47.5% |
| 外国人と自己売買部門が同方向だった営業日 | 75.2% |
| 三者が同方向だった営業日 | 32.6% |
| 「合計」が外国人と逆方向だった営業日 | 9.9% |
| 外国人が機関投資家の絶対ネット額に占める割合(中央値ウェイト) | 67.4% |
| 外国人が機関投資家の売買代金に占める割合(買+売) | 83.7% |
「機関投資家が買い越し」を単一のシグナルとして扱うのは、データ上そもそも一つの事象ではありません——三者が同方向の日は三分の一しかないのです。しかも「合計」は事実上外国人の影です。外国人は売買代金の 83.7% を占め、合計が外国人と逆を向くのはわずか 9.9% の日だけ。三者の総意を見ているつもりで、その九割は外国人一人を見ているのです。
市場全体の層は金額、個別銘柄の層は株数で、フィールド名も異なります。混ぜて使うと間違ったものを計算することになります。
from lib.data import fetch_twmarket_institutional, fetch_twstock_institutional
# 市場全体:単位は TWD、フィールドは foreign/investment_trust/dealer/total、2004-04-07 から
mkt = fetch_twmarket_institutional('2025-09-17', '2026-09-16', headers)
# 個別銘柄:単位は株、買いと売りは別列。lib は foreign_net を直接返す
df = fetch_twstock_institutional('2330', '2025-09-17', '2026-09-16', headers)
foreign_net = df['foreign_net'] # 外国人の買付株数 − 売却株数
個別銘柄の層には分割フィールドもあります。自己売買部門の自己売買(dealer_self_*)とヘッジ(dealer_hedge_*)は分かれているので、前節の「ヘッジを取り除く」判断は個別銘柄の層で行えます。
現実的な使い方は、「今日の機関投資家の動きは大きいか」を検証可能な条件に変え、自分のメインシグナルの前段に置くことです。それ自体で直接エントリー・エグジットするのではありません。
# 水準帯は 2025-09-17~2026-09-16 の外国人一日売買超過の絶対値分位数より:p50 262 億、p90 757 億(n=242) BIG = 75_700_000_000 # TWD。これはデータの水準帯であって、バックテストで得たパラメータではない big_buy = mkt['foreign'] > BIG signal = primary.copy() # primary は自分のメインシグナル signal[~big_buy] = 0.0 # 外国人の大きな買いがない日はロングを取らない
はっきりさせておきます。この閾値は分布の水準帯であって、バックテストで検証されたパラメータではありません。答えているのは「今日の数値は歴史的に何番目か」であって、「これで儲かるか」ではありません——後者はバックテストだけが答えられ、しかも同じデータ区間で何度もパラメータを調整する落とし穴を避ける必要があります(〈オーバーフィッティングの避け方〉参照)。
自營商買賣超股數(合計)が「自己売買」三列の前(インデックス 11)に来ており、自己売買のグループはその後で買付→売却→売買超過(インデックス 12/13/14)です。直感的に「まず自己売買、次にヘッジ、最後に合計」と仮定するとグループ全体がずれます。位置ではなくフィールド名でパースしてください。機関投資家データは日次のみで、調整できる時間軸はありません。選べるのは「どの層を、何日分見るか」です。
| 取り方 | 向いている用途 | 注意 |
|---|---|---|
| 市場全体の一日ネット額 | 指数レベルの資金フローの強さを判断する | 上場のみ。「合計」は 83.7% が外国人の影なので、総意として読まないこと |
| 市場全体の連続記録 | 「何日連続で買い越したか」という状態を記述する | 2025-09-17~2026-09-16 で買い越しの連続は 49 回、平均 2.16 日、最長 6 日。売り越しの連続は 50 回、平均 2.72 日、最長 13 日(n=242)——「5 日連続の買い越し」は思っているより稀です |
| 個別銘柄の一日ネット額 | 個別銘柄の需給条件、スクリーニングのフィルター | 単位は株。上場は T86、店頭は TPEx で、どちらも利用可能 |
| 個別銘柄の分割フィールド | 自己売買部門からヘッジを取り除きたいとき | 分割フィールドを保持しているのは個別銘柄の層だけ |
本稿の例が市場全体の一日ネット額を使う理由は単純です。値域と相関の実測はすべてこの層で行っており、そうしてこそ閾値の水準帯が噛み合うからです。個別銘柄の層に移すなら、水準帯はその銘柄自身の分布で計算し直す必要があります。
定義が分かったら、次はそれを検証できる条件に変える番です。Blave Agent にこのデータを取得させ、フィルターとして書かせ、バックテストさせてください——データ層もフィールドも既に繋がっているので、あなたは何を検証したいかを言うだけです。市場全体と個別銘柄のチャートは Studio でも直接見られます:市場全体の機関投資家動向、個別銘柄の需給。