analyze_squeeze_entry_gap: nur noch echte Bot-Trades zaehlen

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 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-06 10:57:52 +02:00
co-authored by Claude Opus 5
parent 3c1442109d
commit bf838b4d03
+12 -3
View File
@@ -110,7 +110,7 @@ def main():
db = sqlite3.connect(os.path.join(_HIER, "oil_widget_history.db")) db = sqlite3.connect(os.path.join(_HIER, "oil_widget_history.db"))
db.row_factory = sqlite3.Row db.row_factory = sqlite3.Row
trades = db.execute( 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", "FROM trades WHERE entry_time >= ? ORDER BY entry_time",
(seit.timestamp(),)).fetchall() (seit.timestamp(),)).fetchall()
@@ -150,18 +150,27 @@ def main():
for t in trades: for t in trades:
if t["entry_time"] < _UMBAU.timestamp(): if t["entry_time"] < _UMBAU.timestamp():
continue 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 n_bot += 1
# Market-Fallback erkannt, wenn eine der beiden Log-Zeilen zeitlich passt # Market-Fallback erkannt, wenn eine der beiden Log-Zeilen zeitlich passt
market = (t["ticket"] in getroffen market = (t["ticket"] in getroffen
or any(abs(t["entry_time"] - s) <= 90 for s in sig_ts)) or any(abs(t["entry_time"] - s) <= 90 for s in sig_ts))
if not market: if not market:
ohne_log.append(t) ohne_log.append(t)
print(f" Trades seit dem Umbau: {n_bot} · davon ohne Market-Log-Zeile: " print(f" Bot-Trades seit dem Umbau: {n_bot} · davon per Pending gefüllt "
f"{len(ohne_log)}") f"(keine Market-Log-Zeile): {len(ohne_log)}")
print(f" (Market-Fallback-Zeilen im Log: Squeeze {len(log_eintraege)} · " print(f" (Market-Fallback-Zeilen im Log: Squeeze {len(log_eintraege)} · "
f"Signal {len(sig_fallback)})") f"Signal {len(sig_fallback)})")
for t in ohne_log[-10:]: for t in ohne_log[-10:]:
print(f" {datetime.fromtimestamp(t['entry_time'], _BERLIN):%d.%m %H:%M} " 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"{t['direction']:<5} @ {t['entry_price']:.3f} "
f"P&L {(t['pnl'] if t['pnl'] is not None else 0):+.2f} {t['closed_by']}") f"P&L {(t['pnl'] if t['pnl'] is not None else 0):+.2f} {t['closed_by']}")
print() print()