{
  "hinweis": "Oeffentliche Kopie einer Vorregistrierung von OrderFlowAi Research. Ersetzt sind nur interne Dateipfade, Namen und Kommentarfelder; Frage, Datenmenge, Kennzahl und Schwellen sind wortgleich zum Original. Fingerabdruck = SHA-256 dieser Datei, Byte fuer Byte.",
  "id": "s520-wand-pull",
  "stempel": {
    "rev": 2,
    "fp_intern": "69f8ba0b92a7ecec",
    "quittiert": "2026-10-12T10:32:39.020Z",
    "unterschrieben": true
  },
  "inhalt": {
    "id": "prereg-s520-wand-pull",
    "rev": 2,
    "stand": "2026-10-12",
    "aenderung_rev2": "S521 12.10.2026 ~12:30 Madrid, VOR der RTH des ersten Grundmengen-Tags und vor jedem Stempel: der Selbsttest des Auswerters zeigte, dass rev 1 ein Vol-Echo nicht sicher abfaengt, sobald die Basis (distTop, lvlSz) selbst traegt — synthetisch 5/10 faelschlich TRAEGT (Vol-Null (c) prueft das volle Modell, das die Basis-Information enthaelt; (d) Uplift je Vol-Zelle ist wegen der Rest-Volatilitaet innerhalb der Schichten ein Muenzwurf). Fuer Waende ist das der wahrscheinliche Fall: prints60/lots60/umbau10/druck30 haengen an der Marktaktivitaet. rev 2: BEIDE Modelle (voll und Basis) bekommen log1p(spanne120) als zusaetzliches Merkmal (vol-bereinigter Vergleich) — Echo+Basis 0/10, reines Echo 0/10, Trennschaerfe (signal, schwach, signal+Vol) unveraendert 10/10. Sonst unveraendert; (c) und (d) bleiben als zweite Pruefung. Folge fuer (c): sie prueft weiter den Score des VOLLEN Modells; weil der jetzt log1p(spanne120) enthaelt, traegt Rest-Volatilitaet innerhalb der Schichten dort mit (reines Echo synthetisch 0,58 > 0,55). Die Echo-Sperre ist in rev 2 Bedingung (a) (reines Echo 0/10 TRAEGT); (c) und (d) sind Zweitpruefung.",
    "frage": "Sagen Level-2-Merkmale, die auch beim Kunden ohne MBO live berechenbar sind, vorher, ob eine grosse ruhende Wand (eine einzelne Order >= 20 Lots, nahe am Markt) GEZOGEN (pull: geloescht ohne Ausfuehrung) statt GEHANDELT (fill) wird?",
    "hypothese": "MBO ist hier nur der LEHRER: es liefert die Wahrheit (welche einzelne Order wie endet), die Merkmale kommen ausschliesslich aus Stroemen, die das Produkt hat (Ladder + Prints). Prior (deklariert, testbar, kein Massstab): eine Wand, die gezogen wird, kommt eher als einzelner Sprung in eine sonst duenne Stufe, steht kuerzer, ihre Stufe wird oefter umgebaut, und der Fluss laeuft gegen sie an. Gegenhypothese: ob eine Wand gefuellt oder gezogen wird, haengt nur am Abstand zum Markt und an ihrer Groesse (Basis-Modell) bzw. an der Volatilitaet (vol_null) — die weiteren L2-Merkmale bringen nichts. Das Urteil muss NEIN sagen koennen.",
    "offenlegung_nicht_blind": [
      "BEKANNT (andere Fragen, andere Einheiten): prereg-s451 GEURTEILT — H1 PROXY_TRAEGT (der L2-Storno-Proxy ordnet 2-s-Fenster wie die MBO-Wahrheit), H2 MELDER_TRAEGT_NICHT. prereg-s447e GEURTEILT — Frage B NICHT_ERFUELLT (Iceberg-Melder gegen MBO-Nachlage). Keine dieser Zahlen ist ein Wand-Label.",
      "GESEHEN vor dieser Datei: nur Dateikoepfe der Rithmic-Mitschnitte vom 12.10. (alle VOR der RTH, ab 06:58Z): Format der Zeilen, Header (app 'OrderFlowAi MBO Live/0.3.28', window_ticks 40, tick 0.25), Ladder- und Rawlog-Kopf. Dabei als Formatbeispiel zwei abgeleitete 'pull'-Zeilen der Globex-Nacht (nicht Grundmenge). KEINE Rate, keine Verteilung, keine Wand gezaehlt, kein Merkmal gerechnet.",
      "Der Indikator klassifiziert Wand-Enden bereits live (OfaMboBook.Delete, S520 'Endgruende' an die Heatmap). Ob der Gründer in der Heatmap Wand-Enden angesehen hat, ist ein Eindruck, keine Messung — er traegt es vor der Unterschrift unter _offen_fuer_enrico ein.",
      "Die Schwellen (20 Lots, 5 Ticks, 2 s, 1 s, 300 s) sind OHNE Daten gewaehlt: 20 = BridgeBigLots des Indikators (OrderFlowAiMboLive.cs:846), 5 Ticks = Zone wie prereg-s451 (zone_ticks 5), der Rest a priori (_schwellen_warum).",
      "GESEHEN 12.10. 12:29 Madrid (wand-pull-studie.js --probe, Mitschnitt 08:08:35–10:29Z, VOR der RTH, NICHT Grundmenge): 36 Waende mit Label, Ausschluesse verschoben 4 (sonst 0), keine Wand: ende_vor_te 27 · fern 13 · unter_lots_bei_te 2 · ort_gewechselt_vor_te 1; Port-Abgleich 100 %; Uhr Median −90 ms (30.851 Paare); Abdeckung je Quelle 2,33 h. KEINE Klassenanteile, kein Merkmal, kein Modell."
    ],
    "grundmenge": {
      "zeitraum": "2026-10-12 bis zum 10. geeigneten Handelstag (bei Verlaengerung nach reife.verlaengerung hoechstens bis zum 15.)",
      "ab": "20261012",
      "quellen": {
        "label": "Rithmic-MBO-Mitschnitt des NT8-Indikators: %USERPROFILE%/OrderFlowAi/mbo-rithmic/capture/<Symbol>_<YYYYMMDD>_<HHMMSS>Z.nt8.rithmic-mbo.ndjson(.gz). Empfangene Zeilen (o 'r'): k I/N/C/D (DBO je Order-ID: id, s, p, z, pr, tr = Empfang in µs seit Epoche, ts = Quellzeit), k T (Trade; id = ruhende Order, aid = Aggressor), k R/A. Abgeleitete Zeilen (o 'd'): level (awaitingimage/imaged/live/suspect/untracked), anomaly, reset, ice, pull, stats.",
        "merkmale_l2": "%USERPROFILE%/OrderFlowAi/indicator_ladder*-Datenstrom — 200-ms-Schnappschuesse {t epoch-ms-utc, b/a = 30 Stufen [Preis, Groesse] je Seite}",
        "merkmale_tape": "%USERPROFILE%/OrderFlowAi/indicator_rawlog*-Datenstrom — Prints {t = .NET-Ticks Rechner-Wanduhr, p, q, rq = Seite nach Produktregel QUOTE-G0 (+1 Kauf, -1 Verkauf, 0 ohne)}"
      },
      "nur": "RTH 09:30–16:00 ET als America/New_York-Wanduhr (lib/zeit), nie feste UTC-Stunden — ab 01.11.2026 gilt EST.",
      "geeigneter_tag": "voller Handelstag (lib/handelskalender.istHandelstag) mit (a) MBO-Mitschnitt >= min_rth_stunden RTH-Abdeckung aus Segmenten, die ab mitschnitt_ab_utc begonnen haben, (b) Ladder >= min_rth_stunden, (c) Rawlog >= min_rth_stunden, (d) Uhrenpruefung bestanden. Kalenderreihenfolge.",
      "min_rth_stunden": 6,
      "mitschnitt_ab_utc": "2026-10-12T08:08:00Z",
      "tag_12_10": "Der 12.10. ZAEHLT. Der Indikator erzeugte am Morgen falsche suspect-Stufen (Rithmic liefert dieselbe Loeschung 2-3x) bis zum Doppel-Delete-Fix, live ab dem Segment 2026-10-12 08:08:35Z (10:08 Madrid) — 5 h 22 min VOR der RTH (13:30Z). Segmente, die vor mitschnitt_ab_utc begonnen haben, zaehlen nie (sie liegen ohnehin vor der RTH). Der Header traegt vor und nach dem Fix dieselbe App-Version (0.3.28) — die Grenze ist deshalb eine ZEIT, keine Version.",
      "abdeckung": {
        "mbo": "Vereinigung der Segment-Spannen (erste bis letzte tr-Zeile je Datei) ∩ RTH",
        "ladder": "Summe der RTH-Intervalle zwischen aufeinanderfolgenden Schnappschuessen mit Abstand <= 5 s",
        "rawlog": "Spanne erster bis letzter Print in der RTH (wie prereg-s447f)",
        "reife_zaehler": "Der Reife-Zaehler (ausfuehrung.skript) prueft nur Datei-Spannen (Segment: Name bis mtime; Ladder/Rawlog: erster bis letzter Zeitstempel) und ist damit ein KANDIDAT. Die Studie misst exakt wie oben und kann einen Kandidaten-Tag noch verwerfen."
      },
      "uhrenpruefung": "je Tag: Median-Versatz zwischen Rawlog-Prints und MBO-T-Zeilen (gleicher Preis, gleiche Menge, naechster Partner innerhalb ±2 s) ueber die RTH. |Median| > 500 ms ⇒ Tag ungeeignet (gezaehlt, benannt). Das ist eine Datenguete-Pruefung, kein Ergebnis.",
      "mindest_handelstage": 10,
      "einheit": "eine Wand (Definition unter wand), je Order-ID hoechstens einmal"
    },
    "wand": {
      "groesse_lots": 20,
      "nah_ticks": 5,
      "ruhe_ms": 2000,
      "schnitt_ms": 1000,
      "horizont_s": 300,
      "letzter_te_et": "15:55:00",
      "definition": [
        "Order-ID per N (New) gesehen (AgeKnown = true, OrderFlowAiMboLive.cs:502). Orders aus einem Abbild (I) haben kein bekanntes Alter und zaehlen nie.",
        "t0 = tr der ersten N/C-Zeile dieser ID mit z >= groesse_lots (Peak wie OrderFlowAiMboLive.cs:507).",
        "t_e = t0 + ruhe_ms (Entscheidungszeitpunkt): die Order lebt bei t_e (kein wirksames D in (t0, t_e]), steht am selben Preis und auf derselben Seite wie bei t0, und ihre Groesse bei t_e ist >= groesse_lots.",
        "t_c = t_e − schnitt_ms (Merkmals-Schnitt): ALLE Merkmale und die Nah-Bedingung benutzen nur Ladder/Rawlog mit Zeitstempel <= t_c (Sicherheitsabstand gegen Uhrenversatz).",
        "nah: im letzten Ladder-Schnappschuss mit t <= t_c (hoechstens 1000 ms alt) gilt fuer eine Bid-Wand 0 <= (bestBid − p)/0,25 <= nah_ticks, fuer eine Ask-Wand 0 <= (p − bestAsk)/0,25 <= nah_ticks.",
        "t_e liegt in [09:30:00, letzter_te_et) ET, damit der Horizont vor 16:00 ET schliesst.",
        "Mitschnitt-Segment hat ab mitschnitt_ab_utc begonnen; der Tag ist ein geeigneter Tag der Grundmenge.",
        "Erfuellt die ID die Bedingungen bei ihrem ersten t0 nicht, ist sie keine Wand (kein zweiter Versuch spaeter)."
      ]
    },
    "label": {
      "y": "1 = GEZOGEN (pull), 0 = GEHANDELT (fill). Positive Klasse fuer die AUC = GEZOGEN.",
      "rekonstruktion": "OFFLINE aus dem rohen Mitschnitt, je Segment eigenes Buch (wie je Session im Indikator): alle Zeilen in Dateireihenfolge (q) durch eine JS-Portierung von OfaMboBook.Apply — empfangene I/N/C/D/R/T UND die abgeleiteten Buch-Eingriffe der Session (level 'awaitingimage:*' ⇒ ClearLevel, level 'untracked:*' ⇒ ClearLevel, 'reset' ⇒ ResetAll), weil der Indikator damit sein Buch veraendert hat (MarkAwaitingImage OrderFlowAiMboLive.cs:370, ClearLevel OrderFlowAiMboLive.cs:527).",
      "regel": "Ende der Wand = erstes wirksames D ihrer ID nach t_e. GEHANDELT, wenn (FilledSinceReload > 0 UND tr_D − LastFillUs <= 2 000 000 µs) ODER (letzter T am Wandpreis mit tr_D − tr_T <= FillWindowUs = 250 000 µs) — woertlich OrderFlowAiMboLive.cs:458-459 (Delete), Konstante FillWindowUs in OrderFlowAiMboLive.cs:336. Sonst GEZOGEN. Ausfuehrungen werden der Order ueber T.id (ExchOrdId der ruhenden Order) zugeordnet (OrderFlowAiMboLive.cs:409); eine Iceberg-Nachladung setzt FilledSinceReload auf 0 (OrderFlowAiMboLive.cs:490) — die Portierung uebernimmt das unveraendert.",
      "doppel_delete": "Ein weiteres D derselben ID innerhalb von 5 s nach dem wirksamen D ist eine Doppelmeldung und wird ignoriert (OrderFlowAiMboLive.cs:472).",
      "abweichung_verboten": "Die Portierung folgt dem Code auch dort, wo er grob ist (z. B. T-Zeilen mit cb 'Image' setzen _lastTradeUs). Jede Abweichung vom Code waere eine neue Revision.",
      "port_abgleich": "Pflicht vor dem Urteil: jede Wand, die die Portierung GEZOGEN nennt und der nie eine Ausfuehrung zugeordnet wurde (Filled = 0), muss im Mitschnitt ein abgeleitetes 'pull' mit derselben id tragen (der Indikator schreibt es fuer Filled = 0, Peak >= 10, |p − Mitte| <= 10 Ticks — bei nah_ticks 5 immer erfuellt). Uebereinstimmung < 99 % ⇒ NICHT_MESSBAR (die Portierung weicht vom Code ab), kein Urteil."
    },
    "ausschluss": {
      "steht": "kein wirksames D innerhalb horizont_s nach t_e",
      "verschoben": "C mit Preiswechsel der ID zwischen t_e und Ende",
      "stufe_unsicher": "die Wandstufe war zwischen t0 und Ende awaitingimage, suspect oder untracked (Abbild neu geladen ⇒ Order-Objekt neu, Label unsicher)",
      "session_ende": "reset / Segment-Ende vor dem Ende der Wand",
      "ohne_ladder": "kein Ladder-Schnappschuss <= t_c, der hoechstens 1000 ms alt ist",
      "doppelt": "dieselbe ID ein zweites Mal (je ID hoechstens eine Wand)"
    },
    "merkmale": {
      "liste": [
        "distTop — Abstand p zum besten Preis der Wandseite in Ticks (0..5), aus S(t_c)",
        "lvlSz — log1p(L2-Groesse am Preis p), aus S(t_c)",
        "relMed — ln((L2-Groesse an p + 1) / (Median der L2-Groessen an p ± 1..10 Ticks, beide Seiten, soweit in S(t_c) vorhanden + 1)); weniger als 5 Werte ⇒ 0 (gezaehlt)",
        "sprung5 — log1p(groesster Anstieg der L2-Groesse an p zwischen zwei aufeinanderfolgenden Schnappschuessen in (t_c − 5 s, t_c]; 0, wenn keiner)",
        "alterL2 — log1p(Sekunden, seit denen die L2-Groesse an p ununterbrochen >= 20 ist, bis t_c; gekappt bei 600 s)",
        "umbau10 — log1p(Summe |Δ L2-Groesse an p| zwischen aufeinanderfolgenden Schnappschuessen in (t_c − 10 s, t_c], geteilt durch 10 s)",
        "prints60 — log1p(Anzahl Rawlog-Prints mit Preis p in (t_c − 60 s, t_c])",
        "lots60 — log1p(Lots dieser Prints)",
        "imbWand — (Sw − Sg) / (Sw + Sg), Sw/Sg = Summe der L2-Groessen der 5 besten Stufen je Seite in S(t_c) OHNE die Wandstufe; Summe 0 ⇒ 0",
        "druck30 — (Lots der Aggressoren, die die Wandseite treffen − Lots der Gegenrichtung) / Summe, Rawlog in (t_c − 30 s, t_c]; Bid-Wand: rq = −1 trifft sie, Ask-Wand: rq = +1; Prints mit rq = 0 zaehlen nicht; keine Prints ⇒ 0",
        "annaeherung30 — abstand(t_c − 30 s) − abstand(t_c) in Ticks bei festem p (abstand = (bestBid − p)/0,25 bzw. (p − bestAsk)/0,25, darf negativ sein), gekappt auf ±20; kein Schnappschuss <= 1 s vor t_c − 30 s ⇒ 0 (gezaehlt)"
      ],
      "basis": [
        "distTop",
        "lvlSz"
      ],
      "l2_proxy": "Ehrliche Luecke: Level 2 zeigt nur die SUMME je Preis, nicht dass dort EINE Order >= 20 Lots steht. Die Wand-Eigenschaft ist im L2 nur ueber Stellvertreter sichtbar (lvlSz, relMed, sprung5 als 'einzelner Sprung', alterL2). Genau deshalb ist MBO hier der Lehrer: es bestimmt, WELCHE Momente Waende sind und wie sie enden; die Merkmale sehen davon nichts. Die Grundmenge ist damit MBO-verankert — ein Live-Kopf muesste auf L2-Ausloesern laufen (andere Population). Nach dem Urteil wird beschreibend gedruckt, welcher Anteil der Waende einen sprung5 >= 20 Lots zeigt (Proxy-Deckung); die Live-Population braucht eine eigene Vorregistrierung (einbau).",
      "vol_bereinigung": {
        "mass": "log1p(spanne120) — dieselbe Groesse wie vol_null.mass, zum Zeitpunkt t_c abgeschlossen",
        "in": "voll UND basis",
        "zweck": "gezaehlt wird nur, was die neun Nicht-Basis-Merkmale ueber Abstand, Groesse UND Kurzfrist-Volatilitaet hinaus tragen"
      }
    },
    "modell": "logistische Regression, Batch-Gradientenabstieg: 300 Iterationen, Lernrate 0,1, L2 1e-3, Startgewichte 0, kein Klassengewicht; Trainingsteil deterministisch auf hoechstens 300.000 Zeilen ausgeduennt (jede k-te). Dieselbe Bauart wie prereg-s447f. KEINE Hyperparameter-Suche, keine Merkmalsauswahl.",
    "validierung": {
      "walk_forward": "Tage in Kalenderreihenfolge; Testtag k (k = 6..K, K = 10 bzw. 15 nach Verlaengerung) wird mit einem Modell aus den Tagen 1..k−1 bewertet; Out-of-Sample-Scores gepoolt.",
      "mass": "Rang-AUC (Bindungen Mittelrang) des vollen Modells und des Basis-Modells auf denselben Waenden, positive Klasse GEZOGEN.",
      "null": "199 Permutationen der Labels INNERHALB jedes Testtags (mulberry32 ueber lib/statistik.zufall, Saat 520); null95 = 95-%-Quantil der AUC des vollen Modells.",
      "tages_uplift": "je Testtag AUC_voll − AUC_basis"
    },
    "vol_null": {
      "mass": "spanne120 = (hoechster − tiefster Rawlog-Tradepreis in (t_c − 120 s, t_c]) / 0,25 Ticks — zum Zeitpunkt t_c abgeschlossen, kein Zukunftsleck; rev 2: als log1p auch in beiden Modellen (merkmale.vol_bereinigung)",
      "schichten": 5,
      "huerde": 0.55,
      "anwendung": "lib/vol-null.messen({tag, kopf = OOS-Score des vollen Modells, vol = spanne120, y = GEZOGEN}, 5 Schichten je Tag) und lib/vol-null.urteil(huerde 0,55, tageAnteil 0,7, maxLeer 0,2) auf den Testtagen. Zusaetzlich je Zelle (Testtag × Schicht) AUC_voll − AUC_basis fuer Bedingung (d) des Urteils."
    },
    "stoergroesse": "Kurzfrist-Volatilitaet (spanne120): ein Kopf, der nur 'ruhiger Markt ⇒ Wand wird nicht erreicht ⇒ gezogen' gelernt hat, ist ein Vol-Echo — deshalb vol_null UND Uplift je Vol-Schicht. Abstand zum Markt und Wandgroesse: stecken im Basis-Modell (distTop, lvlSz); gezaehlt wird nur, was die uebrigen neun Merkmale DARUEBER hinaus tragen.",
    "reife": {
      "tage": 10,
      "max_tage": 15,
      "regel": "die ERSTEN 10 geeigneten Tage ab grundmenge.ab; EINMALIGES Urteil, kein Weiterrechnen, bis es passt. Spaetere Tage = Replikation mit neuer Revision.",
      "verlaengerung": "Ist bei 10 Tagen Bedingung (e) nicht erfuellt, wird EINMAL auf die ersten 15 geeigneten Tage verlaengert (Testtage 6..15). Diese Entscheidung liest NUR (e) und druckt dabei weder Klassenzahlen noch eine AUC; danach keine weitere Verlaengerung.",
      "unter_reife": "NUR die Tageszaehlung des Reife-Zaehlers — keine Wand, kein Label, keine Klassenzahl, kein Merkmal."
    },
    "urteil": {
      "TRAEGT": "alle fuenf: (a) AUC_voll >= AUC_basis + 0,02 (gepoolt OOS) · (b) AUC_voll > null95 · (c) Vol-Null bestanden (vol_null) · (d) Uplift bestaendig: AUC_voll − AUC_basis > 0 an >= 70 % der Testtage UND Median ueber die Zellen (Testtag × Vol-Schicht) von AUC_voll − AUC_basis > 0 · (e) >= 200 GEZOGEN und >= 200 GEHANDELT out-of-sample",
      "TRAEGT_NICHT": "(e) erfuellt, port_abgleich bestanden, aber (a)–(d) nicht alle",
      "NICHT_MESSBAR": "(e) auch nach der Verlaengerung verfehlt, port_abgleich < 99 %, oder Vol-Null nicht messbar (> 20 % leere Zellen). Kein Kopf; eine neue Frage braucht eine neue Revision mit neuen Tagen.",
      "UNTER_REIFE": "< 10 geeignete Tage — nichts gebaut, nichts gerechnet",
      "beschreibend_nach_urteil": "AUC je Merkmal allein (ohne Urteil), Uplift je Vol-Schicht, Proxy-Deckung (Anteil sprung5 >= 20), Ausschluesse je Grund, Uhrenversatz je Tag, Klassenanteile je Tag. Nichts davon aendert das Urteil."
    },
    "selbsttest": {
      "regel": "ohne gruenen Selbsttest kein Lauf; jeder Fall mit Gegenprobe",
      "label": "synthetische Ereignisfolgen gegen die Code-Regel: D 1,9 s nach Fill ⇒ GEHANDELT, 2,1 s ⇒ GEZOGEN; T am Preis 240 ms vor D ⇒ GEHANDELT, 260 ms ⇒ GEZOGEN; Nachladung setzt den Fill-Zaehler zurueck; Doppel-D innerhalb 5 s ignoriert",
      "grundmenge": "Order aus Abbild ⇒ keine Wand; 19 Lots ⇒ keine Wand; D vor t_e ⇒ keine Wand; 6 Ticks vom Besten ⇒ keine Wand; Stufe suspect zwischen t0 und Ende ⇒ ausgeschlossen",
      "leck": "Gegenprobe: ein Ladder-/Rawlog-Ereignis NACH t_c veraendert kein Merkmal; eines bei t_c veraendert es",
      "urteil": "Signal nur in den Nicht-Basis-Merkmalen ⇒ TRAEGT; Labels ohne Zusammenhang ⇒ TRAEGT_NICHT; reines Vol-Echo ⇒ TRAEGT_NICHT (rev 2 ueber (a); rev 1: (c) faellt); jede Bedingung (a)–(e) kippt allein; rev 2: Vol-Echo bei tragender Basis ⇒ TRAEGT_NICHT (rev 1 nannte das TRAEGT)"
    },
    "einbau": "Nur nach TRAEGT UND eigenem der Gründer-Go: als EIGENER Schatten-Kopf neben CORTEX (keine Aenderung an NUM_FEATURES/ENGINE_VERSION, kein Wipe, keine Strategie-Wirkung), mit eigener Vorregistrierung fuer den Live-Betrieb — dort wird der L2-Ausloeser (Population ohne MBO) festgelegt und erneut gegen MBO geprueft. Bis dahin keine Anzeige.",
    "ausfuehrung": {
      "skript": "wand-pull-studie.js",
      "vorprobe": "node wand-pull-reife.js --vorprobe-json — Vertrag lib/prereg {tage, gueltig, prognoseTage}, gueltig = geeignete TAGE (nie Waende oder Labels)",
      "reife_anzeige": "node daten-bedarf.js (Zeile 'Wand-Pull-Kopf')"
    },
    "grenze": "Level 2 sieht keine Einzelorder (l2_proxy) — mehrere Waende am selben Preis tragen dieselben Merkmale. Die Fill-Regel des Codes ist grob: ein Abzug direkt nach einem Trade am Preis (<= 250 ms) zaehlt als GEHANDELT — das verschiebt Grenzfaelle zu GEHANDELT, fuer beide Modelle gleich. Ein Abzug mit neuer ID (Cancel + neue Order) ist fuer MBO ein Pull plus eine neue Order. Uhren: MBO-tr = Rechneruhr beim Session-Start + Stoppuhr, Ladder = Rechneruhr, Rawlog = NT8-Zeit als Rechner-Wanduhr; der Merkmals-Schnitt 1 s und die Uhrenpruefung tragen einen Versatz bis 0,5 s; der Schnitt bedeutet auch, dass ein Live-Kopf 1 s frueher entscheidet, als die Grundmenge das Ueberleben bis t_e verlangt. Der MBO-Ausschnitt ist ±40 Ticks um die Mitte — Waende bis 5 Ticks vom Besten liegen immer darin. Nur ein Rechner, ein Feed, ein Kontrakt (ESZ6; ein Rollover in der Laufzeit ist nicht zu erwarten). rev 2: die Vol-Bereinigung ist linear in log1p(spanne120); eine nicht-lineare Vol-Abhaengigkeit kann ein Nicht-Basis-Merkmal noch tragen — dafuer bleiben (c) und (d).",
    "rueckweg": "TRAEGT_NICHT ⇒ kein Kopf, keine Merkmals-Suche, kein Drehen an 20 Lots / 5 Ticks / 2 s / 300 s auf denselben Tagen. Eine neue Merkmalsliste oder Wand-Definition braucht eine neue Revision mit neuen Tagen."
  }
}
