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:
co-authored by
Claude Opus 5
parent
3c1442109d
commit
bf838b4d03
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user