SmallCapTrader
Algorithmische Handelsplattform für Small-Cap-Aktien
Privates Repository
Problem
Der Handel mit Small-Cap-Aktien erfordert Echtzeit-Erkennung schnelllebiger Aktien, anspruchsvolle Multi-Strategie-Signal-Arbitrierung und zuverlässige Ausführung über verschiedene Broker. Bestehende Retail-Plattformen bieten entweder nur einfache Indikatoren mit manueller Orderaufgabe oder sperren erweiterte Funktionen hinter institutionellen Preismodellen. Es existiert keine selbstgehostete, vollständige Plattform, die die gesamte Pipeline abdeckt — von Marktdaten-Streaming über automatisierte Strategieentdeckung bis hin zur Live-Ausführung im grossen Massstab.
Ansatz
Entwicklung eines produktionsreifen Handelssystems mit einem Python 3.12+ Async-Backend (FastAPI + Granian) und einem Next.js 16-Frontend. Die Plattform deckt den vollständigen Handelslebenszyklus ab: Echtzeit-Marktdatenaufnahme, mehrere integrierte Handelsstrategien für Momentum-, Pullback-, Breakout- und Volumenmuster, ein Strategy-Fingerprinting-Subsystem, das profiliert, was bestehende Strategien erfassen, und das Rule Mining auf die verbleibenden Lücken lenkt, eine automatisierte Rule-Mining-Engine zur Entdeckung und Live-Promotion neuer Strategien, Backtesting mit Parameteroptimierung, Multi-Broker-Ausführung über Alpaca und Interactive Brokers sowie eine Production-Correctness-Schicht, die Reconnect-Verhalten, Trade-Buchhaltung und historische Preis-Fidelity abdeckt.
Architektur
Clean Architecture mit Domain-Driven Design, unterstützt Dual-Mode-Deployment — monolithisch für die Entwicklung und Sharded Microservices für die Produktion. Dieselbe Codebasis wechselt zwischen Modi über einen Konfigurationsparameter ohne Codeänderungen.
Monolithischer Modus
Alle Services laufen in einem einzigen Python-Prozess: Marktdaten-Parsing, Handelsstrategien, Positionsüberwachung und Telegram-Benachrichtigungen. Einfaches Deployment, minimale Latenz zwischen Komponenten.
Sharded-Modus
Horizontal skalierbare Architektur. Ein Stream Router parst Marktdaten und verteilt sie an Shard Worker via Redis Pub/Sub, partitioniert nach Symbolbereich. Jeder Shard Worker führt alle Strategien unabhängig aus. Ein dedizierter Tick Recorder schreibt alle Marktdaten in QuestDB für Backtest-Replay. Ein zentraler Signal Consumer empfängt validierte Signale von allen Shards und leitet sie zur Broker-Ausführung weiter.
Datenschicht
- PostgreSQL + asyncpg — Relationale Domain-Daten: Trades, Positionen, Orders, Strategie-Konfigurationen, entdeckte Regeln
- QuestDB — Hochdurchsatz-Zeitreihen: Tick-Daten, OHLCV-Bars (InfluxDB Line Protocol-Aufnahme)
- Redis — Caching, Pub/Sub für Shard-Kommunikation, Echtzeit-Zustand
Handelsstrategien
Mehrere integrierte Strategien für verschiedene Marktsituationen und Erkennungstypen:
- Momentum-Erkennung — Echtzeit-Identifikation von schnell- und langsamlaufenden Aktien mittels Volumen- und Preisregime-Analyse
- Pullback-Einstiege — Mehrere pullback-basierte Strategien für Einstiege bei laufenden Aktien zu günstigen Preisen
- Breakout-Muster — Volumenbestätigte Breakout-Strategien über Konsolidierungs-, Range- und Trend-Setups
- Mean-Reversion — Strategien, die auf technische Schlüssellevel für Support/Reclaim-Einstiege zielen
- Discovered Rules — Automatisch geschürfte Strategien aus der Rule-Mining-Engine, nach Validierung zum Live-Trading befördert
Jede Strategie enthält konfigurierbare Risikoparameter, Signal-Konfidenz-Scoring, prioritätsbasierte Arbitrierung wenn mehrere Strategien gleichzeitig für dasselbe Symbol auslösen, und Erkennungstyp-Filterung, sodass Strategien nur bei passendem Aktienverhalten aktiviert werden (schnelllaufend, langsamlaufend oder beides).
Technische Schlüsselentscheidungen
Strategy Fingerprinting
Bevor die Rule-Mining-Engine neue Regeln vorschlägt, profiliert die Plattform zunächst, was jede bestehende Strategie über historische Daten hinweg bereits erfasst, misst Abdeckung und strategieübergreifende Überlappung und generiert kuratierte Seed-Kandidaten, die gezielt auf die Lücken abzielen, statt blind zu suchen. Das Fingerprinting-Dashboard zeigt Läufe mit einer mehrstufigen Detailansicht — Overview, Coverage, Cross-Strategy-Overlap und Seed-Kandidaten.
Rule Mining
Automatisierte Strategieentdeckung, aufgesetzt auf Fingerprinting. Eine optionale Phase 0 trainiert ein LightGBM-Modell auf historischen Trade-Daten und extrahiert Decision Paths als Seed-Kandidaten, die die Beam-Suche anschliessend verfeinert. Bedingungsscreening deckt preisbasierte Indikatoren, temporale Flags und trajektorien-bewusste Ableitungs-Bedingungen ab, die erfassen, wie sich Indikatorwerte über die Zeit verändern. Die Engine kombiniert Top-Performer zu Multi-Bedingungsregeln, optimiert Exit-Parameter via Grid Search und erkundet mehrstufige Temporalmuster. Fast-Mover-Replay-Gating während des Mining stellt sicher, dass das Discovery-Universum widerspiegelt, was Live-Erkennung auffangen würde, und Carry-Mode-Simulation evaluiert Mehrtages-Halteverhalten Ende-zu-Ende. Duale Validierungsmodi — Zeitreihen-Split mit Walk-Forward-Kreuzvalidierung und reproduzierbarer Random Split — decken zeitliche und i.i.d.-Integrität ab. Jenseits aggregierter P&L gewichtet ein Exit-Quality-Scoring-Modus P&L, Drawdown, Hold Efficiency, Exit Type Quality und Peak-to-Exit Giveback, mit einem Scoring-Mode-Selector für P&L-zentrische oder Exit-Quality-zentrische Evaluation. Regeln, die die Validierung bestehen, werden mit Per-Regel-Exit-Konfigurationen zum Live-Trading befördert.
Multi-Broker-Ausführung
Ein BaseBroker-Interface ermöglicht nahtlosen Wechsel zwischen Alpaca (Paper + Live Trading, SIP Data Feed, Fractional Shares) und Interactive Brokers (Trailing Stops, globaler Marktzugang einschliesslich Futures, Forex und Optionen). Konfiguration über eine einzelne Umgebungsvariable.
Backtesting-Infrastruktur
Eine verteilte Backtesting-Schicht, die Parameterkombinationen über alle Strategien durchläuft und Ergebnisse über beliebige mehrtägige Datumsbereiche in einem einzigen Vorgang vergleicht. Backtest- und Rule-Mining-Workloads werden vollständig an dedizierte Worker via Redis Work Queues ausgelagert, mit Per-Datum-Daten-Precaching und einer Finalize-Queue, die Ergebnisse asynchron aggregiert, sodass der API-Prozess leichtgewichtig bleibt. Tick-Daten-Replay aus QuestDB ermöglicht High-Fidelity-Simulation gegen historische Marktbedingungen, tagesübergreifende Aggregation zeigt Strategiekonsistenz und Parameterstabilität, und bestperformende Konfigurationen können per Klick auf Live-Trading befördert werden. Fortschritt wird durchgehend via WebSocket an das Dashboard gestreamt.
Unified Exit Engine
Zentralisierte Exit-Logik für Stop Loss, Trailing Stops, skalierte Gewinnziele und zeitbasierte Exits. Jede Strategie und beförderte Regel kann ihre eigene Exit-Konfiguration definieren, was feingranulares Risikomanagement ohne globales Fallback-Verhalten ermöglicht.
Production Correctness
Reale Fehlermodi, die einfache Codepfade und Backtests verdecken. Der Market-Data-WebSocket reconnectet bei transienten Fehlern mit exponential backoff und bewahrt den Subscription-State über Disconnects hinweg. Ein Redis Connection Manager mit Auto-Reconnect, Keepalive-Heartbeats, periodischen Health Pings und Payload-Kompression hält Pub/Sub- und Cache-Schicht unter Netzwerkschwankungen verfügbar. Strukturelles Buy-Sell-Linking ersetzt FIFO-Trade-Matching, sodass die P&L-Attribution der tatsächlichen Order-Beziehung folgt, auch wenn Exits ausserhalb der Einreichungsreihenfolge ausführen. Historische Bars werden beim Broker split-adjustiert, damit Backtests und Live-Preisreferenzen rund um Corporate Actions keine Fehlsignale erzeugen.
Authentifizierung & Sicherheit
JWT-basierte Authentifizierung mit Access- und Refresh-Tokens. Geschützte API-Routen erfordern Bearer-Tokens. Erweiterte Sitzungsunterstützung für persistenten Dashboard-Zugang.
Observability Stack
Ephemere Worker — Shards, Backtest-Worker, Rule-Mining-Worker — exponieren dieselbe Metrik-Oberfläche wie langlebige Services, via Prometheus Pushgateway gepusht, und Grafana-Dashboards werden durch grafanalib als Code bereitgestellt, sodass Observability-Konfiguration mit dem Repo mitreist statt in einer zusammengeklickten UI zu leben. Strukturiertes JSON-Logging via structlog, verteiltes Tracing mit OpenTelemetry und Jaeger für Trace-Visualisierung runden den Stack ab. Telegram-Benachrichtigungen decken Trade-Alerts und Systemereignisse ab.
Echtzeit-Infrastruktur
Die Plattform nutzt eine Domain-Event-Architektur, bei der Backend-Services Ereignisse über Redis Pub/Sub veröffentlichen, die via WebSocket-Verbindungen an Frontend-Clients weitergeleitet werden. Dies ermöglicht UI-Updates in Sekundenbruchteilen über alle Dashboard-Seiten ohne Polling. Bei nicht verfügbarer WebSocket-Verbindung fällt das System automatisch auf Polling zurück, um die Datenaktualität aufrechtzuerhalten.
- WebSocket-gesteuerte Cache-Invalidierung — Domain-Events lösen gezielte Query-Invalidierung für Dashboard-Updates in Sekundenbruchteilen aus
- Redis Pub/Sub Event Bridge — Prozessübergreifende Event-Zustellung von Background-Workern über API-Server zu Frontend-Clients
- Stale Price Guards — Verhindert Exit-Entscheidungen und Orderübermittlungen bei veralteten Marktdaten
- Atomares Order-Repricing — Hintergrundüberwachung passt ausstehende Orders mittels broker-nativer Replace-Operationen an
- Live-Benachrichtigungsglocke — Schweregrad-gesteuerte Event-Benachrichtigungen mit Toast-Alerts für kritische Handelsereignisse, Verbindungsstatus-Anzeige und automatischem Backfill bei Wiederverbindung
Frontend
Next.js 16-Dashboard mit React 19, Tailwind CSS v4 und shadcn/ui-Komponenten, gestaltet mit einem Bloomberg-Terminal-inspirierten Dark Theme für eine professionelle Trading-Ästhetik. TanStack Query übernimmt das Server-State-Management. Zentrale Seiten umfassen Echtzeit-Portfolioüberwachung, Orderaufgabe, Strategiekonfiguration mit unabhängigen Fast/Slow-Erkennungs-Toggles, Backtest-Analytik mit Equity-Kurven, Kampagnen-Backtesting für Mehrtagesvergleiche, ein Strategy-Discovery-Interface zur Visualisierung und Beförderung geschürfter Regeln mit Erkennungstyp-Tagging, ein Fingerprinting-Dashboard mit mehrstufiger Run-Detailansicht, eine Trade-Detail-Ansicht, die den Entscheidungs-Audit-Trail (Signal, Filter, Arbiter-Ergebnis, Risk Gate, ausgelöste Bedingungen) neben Ein-/Ausstiegsmarkern auf Candlestick-Charts zeigt, einen Live-Positionsmonitor mit Exit-State-Tracking sowie ein Rule-Lifecycle-Dashboard mit Health Scoring und Degradationserkennung. Das Backend enthält zudem eine CLI auf Basis von Typer und Rich für administrative Operationen sowie PDT (Pattern Day Trader) Compliance-Tracking.