Neues Modul: Visuelle Chartmuster-Erkennung (core/patterns.py) — reine Anzeige

Erkennt aus M30-Swing-Pivots: Doppeltop/-boden, Kopf-Schulter/inverse SKS,
Tasse+Henkel/invers, auf-/absteigendes+symmetrisches Dreieck. Je Muster Richtung,
Trigger/Nackenlinie, Measured-Move-Ziel, Status (bildet sich/bestätigt/ungültig),
Güte. Dashboard-Karte #card-patterns + Disclaimer (v=116). KEIN Signal, kein
Verdict-Gewicht — Signal-Einfluss erst nach Backtest (Muster-Klasse 2x verworfen,
hohe Beweislast). Live getestet: findet bestätigten Doppeltop.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-07-27 18:49:40 +02:00
co-authored by Claude Opus 4.8
parent cd8ee5b01b
commit e5589da08b
6 changed files with 310 additions and 3 deletions
+32
View File
@@ -224,6 +224,37 @@ function renderCircuitBreaker(cb) {
}
}
// Chartmuster (visuell) — reine Anzeige. Status: bildet sich / bestätigt / (ungültig raus).
function renderPatterns(pt) {
const el = $("pt-list");
if (!el) return;
const items = (pt && pt.patterns) || [];
if (!items.length) {
el.innerHTML = `<span class="dim">Aktuell kein klares Muster erkannt.</span>`;
return;
}
el.innerHTML = items.map(m => {
const dirCls = m.dir === "bull" ? "up" : m.dir === "bear" ? "down" : "dim";
const arr = m.dir === "bull" ? "▲" : m.dir === "bear" ? "▼" : "◆";
const st = m.status === "confirmed"
? `<span class="pt-badge conf">bestätigt</span>`
: `<span class="pt-badge form">bildet sich</span>`;
const tgt = m.target != null
? `Ziel <b>${fmt(m.target, 2)}</b>` : `Ausbruch offen`;
const q = Math.round((m.quality || 0) * 100);
return `<div class="pt-item ${dirCls}">
<div class="pt-head"><span class="pt-name">${arr} ${m.name}</span>${st}
<span class="pt-q">Güte ${q}%</span></div>
<div class="pt-det">Trigger <b>${fmt(m.trigger, 2)}</b> · ${tgt}
· Höhe ${m.height_atr}×ATR · vor ${m.bars_ago} Bars</div>
<div class="pt-note">${m.note || ""}</div>
</div>`;
}).join("") +
`<div class="pt-disclaimer">📊 Reine Anzeige (mechanisch aus M30-Pivots) — KEIN Signal,
kein Einfluss auf die Empfehlung. Muster-Klasse im Projekt als Signal noch unbelegt;
Einfluss erst nach Backtest.</div>`;
}
function render(d) {
// ── Header ──────────────────────────────
$("conn").className = "dot " + (d.connected ? "on" : "off");
@@ -314,6 +345,7 @@ function render(d) {
// ── Gesamtempfehlung (aggregiert) ───────
renderVerdict(d.verdict || {}, d);
renderCircuitBreaker(d.circuit_breaker);
renderPatterns(d.patterns);
renderStructure(d.structure);
renderStatsCompact(d.stats_compact, d.market);
renderGaps(d.gaps, d.market);