From 33cc451e52769502d921250ece13571720f329ef Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Wed, 19 Aug 2026 20:15:21 +0200 Subject: [PATCH] Globales Einsatz-Feld zurueck - es steuert die MANUELLEN Trades MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User: "der einsatz wird immer noch nicht uebernommen, siehe aktueller trade", danach Wahl von Variante A. DIAGNOSE - kein Defekt, sondern eine Luecke, die ich selbst gerissen habe. Der laufende Trade war setup=WAVE, also MANUELL; Slot 2 leer; und die Logzeile "Einsatz fuer " existierte kein einziges Mal. Die Pfad-Felder wirken ausschliesslich auf die beiden AUTONOMEN Pfade - M15 ist aus, BRK hat seit dem Einbau nicht gefeuert (Circuit-Breaker hat heute dreimal ausgeloest). Das Feld hatte also nie eine Gelegenheit zu greifen. Manuelle Trades laufen bewusst auf dem GLOBALEN Wert (der Mensch ist die gemessen bessere Population, +1,56 gegen -4,71 EUR/Lot - seine Groesse gehoert ihm). Nur: das globale Feld war am 19.08. auf Wunsch entfernt worden, und danach kamen die Pfad-Felder dazu. Damit hatte ausgerechnet die Schraube, die die eigenen Eroeffnungen steuert, keine UI mehr - erreichbar nur noch ueber die ini plus Neustart. Das habe ich beim Bau der Pfad-Felder nicht mitgedacht. Behoben: Feld "Einsatz global %" als drittes in derselben Zeile. Endpoint /api/marginpct, set_margin_pct und die Persistenz existierten bereits - reine Frontend-Aenderung (v=186), kein Neustart, die offene Position unberuehrt. ⚠ Semantik bewusst ANDERS als bei den Pfad-Feldern: dort heisst leer/0 ausdruecklich "globaler Wert", hier gibt es kein "aus" - ein Einsatz MUSS gelten. Deshalb echte Untergrenze 1 statt der 0-Semantik. Verifiziert: 45 gesetzt -> Snapshot -> persistiert -> zurueck auf 40; span 51/51 ausgeglichen, keine doppelten IDs, node --check gruen, v=186 ausgeliefert. Co-Authored-By: Claude Opus 5 --- web/app.js | 39 ++++++++++++++++++++++++++++++++++++++- web/index.html | 6 ++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/web/app.js b/web/app.js index 9fc4f70..ca58907 100644 --- a/web/app.js +++ b/web/app.js @@ -196,7 +196,8 @@ function renderBrk(d) { // Einsatz je Pfad einspielen. ⚠ NICHT, solange das Feld den Fokus hat -- // sonst ueberschreibt der 1-s-Snapshot die laufende Eingabe (dieselbe Falle // wie beim Mindestgewinn-Feld). - [["am-brk", d.margin_brk], ["am-m15", d.margin_m15]].forEach(([id, v]) => { + [["am-brk", d.margin_brk], ["am-m15", d.margin_m15], + ["mg-global", d.margin_pct]].forEach(([id, v]) => { const el = $streng(id); if (!el) return; // ⚠ NICHT anfassen, solange das Feld den Fokus hat -- sonst frisst der @@ -2108,6 +2109,42 @@ async function setAutoMargin() { toast(e.message === "401" ? "Token abgelaufen — neu eingeben" : "Netzwerkfehler", false); } } +// --- Globaler Einsatz: steuert MANUELLE Trades ---------------------------- +// ⚠ Das Feld war am 19.08. auf Wunsch entfernt worden; danach kamen die +// Felder je Pfad dazu. Damit hatte ausgerechnet die Schraube, die die +// EIGENEN Trades steuert, keine UI mehr - der Wert war nur noch ueber die +// ini plus Neustart erreichbar. Genau das fiel als "der Einsatz wird nicht +// uebernommen" auf (die Pfad-Felder greifen nur bei BRK/M15). +async function setMgGlobal() { + const el = $streng("mg-global"); + if (!el) { toast("Eingabefeld fehlt — Seite neu laden", false); return; } + const v = parseFloat(el.value); + // ⚠ Kein "leer = aus": ein globaler Einsatz von 0 waere sinnlos, es MUSS + // einer gelten. Deshalb hier eine echte Untergrenze statt der 0-Semantik + // der Pfad-Felder. + if (isNaN(v) || v < 1 || v > 99) { toast("Erlaubt sind 1 bis 99 %", false); return; } + const tok = await ensureToken(); + if (tok === null) return; + el.blur(); + try { + const r = await fetch("api/marginpct", { method: "POST", + headers: { "X-Auth-Token": tok, "Content-Type": "application/json" }, + body: JSON.stringify({ value: v }) }); + if (r.status === 401) { clearToken(); throw new Error("401"); } + toast(`Einsatz global ${v} %`, true); + } catch (e) { + toast(e.message === "401" ? "Token abgelaufen — neu eingeben" : "Netzwerkfehler", false); + } +} +{ + const el = $streng("mg-global"); + if (el) { + el.addEventListener("change", setMgGlobal); + el.addEventListener("keydown", e => { + if (e.key === "Enter") { e.preventDefault(); e.target.blur(); } + }); + } +} ["am-brk", "am-m15"].forEach(id => { const el = $streng(id); if (!el) return; diff --git a/web/index.html b/web/index.html index 64c7154..19a09e6 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. --> - + @@ -173,6 +173,8 @@
B5-Regel
BRK-Position
+ + @@ -389,6 +391,6 @@
- +