# MS-ACTIVATION-TEST-2 — Auswertungs-Report **Test-Fenster**: 2026-05-16 11:49 UTC → 16:01 UTC (4h 10min, operator-initiierter early stop) **Test-Modus**: `MULTI_STRATEGY_ENABLED=true`, `MULTI_STRATEGY_DRY_RUN=true`, `BINANCE_TESTNET=true` **Archiv**: `multi_strategy.20260516T160126Z.bak` (1137 JSONL Zeilen total, 810 davon im Test-Fenster) **Status**: ✅ alle Boundaries gehalten, 0 echte MS-Trades, 0 DB-Writes durch MS-Runner --- ## 1. Headline-Findings | Metrik | Wert | Bewertung | |---|---|---| | MS-Cycles | ~100 (~1 alle ~2.5 min über 4h 10min) | normal | | Symbol-Evaluations | **810 Rows** | breite Coverage | | TRADE_CANDIDATE-Decisions | **0** | router stability-filter blockt 100 % | | REJECT-Decisions | **0** | dito | | Decision-Engine-Calls | **0** | (Folge: score_signal nie aufgerufen) | | MS-Postgres-Writes | **0** | **DB-Boundary intakt** ✅ | | Echte MS-Buys | **0** | dry-run gate hält ✅ | | Tracebacks | **0** | Bot stabil ✅ | | Performance-Regression | nein | Scan-Cycles laufen unverändert 2-3 min | **Bottom Line**: Sauberer 4h-Test ohne Boundary-Verletzung. **Aber MS-Pipeline ist heute funktional nicht produktiv** — kein einziger Trade-Kandidat wurde durchgewunken, weil der Router-Stability-Filter alle 810 Symbol-Evaluierungen geblockt hat. --- ## 2. Konkrete Statistiken (aus JSONL) ### 2.1 Regime-Verteilung | Regime | Count | % | |---|---|---| | `STRONG_TREND` | 491 | 60.6 % | | `CHOP` | 167 | 20.6 % | | `WEAK_TREND` | 152 | 18.8 % | | `BULL` / `BEAR` / `HIGH_VOL` / `RANGE` / null | 0 | 0 % | → Aktueller Markt für die 43 evaluierten Symbole wird primär als STRONG_TREND (60 %), dann CHOP (20 %), dann WEAK_TREND (19 %) klassifiziert. ### 2.2 Decision-Verteilung | `decision` | Count | |---|---| | `null` | 810 | | `TRADE_CANDIDATE` | 0 | | `REJECT` | 0 | → **Decision-Engine wurde NIE aufgerufen**. Reason: Router schickt keine `active_strategies` weil `is_stable=False` (siehe 2.5). ### 2.3 strategy_id-Verteilung | `strategy_id` | Count | |---|---| | `null` | 810 | | `trend_follow` / `breakout` / `mean_reversion` / etc. | 0 | → Keine einzige Strategie wurde tatsächlich ausgewertet (siehe oben). ### 2.4 Block-Reasons (TOP 5) | `execution_block_reason` | Count | |---|---| | `Regime 'STRONG_TREND' unstable — no strategies active` | 491 | | `Regime 'CHOP' unstable — no strategies active` | 167 | | `Regime 'WEAK_TREND' unstable — no strategies active` | 152 | → **100 % Stability-Filter-Block**. ### 2.5 is_stable Distribution | `is_stable` | Count | |---|---| | `False` | **810** | | `True` | 0 | → **DAS ist der Kern-Befund**. In keinem einzigen der 810 Sample-Punkte hat die Regime-Stability-Detection einen stabilen Zustand erkannt. ### 2.6 Symbol-Coverage - 43 unique Symbole evaluiert - Sample: `1000CHEEMS/USDT`, `AAVE/USDT`, `ADA/USDT`, `APT/USDT`, `ARB/USDT`, `ASTER/USDT`, `ATOM/USDT`, `BTC/USDT`, `DASH/USDT`, `DOGE/USDT`, … - Repräsentativer Quer-Schnitt durch den Binance-Universe ### 2.7 DB-Boundary-Bilanz ```sql SELECT source, count(*) FROM decision_logs WHERE created_at > '2026-05-16 11:49:00'::timestamptz GROUP BY source; run_scan_cycle | 1748 ← Legacy-Scanner unverändert aktiv (nichts mit source='multi_strategy_runner') ``` → DB-Boundary für MS heute **vollständig respektiert**. --- ## 3. Interpretation ### 3.1 Warum kommt nichts durch? Der `MultiStrategyRunner` ruft: ```python regime = market_regime.detect_extended(df, symbol, timeframe) router_result = self.router.route(regime) active_ids = router_result.get('active_strategies', []) if not active_ids: self._log_decision(...) # block_reason gesetzt return decisions # leere Liste ``` Der `StrategyRouter.route(regime)` returniert `active_strategies=[]` wenn `regime.is_stable == False`. Die Stability-Detection erfordert `REGIME_STABILITY_CANDLES=3` aufeinanderfolgende identische Regime-Klassifikationen. In 4h 10min Live-Beobachtung hat **kein einziges** Symbol 3x in Folge das gleiche Regime gehabt. Das bedeutet: - Entweder wechseln Regimes pro Symbol sehr schnell (Whipsaws) - Oder die Stability-Filter-Logik ist zu strikt für die aktuelle Marktphase ### 3.2 Was das für die Architektur bedeutet Operator-Plan-Vision (T1 = Binance only, T2 = Solana only) ist heute **nicht testbar** durch MS-Runner allein, weil: 1. **Stability-Filter blockt 100 %** → MS-Runner liefert keine `strategy_id` aus → keine differenzierung der 5 Strategien beobachtbar 2. **Selbst wenn er liefert**: aktueller Code labelt alles als `t1_core` (FULLSTACK-ARCH-ERROR-REVIEW-Befund) Konsequenz: - Vor der Migration zur **echten T1/T2-Profil-Trennung** muss **STRATEGY-GROUP-CONTRACT-1** durchgeführt werden (per-strategy_id Mapping zu T1 / T2) - **Stability-Filter** sollte für Test-Zwecke entweder - relaxed werden (z.B. via `MULTI_STRATEGY_TESTNET_RELAXED=true` Env-Flag, das im Code existiert aber nicht gesetzt ist) - oder umgangen werden (z.B. `REGIME_STABILITY_CANDLES=1` für Testlauf) ### 3.3 Was wir trotzdem gelernt haben | Erkenntnis | Wert | |---|---| | Bot-Stabilität unter MS=true + DRY_RUN=true | ✅ 0 Tracebacks, kein Performance-Impact | | MS-Code-Pfad reichbar | ✅ Router + log_decision + JSONL-Write funktionieren | | DB-Boundary unter MS-Pipeline | ✅ Dry-Run-Gate hält wie spezifiziert | | Existierende Telemetrie (decision_logs aus T1) | ✅ Legacy-Scanner unbeeinträchtigt (+1748 rows in 4h) | | Tagesziel-Trades durch T1-Path | ✅ KITE +0.74 trailing, KITE +7.12 manual_close, LAYER +8.41 trailing, 1000CHEEMS -17.75 SL = **breakeven-Tag** | | DCA-Rescue + Telegram Pipeline | ✅ 3 erfolgreiche Rescues heute (1000CHEEMS, BABY, ORCA), 0 Telegram-400-Errors | | HELIUS-KEY-FAILOVER | ✅ Pump.fun-Monitor seit 12:19 UTC verbunden + stabil | --- ## 4. Wichtige Beobachtungen während MS-Test-2 ### 4.1 Live-Closes auf T1-Pfad Während MS-Test-2 lief auf T1 weiter: | Zeit | Symbol | Reason | PnL | |---|---|---|---| | 13:01 UTC | 1000CHEEMS/USDT | `fixed_stop_loss` | **-17.75** USDT | | 13:39 UTC | LAYER/USDT | `trailing_stop_profit` | **+8.41** USDT | | (vor MS-Test) 08:06 UTC | KITE/USDT | `trailing_stop_profit` | +0.74 USDT | | (vor MS-Test) 10:09 UTC | KITE/USDT | `manual_close` via Worker | +7.12 USDT | T1-Loop produktiv. T2 (MS) im Standby. ### 4.2 Live-DCA-Rescues 3 Rescues über den Tag — alle mit funktionierender Telegram-Notif (HTML-escape-Fix aktiv): - 12:04 UTC 1000CHEEMS (später trotzdem SL) - 13:08 UTC BABY (Avg 0.0187, neuer SL 0.0182) - 13:37 UTC ORCA (Avg 1.5030, neuer SL 1.4370) ### 4.3 Pump.fun-Monitor live Seit 12:19 UTC durchgehend `[WS] Verbunden`, `logsSubscribe aktiv`. Failover-Mechanismus armed (primary Key `06dcec99-...`, fallback `52257943-...`). --- ## 5. Was als nächstes ansteht ### 5.1 Sofort (operator-decision-ready) 1. **STRATEGY-GROUP-CONTRACT-1** (~30 min Code + Tests + Cutover): strategy_id → strategy_group Mapping. Erfüllt die FULLSTACK-ARCH-ERROR- REVIEW-Finding von vorhin. Vorbedingung für jede künftige MS-Live-Phase. 2. **Stability-Filter-Klärung**: - Option A: MS-Test-3 mit `MULTI_STRATEGY_TESTNET_RELAXED=true` (Code-Flag existiert, prüfen was er ändert) - Option B: temporär `REGIME_STABILITY_CANDLES=1` für nächsten Test - Option C: gar nicht — Stability-Filter ist absichtlich strikt, T1/T2-Architektur-Refactor ist wichtiger 3. **T1/T2-Architektur-Vision** (deine heute formulierte Idee): T1 = Binance only, T2 = Solana only — Plan-Phase ohne Code-Change ### 5.2 Mittelfristig - **Refactor (nicht Rewrite)** wie ich gestern empfohlen habe — 6-7 Wochen - Hybrid-Plan: Phase A (Aufräumen) → Phase B (T1 Binance reiner Profil) → Phase C (T2 Solana Greenfield) → Phase D (Cleanup) ### 5.3 Out of Scope vorerst - T3 = Copy Trading bleibt deaktiviert (operator-bestätigt) - COMMAND-BUS-V6 / MH-1 Aktivierung (separate Decision-Phase) - Mainnet-Aktivierung beliebiger Art --- ## 6. GO / NO-GO Empfehlung ### NO-GO für `MULTI_STRATEGY_DRY_RUN=false` Solange: - STRATEGY-GROUP-CONTRACT-1 nicht durch - Stability-Filter im aktuellen Markt 100 % blockt → keine produktiven Daten für Live-Entscheidung ### GO für STRATEGY-GROUP-CONTRACT-1 Heute oder morgen umsetzen. Niedriges Risiko, hoher Wert. ### NACH STRATEGY-GROUP-CONTRACT-1 Operator-Decision: - Architektur-Vision T1=Binance / T2=Solana ausarbeiten als Phasen-Plan-PDF - Refactor-vs-Rewrite-Empfehlung von vorhin bestätigen - Phase A (Aufräumen) startklar machen --- ## 7. STOP MS-Test-2 sauber beendet. Auswertung steht. Bot zurück auf `MULTI_STRATEGY_ENABLED=false`, host-PID 77 (Bot lebt mit allen Heute-Fixes). Boundaries gehalten: 0× Mainnet, 0× DB-Migration, 0× historische Mutation, 0× Push, 0× Secrets im Output, 0× Bot-Code-Mutation für die Auswertung selbst. Operator-Entscheidung erforderlich für nächste Phase.