Le marché saute-t-il à cet instant ?

BV est aveugle aux sauts ; RV les voit. Leur ratio est ton détecteur de Lévy.

Une seule question à un bit. Si la variance de ces 60 secondes vient d'une diffusion continue, deux estimateurs convergent vers la même cible et leur écart est ~0. Si elle vient d'un saut isolé, un seul des deux estimateurs l'a vu — l'écart explose. Le ratio J = 1 − BV/RV rend cette dichotomie lisible sur un axe [0, 1].

Définition formelle de BV

Sur la même fenêtre (t − τ, t] que celle qui sert à realized-variance — mêmes retours tick-by-tick r_i, même découpe temporelle — on définit la bipower variation :

BV(t, τ) = (π/2) · Σ_{i: r_i, r_{i-1} ∈ window} |r_i| · |r_{i-1}|

La constante π/2 vient de l'identité gaussienne E[|Z|]² = 2/π pour Z ∼ 𝒩(0, 1). Elle calibre l'estimateur de sorte que, en l'absence de saut, BV(t, τ) →_p IV(t, τ) — la même integrated variance que RV estime ([barndorff2004power, Thm. 1, p. ~7] — consistance de la bipower variation vers la variance intégrée du processus continu, en présence d'un terme de sauts purs additif).

C'est précisément cette robustesse-au-saut qui distingue BV de RV : RV consomme (qui intègre les sauts), BV consomme |r_i|·|r_{i-1}| (qui ne voit que ce qui persiste sur deux ticks consécutifs).

Le jump indicator

Le ratio sans dimension :

J(t, τ) = 1 − BV(t, τ) / RV(t, τ)

Sémantique à un bit. J ≈ 0 \(\to\) diffusion lisse. J → 1 \(\to\) les sauts dominent la variance court terme. C'est la réponse à un bit à la question wheeler qui donne son titre à cette page.

Borne à fenêtre finie : J ∈ [−ε, 1] avec ε ≈ 10/N (docs/adr/0003-stats-and-classifier.md §2 (L113-L182), INV-BV-3). Le −ε est purement fini-sample ; asymptotiquement (Δ → 0) on aurait J ∈ [0, 1].

Intuition — pourquoi le produit décroisé est aveugle

Sur retours iid gaussiens centrés de variance σ², l'identité E[|r_i| · |r_{i-1}|] = E[|r_i|]² = (2/π) · σ² donne directement E[BV] = (π/2) · N · (2/π) · σ² = N · σ² = E[RV]. Donc BV ≈ RV, J ≈ 0 — la signature d'un régime continu.

Maintenant injecte un saut isolé Δ_k au tick k. Le saut entre :

Le terme de saut dans BV est donc d'ordre |Δ_k| · σ, linéaire en amplitude, alors qu'il est Δ_k² dans RV, quadratique. À forte amplitude, l'écart explose. Le ratio bascule. C'est mathématiquement le même mécanisme que la décomposition de Lévy-Khintchine du quadratic variation en partie continue + somme des sauts au carré ([barndorff2004power, Thm. 1] — qui formalise précisément cette décomposition pour les semi-martingales avec sauts).

Biais fini-sample — off par défaut

L'estimateur naïf surestime systématiquement BV à N petit. Correction [huang2005relative, Eq. 4] :

BV_corrected = (1 − 2/N)⁻¹ · BV_naive

Biais empirique (cf. docs/adr/0003-stats-and-classifier.md §2 (L160-L171)) :

La correction est exposée comme feature flag bv-corrected dans salim-core, off par défaut — réévaluation à J+30 selon le bruit observé empiriquement (docs/adr/0003-stats-and-classifier.md §2 (L167-L171)). Activer la correction ajoute deux colonnes au schéma Parquet (bv_corrected, j_corrected) sans casser la compatibilité V1.

Pour ton cas

Si tu calcules J sur fenêtre 60 s à chaque tick, c'est exactement la mesure qui distingue « ARM bouge fort mais lisse » (volatilité élevée, processus continu, J ≈ 0) de « ARM bouge fort par sauts » (régime rugueux Mandelbrot, J → 1).

Le second est la signature que tu décrivais le 2026-05-10 sur WhatsApp. J la rend lisible sans regarder le prix lui-même — il suffit de comparer deux estimateurs de variance dont l'un ferme les yeux sur les sauts.

Min-tick guard

Sur fenêtre courte avec très peu de samples (N < 30), J est trompeur : un premier return solitaire donne BV = 0 (pas de paire disponible), donc J = 1 artefact qui n'a rien à voir avec un saut physique. Le pipeline applique min_tick_count_short = 30 avant de laisser J alimenter le classifier — voir pivot-j-based §"patches (a) min-tick guard" et docs/adr/0005-classifier-signal-j-based.md §"Patches complémentaires" qui posent les défauts (30, 300) et l'invariant « le classifier ne transitionne pas tant que les deux counts ne dépassent pas ».

Sans ce garde, estimator-instability (l'adversaire endogène nommé dans le frontmatter) gagne — le détecteur sonne en l'absence de saut.

Limites

Adversaire & liens

Références