Skip to content

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::connect time — 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.

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).
ms_of_dayi32Milliseconds since midnight at emission.
implied_volf64Current IV observation.
prior_implied_volf64Prior IV observation (the value before this emission's update).
iv_chgf64implied_vol - prior_implied_vol.
iv_chg_pctf64(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.

FieldTypeDescription
contractsSecurityFilterContracts the subscription tracks.
ivArc<dyn IvProvider>IV snapshot source.
min_emit_interval_msi64Minimum gap in milliseconds between consecutive emissions per contract. Default 60_000 (1 minute).
min_iv_chgf64Minimum 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.

Proprietary. All rights reserved.