Which column to read, how big is big, and whose 130% the 130% actually is.
Put margin balance and the TAIEX on the same chart and the two lines almost coincide — over the year from 2025-09-17 to 2026-09-15 the correlation is +0.973. You think you have found an indicator. But stretch the sample to 5 years and the same correlation drops to +0.417. This article covers what margin balance actually is, which column to read, how big is big, and three misreadings that official wording and measured numbers take apart.
Margin balance is the market's stock of margin positions not yet repaid, counted in trading units (lots); the same report carries a separate "margin amount" column in thousands of TWD. It is reported by the credit-extending institutions (securities finance companies and brokers that run margin trading in-house), then compiled and published by TWSE.
Three terms that get mixed up constantly — let's separate them first:
| Term | What it is | Who computes it |
|---|---|---|
| Margin balance | Margin positions not yet repaid, in lots; a separate margin amount column is in thousands of TWD | Reported by credit-extending institutions, compiled by TWSE |
| Margin limit | The rule is 25% of the stock's listed shares: TWSE's report footnotes state that "when the margin balance reaches 25% of that stock's listed shares, margin buying is suspended" and "when margin or short balances reach eight tenths of the limit, quota allocation takes place on the next business day" | Computed from the rule; the report publishes a "next business day limit" every day |
| Margin maintenance ratio | The whole-account collateral maintenance ratio; formula in "Whose 130% is the 130%" below | Computed by the broker on the whole account, not per stock |
Six tenths (60%) for both listed and OTC stocks, with a minimum short-sale margin ratio of 130% — the source is FSC order Jin-Guan-Zheng-Tou-Zi No. 1140381639, effective 2025-04-07. Plenty of articles online still say the short-sale margin is 90%; that is the old order repealed on 111-10-01, and it is out of date.
The columns of TWSE's margin trading statistics are: item | buy | sell | cash (stock) repayment | previous-day balance | today's balance. Within one day it is internally consistent — here it is checked against the market-wide margin figures for 2026-09-15 (in lots):
9,165,719(previous-day balance) + 226,366(buy) − 197,887(sell) − 3,687(cash repayment) = 9,190,511(today's balance)
The margin amount for the same day (in thousands of TWD) checks out on the same equation: 583,877,609 + 16,290,924 − 17,615,398 − 312,670 = 582,240,465.
So the common claim that "cash repayments are buried in the previous-day balance" does not hold — cash repayment is its own column and has already been deducted from today's balance. The within-day columns are fine; the problem is across days.
TWSE puts it plainly in the report footnotes:
This is not boilerplate. Reconciled against the data (Blave's margin data series, last 3 years, adjacent trading days only, excluding false gaps caused by holes in the data):
| Window | Trading days | Previous-day balance (T) ≠ today's balance (T−1) | Median gap | p90 | Max |
|---|---|---|---|---|---|
| Last 3 years (from 2023-09-17) | 720 | 670 days (93.1%) | 5 lots | 124 lots | 524,851 lots |
Most days differ by a few lots, which is harmless; but occasionally the gap reaches six figures. The entry on 2024-12-11 adjusted 524,851 lots away overnight, roughly 5.7% of the market-wide balance — that one and the +99,692 lots on 2026-09-07 were both re-checked against the raw TWSE reports, confirming they are cross-day adjustments in the official data itself, not something introduced on Blave's side. As for the cause, TWSE gives only the general rule (next-day book adjustments, and adjustments to the previous-day balance when an OTC stock transfers to the listed market); we did not verify the cause of individual cases, so this article does not speculate.
It does get revised, and the exchange says so. The report footnote, verbatim:
This is the exact opposite of institutional net buy/sell, which is a snapshot "compiled from the day's original trade records and not restated for brokers' reported booking errors or account corrections" and is never revised after publication (see How to Use Institutional Net Buy/Sell). Both are flow-of-funds data, but one gets revised and the other does not, so research should not treat them the same way.
Also, TWSE's margin trading statistics cover the listed (TWSE main board) market; OTC margin and short data is published separately by TPEx. When someone says "market-wide margin balance," the default is the listed market.
The level and the change of the market-wide margin balance (Blave's margin data series, listed market):
| Metric | Value | Window |
|---|---|---|
| Margin balance | 9,190,511 lots | 2026-09-15 (latest record) |
| Margin amount | 5,822 (100M TWD) | Same as above |
| Balance range | 7,236,488 to 9,618,551 lots | 2025-09-17 to 2026-09-15, n=229 |
| Margin amount per lot | 63,352 TWD (same window, 36,381 to 65,907) | Same as above |
Distribution of the daily change (today's balance − previous-day balance, in lots), same window, n=229:
| p05 | p25 | Median | p75 | p95 | Mean | Days it increased |
|---|---|---|---|---|---|---|
| −129,474 | −29,967 | +16,379 | +45,366 | +110,320 | +7,362 | 59.8% |
In absolute terms: median change 40,316 lots, p90 115,104 lots, period max 442,947 lots. In other words a daily change around 40,000 lots is normal, and it takes more than 115,000 to reach the top 10% of this window. Note also that the balance increased on 59.8% of days — margin balance drifts upward by nature, so "margin rose again today" is not an event in itself.
The high correlation of the level comes from a shared trend, and it changes with the sample period. Measured (Blave's margin data series, against the TAIEX):
| Window | n | Level vs index close | Daily change vs same-day return | Daily change vs next-day return |
|---|---|---|---|---|
| 12 months (2025-09-17 to 2026-09-15) | 229 | +0.973 | +0.595 | −0.069 |
| 5 years (from 2021-09-17) | 1,200 | +0.417 | +0.473 | −0.072 |
Three things at once. First, a level correlation of 0.973 looks like a holy grail, but the 5-year sample gives only 0.417 — same indicator, different sample period, and the conclusion falls from "almost perfect" to "moderate." That is trend resonance, not a stable relationship. Second, switch to the change and the same-day correlation drops to around +0.595. Third, against the next day's return both sample periods sit near −0.07, which is close to zero.
The pattern is the same as institutional net buy/sell: high correlation the same day, close to a coin flip the next. Flow-of-funds data tells you what just happened, not what comes next.
It is the whole account's, not that one stock you hold. Under the Operating Rules for Securities Firms Handling Margin Purchases and Short Sales of Securities (115-01-09 version):
So "drop to 130% and you get liquidated" leaves out two things: the figure is computed on the whole account rather than per stock, and there is a top-up window in between.
A simplified worked example: buying on six-tenths margin, the maintenance ratio at the moment you open is 1 ÷ 0.6 = 166.7%; to fall to 130% the price has to drop 22% (130% × 60% = 78%). The example assumes a single position, no other collateral and nothing pledged as a substitute; in practice a whole account holds other positions and the numbers will differ.
Rarely. Distribution of the market-wide margin maintenance ratio (2002-11-26 to 2026-08-13, n=5,815, unit: %):
| p01 | p05 | p10 | p25 | Median | p75 | p90 | Max |
|---|---|---|---|---|---|---|---|
| 124.4 | 135.8 | 141.6 | 153.4 | 164.0 | 170.6 | 175.9 | 210.4 |
Against the thresholds: trading days below 130% account for 2.39% (139 days across 23 years, concentrated in 2002–2004 and 2008), below 140% for 8.31%, and below 150% for 20.53%. The lowest since 2021 is 130.36% on 2025-04-09. Over the year ending 2026-08-13 (n=243) the range is 156.7 to 210.4, with 194.7 on that final day.
from lib.data import fetch_twmarket_margin
m = fetch_twmarket_margin('2025-09-17', '2026-09-15', headers)
# fields: margin_balance / margin_balance_prev (lots), margin_balance_value (TWD),
# short_balance / short_balance_prev (lots), from 2001-01-03
# right: subtract within the row — this is the report's own definition
m['margin_chg'] = m['margin_balance'] - m['margin_balance_prev']
# wrong: subtracting across rows mixes overnight book adjustments into the day's change
m['margin_chg_wrong'] = m['margin_balance'].diff()
Over 2023-09-17 to 2026-09-15, the two methods give different answers on 93.1% of days. Most of the time the gap is a few lots, but it only takes one day with a gap of 520,000 lots for your signal to be dragged around by that day's phantom move.
The per-stock layer goes through the API endpoint /studio/market/twstock/margin/<stock_id>, where the field names differ slightly: per stock they are margin_balance and margin_prev_balance (note that prev sits in a different position than in the market-wide set), and the unit is again lots.
# brackets from absolute daily change quantiles over 2025-09-17 to 2026-09-15: median 40,316 lots, p90 115,104 lots (n=229) BIG = 115_000 # lots; this is the data's bracket, not a backtested parameter surge = m['margin_chg'] > BIG signal = primary.copy() # primary is your own main signal signal[surge] = 0.0 # stay out on days margin jumps
Once more: this threshold answers "where does today's number rank historically," not "will this make money." Only a backtest answers the second, and you have to be careful about tuning parameters over and over on the same stretch of data (see How to Avoid Overfitting).
The market-wide margin maintenance ratio is currently visible on Studio's TW-stock "Market | Margin & Short" page (market margin and short); Agent's data functions do not carry that series — so writing the maintenance ratio into a strategy is not possible today.
Margin balance is daily data; what you can choose is which column to read, which layer to read, and over how many days.
| Approach | Good for | Watch out |
|---|---|---|
| Today's balance − previous-day balance (same row) | Computing the day's margin change; the default for research | This is the official definition; for brackets see the range table (median 40,316 lots, p90 115,104 lots) |
| Today's balance subtracted across rows | Not recommended | On 93.1% of days it mixes in overnight book adjustments; the largest single gap is 524,851 lots |
| The margin balance level | Describing how high or low market leverage sits | Resonates strongly with the index (12 months r=+0.973, 5 years +0.417) and adds no directional information of its own |
| Per-stock margin balance | Per-stock flow conditions | Unit is lots; the field is margin_prev_balance — don't confuse it with the market-wide spelling |
The examples here use the market-wide same-row subtraction, because the range and correlation measurements were all made at that layer, so the thresholds line up; move to the per-stock layer and the brackets have to be recomputed from that stock's own distribution.
Now that you know which column to read, the next step is turning it into a condition you can verify: ask Blave Agent to pull this data, compute the change with same-row subtraction, write it into a filter and backtest it for you — the data layer and the fields are already wired up. You can also see the charts directly in Studio: market margin and short, per-stock margin and short.