Appearance
IvChange
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
Per-contract change in implied volatility over a configurable emission cadence. The analytic tracks the per-contract IV reading the engine maintains for the same chain that drives Greeks and emits one tick when the reading advances past the configured throttle.
Methodology
The IV input is solved by the Black–Scholes IV bisection inside the Greeks analytic. IvChange reads the same IV the Greeks analytic publishes — the two analytics share the underlying implied-vol surface, so the change tick lines up exactly with the Greeks tick that updated it.
Inputs
- The shared per-contract implied-vol surface (the same source the Greeks analytic reads from). Provisioned at
Client::connecttime — the caller never wires it on the analytic builder. - Per-contract NBBO snapshot (for the timestamp anchor).
Output schema (IvChangeTick)
The field / type / description table below is regenerated from the IvChangeTick 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). |
ms_of_day | i32 | Milliseconds since midnight at emission. |
implied_vol | f64 | Current IV observation. |
prior_implied_vol | f64 | Prior IV observation (the value before this emission's update). |
iv_chg | f64 | implied_vol - prior_implied_vol. |
iv_chg_pct | f64 | (implied_vol - prior_implied_vol) / prior_implied_vol. NaN if the prior value was zero. |
Configuration (IvChangeRequest)
Regenerated from the IvChangeRequest Rust source — see the note above.
| Field | Type | Description |
|---|---|---|
contracts | SecurityFilter | Contracts the subscription tracks. |
iv | Arc<dyn IvProvider> | IV snapshot source. |
min_emit_interval_ms | i64 | Minimum gap in milliseconds between consecutive emissions per contract. Default 60_000 (1 minute). |
min_iv_chg | f64 | Minimum absolute IV change required to emit. Default 1e-4 (one IV basis point). The prior implementation used f64::EPSILON ≈ 2.22e-16, which is order-of-magnitude smaller than any meaningful IV move — the gate fired on every floating-point jitter. |
Operational characteristics
- Per-tick latency. One per-contract IV lookup, one threshold compare.
- Allocation discipline. State cell holds
(iv_prev, last_emit_ms); no hot-path allocations. - Replay parity. Deterministic given identical input tick order and an identical IV surface (the same source the Greeks analytic reads from).
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.