Doku: Einsatz je Pfad, MQL5 v1.44 und drei neue Fehlerklassen

Pflege-Regel. Festgehalten sind neben den beiden Features vor allem drei
Fallen, die heute real zugeschlagen haben:

1. Ein fehlgeschlagener MQL5-Compile LOESCHT die .ex5 - und der Default-Log
   des Terminals wird dabei nicht ueberschrieben. Ich habe daraufhin "0 errors"
   aus einem stale Log gemeldet, waehrend der Chart gar keinen Indikator hatte.
   Regel: eigener Logpfad je Compile, Pruefung auf "Result: N errors" PLUS
   .ex5-Zeitstempel.
2. Backticks in einer Bash-Commit-Nachricht werden als Kommando ausgefuehrt.
3. "git commit --amend -F <fehlende Datei>" nimmt eine stale COMMIT_EDITMSG,
   also die Nachricht eines fremden Commits.

Asset-Version auf v=182 nachgezogen (stand noch auf 169).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-19 19:07:13 +02:00
co-authored by Claude Opus 5
parent 0a465f9258
commit 618f3a4bee
+65 -1
View File
@@ -4328,7 +4328,7 @@ Trader wäre sie nie abgelaufen. Latte unverändert: Verhältnis < 1,0 ODER PF <
(„⚠ die Welle (steuert die Order) schweigt"). („⚠ die Welle (steuert die Order) schweigt").
Live gegengerechnet, beide Zeilen erscheinen wie beabsichtigt. Live gegengerechnet, beide Zeilen erscheinen wie beabsichtigt.
⚠ Reine Anzeige — an Gewichten, Gates und Order-Logik ist nichts geändert. ⚠ Reine Anzeige — an Gewichten, Gates und Order-Logik ist nichts geändert.
- Asset-Version aktuell **v=169** (in `web/index.html` hochzählen, siehe Workflows). - Asset-Version aktuell **v=182** (in `web/index.html` hochzählen, siehe Workflows).
- **✅ SCHRIFT SKALIERT MIT DEM FENSTER (2026-08-13, v=167).** User: „die Größe der - **✅ SCHRIFT SKALIERT MIT DEM FENSTER (2026-08-13, v=167).** User: „die Größe der
Schriftarten im Dashboard auf em einstellen, damit auf jedem Gerät oder je nach Schriftarten im Dashboard auf em einstellen, damit auf jedem Gerät oder je nach
Fenstergröße die Schriftgröße automatisch angepasst wird." Fenstergröße die Schriftgröße automatisch angepasst wird."
@@ -8586,3 +8586,67 @@ besser) · Teil-Exit bei 1:1 (`_PARTIAL_TP_FRAC=0`, User-Vorgabe).
weg (kurz); M1 ist die Master-Auflösung → aus M1 jede höhere TF exakt aggregierbar. weg (kurz); M1 ist die Master-Auflösung → aus M1 jede höhere TF exakt aggregierbar.
⚠ Ticks/Echtzeit bewusst NICHT geloggt (~85k/Tag = 30M/Jahr, kein Bedarf — Strategien ⚠ Ticks/Echtzeit bewusst NICHT geloggt (~85k/Tag = 30M/Jahr, kein Bedarf — Strategien
sind M5+, Slippage aus echten Fills gemessen). ~370k Bars/Jahr = vernachlässigbar. sind M5+, Slippage aus echten Fills gemessen). ~370k Bars/Jahr = vernachlässigbar.
## ✅ EINSATZ JE AUTONOMEM PFAD + MELDUNGS-ABSTAND IM CHART (2026-08-19, v=182 / MQL5 v1.44)
**(1) Eingabefeld `Einsatz je Pfad` in der Breakout-Karte** (User-Wunsch
"Margin Verhaeltnis von M15 / BRK manuell setzen"). Zwei Zahlenfelder
`BRK / M15`, **0 = globaler Wert** (`margin_buffer_pct`, live 40).
`POST /api/automargin {brk, m15}` · `engine.set_auto_margin` · Snapshot
`margin_brk`/`margin_m15` · neustart-fest.
⚠⚠ **ES IST KEINE GLEICHZEITIGE RESERVIERUNG — das war der Wunsch, aber es
geht heute nicht.** Der Bot haelt **EINE** Position (`_check_auto_squeeze`
feuert "nur FLAT"), und Trailing, Notfall-Stop, S/R-Close, Time-Stop und
Circuit-Breaker verwalten je EINE Position — **42 Einzel-Positions-Annahmen in
`engine.py`, 25 in `trader.py`**. Bei zwei Positionen auf demselben Symbol
haengt der GESAMTE Schutz-Stack an einer davon, die andere liefe ungeschuetzt.
**Das ist ein Sicherheits-, kein Aufwandsargument.** Das Feld steuert die
**GROESSE** der jeweiligen Position, wenn dieser Pfad eroeffnet.
**Manuelle Trades bleiben beim globalen Wert** — Absicht: der Mensch ist die
gemessen bessere Population (+1,56 gegen 4,71 EUR/Lot).
Umsetzung quellen-abhaengig wie die SL-Zeitebene seit 05.08.: `_open()` setzt
`config.MARGIN_BUFFER` fuer die Dauer des einen Aufrufs, `finally` stellt ihn
zurueck. ⚠ Direkt gesetzt statt ueber `set_margin_buffer()` — das loggt je
Trade eine Zeile und wuerde den globalen Wert dauerhaft ueberschreiben.
✅ Ende-zu-Ende: 50/25 gesetzt → Snapshot → persistiert · 150 abgelehnt · 0/0
zurueck · `deploy.py --feld margin_brk`, alle 5 Schritte.
⚠⚠ **ZWEI ECHTE FEHLER VOM LINTER GEFANGEN, die `py_compile` durchwinkte:**
`config` war in `engine.py` **gar nicht importiert** (nur Einzelnamen via
`from core.config import ...`), und in `server.py` hiess die Engine `eng` statt
`app.state.engine`. Beide sassen in Pfaden, die erst beim **ERSTEN autonomen
Trade** bzw. beim ersten Klick gefeuert haetten — genau die Klasse, fuer die
`ruff F821` am 07.08. eingebaut wurde. **Zweiter echter Fang seit dem Einbau.**
**(2) MQL5 v1.44 — Meldungs-Zeilenabstand MESSEN statt schaetzen.**
User: "die zeilenabstaende sind immer noch zu gering" (nach v1.43). Zwei
Ursachen: **(a)** `OBJPROP_FONTSIZE` wurde **nur beim Erzeugen** gesetzt — ein
bestehendes Label behaelt seine Groesse, die Erhoehung 10→11 pt kam auf dem
Chart nie an (gleiche Klasse wie die X-Position, die genau deshalb schon jeden
Redraw neu gesetzt wird). **(b)** Der Abstand wurde aus der **Punkt**groesse
hochgerechnet (Faktor 2,0, dann 2,6) — Punkt→Pixel haengt an der DPI-Skalierung
und ist vom Quelltext aus **nicht bekannt**. Jetzt `TextGetSize` (+8 px Luft),
Fallback 2,6. ⚠ `TextSetFont` mit **negativer** Groesse = 1/10 pt, nur diese
Form wird DPI-korrekt skaliert.
⚠⚠ **Und ein eigener Fehler der bekannten Klasse:** der erste v1.44-Compile
**schlug fehl** (`error 246: TextGetSize verlangt uint&`) und **loeschte dabei
die `.ex5`** — der Chart hatte kurzzeitig **gar keinen Indikator**. Ich habe
trotzdem "0 errors" gemeldet, weil ich einen **stale Logfile** gelesen habe
(erkennbar an identischen 894 ms). Exakt der dokumentierte Fall *"eine
Erfolgsmeldung muss den Zustand NACH der Aktion pruefen, nicht den davor"*.
Aufgefallen nur durch die `.ex5`-Zeitstempelpruefung danebenan.
**➤ Regel: je Compile einen EIGENEN Logpfad, und auf `Result: N errors` PLUS
`.ex5`-Alter pruefen — nie auf den Default-Log des Terminals.**
⚠⚠ **ZWEI COMMIT-FALLEN, beide neu und beide dokumentierenswert:**
**(a)** **Backticks in einer Bash-Commit-Nachricht** werden als
Kommando-Substitution ausgefuehrt — alle eingeklammerten Namen verschwanden
aus dem Text (`_check_auto_squeeze` → leer). **(b)** Ein **Bash-Pfad**
(`/c/Users/...`) an Python uebergeben schlaegt fehl, und
`git commit --amend -F <fehlende Datei>` nahm daraufhin eine **STALE
`COMMIT_EDITMSG`** — also die Nachricht eines **fremden** Commits.
✅ Der Code war nie betroffen (Arbeitsbaum sauber, Remote synchron), nur die
Beschriftung. **➤ Commit-Nachrichten mit Backticks oder deutschen Quotes ueber
eine DATEI (`-F`) schreiben, und die Datei vorher auf `-s` pruefen** — dieselbe
Familie wie die dokumentierte Heredoc-Regel.