← Übersicht

2026-08 – 2026-09 · Projektleitung, KI-gestützt mit Claude

pbody. Vom RL-Tradingbot zum Forschungsprogramm

Ein Lernprojekt, das zu einem fünfwöchigen Forschungsprogramm wurde. Ein Reinforcement-Learning-Agent sollte CFDs auf einem simulierten IG-Konto handeln und fand keinen handelbaren Vorteil. Übrig blieb ein Momentum-Kandidat auf US-Aktien, der publizierte Forschungsergebnisse auf 21 Jahren Daten reproduziert und einen versiegelten Out-of-Sample-Test besteht.

Kurzgefasst

pbody begann als Lernprojekt. Ich wollte verstehen, wie ein Reinforcement-Learning-Agent lernt, CFDs auf einem simulierten IG-Konto zu handeln, und keine Renditen jagen. Zwischen dem 7. August und dem 9. September 2026 wurde daraus ein Forschungsprogramm mit 38 nummerierten Experimenten und 23 Präregistrierungen. Die Projektleitung lag bei mir, und für die Feinabstimmung habe ich Claude eingesetzt, um schneller voranzukommen. Das ehrliche Ergebnis ist, dass im Devisenhandel Nichthandeln die beste Strategie war und am Ende ein einziger einsetzbarer Kandidat auf dem US-Aktienmarkt übrig blieb. Zum Abschluss wurde jedes Artefakt an drei Orten gesichert und die Wiederherstellung geprüft.

Umsetzung

Infrastruktur

Die Simulation lief als gRPC-Episodenserver in Go und bildete ein CFD-Konto nach ESMA-Regeln ab. Trainer und Research-Skripte entstanden in Python mit PyTorch und Stable-Baselines3. Die Polygon-Flat-Files der Jahre 2003 bis 2025 flossen in einen binären Cache mit 18,3 Milliarden Datensätzen auf 1,1 Terabyte. Trainiert wurde auf einem Heimrechner mit RTX 5090, auf dem alle 24 GPU-Läufe als Docker-Container liefen, während ein Debian-Worker den Livebetrieb über systemd-Timer trug.

Methodik

Die Erfolgskriterien standen schriftlich fest, bevor die Zahlen vorlagen, und ein versiegelter Zeitraum blieb bis zum finalen Test unberührt. Ein Leck-Test, bei dem die nächste Rendite absichtlich in die Beobachtung floss, schlug in 49 von 50 Bewertungen an. Damit war belegt, dass die Pipeline ein vorhandenes Signal findet, und ein flaches Ergebnis bedeutete fehlendes Signal statt eines Fehlers.

Ergebnis

Devisen

Der RL-Agent blieb in jedem Lauf flach. Überwachte Modelle fanden zwar ein echtes Signal, doch es lag in den abendlichen Rollover-Stunden, in denen der Spread rund dreizehnmal so hoch ist wie tagsüber. Im Livebetrieb über 158 Entscheidungen auf neun Währungspaaren hat das System folgerichtig keinen einzigen Trade ausgeführt.

US-Aktien

Volatilitätsgesteuertes Querschnittsmomentum reproduzierte publizierte Forschungsergebnisse auf 21 Jahren Daten, brachte im versiegelten Zeitraum rund 16 Prozent pro Jahr und überstand sechs präregistrierte Korrekturen. Einem Livebetrieb stehen jetzt die steuerliche Einordnung und die Kapitalhöhe im Weg, nicht fehlende Belege.

Stolpersteine

Rund zwei Dutzend Fehler traten auf, keiner davon im RL-Algorithmus selbst. Die meisten steckten in Daten und Kalendern, etwa zwei Sommerzeitfehler rund um die Wochenendpause im Devisenhandel. Im Betrieb war der Runner in systemd per Requires= fest an den Live-Server gebunden. Als der Worker viermal neu startete, eröffnete der Runner deshalb jedes Mal eine neue Episode, und der laufende Livetest ging nach 105 von 200 Entscheidungen verloren.

Stack

Go, gRPC, Python, PyTorch, Stable-Baselines3, TensorBoard, Docker, Polygon.io, IG und Interactive Brokers, Debian mit systemd.