Real-time marktdata verzameling via WebSocket verbindingen met Bitvavo. Verzamelt ticker24h data, candlesticks (1m en 5m), trades, en orderbook depth. Alle data wordt eerst naar PostgreSQL geschreven (database-first approach) voordat services deze gebruiken. Dit garandeert data consistentie en betrouwbaarheid.
Berekent technische indicatoren en features uit marktdata (volatility, speed, spread, volume). 12 guards filteren signalen op basis van marktcondities (spread, liquidity, trend direction). Discrete points scoring systeem (0-50 punten) bepaalt signal kwaliteit. Adaptive minscore throttling voorkomt over-trading bij hoge capacity.
Converteert signals naar intents, intents naar events, en events naar orders via een 3-laags planning systeem. 12 risk management guards controleren elke stap (killswitch, slot budget, exposure limits, cooldowns, circuit breakers). Alleen signalen die alle guards passeren worden omgezet naar daadwerkelijke orders.
Plaatst market buy orders via WebSocket naar Bitvavo exchange. Rate limiting voorkomt API overbelasting. Order tracking en status monitoring. WebSocket verbinding met automatische reconnectie bij verbindingsverlies. OperatorId support voor Bitvavo API compliance.
Entry Flow: Een signal moet eerst door 12 signals layer guards (staleness check, candle freshness, spread guard, liquidity guard, direction guard, etc.). Vervolgens wordt het gescoord (0-50 punten). Als de score boven de adaptive minscore threshold ligt, wordt het een intent. Het intent gaat door 12 trading layer guards:
Als alle guards passeren, wordt een market buy order geplaatst. De order size wordt berekend op basis van slot budget en market precision. Entry gebeurt alleen bij voldoende liquiditeit en acceptabele spread (<50 bps).
Kapitaalbescherming is #1 Prioriteit: Een positie staat NOOIT onbeschermd. Direct na elke buy fill wordt automatisch een stop loss order geplaatst.
SL Placement Flow:
SL Parameters:
Trailing Logic:
SL Order Type: Gebruikt Bitvavo stopLoss order type (market order wanneer getriggerd). Geen limitPrice veld (zou stopLossLimit order maken). Trigger type: price, trigger reference: lastTrade. OperatorId support voor API compliance.
Regime-aware slot budget systeem: Regime A (<€50 equity): Survival mode, max 1 asset, €10 budget. Regime B (€50-€125): Validation mode, €10.00 fixed budget, max 3 assets. Regime C (≥€125): Scaling mode, 8% per asset cap, max 2-12 assets. Balance synchronisatie houdt account balances up-to-date. Position reconciliation verifieert database consistentie.
Real-time dashboard toont equity, exposure, open posities, signals throughput, guard blocks, SL coverage, en 24h PnL. Analytics API voor statistieken. Alerting service met Pushover integration voor kritieke notificaties. Service health monitoring via heartbeats. Database-driven monitoring (geen caching, altijd actuele data).
Start van volledige clean rewrite project. Doel: <100MB codebase, syntactisch foutloos, alle functionaliteit behouden, extreme code cleanliness.
Codebase analyse compleet: 194MB codebase, 547 Python bestanden, 102,116 lines of code geanalyseerd. Duplicatie geïdentificeerd: 27 observability.py, 39 config.py, 9 db_writer services, 14 Redis helpers.
Common utilities geconsolideerd: redis_helpers.py, db_connection.py, logging_utils.py, utils.py, config.py, ws_client.py. 14 Redis helper files → 1 common module, 39 config files → unified system.
Database is altijd de bron van waarheid. Alle trading beslissingen lezen uit database. Redis gebruikt alleen voor transport en operationele state.
Discrete points scoring systeem geïmplementeerd. 12 guards geïmplementeerd. Baseline caching met Redis (TTL 15 min). Adaptive minscore throttling.
ATR-based trailing stop loss systeem. Direct SL placement na buy fill. SL gaat alleen omhoog (nooit omlaag). Update threshold: 0.1% omhoog. Profit threshold: 2% voor tight SL (0.2% volgafstand).
Regime-aware slot budget: Regime A (<€50): Survival mode, max 1 asset. Regime B (€50-€125): Validation mode, €10.00 fixed budget. Regime C (≥€125): Scaling mode, 8% per asset cap.
18 services actief op productie. Codebase: 115 Python files, 18,439 lines. Test coverage: 34/34 tests PASSED. Alle kritieke bugs gefixed: missing imports, orphaned except statements, dataclass defaults.
Regime B slot budget gecorrigeerd: €20.00 → €10.00. Regime C asset cap: 15% → 8%. Regime C max assets: 5-20 → 2-12. Dynamische slot size uit slot_manager.
Per-market rate limiting: max 1 update per seconde. UPDATE in plaats van cancel/replace bij normale updates. Alleen cancel/replace bij update failure (onjuiste order).
Redis prefix isolation: rewrite: prefix voor alle keys en streams. Database isolation: trading_rewrite database. Voorkomt conflicten met oude systeem.
Alerting service met Pushover integration. Analytics API endpoint. Hourly monitoring script. Common parsers module voor code deduplicatie.
6 kernprincipes gedocumenteerd: Fills zijn externe gebeurtenissen, Ontvangst en verwerking gescheiden, Database is bron van waarheid, Redis is transport, Beslissingen na DB-verwerking, Veiligheid vóór snelheid.
Candle freshness buffer fix. Marketstate candles fix. Database candles fix. Net edge check status. Guard flow verbeteringen. Rate limit monitoring geïmplementeerd.
Complete scoring redesign plan met 5 axioms. Twee scoring modes: MicroWinMode (default) en PumpRideMode. Mode auto-detection logic. Phase-by-phase implementation approach.
SpreadNormalizer nu source-aware: als spread_bps kolom (al in bps) → direct gebruiken, geen normalisatie. Alleen normaliseren bij onbekende bronnen. Hard FAIL bij >10% samples buiten verwachte range.
Category totals en caps geïntroduceerd. apply_category_cap() helper functie. compute_consistency_bonus_from_features() (non-circular, uit features). Cap dominance rule: max(spread_bonus, liquidity_bonus) <= speed_bonus / 2. Raw/clamped logging in reasons.
detect_scoring_mode() functie geïmplementeerd. Per-market hysteresis in Redis (rewrite:mode:{market}, TTL 300s). Mode-dependent caps: speed_cap_max = 5.0 (PumpRideMode) vs 6.0 (MicroWinMode). Mode logging in reasons.
should_penalize_peak_risk() functie geïmplementeerd. Extended naar 30-50 bps range (Phase 2.5). Penalty alleen bij: extreme speed AND zwakke continuation AND geen strong_up. Vervangt oude is_rocket_coin en is_ultra branches.
should_penalize_peak_risk uitgebreid naar 30-50 bps range. Thresholds aangepast: >30.0 bps in plaats van >50 bps of >100 bps. Doel: monotonicity violations in 30-50 bps range aanpakken.
Test document bijgewerkt naar v2: Spread normalization source-aware. Liquidity definitie expliciet (estimated_liquidity, 1% depth, asks side). Pairwise metrics → Bucket/percentile/local neighborhood (niet O(N²)). Reverse monotonicity check toegevoegd. Acceptance criteria: bucket monotonicity + top-K examples + reduction trend.
Volledig overzicht scoring systeem (Phase 3 + Phase 4). Modes (MicroWinMode, PumpRideMode). Caps, thresholds, adjustable factors. Mode auto-detection met hysteresis. Minscore recalibration.
test_monotonicity_v2.py script geïmplementeerd met v2 tests. Source-aware spread normalization. BUY signals alleen voor liquidity checks (asks side bij 1% depth). Bucket monotonicity + percentile consistency + local neighborhood + reverse monotonicity. Edge case handling (P75 violation met P50 OK → WARNING).
Plan bijgewerkt met kritieke correcties: EUR-weighted dominance (amount * price). Executed vs taker naming verduidelijking. Minimum volume gate (1.0 × slot_budget_eur). Cap order: raw → cap → mode-factor. Continuation logging. Redis key naming: rewrite:orderflow:{market}.
EUR-weighted orderflow dominance berekening geïmplementeerd. calculate_orderflow_dominance() in features.py. Geïntegreerd in direction_score en consistency_bonus in scoring.py. Orderflow config parameters toegevoegd. Redis cache: rewrite:orderflow:{market} (TTL 70s). Cap order: raw → cap → mode-factor (PumpRideMode max = 0.5).
Trading Bot Systeemaudit - 2026