Skip to main content

Systemarchitektur

SmallCapTrader folgt der Clean Architecture mit Domain-Driven Design und unterstützt einen dualen Deployment-Modus — monolithisch für die Entwicklung und Sharded Microservices für die Produktion.

Monolithischer Modus

Alle Dienste laufen in einem einzigen Python-Prozess. Einfaches Deployment, minimale Inter-Komponenten-Latenz.

KomponenteVerantwortlichkeit
MarketDataServiceWebSocket-Stream-Parsing (Alpaca/IB)
Strategy EngineMehrere Handelsstrategien evaluieren Signale
Position MonitorStop-Loss, Trailing Stops, Gewinnziele
Signal ArbiterPrioritätsbasierte Konfliktlösung über Strategien hinweg
Notification ServiceTelegram-Benachrichtigungen für Trades und Systemereignisse
SchedulerMarktkapitalisierungs-Updates, Wartungsaufgaben

Sharded-Modus

Horizontal skalierbare Architektur. Symbol-Range-Partitionierung via Redis Pub/Sub.

Prozesse:

ProzessAnzahlVerantwortlichkeit
sct-stream-router1Parst Marktdaten-WebSocket, routet nach Symbol-Range an Redis-Kanäle
sct-shard-workerNFührt alle Strategien für zugewiesenen Symbol-Range aus
sct-tick-recorder1Schreibt alle Ticks nach QuestDB für Backtest-Replay
sct-backtest-workerNVerteilte Backtest- und Rule-Mining-Ausführung
sct-worker1Signal-Consumer + Trade-Ausführung + Positions-Monitoring

Datenfluss

Market Data WebSocket


Stream Router ─── parses trades/bars

    ├──► Redis channel: shard_a
    ├──► Redis channel: shard_b
    ├──► Redis channel: shard_c
    └──► Redis channel: shard_n ...


    Shard Workers ─── evaluate all strategies

           ├──► Validated signals → Signal Consumer
           │                           │
           │                           ▼
           │                    Broker Execution
           │                    (Alpaca / IB)

           └──► Strategy state → PostgreSQL

Datenschicht

SpeicherZweckZugriffsmuster
PostgreSQL + asyncpgTrades, Positionen, Orders, Strategien, entdeckte RegelnRelationale Abfragen, ACID-Transaktionen
QuestDBTick-Daten, OHLCV-BarsHochdurchsatz-Zeitreihen-Schreibvorgänge (ILP), schnelle Bereichsabfragen
RedisCaching, Pub/Sub-Shard-Kanäle, Echtzeit-StatusSub-Millisekunden-Lesezugriffe, Nachrichtenrouting

Backend-Stack

KomponenteTechnologieBegründung
SprachePython 3.12+Type Hints, async/await, Ökosystem
FrameworkFastAPIOpenAPI Auto-Docs, Dependency Injection
ASGI ServerGranian (Rust)3-4x schneller als Uvicorn
Package ManagerUV (Rust)10-100x schneller als pip
ORMSQLAlchemy 2.0Volle Async-Unterstützung
ValidierungPydantic v2Field Validators, Settings Management
LintingRuffVereinheitlichtes Tool (black + flake8 + isort)
LoggingstructlogStrukturiertes JSON, async-sicher
DatenverarbeitungPolars, Pandas, NumPyHochperformante Analytik
CLITyper + RichAdministrative Werkzeuge
Type CheckingMyPy (strikt)Statische Typsicherheit
Testingpytest + hypothesisUnit-, Integrations-, Property-basierte Tests
Dependency ManagementRenovateAutomatisierte Abhängigkeitsaktualisierungen
CI/CDGitHub ActionsLint, Typecheck, Tests bei jedem Push/PR
ObservabilityOpenTelemetry + Prometheus + grafanalib + PushgatewayDistributed Tracing, Metriken, Dashboards als Code, Metriken-Push für ephemere Worker
API-Vertragopenapi-typescriptPydantic-Response-Modelle, generierte TypeScript-Typen, CI-Drift-Check

Frontend-Stack

KomponenteTechnologie
FrameworkNext.js 16 (App Router)
UIReact 19, Tailwind CSS v4, shadcn/ui
Data FetchingTanStack Query v5
ChartsRecharts
IconsLucide React

Deployment-Modi

ModusBefehlAnwendungsfall
Entwicklungdocker compose --profile dev upHot Reload, Einzelprozess
Produktiondocker compose --profile prod upOptimierter Monolith
Shardeddocker compose --profile sharded upHorizontale Skalierung (8 Container)
Full Stackdocker compose --profile full up+ Prometheus, Grafana, Jaeger