Breakout-Karte vorbereitet (inaktiv bis Neustart) + Bewertung der Margin-Idee

User-Idee: 40 % Margin manuell, 50 % fuer Breakout reservieren, neue Karte.

Bewertung: (1) 40 % ist der groesste gemessene Hebel (MaxDD 82,8 %) und ein
Schalter ohne Neustart. (2) Reserve ist technisch moeglich (Konto ist
RETAIL_HEDGING), aber _check_auto_squeeze feuert 'nur FLAT' und engine.py hat 17
Einzel-Positions-Annahmen -- Kern-Umbau, kein Parameter. Zudem steht die
Zuteilung gegen die Messung: autonom -4,71 EUR/Lot gegen Mensch +1,56 EUR/Lot.
Live-Befund macht (1) dringlich: freie Margin -6,21 EUR, Margin-Level 99,3 %.
Es gibt derzeit nichts zu reservieren.

Gebaut (inaktiv): history.fetch_squeeze_since, engine._squeeze_b5_cached
(120 s gecacht), Snapshot-Feld squeeze_b5, Karte #card-brk. Eigenes Fenster ab
01.08. -- squeeze_monitor.live rechnet ueber alle 42 Trades, B5 zaehlt 11. Die
Karte zeigt beide Zahlen, weil der Monitor 'ontrack' aus der MECHANIK meldet,
waehrend live Verhaeltnis 0,14 / PF 0,39 steht.

Live aendert sich nichts: Karte ist hidden, renderBrk blendet sie aus solange
squeeze_b5 fehlt. Aktiv nach dem naechsten Neustart (wartet auf den Trade).

BEINAHE-SCHADEN: ein UnicodeEncodeError liess web/app.js mit 0 Bytes zurueck.
node --check bestand trotzdem -- eine leere Datei ist gueltiges JS. Gefangen hat
es erst der Groessenvergleich. Neue Regel: erst .tmp schreiben, Groesse pruefen,
dann os.replace.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-19 13:32:48 +02:00
co-authored by Claude Opus 5
parent 3affe51030
commit 30cb77b795
8 changed files with 8490 additions and 2 deletions
+26
View File
@@ -855,6 +855,32 @@ class HistoryLogger:
"pct": round(100.0 * (r["c"] or 0) / (r["n"] or 1), 1)}
return out
def fetch_squeeze_since(self, ab: int) -> list:
"""P&L aller geschlossenen SQUEEZE_*-Trades ab Epoch `ab` (2026-08-19).
⚠ Bewusst NUR `setup LIKE 'SQUEEZE%'` — die `setup`-Spalte taugt NICHT
als allgemeine Bot/Mensch-Trennung: `engine._open` schreibt die
Wellenlage auch bei MANUELLEN Trades mit (`WAVE`, n=124). Nur
`SQUEEZE_*` ist autonom eroeffnet. Ein erster Auswertungsversuch am
13.08. hat genau das verwechselt und dem Bot 152 Trades zugeschrieben.
⚠ NICHT je Lot normiert: die B5-Regel ist ausdruecklich auf
OeGewinn/OeVerlust in EURO fixiert worden. Sie hier still auf eine
andere Einheit umzustellen waere ein nachtraegliches Verschieben der
Latte.
Fail-open (leere Liste) — `core/history.py` hat bewusst keinen Logger.
"""
try:
with self._connect() as c:
return [float(r[0]) for r in c.execute(
"SELECT pnl FROM trades "
" WHERE setup LIKE 'SQUEEZE%' AND exit_time IS NOT NULL "
" AND pnl IS NOT NULL AND entry_time > ? "
" ORDER BY entry_time", (int(ab),))]
except Exception:
return []
def alignment_stats(self, last_n: int = 0) -> dict:
"""Ausrichtungs-Split: liefen die Trades MIT, GEGEN oder OHNE die Empfehlung?