CRYPTO·MONSTER
PHASE 8 · SNIPER

Public Roadmap

Phasen & Sub-Phasen

Crypto-Monster wird in 12 aufeinander aufbauenden Phasen entwickelt. Diese Seite zeigt, was bereits ausgeliefert ist, was als nächstes ansteht, und was noch kommt.

8/12 Phasen abgeschlossen
67% Gesamtfortschritt
1 aktuell in Arbeit
Aktueller Repo-Stand
67 Ordner
834 Dateien
250.149 Code-Zeilen
Phase 0 v0.1.0 ✓ done 2026-04-30

Setup

docker-compose, Redis, Dashboard-Hello-World, TLS via Nginx-Proxy-Manager, Loopback-Binding aller Services.

  1. 0.1
    docker-compose Stack 2026-04-30 Multi-Container-Setup auf Raspberry Pi 5: cm-dashboard, cm-redis, cm-nginx-proxy-manager. Pragmatic single-machine-deploy mit lokalem Docker-Daemon.
  2. 0.2
    Loopback-Binding aller Services 2026-04-30 Alle Container exposen nur 127.0.0.1:<port>. Externer Zugriff ausschließlich via NPM + TLS. Defense-in-Depth.
  3. 0.3
    TLS via Nginx-Proxy-Manager 2026-04-30 NPM-Container terminiert TLS, Let's-Encrypt-Cert, Proxy zu :80 für cm-dashboard.
  4. 0.4
    Dashboard-Hello-World 2026-04-30 FastAPI-Skelett mit Jinja-Templating, Static-Files, Health-Endpoint, base.css. Foundation für alle weiteren Phasen.
Phase 1 v0.1.0 ✓ done 2026-04-30

Auth

Bcrypt-Hashing (Cost 12), Session-basierte Authentication, CSRF-Schutz via itsdangerous, Brute-Force-Schutz (5/15min), 2FA-Schema vorbereitet.

  1. 1.1
    Bcrypt-Hashing + User-Schema 2026-04-30 Cost-Factor 12 (~250ms pro Hash auf Pi 5). user-Tabelle mit username, password_hash, totp_secret (für Phase 10).
  2. 1.2
    Session-Management 2026-04-30 Server-side Sessions via itsdangerous-signed cookies. Idle-Timeout 24h, sliding renewal.
  3. 1.3
    CSRF (Double-Submit-Pattern) 2026-04-30 cm_csrf-Cookie + X-CSRF-Token-Header. Signed mit Dashboard-Secret. Server vergleicht beide bei jedem POST/PUT/DELETE.
  4. 1.4
    Brute-Force-Schutz 2026-04-30 5 fehlgeschlagene Logins pro 15min → 15min Lockout. Per-Username + per-IP, Redis-backed Counter.
Phase 2 v0.2.0 ✓ done 2026-04-30

Dashboard-Skeleton

5-Tab-Layout + Mobile-Bottom-Nav, Theme-Toggle (FOUC-frei), Live-Status-Dots via Redis-Heartbeat.

  1. 2.1
    5-Tab-Layout (Desktop) 2026-04-30 Haupt-Pills: BSC, Solana, Copy, Total, Settings. ARIA-tablist mit aria-controls/aria-selected. Sniper-Pill kam später in Phase 6-Re-Plan dazu.
  2. 2.2
    Mobile-Bottom-Nav 2026-04-30 Unter 768px: Tab-Bar fix am unteren Rand (thumb-zone-optimiert). Drawer für sekundäre Tabs.
  3. 2.3
    Theme-Toggle (FOUC-frei) 2026-04-30 Dark/Light/System-Auto via prefers-color-scheme. Initial-State im <head>-inline-script gesetzt damit kein Flash of Unstyled Content beim Reload.
  4. 2.4
    Live-Status-Dots 2026-04-30 Pro Service ein Heartbeat in Redis (`heartbeat:<service>:last_seen`). Dashboard pollt alle 10s, rendert Lime/Amber/Crimson-Dots im Header.
Phase 3 v0.3.0 ✓ done 2026-05-15

BSC vollständig — Paper UND Real

Größte Phase: kompletter BSC-Trader von Strategy-Modul bis Real-Trading auf Mainnet mit PancakeSwap-V2-Routing und Wallet-Encryption.

  1. 3.1–3.2
    Trader-BSC-Container + Strategien-Lib 2026-05-15 FastAPI-Service mit eigener SQLite-DB, rsi_ma-Strategy als erste Implementation.
  2. 3.3.x
    Price-Feed-Lib + Worker 2026-05-15 CoinGecko + Binance-Adapter mit Token-Bucket, Circuit-Breaker, Redis-Cache, Stale-While-Revalidate.
  3. 3.4
    Paper-Trading-Engine 2026-05-15 Schema-Migrator via PRAGMA user_version, FIFO-Match, VIEWs statt Tabellen, Event-Log atomar.
  4. 3.5
    Risk + SL/TP + Settings-Politik 2026-05-15 Variante B: 4-stufige resolve_setting(), Daily-Loss-Window mit Auto-Pause.
  5. 3.6.x
    Settings-UI + Token-Verwaltung 2026-05-15 Dynamische Token-Liste, Pro-Token-Override, Trade-History, Worker-Cache-Vertrag, Per-Token-TF.
  6. 3.7.x
    Wiki-Tab 2026-05-15 Volltext-Suche (FTS5), Bild-Uploads, WYSIWYG-Editor, Kategorie-Verwaltung, Snapshot-Distribution.
  7. 3.8.x
    Reset-Funktion + Polish 2026-05-15 Paper-Portfolio Hard-Reset, manueller Close-Button, Live-Wert offener Trades, Portfolio-Stats.
  8. 3.9.1
    Trader↔Worker-Reconciliation 2026-05-15 Reconciliation-Loop im Dashboard heilt strukturelle Drift-Klasse aus 3.6.6.
  9. 3.9.2
    BSC Real-Trading-Switch 2026-05-15 Zweiter Container `cm-trader-bsc-real`, PancakeSwap-V2-Routing, Master-Encryption-Key, Live-verifiziert auf Mainnet.
  10. 3.10
    Persistent Candle Storage + CG-Augmentierung 2026-05-15 Candles in worker.db, MarketData/Trending/Sentiment/Global-Macro werden gepollt.
Phase 4 v0.4.0 ✓ done 2026-05-26

Strategien-Suite

16 Strategien (14 Signal + Voting + Auto-Switcher) plus DCA-Modifier als orthogonales Position-Management. Trailing-Stop, Indicator-Visualisierungen, Gas-Cost-Transparenz.

  1. 4.1
    Trailing Stop 2026-05-26 TSL + TTP mit distinkten RiskActions, Exit-Reasons und Events.
  2. 4.2
    Strategy-Params-Framework 2026-05-26 Schema v18, Validator-Registry, HTTP-Endpoints, neuer Strategien-Haupttab.
  3. 4.3.1
    MACD-Strategy 2026-05-26 Moving-Average-Convergence-Divergence. EMA-fast (12) minus EMA-slow (26), Signal-Line (9 EMA). Buy bei Bullish-Crossover, Sell bei Bearish.
  4. 4.3.2
    Bollinger-Bands-Strategy 2026-05-26 SMA ± n × StdDev. Mean-Reversion-Variante: Buy unter Lower-Band, Sell über Upper-Band.
  5. 4.3.3
    EMA-Ribbon-Strategy 2026-05-26 8 EMAs verschiedener Perioden (5-55). Bullisch wenn alle EMAs aufsteigend gestaffelt; Cross-Alignment-Onset triggert Buy.
  6. 4.3.4
    Stochastic-RSI-Strategy 2026-05-26 RSI auf RSI-Werte angewendet (sensitiver Oszillator). Buy <20 mit Hochkreuzung, Sell >80 mit Tiefkreuzung.
  7. 4.3.5
    VWAP-Strategy 2026-05-26 Volume-Weighted-Average-Price als institutioneller Mean-Reverter. Buy unter VWAP mit Reversion, Sell über VWAP.
  8. 4.3.6
    Supertrend-Strategy 2026-05-26 ATR-basierter Trend-Follower mit Flip-Linie. Stateful (Position-State persistiert in DB).
  9. 4.3.7
    Breakout-Strategy 2026-05-26 Donchian-Channel-Bruch: Buy bei Close > Highest-High der letzten N Bars, Sell bei Close < Lowest-Low.
  10. 4.3.8
    Mean-Reversion-Strategy 2026-05-26 Z-Score-basiert: Buy wenn Z-Score < -2 (überverkauft), Sell wenn Z-Score > +2 (überkauft).
  11. 4.3.9
    Trend-Follow-Strategy 2026-05-26 EMA-fast/slow + ADX-Filter (nur traden wenn ADX > 25). Bullisch wenn EMA-fast > EMA-slow UND ADX-Trend stark.
  12. 4.3.10
    HH/LL-Strategy 2026-05-26 Swing-Pattern: Higher-Highs + Higher-Lows → Bullish. Lower-Highs + Lower-Lows → Bearish. Pivot-Detection.
  13. 4.3.11
    OBV-Divergenz-Strategy 2026-05-26 On-Balance-Volume-Divergenz: Preis macht neues High, OBV nicht → bearish Reversal-Signal.
  14. 4.3.12
    Pivot-Points-Strategy 2026-05-26 Klassische Floor-Trader-Pivots (P, R1-R3, S1-S3) auf Daily-Basis. Reversal-Trades an Levels.
  15. 4.3.13
    Ichimoku-Kinkō-Hyō-Strategy 2026-05-26 Komplettes Ichimoku-System: Tenkan/Kijun-Sen, Kumo (Cloud), Chikou-Span. Buy auf TK-Cross + über Wolke.
  16. 4.3.13.1
    Param-Display-Names 2026-05-26 Polish-Layer für UI: technische Param-Namen (z.B. rsi_period, adx_trending_threshold) bekommen deutsche Display-Names in der Settings-UI.
  17. 4.3.14
    Voting Meta-Strategy 2026-05-26 N Sub-Strategien stimmen ab, Mehrheit gewinnt. Konfigurierbar mit Threshold (z.B. 3/5 für Buy). Stateless Aggregation.
  18. 4.4a
    DCA-MVP (als Strategy) 2026-05-26 Erste Iteration: DCA als eigene Strategy (dca_classic). Buy bei -X% vom Average-Entry, Position-Size aus DCA-Level-Ladder. Pragmatisch aber architektonisch problematisch (Strategy-Slot blockiert).
  19. 4.4b
    DCA-Refactor zum Modifier 2026-05-26 Schema v19. DCA wird orthogonaler Modifier: aktive Strategy gibt Initial-Buy-Signal, DCA übernimmt ab dann Position-Management. Variante 1: DCA blockt Strategy-Sell bis DCA-Exit. Per-Token-Toggle dca_enabled + Param-Card unter Strategy-Card.
  20. 4.4b-polish
    User-Feedback-Iterations 2026-05-26 Manual-Close-Cool-Down (gegen Versehentliches Re-Buy nach Close), Gas-Transparenz (P/L netto nach Gas, Trades-Tab Gas-Spalte, Wallet-Trend für BNB-Bestand), K1-K3 Pydantic-Drift-Fix (3 Validierungs-Layer konsistent), BSC-Top-15-Discovery (Trending aus tradeable_master statt CG-Direct), Trend-Follow-Chart-Overlay, Param-Card-Symmetrie, collapsible Wiki-Kategorien.
  21. 4.4c
    Tech-Debt-Cleanup 2026-05-26 `martingale_dca.py` gelöscht (DCA lebt nur noch als Modifier seit 4.4b), Validator-Doppelregistrierung entfernt, Wiki-Slug-Rename martingale-dca-strategie → dca-modifier.
  22. 4.5
    Auto-Switcher (Meta-Strategy) 2026-05-26 ADX + ATR Regime-Detection (TRENDING/RANGING/VOLATILE/NEUTRAL) → Strategy-Delegation. 7 Presets (Klassik, Konservativ, Aggressiv, Volume-First, Ichimoku-Heavy, Pivot-Levels, Swing-Konfluenz).
  23. 4.6a
    Token-Settings Strategy/TF-Dropdown 2026-05-26 Pro Token im Settings-Modal: Strategy-Dropdown (alle 14+) + Timeframe-Dropdown (5m bis 1d). Override-Toggle für globalen Default.
  24. 4.6b
    Voting + Switcher Param-Editors 2026-05-26 Voting hat eigenen Chip-Editor für Sub-Strategien. Auto-Switcher hat Dict-Editor für regime_map mit Preset-Selectors. Strategy-spezifische Param-Cards.
  25. 4.6c
    Stale-Tabs aufräumen 2026-05-26 Inactive Tabs cleared State um Memory-Leaks zu vermeiden (z.B. Chart-Renderer schließt Lightweight-Charts-Instanz beim Tab-Wechsel).
  26. 4.6d
    Indicator-Visualisierungen + Iteration 2026-05-26 Pro Strategy ein eigener Indicator-Mini-Chart (RSI-Bar, Bollinger-Bands-Overlay, Stoch-RSI-Mini-Panel, etc.). Renderer-Registry, Strategy-Display-Names, Chart-Overlays mit Trend-Pfeil. Iteration: Stoch-RSI Mini-Chart fix, CAKE Supertrend Label-Overlap final gelöst.
Phase 5 v0.5.0 ✓ done 2026-05-26

Telegram + Notifications

Push-Benachrichtigungen für Trading-Events (Trade closed, SL/TP, Trailing, Kill-Switch, Real-Trade-Failed, Daily-Summary). Ein globaler Bot, pro Trader-Container eigene Chat-ID + Notification-Filter. Bot-Token Fernet-encrypted in der portfolio.db, NIE im Klartext.

  1. 5.1
    shared/telegram-Modul 2026-05-26 Async-TelegramClient mit Token-Bucket-Rate-Limiter (30 msg/s), Retry-Logic (Retry-After, exponential backoff), strukturierte Exception-Hierarchie (Auth/ChatNotFound/RateLimit/Server). 20 Unit-Tests.
  2. 5.2
    Schema v22 — Telegram-Config 2026-05-26 10 neue Spalten auf `settings`: telegram_enabled (master), telegram_bot_token (Fernet-encrypted), telegram_chat_id (text — auch @channel-Handle), 6 Notify-Filter-Toggles, telegram_daily_summary_hhmm. Per-Trader-Trennung via separate portfolio.db pro Container.
  3. 5.3
    Settings-UI im globalen Tab 2026-05-26 Settings → Telegram Sub-Panel: 2 Cards (BSC Paper + BSC Real). Master-Switch, Bot-Token (password-input mit Clear-X), Chat-ID, 6 Notification-Toggles, Daily-Summary-Time. Mask-on-Read: Token-Ciphertext leakt nie ans UI; nur `telegram_bot_token_set: bool`. Encrypt-on-Write via Fernet im PUT-Handler. Mode-Param `paper/real` im Proxy.
  4. 5.4
    Trader-Loop-Integration 2026-05-26 TelegramNotifier (services/shared/telegram/notifier.py) wrappt Settings-Resolver + Fernet-Decrypt + TelegramClient zu einem fire-and-forget Async-API. 5 Events automatisch: trade_closed (Strategy-SELL), sl_tp_triggered, trailing_triggered, kill_switch, real_trade_failed. Disjunkte Events (kein Doppel-Send), never-raise. 19 Unit-Tests.
  5. 5.5
    Daily-Summary-Job 2026-05-26 Async-Cron pro Trader-Container, 60s-Tick, HH:MM-Match-Check. Aggregiert P&L 24h, Trade-Count, Win-Count, offene Positionen, Portfolio-Value aus den DB-Tabellen. Robust gegen Restart (`daily_summary_sent`-Marker in trader_events). 16 Unit-Tests.
  6. 5.6
    Test-Knopf 2026-05-26 POST /api/settings/telegram/test sendet eine Hello-Markdown-Message via die gespeicherte Config. Im Settings-Tab pro Card ein 'Test senden'-Button mit Live-Feedback. Spezifische HTTP-Errors für Token-Invalid (400), Chat-Not-Found (400), Rate-Limit (429), Telegram-down (502). Master-Switch wird IGNORIERT damit Config getestet werden kann ohne Notifications zu aktivieren.
Repo zum Closeout
45 Ordner
494 Dateien
184.434 Code-Zeilen
Phase 6 v0.6.0 ✓ done 2026-05-30

Solana Trader (Mainstream, BSC-Spiegel)

Solana-Trader für etablierte SPL-Tokens (BONK, JUP, WIF, PYTH, JTO etc.) — 1:1-Spiegel des BSC-Trader-Pattern. Paper + Real, Jupiter für Quote+Swap, Helius für Holdings. Tokens werden via Discovery (Jupiter-Token-Liste) ausgewählt und nach den existierenden Strategien gehandelt — KEINE Memecoin-Hype-Tools. Memecoin-Discovery + Frontrunning-Sniping leben separat im Sniper-Modul (Phase 9). Hart getrennt: eigener Worker, eigene worker.db, eigene Token-Registry (shared/price_feed/tokens_solana.py).

  1. 6.1
    trader-solana Paper-Container 2026-05-27 `services/trader-solana/` auf 127.0.0.1:6002 mit Pragmatic-Copy von trader-bsc/app/ (Code-Sharing am Source-Layer, Runtime-Trennung via eigener Container + portfolio.db). TRADER_TOKENS leer (Phase-6-Re-Plan: kein hardcoded Default — User addet via Discovery). Chain-aware Notifier-Label `Solana-Paper`. Default-TF 15m (statt 1h bei BSC).
  2. 6.2
    cm-worker-prices-solana Container 2026-05-27 Eigener Solana-Worker auf 127.0.0.1:6005 neben cm-worker-prices-bsc (BSC). Eigene data/worker-solana/worker.db. Dashboard bekommt zweiten Reconciler (BSC-Reconciler bleibt unverändert, Solana-Reconciler unabhängig). Isolation-Test grün: BSC-Worker-Stop lässt Solana-Worker weiter ticken.
  3. 6.3
    Jupiter-Adapter + leere Solana-Token-Registry 2026-05-27 shared/price_feed/tokens_solana.py startet leer mit register_token()-Funktion analog tokens.py. JupiterAdapter (shared/discovery/jupiter.py) für token.jup.ag/all-Endpoint mit Redis-Cache (24h TTL), verified-only Filter, Volume-desc-Sort. CoinGecko + Binance als Provider wie BSC. 33 Unit-Tests grün (14 Registry + 19 Jupiter).
  4. 6.4
    Solana-Hauptpill UI: Tokens · Trades · Portfolio 2026-05-27 panel-solana bekommt Chain-Subtab-Strip (Tokens / Trades / Portfolio) analog zu BSC. JS chain-agnostisch (parsed panel-solana → mainTab='solana'). Skelett mit Empty-State-Cards pro Subpanel + Hinweisen auf 6.5/6.6/6.7. Live-aktualisiertes Status-Dot im Card-Header.
  5. 6.5
    Solana-Discovery: Jupiter-Token-Liste 2026-05-29 Discovery-Subtab unter Solana-Hauptpill (4. Subtab neben Tokens/Trades/Portfolio). Jupiter v2-Endpoint (tokens/v2/tag?query=verified) liefert ~300 verified Solana-Tokens mit Volume + Verified-Flag (Volume-desc-Sort). + Add-Klick POSTet an /api/dashboard/trader/solana/tokens — Token landet in portfolio.db, Reconciler heilt drift in worker-solana.db. price_feed/__init__ chain-aware Dispatch zwischen tokens.py (BSC) und tokens_solana.py (Solana) via TRADER_NAME/WORKER_NAME ENV. Tokens-Subpanel zeigt Live-Liste sobald ein Token addet ist. Hotfix 28.05.2026: limit 50→200, Fiat-Pegged-Filter (stable-Tag + Symbol-Whitelist inkl. yield-bearing Lending-Wrapper wie JLUSDC/SYRUPUSDC/USDY/EUSX) damit USDC, USDT etc. nicht mehr in der UI auftauchen — LSTs (JITOSOL, JUPSOL, MSOL) bleiben drin weil sie sich wie SOL bewegen und handelbar sind.
  6. 6.6
    UI-Parität Solana ↔ BSC 2026-05-29 Solana-Panels sind funktional gleichwertig zum BSC-Trader. Alle 7 Subschritte 6.6.1-6.6.7 done am 28.05.2026. Bereit für Phase 6.7 (trader-solana-real). Paper-UI = Real-UI ist garantiert weil alle JS-Renderer chain-agnostisch (data-trader-chain-selector) und Backend via Pragmatic-Copy von trader-bsc/app/ in trader-solana läuft. Neu eingeführte chain-aware Helper: _formatNativeFee(chain, x), _nativeFeeExplanation(chain), _scanUrl(chain, addr), _scanLabel(chain), _chainOfContainer(c), _refreshSolanaTraderHeader(). CSS-Variablen --purple/--purple-glow/--purple-soft/--purple-text für Solana-Brand (#9945ff). Backend-Hotfix in feed.py/coingecko.py/binance.py: chain-aware Registry-Dispatch (vorher hartkodierte BSC-Whitelist → KeyError für Solana-Tokens auf /api/candles). Icon-Pipeline: Jupiter-Cache als 3. Resolver in /icon/by-symbol → sol-{symbol}.png Disk-Cache.
  7. 6.6.1
    Tokens-Subpanel mit BSC-Featureset 2026-05-29 Solana-Tokens-Tab bekommt das volle BSC-Markup: 11-Spalten-Tabelle (Desktop) + Mobile-Cards mit Token-Icon, Preis, Signal-Pill, Trend-Pfeil + RSI/MA-Detail, Strategie (mit Sterne-Badge + Display-Name), Intervall, Real./Unreal. P/L (USD + %), SL/TP, Override-Status-Pill, Action-Buttons. Add-by-Address-Toolbar mit Base58-SPL-Mint-Validation (statt 0x-Hex). Renderer-Reuse: _renderTokens/_buildTokenRow/_refreshTokens sind bereits chain-agnostisch — Init-Schleife iteriert über data-trader-chain. Icon-Pipeline-Hotfix: Jupiter-Cache-Lookup als 3. Resolver in /api/dashboard/scanner/icon/by-symbol — Solana-Icons werden als sol-{symbol}.png auf Disk gecacht (JITOSOL, JUICED, BSOL, MSOL etc. funktionieren).
  8. 6.6.2
    Token-Settings-Modal für Solana 2026-05-29 Modal mit Strategy/TF-Dropdown, DCA-Modifier-Checkbox + Param-Card, Position-Size (fixed-USD / %-vom-Cash Option), Cool-Down-Settings. Renderer + Submit-Pipeline vollständig chain-agnostisch — _openEditModal/_populateEditModal/_saveEditModal waren schon seit Phase 3.6.4d so designt. Modal-Markup ist in 6.6.1 bereits ins panel-solana eingefügt worden (data-accent="purple" statt cyan). Backend-Endpoints /api/settings, /api/settings/{token}, /api/strategy-params existieren via Pragmatic-Copy. Neu in 6.6.2: CSS --purple-Variablen (Solana-Brand-Farbe #9945ff) + .cm-dialog[data-accent="purple"]-Style. Gas-Break-Even-Warner versteckt sich automatisch im Paper-Mode.
  9. 6.6.3
    Detail-Modal + Mini-Charts + Indikator-Visualisierungen 2026-05-29 Detail-Modal mit Candlestick-Chart (TradingView Lightweight-Charts), RSI-Mini-Panel mit synced visible range, Strategy-aware Indikator-Overlay (RSI/Stoch-RSI/ADX). Spiegel des BSC-Detail-Modals mit data-accent="purple". JS-Pipeline schon seit Phase 4.6d chain-agnostisch (_openDetailModal/_loadAndRenderChart). Backend-Hotfix: chain-aware Token-Registry-Dispatch in feed.py, coingecko.py, binance.py — hartkodiertes `from .tokens import get_token` umging den Dispatch in __init__.py → Solana-Tokens (TROLL, JUICED, …) generierten KeyError gegen die BSC-Whitelist → HTTP 500 auf /api/candles. Fix: lokale Wrapper mit lazy `from . import …`. Bug-Symptom auch im Worker-Solana behoben (0 KeyError-Logs mehr). UI rendert korrekt; echte Solana-Candles kommen mit Phase 6.7 (Jupiter als Provider statt Binance).
  10. 6.6.4
    Trades-Subpanel mit Fee-Anzeige 2026-05-29 Solana-Trades-Subpanel mit voller BSC-Featureset: Stats-Card (Trades / Win-Rate / Total-P/L / Ø Hold / Fee), collapsible Performance-pro-Strategie-Cards, collapsible Filter-Toolbar (Token/Strategie/Ergebnis/Zeitraum), Tabelle (10 Spalten) + Mobile-Cards. Renderer (_renderStatsStrip, _renderTradeRows, _buildTradeRow, _buildTradeCard) sind seit 3.6.5 chain-agnostisch — neue Helper _formatNativeFee(chain, amount) + _nativeFeeExplanation(chain) + _chainOfContainer(container) machen BSC-Hardcodes ("BNB" / "Gas") chain-aware (BSC → BNB, Solana → SOL; "Gas" → "Fee" für Solana-Terminologie). Auch in Tokens-Tab P/L-Tooltips angewendet (Real./Unreal. mit Fee-Korrektur). Wert 0 bis Phase 6.7 Real-Trading echte Priority-Fee + Compute-Unit-Cost liefert.
  11. 6.6.5
    Portfolio-Subpanel: Wallet-Value + SOL-Reserve 2026-05-29 Solana-Portfolio-Subpanel mit voller BSC-Featureset: Stats-Card (12-er-Grid mit Cash, Holdings, Total Value, Realized/Unrealized P/L, Heute, Win-Rate, Trades, Ø Hold-Dauer, Max Drawdown, Best/Worst Trade), Equity-Verlauf collapsible (8 Range-Pills 1H-Alltime, Performance-Bar, SVG-Sparkline), Reset-Card (Paper-Portfolio-Hard-Reset). Renderer (_renderPortfolioPanel, _renderPortfolioModeHeader, _renderSparkline, _renderPortfolioPerformance) sind seit 3.8.5 chain-agnostisch. Neue chain-aware Helper _scanUrl(chain, address) + _scanLabel(chain) für Block-Explorer-Links (BSC → BscScan, Solana → SolScan). _applyPortfolioHeader bekommt chain-Parameter, Wallet-Link routet auf solscan.io/account/{address} statt bscscan.com/address. Backend-Endpoints /api/portfolio, /api/portfolio/snapshots, /api/wallet, /health existieren via Pragmatic-Copy. Live-Verify 28.05.2026: Solana hat 19 Snapshots seit Boot, Cash=$1000, Wallet=unconfigured (Paper-Mode bis 6.7).
  12. 6.6.6
    Manual-Buy/Sell + Cool-Down für Solana 2026-05-29 Decision (analog BSC C.11.1, Phase 4.4b-polish): Manual-Buy-Card wird NICHT für Solana neu eingebaut — der Use-Case ist durch Solana-Discovery (Jupiter-Token-Liste) + Add-by-Address (SPL-Mint Base58) abgedeckt. Manual-Sell via Close-Button in der Token-Row ist bereits chain-aware (_closePosition(chain, symbol) → POST /api/dashboard/trader/${chain}/control/close-position). Manual-Close-Cool-Down (MANUAL_CLOSE_COOLDOWN_S=300s in trader-solana/app/loop.py, identisch zu BSC via Pragmatic-Copy) blockiert strategy-getriggerten Re-Buy nach manuellem Close für beide Chains symmetrisch. Strategy-Labels "Manueller Kauf" / "Manueller Verkauf" sind chain-agnostisch (STRATEGY_LABELS-Dict). Backend-Endpoints /api/control/manual-buy, /close-position, /kill-switch existieren via Pragmatic-Copy. Live-Verify 28.05.2026: trader-solana MANUAL_CLOSE_COOLDOWN_S=300s bestätigt. Cool-Down-Status-Indicator in Token-Row als optionales UI-Polish in 6.6.7 oder Phase 4.4c.
  13. 6.6.8
    Solana Worker-Subtab nachschieben 2026-05-29 Bugfix für Phase 6.4 — der Worker-Subtab fehlte im Solana-Panel. Jetzt 1:1 Spiegel des BSC-Worker-Subpanels (5 Cards: Status · Token-Drift · Cache-Statistik · Candle-Storage · Letzter Tick) mit data-worker-name="solana". Backend: worker_proxy.py _WORKER_TO_ATTR um "solana" erweitert, config.py worker_solana_url default http://cm-worker-prices-solana:8000. JS: _CHAIN_TO_WORKER mit {bsc: 'prices', solana: 'solana'} — Init-Schleife findet den Solana-Worker-Container automatisch. Live-Verify: Worker-Solana /api/status antwortet HTTP 200, tick_count > 2000.
  14. 6.6.7
    Trader-Card Live-Header + Disabled-Banner 2026-05-29 Solana-Trader-Card im panel-solana-Header mit Live-Stats (Mode-Pill PAPER/REAL · Cash · offene Positionen · konfigurierte Tokens), Disabled-Tokens-Banner (amber Pille mit ⚠ + Liste pausierter Symbols pro paused_reason), Top-Tooltip am Mode-Pill mit Erklärung des aktuellen Trader-Modus. Live-Refresh via cm:portfolio-refreshed-Event (von _refreshTokens gefired mit chain-Detail) — Header aktualisiert synchron zum Portfolio-Refresh-Cycle ohne separaten Polling-Loop. CSS: --purple-Variante .solana-mode-pill[data-mode="real"] (Solana-Brand-Farbe #9945ff) + .solana-control-card__banner (Amber-soft mit Border-Left). Backend nutzt /portfolio + /live-tokens + /health via Dashboard-Proxy (chain-aware seit Phase 3.6.4d). Full Real-Mode-Setup (Mode-Toggle, Kill-Switch, Pause-Button, Wallet-Card mit SOL-Balance + Solscan-Link, Seed-Tool) kommt erst mit Phase 6.7 (trader-solana-real + Wallet-Encryption) — hier beschränkt auf Paper-Mode-Header.
  15. 6.7a
    JupiterPriceAdapter + JupiterCandleAdapter 2026-05-29 Provider-Module für Solana-Quotes + Candles. shared/price_feed/jupiter_price.py mit zwei Adaptern: JupiterPriceAdapter nutzt Jupiter Lite-Price-API v3 (lite-api.jup.ag/price/v3) für USD-Spot-Preise + 24h-Änderung (Batch bis 100 Mints pro Request). JupiterCandleAdapter nutzt Jupiter Datapi v2 (datapi.jup.ag/v2/charts/{mint}) für echte OHLCV-Candles in allen TFs (5m bis 1d, max 500 Candles/Request). Beide haben Token-Bucket-Rate-Limiter (10 RPS / 600 Burst), Circuit-Breaker (3 Fails / 60s → 5min Cooldown), RateLimitError/ProviderError-Hierarchie. Token-Dataclass um address-Feld erweitert (Backward-compat, default None). 17 Unit-Tests grün + Live-Verify gegen echte Jupiter-API: SOL=$81.74, BONK=$0.0000054, 5 Candles SOL/15m geliefert.
  16. 6.7b
    Worker-Solana auf Jupiter umstellen 2026-05-29 Provider-Bootstrap chain-aware in worker-prices/app/main.py + trader-bsc/app/main.py: WORKER_NAME==solana / TRADER_NAME==solana → primary=JupiterProvider, fallback=CoinGecko (für Sentiment-Calls). BSC bleibt unverändert (Binance+CG). JupiterProvider-Klasse bündelt JupiterPriceAdapter + JupiterCandleAdapter als Provider-Protocol-konformes Objekt. Worker-poller _register_dynamic_tokens chain-aware: bei Solana wird SPL-Mint-Adresse aus Redis-Jupiter-Cache (discovery:jupiter:tokens:v2) aufgelöst und ans register_token() mitgegeben. Token-Dataclass schon in 6.7a um address-Feld erweitert. Live-Verify 28.05.2026 mit SOL+BONK manuell in worker.db gesät: tick #4 quotes 2/2 (0 stale), candles ok=4 fail=0. DB-State: SOL/15m=195 Bars, SOL/1h=139 Bars, BONK/15m=120 Bars, BONK/1h=120 Bars. Solana-Memecoin-Pipeline endlich funktional.
  17. 6.6.9
    UI-Polish-Bündel + Audit-Fixes 2026-05-29 Trailing-SL/TP-Exits werden in der Trades-REASON-Spalte sauber gemappt, SL/TP-Spalte bricht nicht mehr um, Solana-Card Disabled-Banner raus + FARTCOIN-Symbol-Umbruch gefixt, Solana-Stats mittig im Card-Header (BSC-Real-Position). Tooltips durchgängig auf Klartext via data-tooltip (statt title-Attribut), P/L-Tooltips verständlich (Brutto/Netto-Jargon raus). Audit-Fixes: F1 (Solana manuelles Add-by-Address sauber abgefangen), F3 (defensiver Guard gegen nicht-positive Position-Size).
  18. 6.6.10
    ADX/DMI + Parabolic SAR + Auto-Switcher-Preset 2026-05-29 Zwei neue Trendfolge-Strategien (adx, psar) in der STRATEGY_REGISTRY — jetzt 18 Strategien. Beide im Auto-Switcher-Trend-Regime-Preset aktiv (der Switcher misst ADX selbst → laufen nur in echten Trends). Frontend-Labels (STRATEGY_LABELS) + Backend-Display-Names ergänzt.
  19. 6.6.11
    Telegram-Trade-Open + Min-Movement-Filter 2026-05-29 Schema v23: Telegram-Notification auch bei Trade-ERÖFFNUNG (nicht nur -Schließung), inkl. Solana-Telegram-Card + korrektem Trader-Label. Schema v24: Mindest-Bewegungs-Filter gegen Fee-Bleed auf flachen Tokens (VWAP/Stoch-RSI auf <0.05%-Range-Tokens verloren nur die Roundtrip-Gebühr). Telegram-Close zeigt jetzt Netto inkl. Gas + Aufschlüsselung.
  20. 6.6.12
    Strategy-Label-Drift-Guard 2026-05-29 Test erzwingt: JEDE Strategie aus der STRATEGY_REGISTRY hat ein ausgeschriebenes Label in der Frontend-Map (STRATEGY_LABELS, dashboard.js) UND in der Backend-Map (_STRATEGY_DISPLAY_NAMES, api.py) — keine rohe Code-ID mehr im UI. Reines File-Parsing, kein fastapi nötig.
  21. 6.7c
    trader-solana-real + Wallet-Encryption 2026-05-29 Implementierung fertig (S.2–S.9); Live-Dust-Trade (S.10) ausstehend, läuft unter 6.8. Real-Container cm-trader-solana-real auf :6012 (TRADER_MODE=real); main.py wählt chain-aware den SolanaRealExecutor: Jupiter-Quote → Slippage-Gate → Ed25519-Sign (solders) → Helius sendTransaction + confirm → portfolio_db.fill, Gas in SOL. Ed25519-Wallet Fernet-encrypted mit dem GLEICHEN Master-Key wie BSC. Chain-aware Wallet-Schema v25 + token_settings.solana_mint v26. Helius-RPC DB-driven (chain-aware Test via getHealth). Mockbare Jupiter/Helius-Clients, ~110 Host-Tests grün.
  22. 6.7d
    Phantom-Wallet anlegen + im Dashboard einbinden 2026-05-29 Implementierung fertig. Wiki-Guide solana-trader/wallet-phantom-einrichten (dediziertes Phantom-Wallet → Base58-Key exportieren → einbinden; NIE das Hauptwallet). Dashboard-Settings-Subtab mit drei Cards: Wallet-Card (Base58-Import, Adresse serverseitig abgeleitet, SOL-Balance + Solscan, Entfernen), RPC-Config-Card (Helius testen/speichern), Real-Modus-Toggle (Preflight-Checks Wallet/RPC/Daily-Loss + Phrase 'SOLANA REAL JA'). Paper↔Real-Routing via solana_active_container (BSC-Parität); Discovery-Add persistiert den SPL-Mint. Headless-Bot signiert serverseitig → bewusst Key-Import statt Live-Phantom-Connect.
  23. 6.7e
    Exit-Logik + Solana-Fee-Parität 2026-05-30 SL/TP=0 = deaktiviert + per-Token 'Strategie-SELL ignorieren' (Schema v27). Solana-Fee-Parität zu BSC: Tx-Fee-Capture (commitment=confirmed + Retry), Fee + Trade-Count im Solana-Trader-Card-Header, echter Swap-Preis (Spread/Impact) in der Real-P/L statt Spot, und eine slippage/impact-basierte 'Trade zu klein'-Warnung (Solana-Pendant zum BSC-Gas-Warner).
  24. 6.8
    Per-Token Solana-Execution-Settings 2026-05-30 Schema v28: real_max_slippage_pct von global-only zu per-Token (chain-agnostisch — BSC + Solana lösen sie pro Trade auf), plus solana_priority_fee_lamports (0=auto) und solana_dynamic_compute_unit_limit (Jupiter-Swap-Knöpfe), je global + per-Token. UI: 3 Felder im Token-Modal (Solana-gated für die Exec-Knöpfe) + Priority-Fee in der globalen Solana-Card. Live-Real-Trades liefen bereits (S.10-Dust-Trade-Ziel faktisch erfüllt).
Repo zum Closeout
49 Ordner
542 Dateien
201.477 Code-Zeilen
Phase 7 v0.7.0 ✓ done

Copy-Trader

Eigenständiger Copy-Trader (Solana, Real-only): findet Smart-Wallets über einen eigenen GMGN-Scout (Smart-Money-Scanner) und spiegelt sie via Helius-Enhanced-Webhook. 100% getrenntes Modul (eigene copy.db), On-Add-Wallet-Analyse, Beobachten-Stufe vor Live, Mirror + eigenes Risk-Net. Re-Plan abgeschlossen (Design: SPEC-PHASE-7-COPY.md). ABGESCHLOSSEN 08.06.2026 (copy.db v48).

  1. 7.1
    Standalone-Skeleton 2026-05-30 Eigenständiges `services/trader-copy/` auf 127.0.0.1:6003, eigene copy.db (Schema v1), eigener Solana/Helius/Jupiter-Stack, Health. Real-only.
  2. 7.2
    Dashboard-IA + Status-Pills 2026-05-30 Strategien-Tab aus Hauptmenü → aus BSC/Solana verlinkt. Copy-Live-Status-Pill (trader:copy:heartbeat), Sniper als grauer Platzhalter.
  3. 7.3a
    Wallet-Management + Helius-Config + UI 2026-05-30 Manuelles Hinzufügen per Adresse, Wallet-CRUD + per-Wallet-Settings, verschlüsselter Helius-API-Key, Copy-Tab im BSC/Solana-Trader-Shell-Design (Subtabs + Edit-Modal). Pause/Resume.
  4. 7.3b
    Analyse-Engine 2026-05-30 On-Add-Analyse via Helius (PnL, Win-Rate, Haltedauer, Rug-/Pump-Dump-Muster) → Score-Karte + Verdikt vor dem Hinzufügen.
  5. 7.3b.3
    GMGN-Scout + Smart-Money-Scanner 2026-05-31 Eigener, isolierter GMGN-Scout (interne JSON-API via curl_cffi, kein Headless-Browser, discovery-only) + dedizierter Scanner-Sub-Tab: GMGN-Smart-Money-Bestenliste mit laienverständlicher Vorbewertung (Phishing-Check, PnL-Verteilung, Airdrop-Erkennung), Cache pro Filter-Kombi (0 Requests beim Filterwechsel) + Hintergrund-Wallet-Prüfung. (Zwischenschritt 7.3b.2 Helius-Token-Discovery wieder zurückgebaut.)
  6. 7.4
    Beobachten-Stufe 2026-05-31 Observing-Wallets werden automatisch beobachtet (Helius-Polling, Intervall einstellbar): Trades werden simuliert ins shadow_log geloggt — inkl. adversiver Slippage + Swap-Gebühren für realistische sim-PnL. Live ab Startpunkt (kein Backfill), manuell auf Live freischaltbar.
  7. 7.5
    Helius-WebSocket-Ingestion 2026-05-31 Outbound-WebSocket zu Helius (logsSubscribe pro Observing-Wallet) → kein öffentlicher Ingress nötig (löst SPEC §11). Event = Echtzeit-Trigger: pollt die Wallet sofort statt aufs Timer-Intervall zu warten; Auto-Reconnect; Polling bleibt Fallback. Bewertung zum echten DexScreener-Marktpreis.
  8. 7.5b
    Paper-Modus (gemeinsames Fake-Guthaben) 2026-05-31 EIN Paper-Konto (frei wählbares Start-Guthaben) spiegelt alle Beobachten-Wallets wie die spätere echte Wallet. Cash + offene Positionen (Live-Preis) + realisierte/unrealisierte P/L + ROI, sauber aus dem Trade-Log abgeleitet. Buys aufs Cash gedeckelt. Portfolio-Tab + Wallet-Wert in der Haupt-Card. Kein echtes Geld. (copy.db ab v10, aktuell v13)
  9. 7.5b.1
    Aufräumen (Audit-Reste) 2026-06-01 Bereinigungen aus dem Komplett-Audit: Daily-Loss-Chip BSC↔Solana konsistent (rotes ❌ wenn aus); totes observe_poll_interval_s/poll_interval_s entfernt; Wiki korrigiert (erfundenes use_env-Gate; Copy als WebSocket statt Webhook); Test-Schulden (pytest-httpx-Pin, stale default-tokens-Assert); Test-Count-Drift auf pytest standardisiert. Reine Kosmetik (bnb_*-Label) bewusst deferred. (WS-Stille-Pill wurde NICHT deferred, sondern im UI-Cleanup-Pass 7.8a gebaut.)
  10. 7.5b.2
    Keystore-Zentralisierung (Keys/APIs/Wallets) 2026-06-02 Alle Keys/APIs/RPC/Telegram/Wallets in EINEN Fernet-keystore.db (read-only-Mount, dashboard-verwaltet, Globale-Settings-Seite 'Schlüssel & APIs'). Migration risikogeordnet A–G + Phase F (Wallets, echtes Geld, ZULETZT). Trader lesen keystore-first (Legacy nur Fallback). STAND 02.06.: KOMPLETT. A–G (CoinGecko/Helius/RPC/Telegram keystore-first, 'alles global' inkl. Token/Chat zentral + per-Modul-Toggles, Preflight-Gate keystore-aware, httpx-Log-Leak-Fix) PLUS Phase-F-Cutover (BSC+Solana symmetrisch): Wallet-Store mit mehreren benannten Wallets/Chain (aktiv schaltbar), BSC auch per Seed-Phrase (Trust Wallet); per-Trader-Wallet-/RPC-Setup-UI + Seed-Tool-Modal entfernt; Legacy portfolio.db.wallet + network_config geleert (mit Backup); Execution (_get_account/_get_keypair), Monitoring (/api/wallet) und Preflight keystore-first entkoppelt (gleicher Adress-Selbstkonsistenz-Gate). Inkl. Dead-Code-Cleanup der verwaisten Setup-JS/CSS (~945 JS + ~340 CSS Zeilen). Copy-Trader bleibt im Code isoliert. Design + Stand: docs/SPEC-KEYSTORE.md.
  11. 7.5b.3
    deploy.sh go-real-Host-Helfer Host-Befehl (z.B. `./deploy.sh go-real bsc`): Mode-Switch auf Real + zugehörigen Paper-Container stoppen (BSC/Solana). Analog `go-paper` zurück. Aus der App heraus nicht möglich (kein Docker-Socket, bewusst).
  12. 7.5c
    Eigenes Risk-Net (SL/TP/Trailing) 2026-06-02 Stop-Loss, Take-Profit und Trailing-Stop pro Copy-Position, unabhängig vom Quell-Sell — „was zuerst triggert, gewinnt". Greift schon im Paper-Modus (DexScreener-Preise, Geisterpreis-Gate), damit es live sofort sauber greift. STAND 02.06.: KOMPLETT (A reine Engine risk.py + Schema v15 + Config-Resolver; B Poll-Loop risk_runner über gehaltene Positionen mit HWM-Tracking + Exit über den Shadow-Sell-Pfad + Dedup via _POLL_LOCK; C UI im Copy-Tab — globale Risk-Card + Per-Wallet-Overrides + eigene Telegram-Kategorie „Risk-Exit" (Schema v16)). Config pro Wallet (leer=Default), Default aus. Copy bleibt isoliert (kein services/shared). Nachgezogen (03.06., Schema v18): konfigurierbare Trailing-Aktivierungs-Schwelle (Trailing armt erst ab +X% Gewinn statt sofort) — global + per Wallet, mit ⓘ-Tooltip.
  13. 7.5d
    Wallet-Beobachtungs-Statistiken 2026-06-02 Per-Wallet-Performance aus der Paper-Spiegelung (Win-Rate PRO ROUND-TRIP, Ø-PnL, Ø-ROI, Ø-Hold-Zeit, Trade-Count, offene Positionen, Bestes/Schlechtestes, max. Drawdown, kum-PnL-Trend) als Entscheidungsgrundlage 'welche Wallet live schalten'. STAND 02.06.: KOMPLETT (A reine Engine wallet_stats.py - FIFO-Round-Trips aus shadow_log, realisierte P/L verbatim aus sim_outcome_json; B API GET /api/copy/wallets/stats + /{address}/stats + Proxy; C UI - 'Statistiken'-Modal pro Wallet mit Metrik-Kacheln + Trend-Sparkline + Wiki). Live verifiziert (z.B. 'Testo' 60 Trades / 78% WR / +465 USD). Kein echtes Geld. Copy bleibt isoliert.
  14. 7.5e
    Genauigkeits-Gate 2026-05-31 VOR Echtgeld: sichert, dass die Dashboard-Zahlen stimmen. (A) On-Chain-Reconciliation (getTokenAccountsByOwner vs. rekonstruierte Position, Divergenz flaggen), (B) Pricing-Qualität (illiquide/tote Token → K.A. statt Geisterpreis, SOL-Preis-is_live kennzeichnen), (C) Diagnose-/Qualitäts-Panel (keine-Position-Sells, cash-gecappte Buys, Token→Token-verworfen, unbewertbar, letzter Reconcile).
  15. 7.5e.1
    Audit-Korrektheits-Fixes (01.06.) 2026-06-01 Drei vom Komplett-Audit 01.06. ausgelöste Korrektheits-Fixes: (1) Copy-Paper Token→Token-Sell schließt jetzt die Shadow-Position (kein Phantom-Equity mehr); (2) Real-Trader Gas-USD zum Fill-Zeitpunkt festgeschrieben (orders.gas_cost_usd, Schema v30, BSC+Solana) statt live nachgerechnet → Gas-Card + Netto-P/L schwanken nicht mehr mit dem BNB/SOL-Preis (realisierte P/L war bereits gelockt); (3) Copy-UI rendert die Wallet-Liste nach einem Paper-Reset neu (keine stehengebliebenen Reconcile-Pills).
  16. 7.5f
    Wallet-Bibliothek (Goldstücke archivieren) 2026-06-02 Archiv bewährter Copy-Wallets, unabhängig von der aktiven Beobachtungsliste: per '★ Speichern' im Statistiken-Modal wird eine Wallet samt 7.5d-Stats-Snapshot (Win-Rate/P/L/Trade-Count zum Speicher-Zeitpunkt) in copy.db (Schema v17, Tabelle wallet_library) abgelegt; eigene 'Bibliothek'-Sub-Tab listet die Goldstücke mit Notiz + Datum und holt sie 1-Klick zurück (immer als 'observing') oder entfernt sie. API GET/POST/DELETE /api/copy/library + /{address}/readd + Proxy. Wiki copy-trader/wallet-bibliothek. STAND 02.06.: KOMPLETT. Kein echtes Geld, Copy bleibt isoliert.
  17. 7.5g
    Wallet-Nachfolger-Tracking ('follow the funds') 2026-06-02 Wenn eine beobachtete Wallet gewechselt wird, schickt der Besitzer sein SOL meist an eine neue Adresse. Manueller 'Nachfolger suchen'-Knopf pro Wallet scannt die jüngsten ausgehenden SOL-Transfers (Helius type=TRANSFER), aggregiert die Ziele nach ausgeflossenem SOL und rankt die Kandidaten. Pro Kandidat: 'analysieren' (On-Add-Score-Analyse) + '+ beobachten' (als observing). Heuristik mit ehrlichen Grenzen (Split/Zwischen-Wallet/CEX = Sackgasse, Vorschlag + manuelle Bestaetigung). Engine successor.py (rein, testbar) + helius_data.fetch_transfers; API GET /api/copy/wallets/{address}/successors (5-min-Cache, Enhanced-API 100 Credits) + Proxy; Modal-UI + Wiki copy-trader/wallet-nachfolger. STAND 02.06.: KOMPLETT. Kein echtes Geld.
  18. 7.5h
    Hot-Path-RPC konfigurierbar (ANKR) + Origin-Whitelist + RPC-Test 2026-06-03 Der Copy-Observer-Hot-Path (Standard-RPC getTransaction/getSignaturesForAddress/getTokenAccountsByOwner + WebSocket logsSubscribe) ist auf eine eigene Solana-RPC umstellbar (z.B. ANKR), um das Helius-Credit-Limit zu entlasten; Helius bleibt NUR für die einmalige On-Add-Enhanced-Analyse. Schema v19 (helius_rpc_url_enc verschlüsselt + helius_rpc_origin Klartext). Da Server-Calls keinen Browser-Origin tragen, würde eine ANKR-Domain-Whitelist sie mit 403 ablehnen — der konfigurierte Origin/Domain-Wert (z.B. die DuckDNS-Domain) wird als Origin/Referer (RPC) bzw. origin= (WS-Handshake) mitgesendet. 'RPC testen'-Button (getSlot). WICHTIG: ANKRs Solana-RPC liegt unter /solana/<key>, NICHT /multichain/<key> (Letzteres -32601 auf jede Solana-Methode). Leer = Helius-Default (null Regression). Copy bleibt isoliert.
  19. 7.5i
    Ehrliche „Zuletzt aktiv" (last_active_ts-Backfill) 2026-06-03 Die Wallet-Liste zeigte last_seen_ts als „Zuletzt aktiv", das aber auch den Baseline-Marker enthält (beim ersten Poll auf now gesetzt) → frisch hinzugefügte Wallets wirkten „gerade aktiv", obwohl der letzte echte Trade Tage zurücklag. Neue Spalte mirror_wallets.last_active_ts (Schema v20) rückt AUSSCHLIESSLICH bei echten Trades vor (nie auf now) und wird beim Hinzufügen aus der On-Add-Analyse (last_active_ts, 0 Extra-Credits) vorbelegt. UI zeigt last_active_ts mit Fallback last_seen_ts (Alt-Wallets heilen beim nächsten Trade). Das Mirror-Gating von last_seen_ts bleibt unangetastet. Copy bleibt isoliert.
  20. 7.5j
    Trailing-Härtung (Break-Even / Stufen / Fast-Lane) 2026-06-03 Drei Verbesserungen am Copy-Trailing (Paper, vor 7.6). (A) Adaptive Fast-Lane: der Risk-Tick prüft gehaltene Positionen alle 15 s (statt 60 s), wenn etwas offen ist — verkleinert die Erkennungslücke, durch die ein schneller Memecoin-Dump zwischen zwei Ticks am Trigger vorbei zum Crash-Preis verkaufte. (1) Break-Even-Boden (risk_trailing_breakeven, Default AN): ein armiertes Trailing schließt nie unter dem Einstand (trigger = max(hwm×(1−trail%), avg_cost)) — schließt die strukturelle Lücke „Aktivierung < Trailing". (3) Stufen-Trailing (risk_trailing_tiered, Default AN): die Rückgabe-Schwelle wird enger, je höher der Peak-Gewinn stand (Basis → ×0.6 ab +50 % → ×0.4 ab +100 %) → sichert große Runs besser. Schema v21, risk.py-Engine + globale Toggles (UI Risk-Card). Stop-Loss bewusst aus. Copy bleibt isoliert.
  21. 7.5k
    Pre-Real-Fixes (Real-Equity-Snapshots, Format, UI) 2026-06-03 Sammlung aus der Pre-Real-Durchsicht. WICHTIG: Real-Trader-Equity-Fix (BSC+Solana) — der Equity-Verlauf (portfolio_snapshots) kam im Real-Modus aus dem PAPER-Buch (fiktives 1000-USD-Notional), losgelöst vom On-Chain-Wallet, während die Portfolio-Card korrekt das echte Wallet zeigte; der Snapshot-Tick baut jetzt im Real-Modus dasselbe On-Chain-Portfolio wie die Card (build_real_portfolio_sync in app.real_portfolio_build, zirkular-frei), Build-Fehler überspringen den Tick statt Paper zu schreiben — Max-Drawdown dadurch automatisch korrekt; pct_cash-Sizing im Real-Modus abgesichert. UI/Format: Risk-Exit-Preis lesbar (kein 5.841e-05), Tooltip-Overflow bei langen Adressen, pausierte Wallet im BSC-Gradient-Style, RPC-Provider-Chip im Copy-Header („RPC · ANKR"/„RPC · HELIUS", immer sichtbar) mit klaren Tooltips zur Hot-Path-vs-On-Add-Aufteilung.
  22. 7.5l
    Telegram-Politur (Deutsch + Markdown-Bug-Fix) 2026-06-03 Telegram-Bot-Text kann keine Farben (nur Bold/Italic/Code + Emoji), daher: #4 Daily zeigt 'Tagesgewinn (24 h)', #5 die emoji-codierte Typ-Zeile fuehrt die Handy-Vorschau (Quell-/Zeit-Header wird zur Fusszeile), #6 positive/negative Werte gruen/rot. ECHTER BUG dabei gefunden: legacy 'Markdown' kennt kein Backslash-Escaping; ein einzelnes '_' im rohen Strategie-Reason (rsi_oversold, macd_cross ...) liess jede 'Trade opened/closed'-Meldung mit HTTP 400 STILL VERLOREN gehen. Fix _md_clean (Sonderzeichen bereinigen) + deutsche Maps (error_reason zu 'Slippage ueberschritten' usw., side Kauf/Verkauf, gaengige Signal-Begriffe deutsch + Title-Case), freundliche Container-Labels ('Solana Trader Real'). Copy-Symbole/Labels ebenfalls bereinigt; Feed-Meldung nennt den WS-Provider. CODEMAP Stolperer #55.
  23. 7.5m
    Copy-Robustheit (Standard-Groesse, Auto-Fallback, Rebuy) 2026-06-03 Drei Robustheits-Punkte aus dem Live-Betrieb. (1) Globale Standard-Positionsgroesse (copy.db v22, default_fixed_usd, Default $2): Wallets ohne eigene Groesse (ueber Scout/Bibliothek/Nachfolger, fixed_usd_amount NULL) hatten Buy-Groesse 0, jeder Spiegel-Buy wurde irrefuehrend als 'insufficient_cash' uebersprungen (Cash war voll da); jetzt Default beim Hinzufuegen + Fallback in buy_size_usd (NULL/0 -> Default), UI-Feld 'Neue Wallets auf [2] $'. (2) Auto-Fallback ANKR->Helius (app.rpc_fallback): leeres ANKR-Pay-as-you-go-Guthaben -> 'API key disabled' (401/-32051) -> WS+RPC tot; jetzt erkennt der WS den Auth-Fehler, schaltet mit 10-min-Cooldown auf die Helius-Default-RPC um (Observer-RPC folgt), erfolgreicher ANKR-Connect hebt den Fallback auf; Header-Chip dritter Zustand 'FALLBACK · HELIUS' (amber). (3) Rebuy-Markierung: ein Buy bei BESTEHENDER Position (Aufstockung/DCA) wird im Shadow-Feed ('REBUY') + Telegram ('Gespiegelter Rebuy') markiert (frischer Einstieg/Wiedereinstieg zaehlt nicht). Plus: Shadow-Feed zeigt nur echte Trades (Uebersprungene als Zaehler), Zahlenformat ohne e-Notation.
  24. 7.5n
    Pre-Real-Liste (Scanner, manuelles Beenden, Offene-Positionen, WS-Fix) 2026-06-04 Maintainer-Pre-Real-Liste, Paper, 04.06. (1) Scanner #15/#16: beobachtete Wallets zeigen ihr eigenes Label, Sortierung nach Haltedauer + Zuletzt-aktiv plus Aktivitaets-Zeile — die Werte lagen schon im GMGN-Leaderboard, enrich_candidate reichte avg_hold_s/last_active nur nicht durch. (2) Manuelles Beenden #9: POST /api/copy/shadow/close verkauft eine offene Paper-Position voll zum aktuellen Marktpreis (exit_reason manual_close), unter dem Observer-Lock, mit Geisterpreis-Gate (K.A./illiquide nicht beendbar — keine erfundene P/L); Portfolio-Button plus Feed-Tag fuer eigene Sells. STOLPERER (CODEMAP 56): der Dashboard-Proxy ist eine explizite Allowlist, ein neuer Copy-Endpoint braucht zusaetzlich eine Proxy-Route, sonst 404 im Browser. (3) K.A.-Declutter: unbewertbare Positionen in eigenem aufklappbaren Abschnitt mit gelbem Badge plus Grund, nichts gebucht (Equity bleibt ehrlich); das Abschreiben als Totalverlust ist bewusst aufs Backlog vor 7.6 verschoben (muss vollen Kosten-Verlust realisieren, nie realisiert 0). (4) Offene-Positionen-Tabelle: Spalten Eroeffnet (opened_ts) + Token-Alter (pair_created_at aus DexScreener), klickbarer Chart-Link, Header-Tooltips, breitere Menge-Spalte. (5) WS-Feed-Abriss-Fix: ws_listener.resync riss bei jedem Wallet-Toggle die ganze WebSocket-Verbindung ab; jetzt inkrementelles logsSubscribe/logsUnsubscribe auf derselben Verbindung (kein Reconnect, kein Feed-Loch). Plus Quick Wins (Fee zu Gebuehr, pausierte Wallets ans Listenende). 206 Copy-Tests gruen. Copy bleibt isoliert.
  25. 7.5o
    Pre-Real-Schluss (Tagesstop, Trade-Limit, WS-Alert, Re-Entry-Sperre) 2026-06-04 Restliche Pre-Real-Liste, Paper, 04.06. (copy.db v22 zu v25). #10 Tagesgewinn-Stop (v23): erreicht der heute seit Mitternacht REALISIERTE Gewinn das Ziel, werden neue Kaeufe pausiert bis zur konfigurierbaren Wiederanlauf-Zeit (Default 08:00, Container-Zeit Europe/Berlin) am Folgetag; Verkaeufe und Risk-Exits laufen weiter. 60-s-Scheduler-Loop setzt ein Flag, das der Buy-Zweig liest. #11 Max. gleichzeitige Trades (v24): Limit offener Positionen, neue Einstiege drueber uebersprungen, Aufstockungen (Rebuy) und Verkaeufe frei, 0 = unbegrenzt. #14 WS-Alert-Haertung: die feed_issue-Telegram-Meldung feuert erst bei nachhaltigem Ausfall (Feed mindestens 90 s weg) statt sofort beim ersten Disconnect, kurze Blips loesen nichts mehr aus (plus bestehender 5-Min-Debounce). #17 Re-Entry-Sperre (v25): nach JEDEM eigenen Risk-Exit (Stop-Loss, Take-Profit, Trailing) kein Wiedereinstieg in denselben Token derselben Wallet, bis die Quell-Wallet den Token komplett verkauft hat; eigener src_remaining-Zaehler aus dem rohen source_qty, weil das globale Quell-Tracking nach unserem Exit nicht mehr zaehlt. Alle neuen Buy-Gates stapeln in record_shadow_trade; jeder neue Copy-Endpoint hat eine Proxy-Route im Dashboard (Stolperer 56). 237 Copy-Tests gruen. Copy bleibt isoliert.
  26. 7.5p
    Wunsch-Schwung + Portfolio-Neustarten (Copy + Real, Native-Stack) 2026-06-04 Maintainer-Wunsch-Schwung, 04.06. (1) CT-Equity-Kurve im Portfolio (copy.db v26): 5-Minuten-Snapshot-Loop + GET /paper/snapshots + kompakte SVG-Sparkline. (2) Portfolio-Tooltips an den Kennzahlen aller drei Trader. (3) Tab-Reload-Paritaet BSC/Solana: beim Wechsel auf Trades/Tokens/Portfolio frisch laden statt Lazy-Cache (wie Copy). (4) Performance-Uebersicht Copy: seit Start, Token-Anzahl, durchschn. ROI pro Trade, beste/schlechteste Position. (5) Portfolio neustarten - ein NICHT-destruktiver Performance-Nullpunkt (Zeitstempel + aktueller Gesamtwert), der nichts loescht: Copy (copy.db v27) plus SOL-Sicht (v28, Konto in SOL + Delta SOL seit Neustart), und fuer die echten BSC/Solana-Trader ueber eine ISOLIERTE perf_baseline-Tabelle (shared portfolio_db v32) strikt getrennt vom Reconcile-/Cashflow-System; bewegt kein Geld, loescht keine Trades. Dazu ein Native-Stack-Block 'Native (BNB/SOL) - waechst dein Stack?' im BSC/Solana-Portfolio plus Endpoints GET /api/performance und POST /api/control/perf-restart (Real-only). Live verifiziert, Real-DBs vorher gesichert; die offene BSC-Position blieb intakt. STOLPERER 57/58 (alle Trader teilen trader-bsc/app; Template-Panels nicht zeichengleich). Copy bleibt isoliert.
  27. 7.6a
    Real-Buch-Fundament (Sub-Block 1) 2026-06-04 Erster 7.6-Sub-Block, 04.06. (copy.db v29). Daten- und Lese-Fundament fuer das REAL-Buch des Copy-Traders, strikt getrennt vom Paper-Buch (shadow_log) - bewegt KEIN Geld, kein Executor. Wallet-Modell exklusiv: eine Wallet ist observing (Paper) ODER live (Echtgeld) ODER paused; kein globaler Master-Arm (Maintainer-Entscheidung 04.06.), der per-Wallet-Live-Toggle traegt die Sicherheit. Neue Tabelle real_log (tatsaechliche Fills: qty, price_usd, sol_amount, fee_usd, realized_pnl_usd, tx_signature, exit_reason, outcome_json, token_symbol) mit Unique-Partial-Index auf tx_signature (Doppelbuchungs-Schutz) plus mirror_wallets.live_since_ts (Promotion-Audit). Neues Modul app/real.py: reconstruct_position (kausal ueber real_log), portfolio (realisiert + Per-Quell-Attribution aus real_log, offene Positionen via quote_fn mit demselben K.A.-Geisterpreis-Schutz wie Paper, echte Equity aus On-Chain via onchain_fn statt Paper-Notional, onchain_reconciled=False bis SB2 die Kette anbindet), record_real_trade-Append-Stub (getestet, vom Live-Pfad nicht aufgerufen). 9 neue Tests, Copy-Suite 256 gruen. Live migriert v28 zu v29, Bestandsdaten intakt. Copy bleibt isoliert.
  28. 7.6b
    Real-Executor-Core + Dust-Test (Sub-Block 2a) 2026-06-04 Zweiter 7.6-Sub-Block, 04.06. Isolierter CopyExecutor (eigene Jupiter/Helius-Clients, von services/shared/executors gespiegelt, NICHT importiert - Copy bleibt isoliert). ADR-Konflikt geloest: ADR-real-trade-code-path schreibt services/shared/executors vor; fuer Copy gelten die PRINZIPIEN (polymorpher Executor, Quote-Slippage-Sign-Send-Confirm, DB-nur-bei-Confirm, kein Fake-Fill, Mocks in Tests), nicht der Shared-Pfad. clients/jupiter_client (quote + build_swap, free lite-api.jup.ag) + clients/solana_client (HeliusRpc balances/send/confirm/fee + sign_versioned_tx via solders), synchron + injizierbarer http_client (mockbar). keystore_reader.wallet('copy') liest die DEDIZIERTE Copy-Wallet (eigener Keystore-Eintrag chain='copy', getrennt vom Solana-Real-Trader; base58-64-Byte-Key). settings_repo.get_real_exec_config (max_slippage/priority_fee/safety - Spalten existieren seit Schema v1, KEIN v30 noetig). CopyExecutor.execute_buy(amount_usd, WSOL-mint)/execute_sell(pct, mint-WSOL): voller Flow, Equity aus On-Chain (gemessener Balance-Delta), auf JEDEM Fehler (no_wallet/quote/build/send/price_impact/onchain_revert/not_confirmed/no_fill/no_balance) wird NICHTS ins real_log gebucht. Endpoints POST /api/copy/wallet/derive + POST /api/copy/real/execute-test (manueller Dust-Test, Real-only/409 in Paper, Buy <= 50 USD, Pseudo-Quelle __dust_test__). Dashboard: dedizierte Copy-Wallet-Card unter Schluessel & APIs (chain='copy') + Proxy-Route. Wallet-Modell exklusiv (observing XOR live), KEIN globaler Master-Arm (Maintainer-Entscheidung) - der per-Wallet-Live-Toggle traegt die Sicherheit. KEIN Auto-Trigger: keine live-Wallet feuert autonom, der Executor ist nur ueber den manuellen Dust-Test erreichbar. 19 neue Tests (10 Clients via httpx.MockTransport, 9 Executor mit gefakten Clients), Copy-Suite 276 gruen. Copy bleibt isoliert.
  29. 7.6c
    Go-Live: autonomes Real-Spiegeln (Sub-Block 2b) 2026-06-04 Dritter 7.6-Sub-Block, 04.06. Eine live-Wallet spiegelt ihre Quell-Trades mit ECHTEM Geld ab Trade 1, geschuetzt durchs Risk-Netz. observer._active_wallets (observing+live); _process_one branched per State (live -> live_mirror -> CopyExecutor, observing -> shadow); WS subscribed live mit. Real-Buy-Gates (real_gates: Tagesstop/Reentry/Max-Trades gegen das Real-Buch, Berlin-Mitternacht-Reset) + On-Chain-SOL-Balance im Mirror. Risk-Netz-Real (risk_runner._real_risk_tick ueber real.portfolio -> executor.execute_sell bei SL/TP/Trailing). Promotion observe-live braucht confirm:true (Defense-in-Depth) + setzt live_since_ts; roter cmConfirm-Dialog. Jeder Skip/Fehler bucht NICHTS (Executor bucht nur bei Confirm), Equity aus On-Chain. Default-State observing (Paper). 19 neue Tests (real_gates/live_mirror/observer-branch/risk_real), Copy-Suite gruen. Kein Schema-Change. Copy bleibt isoliert.
  30. 7.6d
    Real-UI: Paper/Live-Trennung + Switches (Sub-Block 4) 2026-06-04 Vierter 7.6-Sub-Block, 04.06. Reine Anzeige, kein neuer Geld-Pfad. GET /api/copy/real (real.portfolio mit On-Chain-onchain_fn -> echte Equity = SOL + bepreiste Real-Positionen, configured/copy_wallet_address) + GET /api/copy/real/log (Live-Mirror-Feed aus real_log, formgleich zu /shadow). Frontend: Wallet-Badges LIVE(rot)/Beobachten/Pausiert (Live-sortiert), Live-Portfolio-Block, Real-Wallet-Zeile in der Haupt-Card, und segmentierte Paper|Live-Switches auf Wallets (State-Filter), Beobachten (/shadow vs /real/log) und Portfolio (CSS data-pf-view, ein Block zur Zeit). executor.native_balance; real.portfolio nutzt native-only-onchain + bepreiste Holdings. Live gegen die echte Copy-Wallet verifiziert (1,6 SOL Equity). OFFEN: Live-Portfolio auf volle Paper-Paritaet (Performance-Card/Equity-Verlauf/volle Positions-Tabelle/P-L-pro-Wallet/Daten-Qualitaet).
  31. 7.6e
    Live-Portfolio-Paritaet + UI-Politur (Sub-Block 5) 2026-06-04 Fuenfter 7.6-Sub-Block, 04.06. (copy.db v30). Das Live-Portfolio zeigt jetzt dieselben Karten wie Paper: voller Stats-Grid, Performance-Card (real.compute_performance ueber real_log, GET /api/copy/real/performance), Equity-Verlauf (neue Tabelle real_equity_snapshots + 5-min-Loop, GET /api/copy/real/snapshots), volle Offene-Positionen-Tabelle (Eroeffnet/Alter/DexScreener), P/L-pro-Wallet, Daten-Qualitaet, Portfolio-Neustarten (real_perf_baseline in v30, POST /api/copy/real/performance/restart). Manuelles Real-Beenden (POST /api/copy/real/close -> execute_sell exit_reason=manual_close). UI-Politur: ALLE Portfolio-Cards (Copy Paper+Live, BSC/Solana portfolio-stats-card) sind native <details>-klappbar mit Ring-Chevron; einheitliche Card-Titel-Hoehe ueber die gemeinsame Cyan-Chip-Regel (Copy 1:1 wie BSC, keine min-height-Hacks); Action-Tooltips haengen an einem (i) daneben statt am Button. Neue Audit-Checks: check_button_tooltip, check_collapsible_cards, check_title_icon_size. Stolperer 60 (data-stop-toggle wuergt Aktions-Button-Handler ab). 302 Copy-Tests gruen, copy.db v30 migriert. Copy bleibt isoliert.
  32. 7.6
    Real-Execution Closeout 7.6 fachlich komplett (Real-Buch, Executor, Auto-Trigger, Real-UI, Live-Portfolio-Paritaet). Offen: formaler 7.6-Closeout (Doku-Sync, Tag-Review) bzw. naechster Sub-Block nach Maintainer-Wunsch.
  33. 7.6-A
    Block A — CT Settings-Architektur Paper/Real 2026-06-05 Alle modus-getrennten Trade-Settings sind Paper/Real-getrennt (Modus = Wallet-State: live->real, sonst paper). copy.db v31->v33: neue mode_settings-Tabelle (Zeile je paper/real) fuer Sizing/Tagesstopp/Max-Trades/Re-Entry/Risk/Telegram-Flags; mirror_wallets sizing_override+risk_override-Toggles; daily_stop_baseline_date. A2 %-Equity-Sizing (Buchwert = Cash+Einstand, kein Pricing; v32-Backfill sizing_override=1 fuer Wallets mit eigener Groesse). A3 %-Tagesstopp + Equity@Tagesbeginn-Baseline. A4/A4b Max-Trades/Re-Entry/Risk per Modus (per-Wallet-Risk via risk_override). A5 Telegram Paper/Real-Flags getrennt (Bot/Chat zentral geteilt), telegram.notify(mode)-Routing. A6 UI: Settings-Paper/Real-Switch, Sizing-/Tagesstopp-Modus-Dropdowns, PAPER/REAL-Modus-Badges in Card-Titeln, Wallet-Edit-Override-Toggles, copy/paper-Telegram-Card. Default ueberall Fix-USD/USD -> kein Verhaltenswechsel; %-Modi opt-in. Spec: docs/SPEC-BLOCK-A-SETTINGS.md. 344 Copy-Tests, copy.db v33. Stolperer 63 (Observer-Loader muessen Override-Spalten mit-SELECTen).
  34. 7.6-RECO
    Copy-Real-Reconciliation (Sekunden-Flipper spiegelbar) 2026-06-05 Damit eine schnell flippende Quell-Wallet ohne Stuck-Positionen real spiegelbar ist. Block 0 (copy.db v36): einheitliches Quell-Positions-Tracking auch fuer live-Wallets - source_trades-Tabelle (append-only, alle Wallets, Backfill aus shadow_log) + Modul source_pos (record/reconstruct/peak); observer schreibt jeden Quell-Trade rein + berechnet source_pct daraus (live-Teilverkaeufe proportional statt 100%), Reentry wirkt fuer live. Block 1 (v37): proportionale Reconciliation in risk_runner - Real-Menge folgt dem Quell-Anteil (ziel = our_peak*(src_now/src_peak)), Ueberschuss verkaufen (nie nachkaufen), Quelle raus -> Voll-Exit; abgelehnter Spiegel-Sell wird jeden Risk-Tick neu versucht (Gratis-Retry); position_hwm-Tabelle; src_peak aus der Quell-Historie (fast-flip-robust, Stolperer 68). Block 2 (v38): Exit-Sicherheitsventil - Exit-Impact 25% + Exit-Slippage 3% nur fuer Sells (Buys streng), Executor-Gate-Split; Slippage-Einheiten-Fix (Stolperer 66: _slippage_bps war x10000 -> 1% Entry-Slippage ging als 100% an Jupiter -> jetzt x100). UI: Real-Ausfuehrung-Card mit Buy-Impact/Exit-Impact/Exit-Slippage. Live verifiziert (Auto-Rescue gestrandeter Positionen). Spec: docs/SPEC-COPY-REAL-RECONCILE.md. 368 Copy-Tests, copy.db v38.
  35. 7.6-UI
    Copy-Trader UI-Politur + Mobile-Cards + Telegram-Format 2026-06-06 Tab-fuer-Tab UI-Audit + Mobile-Pass ueber den ganzen Copy-Trader (06.06.), plus eine Telegram-Nachrichten-Ueberarbeitung. UI: jeder Tab (Wallets/Scanner/Beobachten/Portfolio) auf das Design-System gebracht - Cyan-Chip-Titel mit dem (i) AUSSERHALB des Chips (card-title-group), native title= -> data-tooltip, neuer Audit-Check check_th_title. Mobile (Design-System Paragraph 10): statt horizontal scrollender/gestauchter Grids echte beschriftete Cards - Wallets-Card (2x2-Metrik-Grid), Scanner-Cards (+ einklappbare Filter-Leiste, eingeklappt gestartet), Beobachten-Feed-Cards, Portfolio-Positions-/Wallet-Tabellen als data-label-Cards (Header ausgeblendet). Alle Copy-Breakpoints auf 900px vereinheitlicht (BSC/Solana-Standard, deckt iPad-Portrait). Sizing-Spalte zeigt 'Global' wenn kein Wallet-Override (Anzeige-Bug: effektiv galt schon der mode_settings-Default). Scanner 'GMGN neu laden' = echter Voll-Rebuild: force-refresht das walletNew-Detail JEDER Wallet der Liste (nicht nur ungeprueft), + enrich_candidate last_active aus dem Detail (Liste == Modal). Refactor: die in renderLive (Real) und renderPortfolio (Paper) duplizierten Positions-/Wallet-Tabellen in geteilte Builder zusammengefuehrt. Beobachten-Titel-Bug (Live-Feed zeigte faelschlich 'kein echtes Geld') gefixt. Telegram (Copy): _fmt_qty gegen wissenschaftliche Notation (Live-Meldung sendete '4.747e+05'), mehrzeilige Live-Meldung wie der Paper-Feed, Label Markdown-sicher ge-cleant, und Risk-Exit/Reconcile/Tageszusammenfassung von kombinierten ·-Zeilen auf einen-Wert-pro-Zeile mit Emoji-Praefix umgestellt (Maintainer-Wunsch: alles untereinander, sauber). Wallet-Roster bereinigt (2 schwache raus, 2 phishing-geprueft-saubere rein), Paper-Konto auf 100 USD frisch.
  36. 7.6-CMP
    Equity-Komponente (BSC-Modell) + Paper-vs-Real-Vergleich 2026-06-06 06.06., copy.db v38->v39. (A) Equity-Kurve: der Copy-Trader nutzt jetzt DIESELBE Equity-Komponente wie BSC/Solana - Zeitraum-Pills (1H..Alltime), grosse %-Performance + USD-Delta + zentrierte Perf-Leiste, hohe gefuellte Sparkline mit Min/Max-Markern. In copy.js mit den BSC-CSS-Klassen (portfolio-panel__*) nachgebaut (kein neues CSS), Range-Filter/Downsampling client-seitig; ein Renderer fuer Paper + Live. Sparkline-Hoehe fuer ALLE Trader erhoeht (80->150px Desktop, 80->120px Mobile, gemeinsame Klasse). (B) Paper-vs-Real-Datenqualitaets-Vergleich, um den Paper-Modus zu kalibrieren: eine live-Wallet kann zusaetzlich paper-mitgeschrieben werden. Block 1 (v39): mirror_wallets.compare_shadow-Flag + separate compare_log-Tabelle (getrennt vom echten Paper-Buch). Block 2: compare.py schreibt zu jedem echten Trade die Paper-Simulation nach compare_log (eigene compare-Position, keine Gates, bewegt kein Geld, zaehlt nicht im Paper-Konto); reconstruct_position kriegt einen table-Param. Block 3: GET /api/copy/compare matched real_log<->compare_log je Trade (Fill-Preis/Gebuehr/PnL Paper vs. Real) + Aggregat + Klartext-Kalibrier-Hinweis; Toggle im Wallet-Edit; 'Datenqualitaet: Paper vs. Real'-Card im Live-Portfolio. Stolperer: das Toggle muss im PATCH-Body-Model stehen (sonst still verworfen). 374 Copy-Tests gruen, copy.db v39. Echtes Geld unberuehrt (nur live_mirror fuehrt aus); Vergleichs-Schatten ist reine Aufzeichnung, Default aus.
  37. 7.7
    Eventuell — Abusive-Wallet-Detection EVENTUELL (Maintainer-Entscheidung 04.06., kein Commitment): Honeypot-/Wash-/Sandwich-Muster mit Auto-Pause auffälliger Wallets.
  38. 7.8a
    Telegram-Copy + UI-Cleanup-Pass (vorgezogen) 2026-06-01 Aus 7.8 vorgezogen + Maintainer-UX-Paket (01.06.): Telegram im Copy-Trader isoliert (copy.db v14, Fernet-Token, /api/copy/settings + Test-Endpoint, 4 Events mirrored_trade/daily_summary/wallet_live/feed_issue) mit strukturierter Mirror-Nachricht (Token, Wallet+echtes Label, Einsatz/P-L, Wallet-Stand via paper.standing() ohne Live-Pricing); Exit-/Steuer-Gründe in Klartext-Deutsch (humanize_reason). UI-Cleanup über alle drei Trader: WS-Status-Pill + Stille-Schwelle, Chip-Symmetrie (Aktiv + Quick-Status + WS), Scanner-Highlight beobachteter Wallets (BSC-Disabled-Optik + Badge + gesperrter Übernehmen-Button), Add-Form einklappbar + Add→Analyse→Bestätigen-Modal, eigene Modals/Tooltips (cmDialog statt window.confirm/alert), Token-Settings-Modal-Redesign (Kontrast + kompakte Checkboxen). Copy-Header zeigt jetzt verfügbares Cash (Invest offener Trades abgezogen, beim Close zurückgebucht).
  39. 7.8
    Eventuell — UI-Polish-Rest (Live-Feed) EVENTUELL (kein Commitment): verbleibender Copy-Tab-Polish (Live-Feed der gespiegelten Trades). Das UI-Polish-Finale (u.a. das Wallet-bearbeiten-Modal) macht der Maintainer ZULETZT, am Ende von Phase 7. (Telegram-Events sind erledigt; Per-Wallet-Performance laeuft als 7.5d.)
  40. 7.7-OVR
    Per-Wallet-Overrides + Makro-Gate + Paper-Gate-Audit + Real-Härtung 2026-06-07 07.06., copy.db v40->v46. Block A (modus-getrennte Paper/Real-Trade-Settings) + per-Wallet-Overrides der Real-Entry-Gates (v42), Risk-Netz-Extras (v43), Real-Ausführung (v44), Buy-Gates (v45); observe_poll_interval_s entfernt (v46). Makro-Trading-Gate (Fear&Greed-Filter vor Käufen, shared macro_gate). Paper-Gate-Audit: Real-Entry-Gates aufs Paper-Buch gespiegelt als Tag (gated_reason), Gate-Wirkungs-Card. Real-Härtung nach Live-Obduktion (Sekunden-Flipper = adverse Selektion): Real-Entry-Gates (Signal-Alter/Mindest-Liquidität), Median-Hold-Spalte, größen-faire Paper-vs-Real-Kalibrierung, K.A.-Fix für aktive pump.fun-Bonding-Curve (bewertet via Volumen/Txns).
  41. 7.7-PF
    pump.fun-Bonding-Curve-Venue (per-Wallet) + Exit-Cooldown 2026-06-08 08.06., copy.db v47/v48. pump.fun-Token, die Jupiter nicht routen kann (quote_failed / price_impact bei echter Bonding-Curve), werden per-Wallet testweise über den PumpPortal-Local-Venue gehandelt (non-custodial, TX-Allowlist-Check vor dem Signieren, abschaltbar). On-Chain-Bonding-Curve-Preisquelle (pumpfun_price) bewertet offene Positionen statt K.A.; pump.fun-Anteil pro Wallet + im Paper-Buch getrackt. Sortierbare/aufgeräumte Wallets-Liste, klares-Deutsch-Reject-Gründe. Plus Trader-weiter Re-Buy-Cooldown nach Exit (portfolio_db v34, Timeframe×Faktor) gegen Rebound-Flip-Churn. Statistiken zum Phase-Ende sauber zurückgesetzt (Backup) für saubere Real+Paper-Aufzeichnung. VIELLEICHT SPÄTER (kein Commitment): On-Chain-Erkennung auf weitere Launchpads ausweiten (LetsBonk/LaunchLab, Moonshot) — heute nur pump.fun exakt erkannt; PumpPortal könnte die Pools (bonk/launchlab/raydium-cpmm) handeln.
  42. 7.7-UNR
    Sicherheits-Gates per 0 abschaltbar + Testmodus (ungefiltert) 2026-06-08 08.06., copy.db v49. Damit eine echte Wallet roh gespiegelt werden kann, ohne dass unsere Gates das Bild verfälschen — Leitprinzipien: (P1) jede Beschränkung per UI abschaltbar, (P2) ein Exit wird NIE hart geblockt, (P3) das Risk-Netz bleibt der eine Schutz. Block A (kein Schema): die Exec-/Exit-Schwellen werden per 0 = AUS deaktivierbar — Slippage 0 → maximale Toleranz statt 0 bps (sonst revertet jeder Swap), Price-Impact-Limit 0 → Gate aus (Buy + Exit) statt '0 % = alles blocken'; im Resolver bleibt ein explizit gesetztes 0 sticky (None-Default statt `or`); price_impact-Reject-Label seitenneutral. Block B (Testmodus): per-Wallet-Schalter `unrestricted` umgeht ALLE Einstiegs-Sperren (Signal-Alter, Liquidität, Buy-Slippage/-Impact, Re-Entry, Max-Trades, Tagesstop) — Resolver erzwingt alle Schwellen auf 0, real_gates.check_buy kurzschließt via is_unrestricted; Risk-Netz bleibt aktiv. UI: prominenter Testmodus-Schalter im Wallet-Modal + 🧪-Badge. Spec: docs/SPEC-COPY-UNRESTRICTED.md. +8 Tests.
  43. 7.9
    Closeout v0.7.0 08.06.: Doku-Sync (ROADMAP/CLAUDE/README/HANDOFF/phases_data/CODEMAP), Phase 8/9 getauscht (Sniper vorgezogen), CT-Statistiken zurückgesetzt. Tag v0.7.0 + Merge nach main bei Bedarf.
Phase 8 v0.8.0 ⏳ aktuell

Sniper-Modul (Memecoin-Trader)

Eigener Container neben BSC/Solana/Copy: Frontrunning-Trader für neue Token-Listings mit Mempool-Monitoring, Memecoin-Discovery (GMGN-Trending, Pump.fun-New-Listings), Honeypot-Pre-Check (RugCheck + DexScreener-Volume-Sanity) und Auto-Buy in den ersten Sekunden. Nutzt KEINE Strategy-Indikatoren (zu lahm), sondern direkte RPC-Detection. Eigene Hauptpill im Dashboard (seit Phase 5 Closeout als Anker sichtbar). Vorgezogen 08.06.2026 (Tausch mit Total-Tab, war Phase 9) — AKTIV seit 08.06.2026, Paper-first.

  1. 8.1
    Sniper-Container `services/trader-sniper/` als eigener FastAPI-Container neben den anderen Tradern. Eigene DB für Sniper-Stats + Watch-Liste. Default-Chain Solana (höchste Memecoin-Density), BSC optional zuschaltbar.
  2. 8.2
    pump.fun-Detection (discovery-only) 2026-06-08 08.06.: Echtzeit-Erkennung frischer pump.fun-Launches über die PumpPortal-Data-WS (`subscribeNewToken`, frei, kein Key, outbound). Isolierte Module `clients/pumpportal_ws` (Reconnect+Backoff) + `detection/pumpfun_monitor` → `candidates` (Dedupe via `seen_mints`, Filter: nur `create` mit Symbol/Name). Settings-Gate `detect_pumpfun` + `paused` (live). UI: Live-Discovery-Feed im Sniper-Tab (`sniper.js`, pollt den read-only Proxy). KEIN Kauf. Live verifiziert (echte Mints im Sekundentakt). +6 Tests.
  3. 8.3
    Raydium-Graduierungs-Detection (discovery-only) 2026-06-08 08.06.: Zweite Detection-Quelle — pump.fun→Raydium-Graduierungen über die PumpPortal-Data-WS (`subscribeMigration`, frei, kein Key). Bewusst NICHT der schwere Helius-logsSubscribe-Firehose: Graduierungen sind das wertvollste frische-Raydium-Signal (Token hat die Bonding-Curve überlebt = bewiesene Nachfrage). `clients/pumpportal_ws._stream`-Refactor (geteilter Connect/Reconnect) + `detection/raydium_monitor` → `candidates` source='raydium'. **Dedupe umgestellt auf (mint, source)**: ein Token erscheint separat als pump.fun-Creation UND als Raydium-Graduierung (zwei Snipe-Signale); Symbol wird vom pump.fun-Kandidaten geerbt. Beide Monitore nebenläufig supervidiert. UI: Quelle-Badge je Feed-Zeile (pump.fun lila / Raydium grün). Gate `detect_raydium`. +6 Tests. Breite Helius-Abdeckung (Nicht-pump.fun-Pools) bleibt optionaler späterer Block.
  4. 8.4
    Honeypot/Safety-Gate (discovery-only) 2026-06-08 08.06.: Pre-Trade-Gate als getakteter Worker. Pipeline pro 'new'-Kandidat: (1) gratis On-Chain-Vorfilter aus dem Detection-Payload (pump.fun-Dev-Anteil > 80 % → `dev_heavy`) schneidet die Flut OHNE HTTP; (2) RugCheck `/report/summary` → Safety = 100−score_normalised ≥ `honeypot_min_rugcheck_score` (funktioniert auch für frische Mints); (3) DexScreener-Liquidität ≥ `min_liquidity_usd`, falls ein Pair existiert (frische Bonding-Curve ohne Pair → übersprungen, fehlende Daten ≠ unsicher). Setzt `passed`/`blocked` + Grund + Scores; Worker getaktet (neueste zuerst, Free-API schonen). Beide Quellen FREI (kein Birdeye). UI: Status je Feed-Zeile (⏳/✅/⛔ + Klartext-Grund). Live verifiziert (echte RugCheck-Scores, low_liquidity/rugcheck_low greifen). +8 Tests.
  5. 8.4b
    Eigene On-Chain-Contract-Analyse (sniper.db v2) 2026-06-08 08.06.: Honeypot-Erkennung direkt aus dem Mint-Account statt nur Fremdquelle — ein `getAccountInfo` (jsonParsed, öffentlicher RPC, kein Key) liefert Authorities + Token-2022-Extensions autoritativ + sofort. `clients/solana_rpc` + reine `safety/contract.evaluate_mint`. Erkennt: HART (du kannst nicht verkaufen) Freeze-Authority · Transfer-Hook · Permanent-Delegate · Non-Transferable · Default-Frozen · Fremd-Programm; WEICH Mint-Authority · Transfer-Tax über Schwelle. Benigne Extensions (metadataPointer/tokenMetadata — was pump.fun nutzt) ignoriert → kein False-Positive (live verifiziert: pump.fun-Token T-2022, freeze/mint=None → passed). Im Gate VOR RugCheck; RugCheck jetzt optional/abschaltbar (`use_rugcheck`). sniper.db **v2**: per-Check-Toggles + Schwellen + `rpc_url` (Default öffentlich, per UI auf Helius umstellbar) — editierbarer Settings-Tab in 8.6. RPC-None (Lag/Limit) ≠ unsicher. +14 Tests. Zurückgestellt: LP-Lock/Burn + Insider-Graph (bei RugCheck), Metadata-Mutability, Holder-Konzentration (pool-abhängig).
  6. 8.5
    Paper-Sniper + Auto-Sell-Ladder (sniper.db v3) 2026-06-08 08.06.: erster (Paper-)Trading-Block, KEIN echtes Geld. `passed`-Kandidat → Paper-Buy mit `position_size_usd` zum Detection-Preis (pump.fun-Curve aus dem Payload, sonst DexScreener; Slippage+Fee simuliert). Auto-Sell-Ladder (`autosell_ladder_json`, z.B. 50 % @ +50 %) + Trailing (`autosell_trailing_pct`) + harter Stop (`hard_stop_pct`) — reine `plan_sells`-Funktion, voll getestet; Risk-Tick pollt Preise (On-Chain-Curve via abgeleitetem bondingCurveKey / DexScreener), pflegt Peak. Preis-Resolver (`pricing/curve`+`resolver`), Paper-Konto (`trading/snipes_repo`: Cash/realisiert/unrealisiert/Equity, offene Positionen `snipe_positions`). UI: Paper-Konto-Card + offene Positionen im Sniper-Tab. Live verifiziert (echte Buys, alle 3 Exit-Typen ladder/trailing/hard_stop feuern, Equity bewegt sich). +11 Tests.
  7. 8.6a
    Sniper-Tab im Corporate Design (Hauptcard + Sub-Tabs) 2026-06-08 08.06.: Sniper-Tab aufs verbindliche Design-System (BSC/Solana/Copy) gebracht — persistente `.trader-control`-HAUPTCARD (Status, Modus, Pause/Resume, Paper-Equity-Header) + Sub-Tab-Nav (Discovery/Snipes/Performance/Settings) mit Hash-Persistenz (#sniper/<subtab>, §11) + Subpanels mit Cyan-Chip-Card-Titeln + ⓘ. sniper.js neu (Status-/Paper-Render, Subtab-Switch, Pause-Wiring, _maybeStartIfActive). Pause/Resume: `csrf.py` portiert + `/api/sniper/control/pause|resume` (CSRF) + Proxy. `ui_design_audit.py` um `sniper` erweitert → **0 ❌/0 ⚠ grün**. Discovery + Paper-Konto in die Subpanel-Struktur migriert.
  8. 8.6b
    Sniper-Settings editierbar (UI) 2026-06-08 08.06.: Alle Sniper-Gates/Schwellen per UI editierbar (Settings-Subpanel, 5 design-konforme Cards): Detection-Quellen, On-Chain-Contract-Checks (7 Toggles + Tax/Holder), Honeypot (RugCheck-Schwelle, Min-Liquidität, use_rugcheck, rpc_url), Auto-Sell-Ladder (JSON/Trailing/Hard-Stop), Position & Sim-Kosten. `settings_writer` (Whitelist + Bereichs-Validierung, alles-oder-nichts) → `PUT /api/sniper/settings` (CSRF) + Proxy. sniper.js lädt/speichert generisch über data-setting-Attribute. Worker liest live. +7 Tests, Audit grün.
  9. 8.6c
    Snipes-Historie + Performance 2026-06-08 08.06.: `performance.py` rekonstruiert abgeschlossene Round-Trips aus dem `snipes`-Leg-Log (pro Mint von Eröffnungs-Buy bis Voll-Exit; Re-Buy nach Close = neuer Trip) + Aggregat-Stats (Anzahl, Win-Rate, Ø-ROI, gesamt realisiert, Bestes/Schlechtestes). `GET /api/sniper/performance` (+ Proxy). UI: Snipe-Historie-Card (Token, Exit-Grund, Hold, ROI, P/L) im Snipes-Tab + Performance-Stat-Grid im Performance-Tab. Live verifiziert (64 Round-Trips, WR 34 %, Ø-ROI +14 %, netto +$45 — Runner tragen die Loser). +4 Tests, Audit grün.
  10. 8.6d
    Sniper-Telegram-Events Isolierte Telegram-Meldungen (Snipe-Buy/Sell-Outcome). (geplant)
  11. 8.6e
    Qualität statt Menge (selektiver Entry + Exits) 2026-06-08 08.06., sniper.db v4. Der Sniper kaufte JEDEN safety-passed Token blind bei Creation (174 Buys, 110 Bluter offen, WR 34 %). Jetzt selektiv: (1) **Momentum-Entry** — nach `entry_warmup_s` (30 s) die Bonding-Curve re-checken, nur kaufen wenn Preis ≥ `min_momentum_pct` (20 %) seit Detection gestiegen ist (Kauf zum LIVE-Preis); flach/fallend → `skipped`. (2) **Min-Marktkap** (Dust-Floor). (3) **Max-Hold-Exit** — Nicht-Mover (nie geladdert) nach `max_hold_s` (600 s) raus (`timeout`). (4) **Max. gleichzeitige Positionen** (15) → selektiv. Alles im Settings-Tab editierbar (Whitelist). Live verifiziert: ~10 % Kaufrate statt 100 % (52 skipped / 6 bought), Cap hält, Timeout beendete die 110 Altbluter sofort. Paper-Buch frisch resettet. +8 Tests.
  12. 8.6f
    Trailing-Aktivierung + Break-Even-Boden (sniper.db v5) 2026-06-08 08.06. Das Trailing schärfte sich, sobald der Peak nur einen Hauch über dem Einstand lag, und trailte mit vollem Abstand nach unten → 20/23 Trailing-Exits im Minus (faktisch ein zweiter Stop-Loss). Fix (Muster Copy-Trader-Risk-Netz): (1) **Trailing-Aktivierung** (`trailing_activate_pct`, Default +30 %) — schärft erst ab Peak ≥ Einstand×(1+act %). (2) **Break-Even-Boden** (`trailing_breakeven`, an) — geschärftes Trailing verkauft nie unter Einstand. Beide 0/aus-fähig, im Auto-Sell-Tab editierbar. +3 Tests.
  13. 8.6g
    Dev-Wallet-Blocklist (sniper.db v6) 2026-06-08 08.06. Bekannte Scam-/Spam-Dev-Wallets vor dem Buy aussortieren — der Dev kommt aus dem pump.fun-Creation-Event (`traderPublicKey`). `dev_blocklist`-Tabelle + `blocklist_repo`; Safety-Gate blockt als ALLERERSTER Check (`dev_blocklisted`, spart RugCheck/RPC), Master-Toggle `use_dev_blocklist`. **Erstbefüllung aus EIGENEN Daten:** 61 Serien-Launcher (≥10 Token im Fenster) auto-geseedet. UI: Master-Schalter + Einfügen + Liste. +6 Tests.
  14. 8.6h
    Blocklist-Sub-Tab + Pagination + Listen-Import 2026-06-08 08.06. Blocklist aus den Settings in einen **eigenen Sub-Tab** verschoben, server-seitige **Pagination** (50/Seite). **Import** der allenhark-Scam-Liste (`allenhark.com/blacklist.jsonl`, 7.910 Adressen → 6.932 neu) → 6.993 gesamt. Bugfixes: Proxy reicht limit/offset weiter; Save scopt auf die eigene Card (nicht Panel); `add_many` über execute statt executemany (LockingConnection).
  15. 8.6i
    Dev-Reputation-Tracking (sniper.db v7) 2026-06-08 08.06. Eigener **Tracking**-Sub-Tab: pro Dev-Wallet aus UNSEREN Daten Token-Anzahl (candidates.dev_address, materialisiert + Backfill via JSON1) + Paper-P/L + Gewinner/Verlierer (Join snipes). `dev_reputation.compute` (SQL-Aggregat), sortierbar (Token/P/L/Snipes), paginiert, **[Block]-Button** pro Zeile. So werden Wiederholungstäter sichtbar (1.062 Devs). +5 Tests.
  16. 8.6j
    Paper-Reset + Dev-Block-Zähler + Entblocken-im-Tracking 2026-06-08 08.06. Paper-Konto-Reset (Startguthaben/Trade-Größe konfigurierbar, Historie geleert). Blocklist-Tab zeigt **X von Y Token wegen Dev-Sperre geblockt (%)**. Tracking-Tab: geblockte Devs haben einen **[Entblocken]**-Button (kein Suchen in der 7k-Liste). Plus Tooltip-Politur.
  17. 8.6k
    Gestuftes Trailing (sniper.db v8) 2026-06-08 08.06. Statt EINEM festen Trailing über alle Stufen: enger, je höher der Peak (`use_trailing_tiers` + `trailing_tiers_json`, Builder im Auto-Sell-Tab). `plan_sells._effective_trail` wählt das Trailing nach Peak-Gewinn (sticky). Default 0→35 %, +100→22 %, +300→12 %. Ein +300 %-Peak gibt so erst bei ~+264 % ab statt +180 % (flach 30 %) / +100 % (alt 50 %). +3 Tests.
  18. 8.6l
    Non-Mover-Filter: Anti-Pump-Dump + Curve-Traktion (sniper.db v9) 2026-06-08 08.06. Weniger Nieten (hard_stop/timeout) durch zwei Einstiegs-Filter. **B Anti-Pump-Dump:** zweite Preis-Stichprobe in der Warm-up-Mitte (`candidates.warmup_price_usd`); gekauft wird nur, wenn der Live-Preis danach noch über der Stichprobe liegt (`use_warmup_confirm`, `min_momentum_confirm_pct`). **C Curve-Traktion:** Mindest-SOL in der pump.fun-Bonding-Curve beim Kauf (`min_curve_sol`, `curve.decode_curve_sol`/`resolver.curve_traction_sol`). Plus Settings-Tuning (Momentum 55, Warmup 45, Hard-Stop 40, Max-Hold 420). +4 Tests. **83 Sniper-Tests grün.**
  19. 8.6m
    Hard-Stop-Tuning + Tracking-Empfehlungen + Snipe-Instrumentierung 2026-06-08 08.06. Daten-Befund: hard_stops kippen im Median nach **20 s** → wir kaufen Spitzen, die sofort zurücklaufen. **(1)** Hard-Stop 40→25 (halbiert den Nieten-Schaden). **(2) Tracking-Block-Empfehlungen:** `dev_reputation` markiert noch nicht geblockte Serien-Launcher (≥10 Token) / Schlecht-Performer (`recommend_block`); UI-Badge, 'Empfehlungen zuerst'-Sortierung, Zähler. **(3) Snipe-Instrumentierung (KEIN Schema-Change):** Entry-Momentum-% + Curve-SOL im Buy-Leg-`outcome_json`; `performance.entry_analysis` bucket't geschlossene Trips nach Einstiegs-Kontext → Entry-Analyse-Card im Performance-Tab (datenbasiertes Filter-Tuning statt raten). +3 Tests. **86 Sniper-Tests grün.**
  20. 8.6n
    Tracking-Ausbau (sniper.db v10): Funnel + Peak + Opportunity-Cost 2026-06-08 08.06. Damit wir sauber datenbasiert weiterentwickeln. **#1 Funnel:** Skip-Gründe persistiert (`mark_skipped` schreibt `candidates.block_reason`) → `funnel()` zeigt den ganzen Trichter (was filtert wie viel raus). **#2/#4 Peak + Zeit-bis-Peak:** `snipe_positions.peak_ts`; Sells schreiben Peak-Gewinn-% + Zeit-bis-Peak ins outcome_json; `performance` rechnet Exit-Effizienz (realisiert/Peak) + Ø Peak + Median Zeit-bis-Peak. **#3 Opportunity-Cost:** `missed_samples`-Tabelle + `_missed_loop` sampelt abgelehnte Token ~3-7 min nach Detection → `missed_summary` zeigt, ob Filter Renner verpassen (Survivorship-Check). UI: Entry-/Funnel-Cards im Performance-Tab. +4 Tests. **90 Sniper-Tests grün.**
  21. 8.6o
    Momentum-Obergrenze + Schädlich-Filter aus (sniper.db v11) 2026-06-08 08.06. Erste 2-h-Auswertung der 8.6n-Daten: (a) je höher das Entry-Momentum, desto schlechter (55-80 % → 25 % Win, 300 %+ → 6 %) = wir kaufen Blow-off-Tops; (b) die Filter fading/low_traction/low_liquidity werfen Gewinner weg (Abgelehntes steigt im Schnitt +38..+48 %), no_momentum ist gut (-3,5 %). Konsequenz: Momentum-Obergrenze `max_momentum_pct` (neue Spalte; `maybe_buy` skippt `too_hot` über der Grenze) + Anti-Pump-Dump (`use_warmup_confirm`) und `min_curve_sol` abgeschaltet. Live: Band [25,80] %. +1 Test. **91 Sniper-Tests grün.**
  22. 8.6p
    Performance-Ausbau: Edge-Kennzahlen + Filter-Scorecard 2026-06-08 08.06. Reine Auswertung (kein Schema). Block 1 Edge-Kennzahlen: Profit-Faktor, Erwartungswert/Trade, Payoff-Ratio, Max-Drawdown, Median-ROI; Exit-Effizienz-Fix (nur Gewinner) + 'liegen gelassen' ($-Giveback vom Peak); Equity-Sparkline. Block 2 Filter-Scorecard: verbindet Funnel + Opportunity-Cost zu einem Urteil pro Filter (behalten/prüfen/raus, Safety nie 'raus'). API: equity_curve in /performance, scorecard in /funnel. UI im Performance-Tab. +3 Tests. **94 Sniper-Tests grün.** Erster Read: Profit-Faktor 0,31, Exit-Eff (Gewinner) 19 % = Exits zu eng; Scorecard bestätigt fading/low_traction = raus (schon aus).
  23. 8.6q
    Top-Holder-Konzentrations-Check (max_top_holder_pct scharf) 2026-06-08 08.06. Das bisher tote `max_top_holder_pct` implementiert: `solana_rpc.get_token_largest_accounts` (getTokenLargestAccounts) holt die Top-Holder; honeypot blockt `top_holder`, wenn der größte NICHT-Curve-Halter (größter = Bonding-Curve/Pool wird ausgeschlossen) mehr als die Schwelle der Supply hält (Supply/Decimals aus dem Mint-Account). Gated (>0), fail-open bei fehlenden Daten. Hinweis: brandneue Mints sind bei Helius oft noch nicht indexiert -> Best-Effort, dev_heavy-Vorfilter deckt den Creation-Moment. +1 Test. **95 Sniper-Tests grün.**
  24. 8.6r
    Tracking: Aufschlüsselung nach Exit-Grund (Timeout/Hard-Stop) 2026-06-08 08.06. `performance.by_exit_reason` — pro Exit-Grund (Ladder/Trailing/Timeout/Hard-Stop) Anzahl + P/L + durchschnittlicher EINSTIEGS-Kontext (Momentum, Curve-SOL, Peak, Haltedauer). Zeigt, was die Nieten gemeinsam haben: hard_stop sterben im Median nach 16 s bei nur +13,5 % Peak (bewegen sich nach Kauf nicht), trailing-Gewinner laufen bis +235 % Peak. UI-Card im Performance-Tab. PLUS: Exit-Gründe pro Dev im Tracking-Tab (`dev_reputation` hard_stops/timeouts je Dev → HS/TO-Spalte) — Dev mit lauter hard_stops = Block-Kandidat; die HS-Quote fließt auch in die Block-Empfehlung (≥3 gesnipt UND ≥60 % hard_stop = empfehlen). +3 Tests. **98 Sniper-Tests grün.**
  25. 8.6t
    Safety-Loop-Durchsatz: Batch parallel (verpasste Trades) 2026-06-08 08.06. Befund: nicht RugCheck war langsam (0,03 s, fail-open für frische Token), sondern der Safety-Loop selbst — sequenziell + 1,5 s Sleep PRO Kandidat → frische Token alterten raus (>300 s), bevor sie 'passed' wurden = verpasste Einstiege. Fix: Batch via asyncio.gather PARALLEL bewerten (Eval ~0,1 s), Per-Kandidat-Sleep raus, Batch 4->12, Tick 4->2 s, RugCheck-Timeout 8->3 s. Ergebnis: new-Backlog 0 (Token sofort bewertet). **98 Sniper-Tests grün.**
  26. 8.6u
    Profit-Lock-Stufen: garantierter Netto-Gewinn (sniper.db v12) 2026-06-08 Trailing-Take-Profit, der einen gelaufenen Token zuverlässig grün schließt. Der Break-Even-Boden sicherte nur den BRUTTO-Einstand — bei 15 % Slippage real ein ~15 % Netto-Verlust. Profit-Lock zieht den Stop nie wieder unter einen garantierten NETTO-Gewinn, sobald der Peak eine Stufe erreicht (Slippage + Fee eingerechnet): Boden = entry×(1+lock)/((1-slip)(1-fee)). use_profit_lock + profit_lock_tiers_json (Netto-%, Default 10->+2, 30->+12, 80->+45, 200->+130). plan_sells: effektiver Stop = max(Trailing, Break-Even, Lock-Boden); neuer Exit-Grund 'profit_lock'. **103 Sniper-Tests grün.**
  27. 8.6v
    Bonding-Curve-Härtung + Graduation-Gate (sniper.db v13) 2026-06-08 Eigene On-Chain-Curve-Analyse aus dem BondingCurve-Account (ein getAccountInfo), unabhängig von RugCheck/DexScreener — Idee aus der Quellen-Recherche (kanonisches pump.fun-Layout). curve.decode_curve_state (virtual/real reserves + complete-bool). honeypot (1c, nur pumpfun, use_curve_checks Default an): Owner != kanonisches pump.fun -> 'not_pumpfun_curve' (Fork-Schutz), complete -> 'graduated', real_sol/85 > max_graduation_pct -> 'near_graduation' (Default 0=aus). Korrektheit: Traktion liest real_sol statt virtual. **110 Sniper-Tests grün.**
  28. 8.6w
    Frühkäufer-Analyse: Bundle + Insider, messen (sniper.db v14) 2026-06-08 Klassifiziert die ersten N Käufer eines frischen Mints (Idee aus der Quellen-Recherche) und schreibt das Urteil ins Snipe-Tracking — MESSEN, kein Block. Frei ohne IDL-Decode: getSignaturesForAddress + getTransaction; aus meta.pre/postTokenBalances (Käufer = positives Mint-Delta, != Curve) + pre/postBalances (bezahlte SOL): Token+SOL = Buy, Token ohne SOL = geseedet/Insider. detect_bundle (gleicher Slot UND ähnliche Größen) + detect_insider; eigener _bundle_loop (kein Hot-Path). Performance-Card vergleicht Bundle/Insider vs sauber (Ø ROI, Win-/Hard-Stop-Rate). Default aus. **119 Sniper-Tests grün.**
  29. 8.6x
    Versuch: graduierte Token über DexScreener bepreisen 2026-06-08 VERSUCH (Hypothese) zum 'eingefrorenen Preis'-Bug: ein graduierter Token stand bei uns +40 %, war auf DexScreener längst gecrasht — Hard-Stop sah den Absturz nie. Ursache vermutlich: nach Graduation (complete) friert der Curve-Account ein, Handel läuft auf Raydium; current_price_usd gab weiter den eingefrorenen Curve-Preis. Fix-Versuch: bei complete den Curve-Preis ignorieren, DexScreener (Raydium) nehmen. Live noch zu bestätigen. **122 Sniper-Tests grün.**
  30. 8.6y
    MAE + Stop-Erholung + Entry-Kontext (sniper.db v15) 2026-06-08 Mehr (richtige) Daten zum Tunen — alles MESSEN, kein Verhaltenswechsel. A: snipe_positions.trough_price_usd (Tiefpunkt analog Peak); risk_tick schreibt mae_pct (max Drawdown vor Exit) ins Sell-outcome; by_exit_reason zeigt Ø MAE pro Grund. B: exit_samples — Voll-Exits ~5-15 min NACH dem Exit nachsampeln (kein Geld); performance.exit_recovery = pro Grund % wieder >=0 / >=+50 % / Ø Erholung ('stoppen wir zu eng raus?'). C: rugcheck_score + entry_curve_sol ins Buy-outcome; performance.entry_context bucketet Win-Rate/ROI nach Curve-SOL- und RugCheck-Band. schema v15 additiv (trough_price_usd + exit_samples). **126 Sniper-Tests grün.**
  31. 8.6z
    Sellability-Probe + Profit-Lock-Fast-Lane (sniper.db v16) 2026-06-09 Jupiter-Sell-Quote pro Snipe (frei, kein Birdeye, reine Lese-Anfrage): ist der Token real verkaufbar? route (DEX-routbar) / curve (vor Graduation via Curve) / no_route (Warnsignal). measure-only, Card + Snipe-History-Zeile. Davor: Befund 51 % der Profit-Lock-Exits rot wegen 5-s-Tick-Granularität (Token pumpt+crasht zwischen zwei Ticks, Fill im Crash statt am Boden) → Fast-Lane: Risk-Tick 5s->1,5s solange Positionen offen sind. Snipe-History aufklappbar mit Datum/Detail-Werten. **134 Sniper-Tests grün.**
  32. 8.6aa
    Sellable-pro-Dev + Anfangs-Liquidität + RugCheck-erzwingen (v17) 2026-06-09 Tracking: Sellable/Unsellable pro Dev-Wallet (json_extract des Buy-outcome). Anfangs-Liquidität (DexScreener sonst Curve-Proxy real_sol×Preis×2) in Snipe-History + Entry-Kontext-Bucket. schema v17: rugcheck_require_score (Default 0) blockt Token OHNE Score ('rugcheck_no_data') — erklärt, warum '-' bisher durchkam (fail-open: fehlende Daten != unsicher). **138 Sniper-Tests grün.**
  33. 8.6ab
    Scam-Metriken + Auto-Block-Dev + History-Filter/Befund (v18) 2026-06-09 Sofort-Dump- (Hard-Stop) + Scam-verdächtig-Metriken (Hard-Stop UND Bundle/Insider/no_route/MAE<=-35) im Paper-Konto + pro Dev im Tracking (Daten: 67 % Hard-Stops, aber nur 25 % echte Scams). schema v18: Auto-Block eindeutiger Problem-Devs (use_dev_autoblock Default 0; sniped>=3 UND Verlust UND scams>=2/unsellable>=1/HS>=70 %) mit Grund-Log, reversibel; Serien-Launcher ohne Verlust NICHT auto-geblockt. Snipe-History: Scam-Flag + Dev pro Zeile + Filter-Leiste; Performance-Befund-Zeile. **143 Sniper-Tests grün.**
  34. 8.6ac
    UI-Komplettpolitur + eigene Tooltips + History-Legende 2026-06-09 Ganzer Sniper aufs Corporate Design: Content-Cards einklappbar (copy-add-collapsible), soft-Glass-BG/Tile-Radius, jeder Stat-Wert in eigener fester Tile-Box (kein Breiten-Springen), Performance/Entry-Kontext schöner (Gruppen-Boxen + Win-Rate-Balken), Blocklist/Tracking-Layout (Einstellung-Box oben rechts, Metrik-Tiles, Grund-Badges), ALLE Tooltips auf data-tooltip (keine Browser-title), Snipe-History-Symbol-Legende.
  35. 8.6ad
    Launch-Rate-Auto-Block (auto:rate, sniper.db v19) 2026-06-09 Dev wird auto-geblockt, wenn er TATSÄCHLICH >= Schwelle Token in EINEM realen 60-Min-Fenster launcht (Two-Pointer über detected_ts, kein Extrapolieren; Anzeige-Spalte 'Token/h (gesch.)'). Default 0/aus, Empfehlung 15. Toggle-State-Sync-Fix (Stolperer #85).
  36. 8.6ae
    Mobile: Tabellen als Cards, kein Quer-Scroll 2026-06-09 Alle sniper-tracking__table <=900px als beschriftete Cards (generischer JS-Labelizer liest <thead>->data-label via MutationObserver), Snipe-Historie 2-zeilig. Stat-Tiles/Entry-Kontext wrappen responsiv.
  37. 8.6af
    Rug-Auto-Block + Rate auf Ist-Wert (sniper.db v20) 2026-06-09 Pump-&-Dump-Erkennung (Peak>=50 % + Kippen) als Verdacht; auto:rug-Zähler. Rate-Block auf tatsächlichen Fenster-Count umgestellt. Schwelle autoblock_min_rugs (Default 3) als UI-Feld. Sell-Impact-Badge.
  38. 8.6ag
    On-Chain-Rug-Autopsie: nur eindeutige Rugs blocken (v21) 2026-06-09 rug_autopsy-Tabelle + Pass im _missed_loop: gepeakte Token ~15-40 min NACH Exit erneut on-chain prüfen (Jupiter-Sellability + Preis, frei). Eindeutiger Rug bei no_route (LP weg) ODER Preis-Kollaps <=-85 % -> NUR diese zählen zu auto:rug. Heuristik bleibt unverbindlicher Verdacht. Rug-Statistik durchgängig (Paper-Konto, Performance, Befund, Tracking, History). **148 Sniper-Tests grün.** Danach Clean-Run-Reset + mehrtägige Datensammlung.
  39. 8.7
    Live-Verify mit Dust-Trade $1-2 Dust-Snipe auf einem bekannten Test-Token analog AC-20-Pattern. Closeout erst nach grünem On-Chain-Tx + saubere Wallet-Reconciliation.
9
Phase 9 v0.9.0 geplant

Total-Tab + Charts + Auto-Deploy

Übersichts-Startseite mit Hero-Cards (P&L 24h/7d/30d), Equity-Kurve, Strategy-Leaderboard, Trader-Health-Grid. Plus Logs-Tab und GitHub-Webhook Auto-Deploy. Verschoben 08.06.2026 (Tausch mit Sniper, war Phase 8).

  1. 9.1
    Aggregations-Endpoint `GET /api/dashboard/overview` aggregiert alle Trader (P&L 24h/7d/30d, Total-Cash, Active-Positions, Trade-Count).
  2. 9.2
    Total-Tab UI mit Hero-Cards Default-Landing nach Login (User-konfigurierbar). 4 große Hero-Cards + Multi-Trader-Equity-Kurve via Recharts.
  3. 9.3
    Strategy-Leaderboard + P&L-pro-Token Tabelle aller Strategien × Token mit Win-Rate / Total-PnL / Sharpe / Max-DD. Sortierbar, Trade-Count-Filter.
  4. 9.4
    Logs-Tab Live-Tail aller Container (filter by service + level), Audit-Log mit IP-Spalte, Login-History.
  5. 9.5
    GitHub-Webhook Auto-Deploy Webhook-Receiver auf Pi triggert `./deploy.sh` bei git-push auf main. CSRF-protected, einmaliger Secret-Token.
10
Phase 10 v1.0.0 geplant

Security-Hardening + 2FA

TOTP-basierte 2FA (Real-Trader wechseln Tipp-Bestätigung → TOTP), Sessions-UI, API-Keys-Verwaltung, Audit-Log mit IP/UA, verschärfte Rate-Limits. Plus cm-deployer-Helper.

  1. 10.1
    TOTP-2FA (Google Authenticator) Enrollment-Flow im Settings-Tab (QR-Code), Verify-Step beim Login, Recovery-Codes.
  2. 10.2
    Sessions-Übersicht UI Liste aller aktiven Sessions mit Last-Seen + IP + UA, Per-Session-Revoke.
  3. 10.3
    API-Keys-Verwaltung Externe Tools (Mobile-App später, Telegram-Bot) brauchen scoped API-Keys. Create / Revoke / Last-Used-Anzeige.
  4. 10.4
    Audit-Log + verschärfte Rate-Limits Audit-Log-Tabelle mit IP + UA + Action. Rate-Limits enger: Login 3/15min statt 5/15min, Real-Trade-Aktionen pro User-Session.
  5. 10.5
    cm-deployer Helper-Container Docker-Socket-mounted Helper mit Allowlist (nur Trader-Container, nur Stop/Start/Restart), 2FA-pflichtig pro Call.
  6. 10.6
    Real-Trader-Bestätigung → TOTP Mode-Toggle / Manual-Trade / Kill-Switch erfordern TOTP-Code statt freitext-Confirmation. Tipp-Bestätigung deprecated.
11
Phase 11 v1.1.0 geplant

Setup-Wizard + Distribution

Browser-Wizard (Master-PW, Secrets, Trader-Auswahl, API-Keys), Backup/Restore-Skripte, README-Komplett-Installation. Projekt-Milestone: frische Installation in <30 Minuten.

  1. 11.1
    State-Detection-Hooks `main.py` prüft beim Startup ob DB initialisiert ist. `/setup`-Route reserviert (gibt 404 bis Phase 11).
  2. 11.2
    Setup-Wizard-Flow (Browser-UI) 7-Schritte-Wizard: Welcome + System-Check → Master-PW → Auto-Secrets → Trader-Auswahl → API-Keys → Initial-Settings → Fertigmeldung.
  3. 11.3
    Backup + Restore-Skripte `scripts/backup.sh` (alle .db + .env + worker-data) + `scripts/restore.sh`. tar.gz + GPG-encrypted optional.
  4. 11.4
    README-Komplettanleitung + Portainer-Stack Schritt-für-Schritt-Installation für frischen Pi + Beispiel-Stack-YAML für Portainer-Nutzer.
  5. 11.5
    Multi-arch Image-Build (optional) `docker buildx` für linux/amd64 + linux/arm64. Erleichtert Pi 4 / 5 / Generic-AMD64-Deployment.