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:
co-authored by
Claude Opus 5
parent
5593f270cc
commit
33cc451e52
+38
-1
@@ -196,7 +196,8 @@ function renderBrk(d) {
|
|||||||
// Einsatz je Pfad einspielen. ⚠ NICHT, solange das Feld den Fokus hat --
|
// Einsatz je Pfad einspielen. ⚠ NICHT, solange das Feld den Fokus hat --
|
||||||
// sonst ueberschreibt der 1-s-Snapshot die laufende Eingabe (dieselbe Falle
|
// sonst ueberschreibt der 1-s-Snapshot die laufende Eingabe (dieselbe Falle
|
||||||
// wie beim Mindestgewinn-Feld).
|
// 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);
|
const el = $streng(id);
|
||||||
if (!el) return;
|
if (!el) return;
|
||||||
// ⚠ NICHT anfassen, solange das Feld den Fokus hat -- sonst frisst der
|
// ⚠ 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);
|
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 => {
|
["am-brk", "am-m15"].forEach(id => {
|
||||||
const el = $streng(id);
|
const el = $streng(id);
|
||||||
if (!el) return;
|
if (!el) return;
|
||||||
|
|||||||
+4
-2
@@ -12,7 +12,7 @@
|
|||||||
⚠ LOKAL eingebunden, kein CDN: die PWA laeuft ueber WireGuard
|
⚠ LOKAL eingebunden, kein CDN: die PWA laeuft ueber WireGuard
|
||||||
und muss offline funktionieren. -->
|
und muss offline funktionieren. -->
|
||||||
<link rel="stylesheet" href="pico.min.css?v=1">
|
<link rel="stylesheet" href="pico.min.css?v=1">
|
||||||
<link rel="stylesheet" href="style.css?v=185">
|
<link rel="stylesheet" href="style.css?v=186">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<!-- Modul-Menü (ganz oben) -->
|
<!-- Modul-Menü (ganz oben) -->
|
||||||
@@ -173,6 +173,8 @@
|
|||||||
<div class="kv" title="B5 = die VORAB fixierte Abbruchregel: nach 20 Trades ab 01.08. muss Verhaeltnis (OeGewinn/OeVerlust) >= 1,0 UND PF >= 1 sein."><span>B5-Regel</span><b id="brk-b5">—</b></div>
|
<div class="kv" title="B5 = die VORAB fixierte Abbruchregel: nach 20 Trades ab 01.08. muss Verhaeltnis (OeGewinn/OeVerlust) >= 1,0 UND PF >= 1 sein."><span>B5-Regel</span><b id="brk-b5">—</b></div>
|
||||||
<div class="kv" title="Die vom Breakout-Autotrader gehaltene Position - SEIT dem Zwei-Slot-Umbau vom 19.08. ein EIGENER Slot, unabhaengig von manuellen und M15-Trades. WICHTIG: 'Trailing' muss AN sein. Steht es auf aus, laeuft der Trade nur mit dem Broker-SL - also in der gemessen DURCHGEFALLENEN SL-only-Variante (backtest_brk_slonly.py: alle zehn Konfidenzintervalle enthalten die Null)."><span>BRK-Position</span><b id="brk-pos">—</b></div>
|
<div class="kv" title="Die vom Breakout-Autotrader gehaltene Position - SEIT dem Zwei-Slot-Umbau vom 19.08. ein EIGENER Slot, unabhaengig von manuellen und M15-Trades. WICHTIG: 'Trailing' muss AN sein. Steht es auf aus, laeuft der Trade nur mit dem Broker-SL - also in der gemessen DURCHGEFALLENEN SL-only-Variante (backtest_brk_slonly.py: alle zehn Konfidenzintervalle enthalten die Null)."><span>BRK-Position</span><b id="brk-pos">—</b></div>
|
||||||
<div class="tb-row mg-row" title="Einsatz JE PFAD in Prozent der freien Margin. Leer oder 0 = der globale Wert gilt. WICHTIG: das ist KEINE gleichzeitige Reservierung - der Bot haelt EINE Position, es kann nie BRK und M15 nebeneinander geben. Das Feld steuert die GROESSE der jeweiligen Position. Manuelle Trades bleiben beim globalen Wert.">
|
<div class="tb-row mg-row" title="Einsatz JE PFAD in Prozent der freien Margin. Leer oder 0 = der globale Wert gilt. WICHTIG: das ist KEINE gleichzeitige Reservierung - der Bot haelt EINE Position, es kann nie BRK und M15 nebeneinander geben. Das Feld steuert die GROESSE der jeweiligen Position. Manuelle Trades bleiben beim globalen Wert.">
|
||||||
|
<span class="tb-field"><label title="Einsatz in Prozent der freien Margin fuer ALLE Trades, die keinen eigenen Wert haben - also MANUELLE Trades. Das ist die Schraube, die Ihre eigenen Eroeffnungen steuert. 1-99; 100 liesse keinen Puffer fuer Spread und Swap.">Einsatz global %</label>
|
||||||
|
<input id="mg-global" type="number" inputmode="decimal" step="1" min="1" max="99" placeholder="%"></span>
|
||||||
<span class="tb-field"><label title="Einsatz % fuer autonome Breakout-Trades. Leer = globaler Wert.">Einsatz BRK %</label>
|
<span class="tb-field"><label title="Einsatz % fuer autonome Breakout-Trades. Leer = globaler Wert.">Einsatz BRK %</label>
|
||||||
<input id="am-brk" type="number" inputmode="decimal" step="1" min="0" max="99" placeholder="global"></span>
|
<input id="am-brk" type="number" inputmode="decimal" step="1" min="0" max="99" placeholder="global"></span>
|
||||||
<span class="tb-field"><label title="Einsatz % fuer autonome M15-Trades. Leer = globaler Wert.">Einsatz M15 %</label>
|
<span class="tb-field"><label title="Einsatz % fuer autonome M15-Trades. Leer = globaler Wert.">Einsatz M15 %</label>
|
||||||
@@ -389,6 +391,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="toast" class="toast hidden"></div>
|
<div id="toast" class="toast hidden"></div>
|
||||||
|
|
||||||
<script src="app.js?v=185"></script>
|
<script src="app.js?v=186"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user