Kegel mit Adaptive Conformal Inference nachkalibriert (v=158)

Der Kegel war seit dem 31.07. dokumentiert 3-5 Pp ZU ENG - 80 % nominal gegen
real 76,7 / 76,6 / 75,3 % - und blieb es, weil Nachfitten das Problem nur
verschiebt. ACI justiert stattdessen ONLINE nach jedem aufgeloesten Fenster und
konvergiert nachweislich gegen die Zielabdeckung, auch unter Drift.

EHRLICH ZUR BAUART: die Lehrbuch-Form justiert alpha und schlaegt das Quantil
nach. Hier liegt nur eine feste Quantil-Tabelle vor, kein Verteilungsobjekt -
umgesetzt ist die multiplikative Variante:
    s <- s * exp(gamma * (1{verfehlt} - alpha_ziel)),  gamma 0,02, Deckel 0,7-2,0
Dieselbe Regelungsidee, aber die Konvergenz-GARANTIE der Originalform ist damit
nicht woertlich uebertragen.

Verifiziert: bei exakt 20 % Verfehlern bleibt die Skala bei 1,0000 - der
Fixpunkt stimmt. Simulation aus der dokumentierten Lage (76,6 %): nach ~50
Checks um 80 %. Die Skala pendelt um das Ziel statt exakt zu treffen - das ist
das bekannte ACI-Verhalten (garantiert ist die Langfrist-Abdeckung).

NICHT-UEBERLAPPEND geloggt (neue Tabelle cone_checks): ein 120-min-Fenster alle
5 min waere 24-fach ueberlappend - genau die Cluster-Verzerrung, an der
analyze_hl_funding.py aufgelaufen ist und die die Faelligkeitsbedingung
pbreak_accuracy_v2 um das Zehnfache danebenliegen liess. Je Horizont startet ein
neuer Check erst, wenn der vorige ablief -> 48/24/12 Checks je Tag.

Neustart-fest ueber runtime_state.json. build() ohne skalen liefert bitgenau die
alten Werte (additiv geprueft).

ZWEI EIGENE PLATZIERUNGSFEHLER, beide gefangen: der Lade-Block landete zuerst
HINTER den except-Klauseln von _load_runtime_state, wo st nicht mehr existiert;
und beim M15-Setup landete ein Block mitten in einem mehrzeiligen Aufruf. Der
erste waere stillschweigend nie gelaufen - gefunden nur, weil ich die Funktion
danach gelesen habe statt dem gruenen py_compile zu trauen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-08 23:45:26 +02:00
co-authored by Claude Opus 5
parent 86c432f791
commit b8705e297f
6 changed files with 244 additions and 11 deletions
+44 -2
View File
@@ -4182,7 +4182,7 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
(„⚠ die Welle (steuert die Order) schweigt").
Live gegengerechnet, beide Zeilen erscheinen wie beabsichtigt.
⚠ Reine Anzeige — an Gewichten, Gates und Order-Logik ist nichts geändert.
- Asset-Version aktuell **v=157** (in `web/index.html` hochzählen, siehe Workflows).
- Asset-Version aktuell **v=158** (in `web/index.html` hochzählen, siehe Workflows).
Schriftgrößen 2026-07-24 global **+4px** (2× je +2px auf User-Wunsch; Body-Basis
14→18px). ⚠ Betrifft in `style.css` sowohl `font-size:Npx` (71×) ALS AUCH die
`font:<weight> Npx/…`-**Shorthand** (3×: `.ms-chip`/`.ms-bos-lbl`/`.sqm-badge`
@@ -4942,6 +4942,48 @@ Modell schliesst keine Trades.
„die Rangfolge ist kaputt" ist **nicht** belegt; belegt ist nur die
Basisraten-/Kalibrierungslücke.
## ✅ KEGEL MIT ADAPTIVE CONFORMAL INFERENCE (2026-08-08, v=158)
Der Kegel war seit dem 31.07. dokumentiert **35 Pp ZU ENG** — 80 % nominal
gegen real **76,7 / 76,6 / 75,3 %** — und blieb es, weil Nachfitten das Problem
nur verschiebt: die nächste Periode hat wieder eine andere Vola. **ACI** ist die
Standardmethode dafür (Web-Recherche 08.08.): sie justiert das Niveau **online**
nach jedem aufgelösten Fenster und konvergiert nachweislich gegen die
Zielabdeckung, **auch unter Verteilungsdrift**.
**EHRLICH ZUR BAUART:** die Lehrbuch-Form justiert `α` und schlägt das
zugehörige Quantil nach. Hier liegt nur eine feste **Quantil-Tabelle** vor, kein
Verteilungsobjekt — umgesetzt ist deshalb die **multiplikative Variante**:
```
s ← s · exp(γ · (1{verfehlt} α_ziel)) γ = 0,02 · Deckel [0,7 … 2,0]
```
Dieselbe Regelungsidee, aber **die Konvergenz-Garantie der Originalform ist
damit NICHT wörtlich übertragen** — es ist ACI im Geiste.
**Verifiziert:** bei **exakt 20 % Verfehlern bleibt die Skala bei 1,0000**
das ist der Fixpunkt, und er stimmt. Simulation aus der dokumentierten Lage
(76,6 % Abdeckung): nach ~50 Checks um 80 %.
⚠ Die Skala **pendelt** um das Ziel statt exakt zu treffen. Das ist das bekannte
ACI-Verhalten: garantiert ist die **Langfrist**-Abdeckung, nicht der Einzelwert.
⚠⚠ **NICHT-ÜBERLAPPEND geloggt** (`cone_checks`): ein 120-min-Fenster alle 5 min
wäre **24-fach überlappend** — genau die Cluster-Verzerrung, an der
`analyze_hl_funding.py` (06.08.) aufgelaufen ist und die die
Fälligkeitsbedingung `pbreak_accuracy_v2` um das Zehnfache danebenliegen liess
(07.08.). Je Horizont startet ein neuer Check erst, wenn der vorige abgelaufen
ist → 48/24/12 Checks je Tag.
**Neustart-fest** über `runtime_state.json` — ohne Persistenz liefe die
erlernte Kalibrierung nach jedem Neustart wieder bei 1,0 los.
`build(price, atr)` OHNE `skalen` liefert **bitgenau** die alten Werte
(additiv geprüft).
⚠⚠ **ZWEI EIGENE PLATZIERUNGSFEHLER beim Bau, beide gefangen:** der Lade-Block
landete zuerst **hinter** den `except`-Klauseln von `_load_runtime_state`, wo
`st` gar nicht mehr existiert; und beim M15-Setup landete ein Block **mitten in
einem mehrzeiligen Aufruf**. Der erste wäre stillschweigend nie gelaufen
(`except Exception` hätte ihn geschluckt) — gefunden nur, weil ich die Funktion
danach gelesen habe statt dem grünen `py_compile` zu trauen.
## ✅ DIE M15-KARTE MISST SICH JETZT SELBST + AUSFÜHRUNGSQUALITÄT SICHTBAR (2026-08-08, v=157)
Nach Web-Recherche umgesetzt (User-Wahl aus drei Vorschlägen). ⚠ Der dritte
@@ -5927,7 +5969,7 @@ besser) · Teil-Exit bei 1:1 (`_PARTIAL_TP_FRAC=0`, User-Vorgabe).
(Beobachtungen/Feedback) ergänzt diese Datei.
- `oil_widget_config.ini` enthält **Live-Secrets** (Keys/Token) — nicht ins
Repo/Logs leaken.
- **DB** `oil_widget_history.db` (trades · intended_trades · recommendations · **m15_states** · **candles_m1** · **pbreak_predictions** · **verdict_votes**).
- **DB** `oil_widget_history.db` (trades · intended_trades · recommendations · **m15_states** · **cone_checks** · **candles_m1** · **pbreak_predictions** · **verdict_votes**).
Vor jedem Eingriff Backup (`*.bak-<datum>`); Zeitspalten sind lokale Epoch
(Broker-Offset bereits korrigiert) — **AUSNAHME `candles_m1.time` = ROHE Broker-Zeit
(UTC+3)**, deckungsgleich mit `copy_rates`.