Plattform-Architektur

...
SENTIMENT ANALYSE TRAINING PIPELINE PAPER TRADING RSS Feeds (17 Quellen) FAZ, Spiegel, Tagesschau, HB, n-tv, Welt, WiWo, Yahoo u.a. EventBridge Schedule Taeglich 7:30 UTC, Mo-Fr EventBridge Schedule Alle 5 Min, Mo-Fr 7:00-15:30 UTC RSS Sentiment Pipeline Lambda Python 3.11 | stuendlich Ticker-spezifisches Sentiment + Trend Step Functions Training Pipeline | taeglich 7:30 UTC Cleanup → Data Prep → Training x40 parallel Paper Trading + Risk Mgmt Portfolio Brain, Market Regime, 16-Feat Obs. SL/TP, Korrelations-Gate, Regime-Adjustments FinBERT Container German FinBERT, 3GB Docker, PyTorch Data Prep 15-Min-Kerzen + DAX-Index + Sentiment + Bollinger RSI, MACD, Vol-Ratio, DAX-Korr. PPO Training x40 parallel, Walk-Forward 3 Folds, 25k Timesteps Stable-Baselines3, 5 Actions IB Execution Service (EC2) Marktdaten & Live-Orders via IB Gateway DATENSCHICHT DynamoDB sentiment-cache | paper-trading-state | portfolio-config Pay-per-Request, TTL 24h S3 Bucket PPO Modelle (.zip) | Trainingsdaten (.csv) | Tiered Exp. Buffer DAX 40 dynamisch, Hot(5d)/Warm(90d)/Cold(2yr) Replay API & INTERFACE API Gateway - trading.riegelsystems.de POST /sentiment GET /news GET /dashboard /stats /architecture Route53 + ACM Custom Domain, DNS, TLS Zertifikat MONITORING & ALERTING CloudWatch Alarms Cache-Hit-Rate, Lambda Duration SNS Topic finbert-alerts Dashboard Lambda Portfolio, Trades, Sentiment Stats, Architektur 5 Lambda Functions Step Functions 3 DynamoDB Tables S3 Bucket 2 CW Alarms DAX 40 dynamisch
Datenquellen
Lambda Functions
Orchestrierung (EventBridge, Step Functions)
Speicher (DynamoDB, S3)
API & Netzwerk
Monitoring & Alerting
- - - Gestrichelt = Cross-Referenz / Datenfluss

BERT vs. LLM — Was ist der Unterschied?

Beide basieren auf der Transformer-Architektur (Google, 2017), nutzen sie aber grundlegend anders:

BERT (Bidirectional Encoder)

BERT liest Text in beide Richtungen gleichzeitig und versteht dadurch den Kontext eines Wortes aus seiner gesamten Umgebung. Es ist spezialisiert auf Verstehen und Klassifizieren — z.B. „Ist dieser Satz positiv oder negativ?“

  • 110 Mio. Parameter (BERT-base)
  • Antwort in 50–200ms auf einer CPU
  • Läuft auf einem 3 GB Lambda Container
  • Kosten: ~$0,001 pro 1.000 Klassifikationen

LLM (Large Language Model)

LLMs wie GPT-4 oder Claude lesen Text nur von links nach rechts und erzeugen Token für Token neue Sprache. Sie können alles: Übersetzen, Programmieren, Analysieren — sind aber Generalisten.

  • 100–1.800 Mrd. Parameter (1.000x größer)
  • Antwort in 1–30 Sekunden
  • Benötigt GPU-Cluster oder API-Zugang
  • Kosten: ~$1–15 pro 1.000 Anfragen
EigenschaftBERT / FinBERTLLM (GPT, Claude)
AufgabeKlassifikationTextgenerierung
RichtungBidirektionalLinks → Rechts
Größe110 Mio. Parameter100+ Mrd. Parameter
Latenz~100ms~5.000ms
InfrastrukturCPU / LambdaGPU-Cluster / API
Kosten pro 1k~$0,001~$1–15
Fine-TuningEinfach, StundenKomplex, Tage/Wochen

Für unseren Anwendungsfall — tausende Nachrichtenartikel pro Tag schnell klassifizieren — ist BERT die klar bessere Wahl: 50x schneller, 1.000x günstiger, und für Sentiment-Analyse genauso präzise.

Wie wurde German FinBERT trainiert?

Unser Modell (scherrmann/GermanFinBert_SC_Sentiment) entstand in drei Stufen:

Stufe 1: BERT Vortraining (Google)

Das Original-BERT wurde auf dem gesamten englischen Wikipedia und BookCorpus trainiert. Es lernt allgemeines Sprachverständnis durch zwei Aufgaben:

  • Masked Language Model (MLM) — 15% der Wörter werden maskiert, das Modell muss sie vorhersagen
  • Next Sentence Prediction — Gehören zwei Sätze zusammen?

Stufe 2: Deutsche Finanzsprache

Das Basis-BERT wurde weiter trainiert auf deutschen Finanztexten: Geschäftsberichte, Ad-hoc-Mitteilungen, Wirtschaftsnachrichten. Das Modell lernt dabei Fachbegriffe wie „EBITDA“, „Dividendenrendite“ oder „Gewinnwarnung“.

Allgemeines BERT + Deutsche Finanztexte German FinBERT

Stufe 3: Sentiment Fine-Tuning

Im letzten Schritt wurde eine Klassifikationsschicht hinzugefügt und auf manuell gelabelten deutschen Finanznachrichten trainiert. Jeder Text wurde als positiv, negativ oder neutral markiert.

German FinBERT + Sentiment Labels Unser Modell

Wie nutzen wir es?

Unser System füttert stündlich ~180 deutsche Nachrichtenartikel durch das Modell. Für jeden Artikel liefert es drei Wahrscheinlichkeiten:

  • positive: 0.92 — „SAP steigert Umsatz über Erwartungen“
  • negative: 0.87 — „Bayer verliert Glyphosat-Klage“
  • neutral: 0.78 — „Hauptversammlung findet am Donnerstag statt“

Diese Sentiment-Scores fließen als 2 von 16 Features in den PPO Trading Agent ein (Sentiment-Score + Sentiment-Trend), zusammen mit Kursdaten, Bollinger Bands, DAX-Korrelation u.a.

PPO Trading Agent — Wie lernt unser Händler?

Reinforcement Learning (RL) ist ein Lernprinzip aus der KI: Ein Agent interagiert mit einer Umgebung, beobachtet Zustände, führt Aktionen aus und erhält Belohnungen. Durch Versuch und Irrtum lernt er eine Policy (Strategie), die den langfristigen Gewinn maximiert.

Was ist PPO?

Proximal Policy Optimization (Schulman et al., 2017 — OpenAI) ist einer der zuverlässigsten RL-Algorithmen. Er wurde auch zum Training von ChatGPT eingesetzt (RLHF). PPO hat zwei entscheidende Vorteile gegenüber älteren Methoden:

  • Stabile Updates — Die Policy wird pro Schritt nur um einen begrenzten Betrag geändert (Clipping bei ±20%), damit der Agent nicht „verlernt“
  • Sample-Effizienz — Jede gesammelte Erfahrung wird mehrfach für Updates genutzt (10 Epochen pro Batch), statt sie nach einmal Lernen wegzuwerfen

Unsere Trading-Umgebung

Jedes Aktienmodell trainiert in einer eigenen Gym-Umgebung, die den XETRA-Handel simuliert:

Zustand (16 Features)

Aktionen

0 — HOLD
1 — BUY_SMALL (25%)
2 — BUY_FULL (100%)
3 — SELL_HALF (50%)
4 — SELL_ALL (100%)

BUY_SMALL = 25% des Cash investieren
BUY_FULL = Gesamtes Cash investieren
SELL_HALF = 50% der Position verkaufen
SELL_ALL = Gesamte Position verkaufen

Belohnung (Reward)

reward = step*0.4 + sharpe*0.25 + sentiment*0.25 + hold_cost*0.1

  • Step Return: Aktuelle Schrittrendite (40%)
  • Rolling Sharpe: Risiko-adjustierte Rendite (25%)
  • Sentiment: Proportional ±0,03 (25%), skaliert mit Überzeugung
  • Holding Cost: -0,0005 pro Step bei offener Position (10%)

Training Pipeline (täglich + Event-getriggert)

Jeden Morgen um 7:30 UTC (vor Börseneröffnung) läuft automatisch. Zusätzlich wird ein Retraining getriggert wenn der Tagesverlust ≥ 5% erreicht:

EventBridge 7:30 UTC Cleanup Buffer (Tier-Promotion) Data Prep + Market Regime PPO Training ×40 parallel Modelle → S3 Paper Trading alle 5 Min
Daily Loss ≥ 5% Retraining Trigger Step Functions (gleiche Pipeline)
ParameterWertBedeutung
Timesteps25.000Handelsentscheidungen pro Trainingsrunde
Learning Rate0,0003Schrittweite beim Policy-Update
Batch Size64Erfahrungen pro Gradient-Schritt
N Steps (Rollout)~2.048Gesammelte Schritte vor jedem Update
Gamma0,97Gewichtung zukünftiger Belohnungen (kürzerer Horizont)
GAE Lambda0,95Glättung der Advantage-Schätzung
Clip Range0,2Max. Policy-Änderung pro Update (±20%)
Entropy Coefficient0,01Erkundungsanreiz (verhindert zu frühe Festlegung)
Epochen pro Batch10Wie oft jede Erfahrung wiederverwendet wird
Walk-Forward Folds3Rollierende Train/Test-Fenster, bestes Modell wird gespeichert
Parallelität40 gleichzeitigLambda-Trainings parallel via Step Functions
Daten-Zeitraum120 Tage15-Min-Kerzen + Sentiment + DAX-Index
Observation Space16 FeaturesKurs, Sentiment, Bollinger, DAX, Volumen u.a.
Action Space5 AktionenHOLD, BUY_SMALL, BUY_FULL, SELL_HALF, SELL_ALL

Daten-Features (Data Prep)

Für jedes der 40 DAX-Symbole werden täglich 120 Tage XETRA-Kursdaten in 15-Minuten-Auflösung über den IB Execution Service (IB Gateway) geladen. Zusätzlich wird der DAX-Index (^GDAXI) als Markt-Referenz abgerufen. Das Sentiment wird ticker-spezifisch zugeordnet (min. 10 Artikel pro Symbol, sonst Fallback auf Markt-Aggregat). Alle Daten werden mit folgenden Features angereichert:

Kurs (OHLCV) Sentiment (stündlich) Sentiment-Trend (4h Δ) Returns (15m, 1h, 1d) Volatilität (34-Bar) RSI (9) MACD (5/13) Bollinger Bands Volume Ratio DAX Tagesrendite DAX-Korrelation

34 Bars = 1 XETRA-Handelstag (8,5h × 4 Kerzen/h). Das Sentiment wird stündlich aus dem DynamoDB-Cache aggregiert und auf die 15-Min-Kerzen forward-filled. Die DAX-Korrelation wird als Rolling Correlation über 5 Handelstage berechnet. Bollinger Bands nutzen ein 20-Bar-Fenster mit 2σ.

Vom Training zum Paper Trading (Closed Loop)

Das Training nutzt Walk-Forward Validation mit 3 rollierenden Folds — das beste Modell über alle Folds wird als .zip in S3 gespeichert. Während der XETRA-Handelszeiten (9:00–17:30) lädt der Paper-Trading-Agent alle 5 Minuten die aktuellen Modelle, berechnet Live-Indikatoren (RSI, MACD, Bollinger, Volume Ratio) und holt DAX-Index-Daten für den 16-dimensionalen Observation-Vektor. Der Agent wählt aus 5 Aktionen (HOLD, BUY_SMALL 25%, BUY_FULL 100%, SELL_HALF 50%, SELL_ALL 100%) — mit echten Kursen, aber simuliertem Kapital (100.000€). Zusätzlich greifen Risikomanagement-Regeln: Stop-Loss, Take-Profit, Sektor-Limits und ein Drawdown-Stop, der den Handel bei zu hohen Verlusten pausiert.

Portfolio Brain & Market Regime Agent

Der Portfolio Brain sitzt zwischen PPO-Kaufsignalen und der Ausführung. Er berechnet rollende 120-Tage-Korrelationen zwischen Kandidat und allen offenen Positionen und blockt Trades bei paarweiser Korrelation > 0,75 oder Portfolio-Durchschnitt > 0,60. Mehrere Kaufkandidaten werden nach Diversifikationsvorteil sortiert (niedrigste Korrelation zuerst).

Der Market Regime Agent klassifiziert den aktuellen Marktzustand aus DAX-Daten in 5 Regimes: Bull/Bear × High/Low Vol + Sideways. Das Regime fließt als Feature 15 in den Observation-Vektor und steuert dynamische Risikoanpassungen (Stop-Weite, Positionsgröße, Take-Profit).

Tiered Experience Buffer & Event-Retraining

Der Paper-Trading-Agent speichert nach jedem 5-Minuten-Zyklus alle Observations, Actions und Rewards in einen dreistufigen Experience Buffer in S3:

  • Hot (5 Tage, 3x Gewicht): Aktuelle Marktphase, hohe Replay-Rate
  • Warm (90 Tage, 1x Gewicht): Mittelfristige Muster
  • Cold (2 Jahre, 2x Gewicht): Extreme Events (Reward ≥ 5%), Krisen-Lernen

Täglich werden vor dem Training abgelaufene Hot-Erfahrungen nach Warm promotet und abgelaufene Warm/Cold-Dateien gelöscht. Zusätzlich wird bei ≥ 5% Tagesverlust automatisch ein Retraining der gesamten Pipeline getriggert (sofern nicht bereits eines läuft). Das ermöglicht schnelle Adaption an veränderte Marktbedingungen, ohne die Stabilität des täglichen Trainings zu gefährden.

IB Gateway & Live-Trading

Das System unterstützt einen Live-Trading-Modus über Interactive Brokers Gateway. Der Modus wird per SSM-Parameter (/finbert-trading/trading-mode) gesteuert und ist über die Einstellungen umschaltbar.

Im Live-Modus leitet der Paper-Trading-Agent nach jeder ausgeführten Simulation die Orders an den Execution Service (FastAPI auf EC2 t3.small) weiter, der über ib_async Market-Orders an IB Gateway übermittelt. Idempotency-Keys verhindern doppelte Ausführung. IB Gateway läuft als Docker-Container (ghcr.io/gnzsnz/ib-gateway) mit noVNC für die 2FA-Re-Authentifizierung.

Transaktionskosten-Gate: Vor jedem Kauf fragt der Agent per whatIfOrder die erwartete Commission bei IB ab. Trades werden nur ausgeführt, wenn die Commission ≤1% des Ordervolumens beträgt (IB XETRA: 0,1%, min €4 → Mindest-Ordervolumen ~€400). Im Training-Environment gilt dieselbe Kostenstruktur (max(4€, 0.1%)), sodass das PPO-Modell unwirtschaftliche Trades bereits während des Trainings vermeidet.