Appearance
HaltEvent
Preview on the public Rust client. The analytic ships in the engine and is reachable today through the Python wheel and the TypeScript / Node addon; a per-analytic builder on the public Rust thin client (
kairos::Client) is tracked on the roadmap. The output tick schema below is stable.
What it computes
The halt-state edges per contract, off the live feed quote-condition stream. Every NBBO quote carries a bid-side and an ask-side condition code the SIP wire uses to advertise halts (HALTED, OPERATIONAL_HALT, REGULATORY_HALT, CATS_HALTED, MKT_WIDE_HALT_1 / _2 / _3, …). The analytic tracks the current trading state per contract and emits one tick only on a transition:
- A halt-begin edge (trading → halted) emits
halted = true,since_usset to the triggering quote's timestamp, andhalt_duration_us = 0. - A resume edge (halted → trading) emits
halted = false,since_usset to the start of the halt that closed, andhalt_duration_usset to the elapsed halt time.
Steady trading and steady halted states emit nothing — only the edge is the event. Consecutive halted quotes therefore produce exactly one tick, fired on the entry edge.
A quote is classified as halted when EITHER side carries a halt condition: a contract whose ask is halted is not freely tradable, so a single-sided advertisement is sufficient. The condition_code field carries the triggering quote condition so consumers can distinguish an operational halt from a regulatory halt or a market-wide circuit breaker.
Methodology
Halt / pause detection per the CBOE TradeAlert Halts / Pauses / SSR feature set. The quote-condition codes that signal a halt are the SIP / OPRA halt advertisements; the analytic edge-detects the transition between the trading and halted states rather than re-emitting the steady state, so the output stream is one tick per halt and one per resume.
Halts apply to stocks and options alike, so the analytic processes a quote on any subscribed contract — the security type is not gated on the per-tick path.
Inputs
- The admitted NBBO quote stream sourced from live feed. The halt signal rides the per-side quote condition codes, so no separate subscription is required.
Output schema (HaltEventTick)
The field / type / description table below is regenerated from the HaltEventTick Rust source by docs-site/scripts/inject-doc-tables.ts on every npm run docs:build. Do not hand-edit between the sentinels.
| Field | Type | Description |
|---|---|---|
contract | Contract | Resolved contract metadata. Subscribers identify the security by (symbol, expiration, right, strike) on this field — the wire-level contract id is engine-internal and is not surfaced here. |
date | i32 | Trading-session date (YYYYMMDD) of the quote that triggered the edge. |
ms_of_day | i32 | Milliseconds since midnight at the quote that triggered the edge. |
halted | bool | true when the new state is Halted (a halt began); false when the contract resumed trading. |
since_us | u64 | Wall-clock microsecond the current halt began. On a halt-begin edge this is the triggering quote's timestamp; on a resume edge it is the start of the halt that just ended. |
halt_duration_us | u64 | 0 on a halt-begin edge; the elapsed halt time (now − since) in microseconds on a resume edge. |
condition_code | i32 | Quote condition code that classified the new state. On a halt edge this is the halt code (e.g. OPERATIONAL_HALT, REGULATORY_HALT, MKT_WIDE_HALT_*) so consumers can distinguish the halt kind; on a resume edge it is the resume-triggering (non-halt) condition code. |
Configuration (HaltEventRequest)
Regenerated from the HaltEventRequest Rust source — see the note above.
| Field | Type | Description |
|---|---|---|
contracts | SecurityFilter | Contracts the subscription tracks. |
Operational characteristics
- Per-tick latency. O(1) — two condition-code lookups and a state-machine compare.
- Allocation discipline. The per-contract analytic instance holds only the current halt state; no hot-path allocations.
- Emission cadence. One emission per halt-state edge per contract — silent during steady trading and steady halted runs.
- Replay parity. Deterministic given identical input tick order.
Example
Preview. This analytic ships in the engine and is reachable today through the Python wheel and the TypeScript / Node addon. A per-analytic builder on the public Rust thin client (
kairos::Client) is tracked on the roadmap — bare-string symbol filters passed to the analytic accessor will match the other analytics already exposed there. The output tick rows are stable and documented above.