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()