Quand faut-il accepter qu'un changement de régime n'est pas un blip ?
Trois régimes, deux seuils, un dwell time — l'hystérèse t'évite de switcher à chaque tick.
J = 1 − BV/RV te donne, à chaque fenêtre 60s, une mesure instantanée
de la part de variance attribuable aux sauts
(bipower-and-jumps). Mais Salim ne trade pas une
mesure ; il trade un état. Cette page raconte comment passer de
mesure-qui-bouge à verdict-qui-tient — sans switcher à chaque tick,
sans rater une vraie bascule.
State machine — trois régimes, et c'est tout
stateDiagram-v2
[*] --> Smooth
Smooth --> Transition: J > θ_high = 0.7
Transition --> Rough: J > θ_high ET dwell ≥ 60s
Transition --> Smooth: J < θ_low = 0.4 ET dwell ≥ 60s
Rough --> Transition: J < θ_low = 0.4 (immédiat, anti-piège)
Trois états seulement — Smooth, Transition, Rough. Pas de continuum,
pas de quatre niveaux : « le régime n'est pas dans la nature, il est dans
la décision » (ADR-0003 §4 ontologie). Le classifier est un service de
présentation à Salim — pas un modèle de la microstructure.
L'invariant clé : on n'entre pas dans Rough directement depuis
Smooth. Le seul chemin descendant vers la rugosité passe par
Transition, et ce passage est soumis à un dwell time (cf. §dwell ci-bas).
Le seul chemin remontant immédiat est Rough → Transition — anti-piège
nommé.
L'hystérèse, vue de deux côtés
Deux seuils, pas un. θ_high = 0.7 pour entrer en zone haute,
θ_low = 0.4 pour en sortir. Le gap θ_high − θ_low = 0.3 n'est pas
cosmétique — il fait deux boulots différents en même temps. La
synthèse délibérative (§C9 redondance pédagogique délibérée) impose de
garder les deux lectures côte à côte dans le texte, pas de choisir.
Lecture 1 — anti-chattering numérique
RV à fenêtre 60s porte une erreur d'estimation relative bornée à
~18 % à N=120 returns (realized-variance §borne
d'erreur). En cascade : BV porte la même classe d'erreur, et J = 1 − BV/RV flotte alors \(\pm0.05–0.10\) même si rien ne change dans le marché.
Avec un seuil unique à 0.55, ce bruit ferait chatter le classifier des
dizaines de fois par heure. Le gap de 0.3 dépasse confortablement
l'amplitude de ce flottement.
Conséquence opérationnelle : si J dépasse 0.7 puis retombe à 0.5,
le classifier reste en zone haute. Il ne redescendra pas tant que J n'a
pas franchi 0.4. C'est de l'arithmétique anti-bruit, basique.
Lecture 2 — Ulysses contract anti-Salim-of-tomorrow-morning
Le même gap, lu autrement : c'est un engagement contractuel à attendre
60s avant de croire au changement. Kahneman-Tversky 1979 Econometrica
47(2) p. 279 mesure une asymétrie pertes/gains de λ ≈ 2.25 — le coût
psychique d'un mauvais switch (resserrer un stop à tort, élargir un
trailing pour rien) est \(~2\times\) le bénéfice d'un bon switch. La symétrie
du gap (anti-chattering) corrige une asymétrie cognitive, pas seulement
numérique.
Salim, à 6 h du matin, fatigué, voit J = 0.71 sur sa montre. Sans le
dwell, sans l'hystérèse, il bascule l'élargissement du trailing. À 6 h 03,
J est retombé à 0.55. Le classifier intelligent n'a jamais bougé. Le
classifier naïf a coûté à Salim un trade resserré au mauvais moment, et
le frottement émotionnel d'avoir cru à un faux signal — frottement payé
au taux \(\lambda\) \(\approx\) 2.25.
L'hystérèse est le même objet vu par deux lentilles : un filtre passe- bas pour le bruit numérique, et un Ulysses contract pour le bruit psychologique. Les deux lectures ne sont pas concurrentes — elles co-justifient le même gap (synthèse §C9 + §I2).
Le dwell time — asymétrique par construction
Smooth → Transition : pas de dwell (alerte précoce, sans coût)
Transition → Rough : dwell ≥ 60s (anti-blip, on confirme)
Transition → Smooth : dwell ≥ 60s (anti-faux-retour-au-calme)
Rough → Transition : pas de dwell (anti-piège, on sort vite)
Pourquoi cette asymétrie. Entrer dans Rough est un engagement
coûteux côté Salim (trailing élargi, taille réduite) — il faut le mériter,
60s de confirmation. Sortir de Rough est gratuit côté risque (on ne
fait que relâcher la garde, et seulement vers Transition, pas vers
Smooth) — donc immédiat. Si la rugosité s'effondre brusquement, le
classifier ne bloque pas Salim en mode défensif.
L'autre asymétrie : Transition → Smooth est aussi gardée par 60s de
dwell. Sans ce dwell, un J qui retombe brièvement sous 0.4 entre deux
bouffées rugueuses dégonflerait le diagnostic — exactement le contraire
de ce qu'on veut quand le marché oscille en zone limite.
Auction hard-block — la fenêtre où le classifier se tait
Si l'heure UTC \(\in\) [14:30, 14:34], le classifier reste forcé
Smoothquoi qu'il arrive.
La fenêtre d'ouverture NY est structurellement haute-variance : pricing
discontinu, matching d'auction, pas un processus Lévy. Bouchaud, Bonart,
Donier, Gould (2018) chap. 11 nomme explicitement ce type de régime
comme artefact de mécanisme, pas comme régime de queue lourde — la
même mesure J y a une sémantique différente. Si le classifier réagit à
l'auction comme à un saut de marché, Salim ressort de l'ouverture en mode
défensif pour rien.
Le hard-block est la responsabilité du caller (salim-pipeline::run),
pas du classifier (ADR-0003 §4 — discipline caller, pas de
complexification de la state machine). Quand l'horloge passe 14:34 UTC,
le pipeline reprend l'appel normal à classifier.step(). Référence
empirique côté Salim : trigger IONQ entre 09:30 et 09:34 ET — c'est
exactement la fenêtre d'auction (cf.
outbound/2026-05-13-whatsapp-reponse-mandelbrot.md
§Msg 2).
Invariants algo
| ID | Invariant |
|---|---|
INV-CLASSIFIER-MONOTONIC-DWELL | Toute transition state' ≠ state implique (ts_ns − entered_at_ns) ≥ dwell_min_ms · 1e6, sauf Smooth → Transition (anti-blip ne s'applique pas à l'alerte) et Rough → Transition (anti-piège). Property-test + TLC. |
INV-CLASSIFIER-AUCTION | Tick d'auction \(\to\) le classifier ne transitione pas. Discipline caller, pas dans le classifier. |
INV-CLASSIFIER-MIN-TICK | J n'est pas consommé tant que tick_count_short < 30 et tick_count_long < 300 — sinon BV instable produit J → 1 artificiel (ADR-0005 patch (a)). |
Détail complet : docs/adr/0003-stats-and-classifier.md §4 table.
Pour ton cas
Ton stop a été traversé sans toucher le limit. Si tu avais ce classifier branché, ton stop aurait été en mode
Roughdepuis ~14:25 UTC — et le classifier t'aurait recommandé un trailing élargi de \(1.5\times\) la min-tick. Voir pivot-j-based pour pourquoi le ratioRV_short / RV_longseul aurait raté ce switch (il plafonne à ~0.2 sur la journée — il n'a aucune chance de franchir 0.7).
Le diagnostic n'est pas « il fallait mettre des stops plus larges » —
c'est « il fallait que tes stops sachent dans quel régime ils opèrent ».
L'hystérèse est ce qui rend la décision tenable : tu ne resserres pas
parce que J vient de descendre à 0.65 ; tu attends que J traverse
0.4 et y reste 60s.
Limites
- Calibration empirique.
θ_high = 0.7, θ_low = 0.4, dwell = 60ssont justifiés par le smoke run AMC 27-jan-2021 (cf. pivot-j-based), pas dérivés d'un modèle. La fourchette acceptable estdwell ∈ [30, 90] setgap ∈ [0.05, 0.5](synthèse délib-c2b8 §C4). À recalibrer si la distribution deJobservée sur d'autres instruments différe substantiellement. - Auction hard-block est un workaround. Il corrige un artefact de microstructure (Bouchaud et al. 2018 chap. 2 §2.4 — U-shape intraday de la volatilité), pas un objet propre du classifier. Si NYSE change son mécanisme d'auction (peu probable, mais possible), la fenêtre [14:30, 14:34] devra être re-mesurée.
J_longn'alimente pas le classifier. Le pipeline calcule un secondJsur fenêtre 600s (ADR-0005 patch (b)) — il est diagnostic seulement, pas signal. Si tu veux un classifierJ_long, il faudra une seconde state machine en parallèle (même algo, même hystérèse), pas fusionner les deux.
Références
- ADR-0003 §4 — state machine 3-états + hystérèse + dwell + invariants
(
docs/adr/0003-stats-and-classifier.mdL248–L323). - ADR-0005 — sémantique régime via
J(supersede §1 et §4 de ADR-0003 sur le choix du signal). - Kahneman, D. & Tversky, A. (1979). Prospect Theory: An Analysis of
Decision under Risk. Econometrica 47(2), p. 279 —
λ ≈ 2.25asymétrie pertes/gains (justification Ulysses contract). - Bouchaud, J.-P., Bonart, J., Donier, J., Gould, M. (2018). Trades, Quotes and Prices. Cambridge University Press, chap. 11 (régime shifts — analogies physiques et leurs limites) + chap. 2 §2.4 (U-shape intraday justifiant l'auction hard-block).
- Délibération-mère :
.cosmon/state/fleets/default/molecules/delib-20260514-bccc/synthesis.md§C9 (redondance pédagogique) + §I2 (load-bearing sentence comme checksum). - Cross-refs concept :
realized-variance — la mesure de base et sa
borne 18 % qui justifie le gap.
bipower-and-jumps — la définition de
J, le signal consommé ici. pivot-j-based — pourquoiJet pas le ratioRV. cases-index — les 5 cas Dirac classés via ce classifier.
Adversary nommé : salim-of-tomorrow-morning. Mitigation portée par
cette page : l'hystérèse double-nommée raconte explicitement pourquoi
attendre 60s — ce n'est pas une lourdeur d'ingénieur, c'est λ ≈ 2.25
fait code.