Skip to content

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_us set to the triggering quote's timestamp, and halt_duration_us = 0.
  • A resume edge (halted → trading) emits halted = false, since_us set to the start of the halt that closed, and halt_duration_us set 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.

FieldTypeDescription
contractContractResolved 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.
datei32Trading-session date (YYYYMMDD) of the quote that triggered the edge.
ms_of_dayi32Milliseconds since midnight at the quote that triggered the edge.
haltedbooltrue when the new state is Halted (a halt began); false when the contract resumed trading.
since_usu64Wall-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_usu640 on a halt-begin edge; the elapsed halt time (now − since) in microseconds on a resume edge.
condition_codei32Quote 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.

FieldTypeDescription
contractsSecurityFilterContracts 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.

Proprietary. All rights reserved.