C: Wahrscheinlichkeits-Kegel (kalibriert) + Config-Waechter im Reminder
C - core/cone.py + Kachel #card-cone + MT5 v1.31 (CN;<min>;<lo>;<hi>): "Erwartete Spanne" statt "Kursvorhersage". Der User wollte eingezeichnete Verlaufspfade; bewusst NICHT gebaut - sie suggerieren eine Praezision, die es nicht gibt (Lehre aus analyze_verdict_calibration.py). Der Kegel sagt wie WEIT der Kurs in 30/60/120 min plausibel laeuft, nicht wohin. analyze_cone.py: r(h)=(C[i+h]-C[i])/ATR[i], Fit auf H1, Abdeckung gemessen auf H2 (echtes out-of-sample): 80%-Band -> 76,7 / 76,6 / 75,3 % 90%-Band -> 87,5 / 87,2 / 86,5 % Konsistent ~3-5 Pp ZU ENG. Das wird NICHT weggefittet - Kachel und Tooltip nennen die REAL gemessene Abdeckung, nicht den Nennwert. Damit nach dem P(break)-Modell die zweite kalibriert geprueft Komponente im Projekt. Zentriert auf den aktuellen Kurs, KEINE Drift addiert (Median +-0,0..0,16 xATR = klein gegen die Bandbreite; eine Drift-Korrektur waere eine Richtungsaussage und die ist nicht belegt). Farbe neutral grau, kein gruen/rot. Kein Signal, kein Verdict-Gewicht. MQL5 v1.31: zwei sich oeffnende gepunktete Pfade, verkettet 30->60->120. Startpunkt aus der PX-Zeile - die setzt g_conePx jetzt auch, wenn InpShowPrice aus ist (sonst verliert der Faecher seinen Anker). Config-Waechter in measurement_reminder.py (Antwort auf "sollten wir alle verworfenen Backtests woechentlich neu rechnen?"): NEIN - eine Woche sind ~2000 Bars, und 18 Ideen x 52 Wochen = 936 Tests/Jahr erzeugen bei 5 % Fehlalarmquote ~47 falsche "funktioniert jetzt!" pro Jahr. Stattdessen EREIGNIS-gesteuert: CONFIG_DEPS verankert 8 config-abhaengige Messungen an den Wert, gegen den sie validiert wurden (entry_room_atr 0,6 / sr_close_pbreak 0,55 / breakout_k 0,3 / risk_pct 0 / margin_buffer_pct 95 / adverse_15min_atr 0,5 / auto_signal_min_conf 75 / dead_hours leer). Weicht einer ab, meldet der Timer welche Messung veraltet ist. Numerischer Vergleich, damit 0.60 == 0.6. Mit 5 synthetischen Szenarien getestet. Erledigt ausgetragen: Chartmuster-Kontrolltest (30.07., Muster schlagen die Kontrolle in beiden Haelften +0,022/+0,108). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
03be3b8f5f
commit
d9cb54a52c
+32
@@ -308,6 +308,37 @@ function renderCandles(ca) {
|
||||
(<code>backtest_candle_fade.py</code>).</div>`;
|
||||
}
|
||||
|
||||
// Wahrscheinlichkeits-Kegel. ⚠ Zeigt STREUUNG, nicht Richtung — und beschriftet
|
||||
// mit der REAL gemessenen Abdeckung (~76 %), nicht mit dem Nennwert 80 %. Der Kegel
|
||||
// ist out-of-sample geprüft (analyze_cone.py, Fit H1 → Abdeckung H2) und damit nach
|
||||
// dem P(break)-Modell die zweite kalibrierte Komponente im Projekt.
|
||||
function renderCone(cn) {
|
||||
const el = $("cone-list");
|
||||
if (!el) return;
|
||||
const lv = (cn && cn.levels) || [];
|
||||
if (!lv.length) {
|
||||
el.innerHTML = `<span class="dim">—</span>`;
|
||||
return;
|
||||
}
|
||||
const byMin = {};
|
||||
lv.forEach(x => { (byMin[x.minutes] = byMin[x.minutes] || {})[x.band] = x; });
|
||||
el.innerHTML = Object.keys(byMin).sort((a, b) => a - b).map(mn => {
|
||||
const b80 = byMin[mn][80], b50 = byMin[mn][50];
|
||||
const cov = b80 && b80.coverage != null ? `${fmt(b80.coverage, 0)}%` : "~";
|
||||
return `<div class="cone-row">
|
||||
<span class="cone-h">${mn} min</span>
|
||||
<span class="cone-band">${b80 ? `${fmt(b80.lo, 2)} … ${fmt(b80.hi, 2)}` : "—"}
|
||||
<i>trifft ${cov}</i></span>
|
||||
<span class="cone-inner">${b50 ? `enger: ${fmt(b50.lo, 2)} … ${fmt(b50.hi, 2)}` : ""}</span>
|
||||
</div>`;
|
||||
}).join("") +
|
||||
`<div class="pt-disclaimer">📐 <b>Streuung, keine Richtung.</b> Die Spanne sagt, wie
|
||||
WEIT der Kurs plausibel läuft — nicht wohin. Out-of-sample geprüft
|
||||
(<code>analyze_cone.py</code>, Fit auf einem Halbjahr, Abdeckung im anderen
|
||||
gemessen): das nominale 80 %-Band trifft real ~76 %, ist also leicht zu eng.
|
||||
Kein Signal, kein Einfluss auf die Empfehlung.</div>`;
|
||||
}
|
||||
|
||||
function renderPatterns(pt) {
|
||||
const el = $("pt-list");
|
||||
if (!el) return;
|
||||
@@ -432,6 +463,7 @@ function render(d) {
|
||||
renderCircuitBreaker(d.circuit_breaker);
|
||||
renderPatterns(d.patterns);
|
||||
renderCandles(d.candle_anat);
|
||||
renderCone(d.cone);
|
||||
renderStructure(d.structure);
|
||||
renderStatsCompact(d.stats_compact, d.market);
|
||||
renderGaps(d.gaps, d.market);
|
||||
|
||||
Reference in New Issue
Block a user