Globales Einsatz-Feld zurueck - es steuert die MANUELLEN Trades

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 <pfad>" 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 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-19 20:15:21 +02:00
co-authored by Claude Opus 5
parent 5593f270cc
commit 33cc451e52
2 changed files with 42 additions and 3 deletions
+38 -1
View File
@@ -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;