From e01ecde3a3580705442baed9c7647ef935137a3b Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Thu, 20 Aug 2026 08:25:33 +0200 Subject: [PATCH] Order-Knopf warnt sichtbar, wenn der Raum zum Ziel-Level fehlt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User: "und wieder am Widerstand geschlossen. Das ist kein Zufall mehr." ⚠⚠ ZUERST DER AUSSCHLUSS - im Exit gibt es KEINEN S/R-Anker: - S/R-Auto-Close ist seit 19.08. aus - `trail.set_sr(...)` uebergibt die Level zwar, aber `_sr_data` wird in core/trailing.py NIRGENDS benutzt (toter Parameter) - Trailing-Stop = Bestkurs ∓ 1,0xATR, TP = Entry ± 3,5xATR - beides reines ATR Kein Codepfad kann an einem Level schliessen. DIE URSACHE LIEGT AM EINSTIEG, und sie ist in der eigenen Telemetrie sichtbar (ctx_dist_res_atr / ctx_dist_sup_atr, Abstand zum ZIEL-Level beim Eroeffnen): 19.08 20:00 BUY 0,25xATR -5,44 19.08 20:05 BUY 0,29xATR -4,20 19.08 20:11 BUY 0,46xATR -23,29 19.08 20:59 SELL 0,52xATR -4,47 19.08 21:18 BUY -0,03xATR -0,67 (Widerstand bereits ueberschritten) FUENF von zwoelf Trades unter dem Gate 0,6, zusammen -38,07 EUR. Der Kurs erreicht das Level nach wenigen Cent, dreht, und der Trail (1xATR dahinter) nimmt mit. Der Exit SIEHT nach "am Widerstand" aus, weil der EINSTIEG dort lag. Genau das misst entry_room_atr: OeR -0,119/-0,067 bei PF 0,42/0,66 - 79 % Trefferquote und trotzdem Verlust, weil der Gewinn am Level gedeckelt ist und der Verlust bis zum Stop laeuft. Warum es niemand sah: `entry_room` blockt nur die EMPFEHLUNG, manuelle Orders laufen ungehindert (so gewollt, Uebersteuerungen liefen 68 % WR). Seit dem Entfernen des Entry-Dialogs (11.08.) fehlte die Zahl im Moment des Klicks; sie stand nur in Gate ③b - und das ist seit gestern im zugeklappten Akkordeon. GEBAUT: der Order-Knopf selbst wird markiert (Umriss in Akzentfarbe, gedaempfte Flaeche, Raum-Zahl fett), sobald `frei === false`. Live gegengeprueft: bei Raum 0,04 / 0,28 xATR sind beide Knoepfe gewarnt. ⚠ KEIN Block, KEINE Abfrage - sichtbar machen, nicht bevormunden. ⚠ Die Zahl wird NICHT neu gerechnet; `rm` liegt bereits vor. Ein zweiter Rechenweg waere die Divergenz-Falle, die im Projekt dreimal zugeschlagen hat. ⚠ Der Knopf hat keine id, sondern data-side - deshalb ueber `closest()` statt ueber eine ID (erster Versuch griff ins Leere). Reine Frontend-Aenderung (v=192), kein Neustart. Co-Authored-By: Claude Opus 5 --- web/app.js | 14 ++++++++++++++ web/index.html | 4 ++-- web/style.css | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/web/app.js b/web/app.js index 425085c..7cd56d2 100644 --- a/web/app.js +++ b/web/app.js @@ -396,6 +396,20 @@ function renderM15(s, snap) { const eng = o.frei === false; el.textContent = (eng ? "⚠ " : "") + o.dist_atr.toFixed(2) + "×ATR"; el.className = "btn-raum" + (eng ? " eng" : ""); + // ⚠⚠ Den KNOPF selbst markieren, nicht nur die kleine Zeile darunter + // (2026-08-20, nach dem Befund "immer am Widerstand geschlossen"): + // von zwoelf ausgewerteten Trades lagen FUENF unter dem Gate, zusammen + // −38,07 €. Der Exit sah nach "am Level geschlossen" aus, weil der + // EINSTIEG dort lag. Die Zahl stand zwar schon auf dem Knopf, war aber + // klein und grau — und seit dem Entfernen des Entry-Dialogs (11.08.) ist + // sie die einzige Warnung im Moment des Klicks. + // ⚠ BEWUSST KEIN Block und KEINE Abfrage: hartes Blockieren ist im + // Projekt verworfen, und Uebersteuerungen liefen gemessen 68 % WR. + // Sichtbar machen, nicht bevormunden. + // ⚠ Die Knoepfe haben keine id, sondern `data-side` — und das Raum-Span + // sitzt IN ihnen. Deshalb ueber den Elternknoten statt ueber eine ID. + const btn = el.closest ? el.closest("button.btn") : null; + if (btn) btn.classList.toggle("eng-raum", eng); el.title = "Abstand zum naechsten Level in DIESER Richtung (M5-Pivots, " + "Gate " + (rm.gate ?? 0.6) + "×ATR). Unter dem Gate gemessen teuer: " + "79 % Trefferquote, aber −7 bis −12 €/Lot — der Gewinn ist am Level " diff --git a/web/index.html b/web/index.html index 7effe65..d33825d 100644 --- a/web/index.html +++ b/web/index.html @@ -12,7 +12,7 @@ ⚠ LOKAL eingebunden, kein CDN: die PWA laeuft ueber WireGuard und muss offline funktionieren. --> - + @@ -391,6 +391,6 @@ - + diff --git a/web/style.css b/web/style.css index 92c1fb5..cda47f6 100644 --- a/web/style.css +++ b/web/style.css @@ -647,3 +647,18 @@ main{padding-bottom:4.1111rem} /* Platz für die fixe Leiste */ .m15-akk > summary:hover{color:var(--bright)} .m15-akk[open] > summary{border-bottom:1px solid var(--line)} .m15-akk .m15-item{margin:0.2222rem 0.3333rem} + +/* ── Order-Knopf warnt bei zu wenig Raum zum Ziel-Level (2026-08-20) ────── + ⚠ ANLASS IST EINE MESSUNG: von zwölf ausgewerteten Trades lagen FÜNF unter + dem Gate 0,6×ATR, zusammen −38,07 €. Der Exit sah jedes Mal nach „am + Widerstand geschlossen" aus — tatsächlich lag der EINSTIEG dort. Über 80k + Bars: ØR −0,119/−0,067 bei PF 0,42/0,66 (79 % Treffer, trotzdem Verlust: + der Gewinn ist am Level gedeckelt, der Verlust läuft bis zum Stop). + ⚠ BEWUSST nur eine Warnung: kein Block, keine Abfrage. Hartes Blockieren ist + im Projekt verworfen, User-Übersteuerungen liefen gemessen 68 % WR. */ +.btn.eng-raum{ + outline:2px solid var(--accent); + outline-offset:-2px; + filter:saturate(.55) brightness(.85); +} +.btn.eng-raum .btn-raum{ color:var(--accent); font-weight:700; }