D+A: Klimax-Fade verworfen, Kerzen-Anatomie-Kachel gebaut (reine Anzeige, v=123)

D - backtest_candle_fade.py: der Lead aus backtest_candles.py (Fade der
volumenstarken Klimax-Kerze) faellt im echten Trade-Sim durch. Live-Exit
(SL 2,0/Trail 1,5/BE 1,3/Time-Stop 120') + Echtkosten, mit KONTROLLGRUPPE
"Fade ohne Volumen-Filter" (die Lehre aus backtest_patterns.py).

  Kontrolle   -0,080 / -0,046
  Vol >= 2,0  -0,059 / +0,103
  Vol >= 2,5  +0,144 / -0,080
  Vol >= 3,0  +0,113 / -0,064

Benachbarte Schwellen exakt gegenlaeufig = Rauschmuster. Die einzige
beidseitig positive Zelle (Vol>=2,0 + Marubozu, +0,036/+0,043) hat n=91/118
bei 7 Varianten = Mehrfachvergleich-Artefakt. 18. verworfener Eingriff.

Wichtigste Lehre: Informations-Ueberschuss != handelbarer Edge. Dieselbe
2,0-Schwelle liefert im Forward-Fenster +0,12/+0,20 beim Fade, im echten
Trade -0,059/+0,103 - die Gegenbewegung ist diffus, der 2xATR-Stop wird
unterwegs getroffen (WR nur 35-40 %). Der Weg zum Ziel zaehlt.

A - core/candles.py + Kachel #card-candles (M5, ~20 s, unter mt5_lock):
Marubozu, Langer Koerper, Langer Docht oben/unten, Spinning Top, Doji,
Engulfing. Schwellen identisch zum Backtest.

Bewusste UI-Entscheidung: die Kachel ist NEUTRAL gefaerbt (keine gruen/rot-
Ampel) und nennt die GEMESSENE Lesart ("Klimax-Kerze - der Kurs laeuft
danach eher GEGEN die Kerze"), nicht die Lehrbuch-Lesart. Eine
Richtungsampel wuerde hier systematisch falsch stupsen - gleiche Korrektur
wie bei der Bounce-Anzeige. Kein Verdict-Gewicht, kein Trigger.

Beim Bau gefunden: mt5_lock ist ein CONTEXT-MANAGER, kein Lock-Objekt -
.acquire()/.release() wirft. Jetzt "with mt5_lock(3.0) as got".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-07-31 08:15:46 +02:00
co-authored by Claude Opus 5
parent 7873bf2fb7
commit 03be3b8f5f
7 changed files with 467 additions and 3 deletions
+34
View File
@@ -275,6 +275,39 @@ function _patternSvg(type, col) {
stroke-linejoin="round" stroke-linecap="round"/></svg>`;
}
// Kerzen-Anatomie (M5). ⚠ Bewusst OHNE grün/rot-Richtungsfarbe: die Lehrbuch-
// Deutung ist gemessen invertiert (`backtest_candles.py` — langer Körper läuft eher
// GEGEN sich, Volumen verstärkt das statt zu bestätigen), eine Ampel würde also
// systematisch in die falsche Richtung stupsen. Dieselbe Korrektur wie bei der
// Bounce-Anzeige, die deshalb heute „Überdehnung" heißt.
function renderCandles(ca) {
const el = $("ca-list");
if (!el) return;
const items = (ca && ca.items) || [];
if (!items.length) {
el.innerHTML = `<span class="dim">Keine markante Kerzenform in den letzten Bars.</span>`;
return;
}
el.innerHTML = items.map(m => {
const arr = m.dir > 0 ? "▲" : m.dir < 0 ? "▼" : "◆";
const ago = m.bars_ago === 1 ? "letzte Kerze" : `vor ${m.bars_ago} Kerzen`;
const vol = m.vol_x
? `<span class="ca-vol${m.hot ? " hot" : ""}">Vol ${fmt(m.vol_x, 1)}×</span>` : "";
return `<div class="ca-item${m.hot ? " hot" : ""}">
<div class="ca-head"><span class="ca-name">${arr} ${m.label}</span>
${vol}<span class="ca-ago">${ago}</span></div>
<div class="ca-bars">Körper ${m.body_pct}% · Docht oben ${m.wick_up_pct}%
· unten ${m.wick_lo_pct}%</div>
<div class="ca-note">${m.reading || ""}</div>
</div>`;
}).join("") +
`<div class="pt-disclaimer">🕯 Reine Anzeige — KEIN Signal. Gemessen
(<code>backtest_candles.py</code>, 80k Bars, 2 Halbjahre): die gängige Deutung ist
<b>invertiert</b> — der lange Körper läuft eher GEGEN sich (0,06/0,08×ATR), mit
2× Volumen noch stärker (0,12/0,20). Als Handelssignal durchgefallen
(<code>backtest_candle_fade.py</code>).</div>`;
}
function renderPatterns(pt) {
const el = $("pt-list");
if (!el) return;
@@ -398,6 +431,7 @@ function render(d) {
renderVerdict(d.verdict || {}, d);
renderCircuitBreaker(d.circuit_breaker);
renderPatterns(d.patterns);
renderCandles(d.candle_anat);
renderStructure(d.structure);
renderStatsCompact(d.stats_compact, d.market);
renderGaps(d.gaps, d.market);