From bf838b4d0378a156d4ea5b497a96c45cb46161c6 Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Thu, 6 Aug 2026 10:57:52 +0200 Subject: [PATCH] analyze_squeeze_entry_gap: nur noch echte Bot-Trades zaehlen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Skript zaehlte im Abschnitt "per Pending gefuellt" JEDEN Trade seit dem Umbau — es meldete "31 Trades, davon 30 ohne Market-Log-Zeile". Real waren es 5 Bot-Trades (1 Market-Fallback + 4 Pending-Fills); der Rest waren manuelle. Moeglich war die Verwechslung genau deshalb, weil ein Pending-Fill bis zum Fix von heute ohne `setup` gebucht wurde. Jetzt Filter auf SQUEEZE_*/AUTOSIG_* und Setup in der Ausgabe. Co-Authored-By: Claude Opus 5 --- analyze_squeeze_entry_gap.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/analyze_squeeze_entry_gap.py b/analyze_squeeze_entry_gap.py index a321c42..76ae617 100644 --- a/analyze_squeeze_entry_gap.py +++ b/analyze_squeeze_entry_gap.py @@ -110,7 +110,7 @@ def main(): db = sqlite3.connect(os.path.join(_HIER, "oil_widget_history.db")) db.row_factory = sqlite3.Row trades = db.execute( - "SELECT ticket, entry_time, entry_price, direction, pnl, closed_by " + "SELECT ticket, entry_time, entry_price, direction, pnl, closed_by, setup " "FROM trades WHERE entry_time >= ? ORDER BY entry_time", (seit.timestamp(),)).fetchall() @@ -150,18 +150,27 @@ def main(): for t in trades: if t["entry_time"] < _UMBAU.timestamp(): continue + # ⚠ NUR Bot-Trades. Bis zum Fix am 06.08. zaehlte hier JEDER Trade mit — + # ein Pending-Fill wurde damals ohne `setup` gebucht (er laeuft nicht durch + # `engine._open`), also war er von einem manuellen nicht zu unterscheiden. + # Ergebnis: "31 Trades, davon 30 ohne Log-Zeile" — real waren es 5 Bot-Trades. + # Seit `engine._check_pending_fill` traegt der Bot das Setup nach. + su = (t["setup"] or "") + if not (su.startswith("SQUEEZE") or su.startswith("AUTOSIG")): + continue n_bot += 1 # Market-Fallback erkannt, wenn eine der beiden Log-Zeilen zeitlich passt market = (t["ticket"] in getroffen or any(abs(t["entry_time"] - s) <= 90 for s in sig_ts)) if not market: ohne_log.append(t) - print(f" Trades seit dem Umbau: {n_bot} · davon ohne Market-Log-Zeile: " - f"{len(ohne_log)}") + print(f" Bot-Trades seit dem Umbau: {n_bot} · davon per Pending gefüllt " + f"(keine Market-Log-Zeile): {len(ohne_log)}") print(f" (Market-Fallback-Zeilen im Log: Squeeze {len(log_eintraege)} · " f"Signal {len(sig_fallback)})") for t in ohne_log[-10:]: print(f" {datetime.fromtimestamp(t['entry_time'], _BERLIN):%d.%m %H:%M} " + f"{(t['setup'] or '?'):<14} " f"{t['direction']:<5} @ {t['entry_price']:.3f} " f"P&L {(t['pnl'] if t['pnl'] is not None else 0):+.2f} {t['closed_by']}") print()