# DCA-STATE-RECONCILE · Forensik 2026-05-18 Quelle: read-only Auswertung aus - `bot_stdout.log` (1.02M Zeilen, 125 MB, scope = 2026-05-15 → 2026-05-18) - `live_portfolio.json` (live state, mtime 02:44 CEST) - `dca_log.json` (live state, mtime 02:24 CEST) - `state-backups/20260518T001433Z_pre_shib_fix/` (Snapshot vor SHIB-Cleanup) Keine DB-Abfrage durchgeführt — postgres-Container nicht angetastet, read-only-Modus. `position_snapshots`-Cross-Check via DB ist **Folgeschritt** für eine Phase mit GO. --- ## Ergebnis-Übersicht **Stand 2026-05-18 02:44 CEST**: nur **1 Position offen** im Bot-State. Der ursprüngliche Plan-Scope (ENA · XLM · SHIB offen mit DCA) ist **veraltet**: alle 3 Positionen sind seit gestern (2026-05-17 23:18 – 2026-05-18 00:14) geschlossen oder manuell aus State entfernt. --- ## Aktuell offene Position ### TON/USDT — 1 Tranche, kein DCA | Quelle | Feld | Wert | |---|---|---| | bot_stdout.log | TESTNET BUY | 2026-05-17 23:44:51 @ 1.908 | | dca_log.json | tranches | 1 (`tranche_1`) | | dca_log.json | total_size | 527.79 | | dca_log.json | dca_count | 0 | | dca_log.json | pyramid_count | 0 | | dca_log.json | avg_price | 1.908 | | live_portfolio.json | quantity | 110.64 | | live_portfolio.json | entry_price | 1.908 | | live_portfolio.json | stop_loss | 1.856959 | | live_portfolio.json | take_profit | 2.010082 | **Konsistenz: HIGH.** Alle Quellen stimmen überein. Keine Abweichung. Note: `tranche_1` allokiert 211.12 USDT (= 40% von total_size 527.79), aber die offene Position hat quantity * entry = 110.64 * 1.908 ≈ 211.10 USDT — der initiale Buy hat nur die erste Tranche ausgeführt. Die zweiten 60% sind als Reserve im DCA-Manager geparkt, kein Pyramid und kein DCA wurde getriggert. Dies ist erwartet bei einer noch jungen Position (< 3h alt im Snapshot). --- ## Historische Rekonstruktion der geschlossenen Positionen ### ENA/USDT — 1 Tranche + 2 DCA-Rescues → geschlossen 2026-05-17 23:18 | Event | Zeit (UTC) | Detail | |---|---|---| | TESTNET BUY (tranche_1) | 2026-05-16 05:50:30 | 1948.21 ENA @ 0.1096, cost 213.52 | | DCA #1 (Rescue) | 2026-05-16 07:14:48 | +186.32 USDT @ 0.1067, neuer Avg 0.1083, neuer SL 0.1058 | | DCA #2 (Rescue) | 2026-05-16 10:08:00 | +133.09 USDT @ 0.1058, neuer Avg 0.1077, neuer SL 0.1053 | | TESTNET SELL | 2026-05-17 23:18:05 | exit 0.1052, P&L -13.29 (-2.49%), reason `fixed_stop_loss` | | DCA Log bereinigt | 2026-05-17 23:18:05 | dca_log entry removed ✓ | **Initial Entry:** 0.1096 **Average nach DCAs:** 0.1077 **closed_trades.entry_price (live state):** 0.107674 = Average ✓ **closed_trades.exit_price:** 0.1052 ✓ → Operator-Display zeigt 0.1077, nicht 0.1096. Siehe ALERTS.md P1-C. ### XLM/USDT — 1 Tranche (Reopen ohne DCA) → geschlossen 2026-05-17 23:42 | Event | Zeit (UTC) | Detail | |---|---|---| | **Cycle 1** TESTNET BUY | 2026-05-16 04:48:10 | 1388 XLM @ 0.1534, cost 212.92 | | **Cycle 1** DCA #1 | 2026-05-16 07:14:48 | +186.29 USDT @ 0.1511, neuer Avg 0.1523, neuer SL 0.1505 | | **Cycle 1** TESTNET SELL | 2026-05-16 10:18:28 | exit 0.1504, P&L -5.82 (-1.46%), `fixed_stop_loss` | | **Cycle 1** DCA Log bereinigt | 2026-05-16 10:18:28 | ✓ | | **Cycle 2** TESTNET BUY | 2026-05-16 13:40:14 | 1399 XLM @ 0.1516, cost 212.09 | | **Cycle 2** (kein DCA versucht — Gap zu groß) | 2026-05-17 23:42:10 | `DCA-Rettung nicht moeglich: Gap 2.5% > 2.2% unter SL` | | **Cycle 2** TESTNET SELL | 2026-05-17 23:42:11 | exit 0.1457, P&L -8.67 (-4.08%), `legacy_stop_loss` | | **Cycle 2** DCA Log bereinigt | 2026-05-17 23:42:12 | ✓ | **Wichtige Klarstellung:** Der DCA-Event vom 2026-05-16 07:14:48 gehörte zu Cycle 1 (geschlossen 10:18 desselben Tages). Der **2. XLM-Cycle**, der bis 2026-05-17 23:42 lief, hatte gar **keinen** erfolgreichen DCA. Plan-Statement „XLM 1 × DCA-Rettung" war historisch korrekt, bezog sich aber auf einen bereits geschlossenen Cycle. ### SHIB/USDT — 1 Tranche + 1 DCA + 22h Sell-Loop → manuell entfernt 2026-05-18 00:14 | Event | Zeit (UTC) | Detail | |---|---|---| | TESTNET BUY (tranche_1) | 2026-05-16 18:53:40 | 36 074 576 SHIB @ 0.000006, cost 214.28 | | **erste SL-Trigger (legacy)** | 2026-05-17 01:06:32 | TESTNET SELL **fehlgeschlagen** (`insufficient_funds`) | | 2. SL-Trigger | 2026-05-17 01:24:51 | TESTNET SELL fehlgeschlagen | | DCA #1 (Rescue) | 2026-05-17 01:27:09 | +186.24 USDT, +31.99M SHIB — **erfolgreich** | | DCA-Rettung paper_trade | 2026-05-17 01:27:10 | Neuer Avg, Neuer SL gesetzt | | 3-37. SL-Trigger | 2026-05-17 02:03 – 23:51 | **alle 35+ SELL-Versuche fehlgeschlagen** mit `insufficient_funds` | | DCA-Veto Welle | 2026-05-17 14:32 – 14:58 | „Preis unter EMA200 — Langfrist-Downtrend" | | DCA-Budget-Cap Welle | 2026-05-17 23:44 – 23:51+ | 401.70 + 133.03 > 532.11 | | Manual State-Cleanup | 2026-05-18 00:14:33 | SHIB-STATE-DRIFT-RECONCILE-1, commit `faa86b0` | **Wichtig:** Der einzige Trade, der für SHIB jemals echte Ausführung hatte, war der initiale BUY 2026-05-16 18:53. Auch die DCA-Rescue „erfolgreich" laut Log — aber der Folge-SELL ergab `insufficient_funds`, was darauf hindeutet, dass auf der Binance-Testnet-Seite die SHIB- Tokens **nicht real gutgeschrieben** wurden (bekanntes Testnet- Verhalten bei sehr kleinen Preisen / Micro-Quantities). State sagte: 532.11 USDT investiert, ~68M SHIB im Bestand. Exchange sagte: 0 SHIB verfügbar. **Confidence Initial-Entry: HIGH** (Log-Beleg). **Confidence „Position war real auf Exchange": LOW** (insufficient_funds über 22 h). ### HUMA/USDT — kein DCA, SL-Schließung 2026-05-17 19:45 | Event | Zeit (UTC) | Detail | |---|---|---| | TESTNET SELL | 2026-05-17 19:45:40 | exit 0.0221, P&L -52.48 (-6.11%), `legacy_stop_loss` | HUMA hatte laut Plan-Dokument keinen DCA, RISK-GUARD blockierte `dca_blocked_bear_regime` — Plan-Aussage stimmt mit Log überein (separate Spot-Check, nicht in Tabelle). --- ## DCA-Log Orphan-Inventar Vollständige Liste der `dca_log.json`-Einträge ohne korrespondierende offene Position (live state 02:44 CEST): | Symbol | tranches | total_invested | letzter Close (live state) | |---|---|---|---| | RLUSD/USDT | [] | 0 | nie | | NOM/USDT | [] | 0 | nie | | FUN/USDT | [] | 0 | nie | | CBBTC/USDT | 1 (2026-04-22) | 305.27 | nie | | USD1/USDT | [] | 0 | nie | | EUR/USDT | [] | 0 | nie | | PEPE/USDT | [] | 0 | nie | | OP/USDT | [] | 0 | nie | | BOME/USDT | [] | 0 | nie | | PUMP/USDT | [] | 0 | 2026-05-06 stop_loss | | STRK/USDT | [] | 0 | nie | | ARB/USDT | [] | 0 | 2026-05-05 take_profit | | APT/USDT | [] | 0 | nie | | HBAR/USDT | [] | 0 | nie | | AXS/USDT | [] | 0 | nie | | DOT/USDT | [] | 0 | nie | | XPL/USDT | [] | 0 | nie | | ETC/USDT | [] | 0 | nie | | NOT/USDT | [] | 0 | nie | | ARKM/USDT | [] | 0 | nie | | KSM/USDT | 1 (2026-05-08) | 214.92 | nie | | LINK/USDT | [] | 0 | 2026-05-08 stop_loss | | KITE/USDT | 2 (tranche_1 + Pyramid) | 345.46 | 2026-05-16 manual_close | | PI/USDT | [] | 0 | nie | | SUI/USDT | 1 (tranche_1_t3fwd) | 219.43 | 2026-05-16 manual_close | → 25/26 Einträge sind Orphans. Auffällige Cluster: - 14 Einträge mit `tranches=[]` aber populated `entry_price`, `total_size`, `last_buy_price`, `avg_price` (= „Schatten"-Einträge — haben einmal eine Position gehabt, kein historisches Tranche-Detail mehr). - 5 Einträge mit echten Tranches aus 2026-04 / 2026-05 für Symbole, die **nie geschlossen** wurden im aktuellen `closed_trades`-Array. Vermutlich aus pre-DATA-LINK-1-Periode oder closed_trades-Pruning. --- ## Was eine echte Forensik noch bringen würde (Folge-Phase, mit GO) 1. DB-Cross-Check `position_snapshots` für die 4 geschlossenen Positions des 17.05. — verifiziert, dass mid-life Snapshots `quantity`-Sprünge an den DCA-Zeitpunkten zeigen. 2. DB-Cross-Check `trade_logs` für entry_price-Semantik (sollte 1:1 zu live_portfolio.closed_trades stimmen). 3. mtime-Forensik auf `live_portfolio.json`-Backups: `_pre_b_fee_fix_2.json` (2026-05-08), `_pre_state_recon_1.json` (2026-05-08), `.20260516T103808Z.pre_kite_repair.bak`, etc. 4. State-Save-Race-Pattern: prüfen ob es Zeitfenster < 1s zwischen `paper_trade._save_state` und `command_worker` gibt, in denen ein write-after-read überschrieben werden kann. → All das in eigener Phase `DCA-STATE-SAVE-RACE-FIX P1` und/oder `STATE-EXCHANGE-RECONCILE-LOOP`. --- ## Acceptance-Criteria-Status (gegen den Plan) | Criterion | Status | Bemerkung | |---|---|---| | ENA / XLM / SHIB DCA-Events nachvollziehbar | ✓ (im Log) | aus bot_stdout.log voll rekonstruiert | | Klar, ob `entry_price` Initial oder Average | ✓ Average | Beweis = ENA-Trade vom 17.05. | | Klar, ob `dca_log.json` als Quelle zuverlässig | ✓ niedrig | 25/26 Orphans | | Keine Bot-Touches | ✓ | Read-only, kein Container-Restart | | Plan-Targets noch offen? | ✗ | ENA/XLM/SHIB sind geschlossen | --- ## STOP Kein Code, kein State-Touch. Für die nächste Phase mit Operator-GO sind die Empfehlungen in `ALERTS.md` der Pivot-Punkt.