Tick Data Intelligence — 09 of 13

When One Stock
Steps Out.

When one stock moves ±10% from its last trade too fast, SET pulls it out of continuous trading for exactly two minutes1 — then reopens it at a single clearing price.

This is the Dynamic Price Band auto-pause, clocked to the millisecond from the raw ITCH feed. It has two faces: a jump-detector that catches sudden jolts in mostly dormant stocks, and a structural blind spot to gradual moves of any size — stocks that travel 15–30% in a single day, in small steps, and are never touched. Here are both faces.

0
The invariant pause
0
Auto-pauses (22 days)
0
Illiquidity accidents
0
Moved >10%, never paused
All results from real SET ITCH data. Not simulated.

About the sample

22 trading days of SET ITCH, full equity universe (~4,700 instruments, ~2,400 actively trading per day). Every figure here is a census of what the feed broadcast, not a sample we generalize from: 155 Dynamic Price Band auto-pauses, observed in full, across 73 instruments. Because these are deterministic exchange events recorded in their entirety, the counts and the 120-second measurement need no statistical inference — there is no population we are estimating. The behavioral cuts (which names trip, what the run-up looks like) are descriptive of these 155 events over this one-month window — stated as observation, not as a permanent law.

Why this is reconstructable on this market specifically

The ITCH feed broadcasts the exchange's own control plane, not just trades and quotes. Two message types carry it: orderbook_state (every instrument's operating phase) and halt (suspension and auto-pause transitions). Two structural features make the analysis exact. First, the aggressor side is encoded directly in every trade message — no Lee-Ready inference — so we can read whether a run-up was buy- or sell-driven without guessing. Second, every state transition carries a nanosecond timestamp, which is how we can measure the pause duration to the millisecond. None of this is visible in OHLC bars; it exists only at the message level.

Quick definitions

Dynamic Price Band
SET rule (effective 2 Sept 2024): if a stock's price would execute more than ±10% from its latest execution price, that one stock is pulled into a short pre-open auction. Distinct from the daily ceiling/floor (±30% from previous close) and from the market-wide circuit breaker (an index-level halt, −8/−15/−20%).
Auto-pause
The 2-minute pre-open the band triggers. The feed labels the state PRE-OPEN_CB_E. During it, no matching occurs; orders accumulate; an indicative price is broadcast; the stock then reopens at a single clearing price.
Order-book state
The operating phase the feed broadcasts for each instrument (pre-open, open, paused, closed, etc.). The auto-pause is one such state; the full state list and the equity/index detail are in the state-machine section below.
Dormant name
A stock with very low baseline activity (median 66 trades per day for the names that trip the band).
The jolt
A sudden burst of trading that moves a dormant stock's price ±10% off a stale reference and trips the band.
The Mechanism

Only the triggering stock pauses — the market keeps trading.

When a single stock's price moves more than ±10% from its latest execution price, the exchange does not let the trade through. It pulls that one stock out of continuous trading into a two-minute pre-open auction — the rest of the market keeps trading normally — then reopens it at a single clearing price. This is the Dynamic Price Band auto-pause, live since 2 Sept 2024. Our 22-day sample sits comfortably inside that regime.

One clarification, because ‘one stock’ is easy to misread: it means only the single triggering stock is paused each time — not the market — the exact opposite of a market-wide circuit breaker. It does not mean the same stock over and over. Across the 22 days, 73 different stocks tripped the band (155 times in all), one stock at a time; the busiest name accounts for only about 5% of trips. So: one stock per event, many different stocks over the month.

The exchange runs four distinct intervention mechanisms, each doing something different. This chapter is about one of them — the Dynamic Price Band — so it is worth placing precisely alongside the other three.

Mechanism Scope Trigger Reference Action
Daily ceiling / floor per-stock ±30% previous close hard limit, no auction
Dynamic Price Band per-stock ±10% latest execution price 2-min pre-open, then reopen
Market-wide circuit breaker whole index −8 / −15 / −20% index level halts the entire market
Auto Pause (volume) per-stock vol > 15% of reg. shares — 40-min pause + 20-min pre-open*

*Auto Pause (volume) is effective July 2025 — after our sample. Not measured here.

What a rulebook can't prove, the feed can

The “two-minute” pause is hard-coded to 120.000 seconds. Across all 155 events, the measured duration averages 119.998 seconds with a standard deviation of 1.63 milliseconds. The rulebook documents ‘two minutes’; the matching engine delivers exactly 120.000. That is not a number you can read off a rulebook — it is a number you measure, once you have nanosecond state-transition timestamps.

What happens inside the pause

Verified from the equilibrium messages, not asserted: no matching; new orders and cancels are accepted; an indicative equilibrium price is continuously recomputed and broadcast; after 120 seconds the stock reopens at the single price that maximizes executable volume. The rule cancels only the excess of the order that breached the band — it does not freeze the resting book.

Chart 1 — The Invariant Pause: 155 Measured Durations

Every auto-pause lands on the same value. Measured mean 119.998 s, σ 1.63 ms, n = 155 — against the documented 120 s. The engine is deterministic to the millisecond.

The trigger is abrupt, and the reference moves — the band is a jump-detector

Two facts from the data pin this down. First, the trip is instantaneous: it fires the moment a single order would execute beyond the band — not after any gradual build-up. Second, the band is not a fixed corridor around the open or the previous close; it tracks a moving reference near the recent price. The evidence: thousands of stocks moved 15–30% from their daily reference without tripping (see below), because they moved in small steps. So the band reacts to how far a single move travels off the recent price — never to how far the price has drifted over the day. This one property is load-bearing: it explains why the band overwhelmingly catches illiquidity (a stale reference makes even a modest order look like a jump) and what it is structurally blind to.

The State Machine

14 states govern every equity order book on this market.

The same feed exposes the full operating state of every instrument. The feed carries 29 distinct state values across market segments, totaling 869,349 events (about 41,000 on a typical single day — not 858K in one day, which the prior version of this chapter claimed). But only 14 of the 29 are equity (the _E suffix): those are the real equity order-book states this chapter is about. The rest are index instruments the ITCH spec says to discard, plus a small undocumented segment.

  • Prefix = session phase: STARTUP, PRE-OPEN1, OPEN1, INTERMISSION, PRE-OPEN2, OPEN2, PRE-CLOSE, MARKETCLOSE, SAVECLOSING, OFF-HOUR — these map onto the exchange's published trading-day structure.
  • Suffix = segment (per the ITCH V1.0 spec): 14 equity (_E, 854,719 events) / 10 index (_I, which the spec says to discard — not tradeable order books) / 5 undocumented (_L, a small handful of instruments, whose meaning we do not claim); 29 total. The _E states are the only equity order books, so the honest count that governs an equity book is 14, not 29.
  • The one exception state: PRE-OPEN_CB_E — the auto-pause. This is the state a stock enters when the band trips.

Two special states, set apart from the session phases

PRE-OPEN_CB_E (the auto-pause) is rare: 155 trips across 73 names in 22 days. SUSPEND_E is a different mechanism entirely — a standing suspension, 662 events across 36 flagged names, applied in synchronized broadcasts. It sits on a separate path from the band auto-pause.

Top order-book states by event count (22 days)

State Events
SAVECLOSING_E96,930
MARKETCLOSE_E96,570
STARTUP_E96,570
INTERMISSION_E90,421
OPEN1_E89,919
OPEN2_E89,868
PRE-CLOSE_E73,203
OFF-HOUR_E73,203
PRE-OPEN1_E / PRE-OPEN2_E67,120 each
PRE-OPEN_CB_E (auto-pause)155 trips
Other 19 states28,425

Counts read directly from the order-book state feed. PRE-OPEN_CB_E shown as auto-pause trips (deduped per date and instrument), not raw broadcasts.

The auto-pause path (corrected)

One stock leaves continuous trading, sits in the band auto-pause for exactly 120 seconds, then reopens at a clearing price.

OPEN (continuous)
→
PRE-OPEN_CB_E (120.000s)
→
OPEN (reopen at clearing price)

SUSPEND_E — a separate standing suspension

A standing suspension on a fixed set of flagged names, applied in a synchronized broadcast. It has nothing to do with the band auto-pause and should never be chained to it.

flagged name
→
SUSPEND_E (standing)
→
resumes by exchange action
The Finding

A rule that brakes fast movers, firing on stocks that weren't moving.

The intuitive story for any ‘stock moved too fast’ rule is the US one: a crowded, liquid name stampedes, the exchange brakes it. The data here says the opposite.

  • About 86% are illiquidity events, not momentum. Only 21 of 155 trips had more than a handful of trades (>10) in the 20 minutes before the pause. For the other ~134, there is no run-up at all — often barely a single trade in the prior 20 minutes. The pause is triggered by one order detonating against a stale, near-empty book.
  • The names that trip are the thinnest on the exchange. Median daily volume of a tripping stock: 66 trades — the entire day. A genuinely liquid name has a high, stable baseline and essentially never trips, because no single burst can move it 10% off the last print.
  • The ~14% ‘liquid’ trips are dormant names that suddenly woke up. In the run-up minute, activity runs a median 13× the stock's own normal active minute (one example hit 52×). They were quiet, then jolted. The band fires on the transition — illiquid to suddenly active — not on sustained liquidity.
  • Independent confirmation from the auction itself: for these names, 71% of their routine daily pre-open auctions are completely dead (the book never crosses). The auto-pause is, for a dormant stock, the one moment all day the market is forced to actually discover a price for it.
Chart 2 — When Auto-Pauses Fire (Onset by Hour, Bangkok)

155 onsets across the exchange's continuous sessions (10:00–12:30, 14:30–16:30). The morning-open hour dominates; a smaller bump follows the afternoon reopen.

Chart 3 — The 86/14 Split

Of 155 auto-pauses, ~134 are a single order detonating in a dormant book; 21 are a sudden burst (median 13× normal activity). Median daily volume of a tripping stock: 66 trades.

A rule written to brake fast movers mostly fires on stocks that weren't moving at all. The ±10%-from-last-execution trigger is, in effect, a ‘dormant stock just woke up’ detector — and whether the jolt is a single order (86%) or a sudden burst (14%), nearly every trip is a quiet name getting hit, not a liquid one stampeding.

The 86/14 split is a side-effect of the trigger design, not a flaw: because the band is measured from the last execution price, a dormant stock with a stale last print trips the instant one order lands 10% away. We show what the mechanism does; we do not claim to know the exchange's intent.

The Other Face

What the band cannot see.

The jump-detector has a mirror image, and it is the second half of the chapter. Because the band reacts only to abrupt moves off the recent price, gradual movement of any size passes straight through it. Among actively-traded stocks over the 22 days, the data makes this concrete.

  • 4,538 stock-days moved more than ±10% from their daily reference and never tripped.
  • 3,049 moved more than 15%; 2,085 moved more than 20% — all without a single pause.
  • Among the >15% movers, 70% never made one jump as large as 10% (median biggest single move: 6.7%). They traveled the whole distance in steps.
  • The ±10% band sits inside the ±30% daily ceiling/floor, and stocks routinely walk the corridor between them — 15%, 20%, 25% in a single day — entirely uninterrupted, simply by moving gradually.
Chart 4 — The Blind Spot: Big Moves That Never Tripped

Active stock-days that moved beyond each threshold from their daily reference without ever tripping the band. The band caps jump size, not distance travelled: among >15% movers, the median biggest single jump was only 6.7%. The ±10% band and ±30% hard ceiling mark the corridor stocks walk uninterrupted.

The two faces of the mechanism

Trigger What it is, in the data
What it catches an abrupt jump off a stale reference ~86% thin-book illiquidity accidents — one order, one near-dead book
What it is blind to any gradual move, of any size thousands of stock-days traveling 15–30% in steps, untouched

The Dynamic Price Band is a jump-detector. It fires on the sudden and the accidental — overwhelmingly thin-book illiquidity — and it is structurally blind to the gradual. A price can travel the full daily range in small steps and the band never sees it. So whatever the mechanism is for, it cannot be a check on patient, gradual price movement: that class of behavior sits in the blind spot, by design. Whether any given gradual move is benign is a separate question — one for the surveillance methods of Chapters 7–8, never for this band, and never answered by naming a stock.

Anatomy of One

One band trip, second by second.

One worked example makes the jolt concrete. This is the anatomy of a band trip in a mid-cap name — a neutral mechanism illustration, never an accusation. The numbers are what matter.

The stock sat quiet — about one trade a minute, flat at 4.22 THB — for fifteen minutes. Then a one-sided sell sweep arrived.

Minute Trades Aggressor Price
12:054all buys4.22 → 4.34
12:093327 sells / 6 buys4.32 → 4.06
12:101913 sells / 6 buys4.28 → 3.90
12:10:21BAND TRIP → 120s pre-open

The point of the anatomy: the 14% are not liquid stocks. They are dormant stocks having a moment — a one-sided sweep (here, sellers) jolting price toward the band off a stale reference.

Chart 5a — The Run-Up (Trades by Aggressor Side)
Chart 5b — Inside the 120-Second Pause

During the pause the indicative price searches 4.04 → 3.88 and settles near 4.00, while bid quantity piles from ~39,000 to ~46,000 before the stock reopens. This only exists in the tick feed.

The Payload

How four desks actually use it.

The value of this finding is not a trading edge — the illiquidity that creates the signal destroys the capacity to trade it, and we make no prediction claim. The value is operational and defensive, and it works precisely because acting on the signal is cheap while ignoring it is expensive.

🔧 Execution / algo desk — don't let your own order halt you.

🔧 Sweeping a thin name aggressively can push price >10% off the last print and trip the band on your own flow — you lose the aggressive fill (it's cancelled), you're frozen for two minutes mid-execution, and you've shown your hand to the whole book. Two concrete moves: (1) pre-tag the band-prone universe offline from daily activity — no live feed needed, the separator is just baseline volume; (2) in those names, cap aggression and pace orders so a single child order never crosses the ±10% band. A live ‘approaching the band’ nowcast becomes a throttle.

📊 Risk / middle office — fix your marks and your stops.

📊 Around a trip, last-trade is the jolt extreme, and a large fraction of that move reverses by the close (it's temporary impact in a thin book). Marking these names off last-print produces phantom P&L and can fire false margin calls or forced liquidations on noise. Mark off the 2-minute auction reopen price, not the jolt tick. And do not place stops just outside the band — it is a known mean-reversion point, so a stop there gets triggered at the worst tick of a temporary dislocation.

🛡️ Surveillance / compliance — filter the noise, seed the watchlist.

🛡️ The exchange hands you a free halt feed, but 86% of it is illiquidity artifact (dead book, zero information) — which is exactly why a raw ‘halt count’ is meaningless. Discard it. The ~14% ‘dormant-name-suddenly-active’ trips are your candidate set: feed them into the manipulation workflow (Chapters 7–8), where the actual classification lives. A band trip is a candidate filter, never proof — necessary, not sufficient.

⚙️ Data / platform engineer — build it from the feed.

⚙️ All of this is a streaming job over orderbook_state and halt messages: a finite state machine per instrument, the band-prone classifier from rolling activity, and the auto-pause nowcast. The capability proof — clocking a regulatory ‘two-minute’ rule to 120.000 seconds ± 1.6 ms from raw ITCH — is the kind of result that's invisible in bar data and reproducible to the millisecond. Tick data doesn't just show you trades; it shows you the exchange's own machinery deciding when a stock isn't allowed to trade at all.

Every application above is defensive — avoid getting halted, fix your marks, filter your noise. The moment a use turns offensive (‘predict it,’ ‘trade it’), it needs a precision/recall study we have not run, and it stays out.

Honest Caveats

What this chapter does not claim.

The findings have real limits. A skeptic should object to each of these; we surface them ourselves.

Scope of this analysis

This analysis is descriptive and based on a limited sample — 22 trading days (roughly one month) of tick data. It characterizes what was observed in that window; it does not model cause and effect, it is not investment advice, and it is not a forecast. Patterns seen in this sample do not guarantee that the same behavior will occur in the future.

Read these before citing the numbers.

  • One month. 22 trading days is a single month, not a multi-quarter window. The 86/14 split and the 13× jolt are what we observe here, not constants.
  • Descriptive, not inferential. We characterize the 155 events; we do not estimate a treatment effect. We make no claim that the pause ‘calms’ volatility, and no claim that we can predict which jolt will trip — that would require measuring how often the same run-up occurs without a trip (the false-positive denominator), which we have not done.
  • The reversal is illiquidity, not manipulation. A move that round-trips proves a thin book mean-reverts, nothing more. Band trips are a surveillance candidate filter, not a manipulation detector.
  • Two unverifiable labels, stated as inference. That ‘CB’ in PRE-OPEN_CB_E expands to a specific phrase, and the _I/_L segment suffixes — the exchange's ITCH state dictionary is not public.
  • Trigger inferred from signature, not re-derived per event. The 120-second signature and the rule's published trigger match exactly, but we infer the trigger from the signature; we do not re-derive each event's ±10% reference price.

References

[1] SET Dynamic Price Band rule, effective 2 September 2024 — a stock moving ±10% from its latest execution price is moved into a two-minute pre-open auction. Source: SET.

This study uses licensed market data obtained through commercial agreement. Infozense is not affiliated with the Stock Exchange of Thailand. No market data is distributed through this website. This content is for educational and analytical purposes only and does not constitute investment advice.

Next Chapter

The Pulse

Market breadth at tick resolution. 50,864 SET50 index ticks. The exact moment sentiment shifts.

Read Chapter 10