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:
co-authored by
Claude Opus 5
parent
86c432f791
commit
b8705e297f
+8
-1
@@ -572,10 +572,17 @@ function renderCone(cn) {
|
||||
.sort((a, b) => a.minutes - b.minutes);
|
||||
if (!b80.length) { el.innerHTML = ""; return; }
|
||||
const cov = b80[0].coverage != null ? `${fmt(b80[0].coverage, 0)} %` : "~";
|
||||
// ⚠ ACI (2026-08-08): die Bänder waren dokumentiert 3–5 Pp ZU ENG (80 %
|
||||
// nominal → real 76,7/76,6/75,3). Adaptive Conformal Inference justiert das
|
||||
// jetzt online nach; die Skala zeigt, wie stark. 1,00 = noch unverändert.
|
||||
const sk = b80.map(x => x.skala).filter(v => v != null);
|
||||
const skTxt = (sk.length && sk.some(v => Math.abs(v - 1) > 0.005))
|
||||
? `<span class="kx-cone-cov">ACI ×${fmt(sk.reduce((a, b) => a + b, 0) / sk.length, 2)}</span>`
|
||||
: "";
|
||||
el.innerHTML = `<span class="kx-cone-lbl">📐 erwartete Spanne</span>`
|
||||
+ b80.map(x => `<span class="kx-cone-item"><i>${x.minutes}′</i>`
|
||||
+ `${fmt(x.lo, 2)}–${fmt(x.hi, 2)}</span>`).join("")
|
||||
+ `<span class="kx-cone-cov">trifft ${cov}</span>`;
|
||||
+ `<span class="kx-cone-cov">trifft ${cov}</span>` + skTxt;
|
||||
// Die Einordnung gehört an die Zahl, nicht in einen Absatz darunter — sonst
|
||||
// liest jemand die Spanne als Richtungsprognose.
|
||||
el.title = "STREUUNG, nicht Richtung: wie WEIT der Kurs plausibel läuft, nicht "
|
||||
|
||||
+2
-2
@@ -6,7 +6,7 @@
|
||||
<meta name="theme-color" content="#0d1117">
|
||||
<title>Oil · MT5</title>
|
||||
<link rel="manifest" href="manifest.json">
|
||||
<link rel="stylesheet" href="style.css?v=157">
|
||||
<link rel="stylesheet" href="style.css?v=158">
|
||||
</head>
|
||||
<body>
|
||||
<!-- Modul-Menü (ganz oben) -->
|
||||
@@ -347,6 +347,6 @@
|
||||
</div>
|
||||
<div id="toast" class="toast hidden"></div>
|
||||
|
||||
<script src="app.js?v=157"></script>
|
||||
<script src="app.js?v=158"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user