C++ für Latenz-kritisches Trading: wann es sich wirklich lohnt.
C++ ist die Standardsprache der Hochfrequenz-Branche. Jane Street, Hudson River Trading, Citadel Securities, Optiver — sie alle schreiben ihre Order-Engines, Market-Maker und Risk-Modules in C++. Daraus den Schluss zu ziehen, dass jede ernsthafte Trading-Strategie in C++ gehört, ist einer der teuersten Denkfehler, die ich bei ambitionierten Retail-Tradern sehe. Dieser Artikel zieht die Linie zwischen „lohnt sich" und „verbrennt Monate ohne Gegenwert".
Warum C++ der HFT-Standard ist.
Vier technische Eigenschaften unterscheiden C++ von Python, Java oder C#:
- Kein Garbage Collector: Ein GC kann unvorhersehbar Pausen von 1–50 ms einlegen — im richtigen Moment eine Katastrophe. In C++ haben Sie deterministische Lebenszeiten, Pausen entstehen nur dort, wo Sie sie selbst verursachen.
- Direkter Memory-Zugriff: Cache-Lines, Memory-Alignment, Prefetching, Lock-Free-Datenstrukturen — alles direkt steuerbar. Eine gut alignte Order-Book-Struktur ist um Größenordnungen schneller als ein Python-Dict.
- Inline-Optimierung: Der Compiler kann hot paths aggressiv inlinen, Template-Code wird vollständig spezialisiert. Funktionsaufruf-Overhead verschwindet — was bei Millionen Marktdaten-Events pro Sekunde signifikant ist.
- SIMD-Instruktionen: AVX-512 verarbeitet 16 Floats parallel in einem CPU-Takt. Für Signalfilter, Mid-Price-Berechnungen oder Greeks-Updates lohnt sich das messbar.
Der Punkt ist nicht „C++ ist schnell". Der Punkt ist: in C++ können Sie Latenz budgetieren. Eine Funktion, die 800 ns braucht, wird auch in 99,99 % aller Aufrufe 800 ns brauchen. Diese Vorhersagbarkeit ist das, was HFT-Firmen kaufen.
Was C++ teuer macht.
Was selten erwähnt wird, wenn jemand mit „wir nutzen C++" wirbt:
- Entwicklungszyklen: Eine Strategie-Idee, die ich in Python in drei Stunden teste, kostet in C++ ein bis zwei Tage — Build-System, Header-Dependencies, Template-Fehler, Memory-Debugging.
- Bug-Klassen, die Python nicht kennt: Use-after-free, Double-free, Buffer-Overflows, Race-Conditions in Lock-Free-Code. Im Trading bedeutet jeder dieser Bugs potenziell falsche Orders.
- Toolchain-Komplexität: CMake, Conan, Sanitizers (ASan, TSan, UBSan), Linker-Skripte, Profile-Guided-Optimization. Wer das ernst nimmt, braucht eine Build-Engineer-Mentalität.
- Hiring-Markt: Erfahrene Low-Latency-C++-Entwickler kosten zwischen 180k und 400k EUR im Jahr — und sind selten. Eine Mandantenstrategie auf einem Stack zu bauen, für den es keinen zweiten Entwickler im Umkreis gibt, ist ein Klumpenrisiko.
Wann sich C++ konkret lohnt.
Meine Faustregeln, mit denen ich Mandanten berate:
- Latenz-Anforderung unter 1 ms tick-to-trade: Hier reicht Python selbst mit C-Extensions nicht mehr. Java und C# können konkurrieren, aber nur mit aggressivem GC-Tuning und JIT-Warmup-Disziplin.
- Co-Location-Setup im Datacenter der Börse: Wenn Sie für Cross-Connect, FPGA-NIC und 10G-Direct-Feed Geld ausgeben, ist der Software-Stack der einzige verbleibende Hebel. C++ ist dort Pflicht.
- Eigenes Market-Making: Quoting auf beiden Seiten verlangt, dass Sie schneller cancel-replacen als die toxische Order-Flow Sie pickt. Unter 50 µs Reaktionszeit wird das ohne C++ unbezahlbar.
- Hochfrequente Stat-Arb über Hunderte Instrumente: Wenn das Universum so groß ist, dass Python-Overhead die Strategie-Logik dominiert, ist C++ der Hebel.
Wann sich C++ nicht lohnt.
Genauso wichtig — und hier mache ich Mandanten regelmäßig Geld, indem ich sie davon abhalte:
- Retail-Strategien mit Reaktionszeiten > 100 ms: Wer Swing- oder Intraday-Setups handelt, die ohnehin auf 1-Minuten- oder 5-Minuten-Bars laufen, gewinnt durch C++ exakt null Cent. Die Latenz steckt im Broker-Routing, nicht in Ihrem Code.
- Strategien mit häufiger Iteration: Wenn Sie pro Woche zwei neue Ideen testen wollen, ist Python plus Pandas plus Polars der richtige Stack. C++ würde Sie auf eine Idee pro Monat ausbremsen.
- ML-getriebene Strategien: Training in Python, Inferenz über ONNX-Runtime oder Torch. Der C++-Anteil ist klein, kaum spürbar — und die Trainingsschleife dominiert ohnehin die Forschungszeit.
- Single-Trader-Setups: Wenn Sie ohne Team arbeiten, ist die Bus-Faktor-1-C++-Codebasis das Letzte, was Sie produktiv halten wird.
Eine ehrliche Performance-Rechnung.
Ein realistisches Beispiel aus der Praxis: Eine Mean-Reversion-Strategie, die alle 100 ms ein Signal prüft. Python (mit Numba für die Hot-Loop) braucht ca. 350 µs pro Iteration, ein C++-Port liegt bei ca. 25 µs. Klingt nach einem Faktor 14 — aber die Order-Latenz zum Broker beträgt 8 ms. Das gesamte tick-to-trade verbessert sich von 8,35 ms auf 8,025 ms. Eine Verbesserung um 4 %. Für die zwei Monate Entwicklungszeit.
Anders gerechnet: Bei einem Latency-Sensitive-Market-Maker, der pro Tag 50 000 Quotes updated, sparen 100 µs pro Quote 5 Sekunden pro Tag. Klingt nichts — aber in diesen 5 Sekunden würden Sie 0,3 % toxischer Fills weniger einsammeln. Auf 250 Handelstagen multipliziert. Dort lohnt C++.
Konkretes Beispiel: Order-Book-Reconstruction.
Eine der häufigsten Komponenten, bei der C++ wirklich glänzt: ein In-Memory-Limit-Order-Book, das aus einem Multicast-Feed live rekonstruiert wird. Die Datenstruktur ist eine sortierte Map von Preisleveln, mit Verkettungen pro Order. Naiv in Python: zu langsam. In C++ mit Flat-Maps und intrusiven Listen:
struct PriceLevel {
int64_t price_ticks;
uint64_t total_qty;
boost::intrusive::list<Order> orders;
};
class OrderBook {
boost::container::flat_map<int64_t, PriceLevel> bids_;
boost::container::flat_map<int64_t, PriceLevel> asks_;
public:
void on_add(const AddMsg& m) noexcept {
auto& side = m.is_bid ? bids_ : asks_;
auto [it, inserted] = side.try_emplace(m.price);
it->second.total_qty += m.qty;
it->second.orders.push_back(*pool_.allocate(m));
}
int64_t best_bid() const noexcept {
return bids_.empty() ? 0 : bids_.rbegin()->first;
}
};
Drei Details, die in C++ messbar sind und in Python verloren gehen: noexcept
verhindert Exception-Handling-Overhead in der Hot-Path, flat_map hält die
Daten cache-freundlich kontiguent, und der Object-Pool vermeidet Allokationen pro Order.
Das ist die Art von Tuning, die in Co-Location-Setups 200 ns pro Update kostet — gegenüber
5–20 µs für eine naive Implementierung.
Lehren von Jane Street, HRT und Citadel.
Wer öffentliche Talks und Engineering-Blogs dieser Firmen liest, lernt drei Dinge:
- C++ ist nicht überall: Forschung läuft in OCaml (Jane Street), Python (HRT, Citadel) oder Q/KDB+. C++ ist nur dort, wo es Geld bringt — der heiße Pfad.
- Korrektheit vor Performance: Die Firmen investieren massiv in Test-Frameworks, formale Verifikation, Replay-basierte Regression. Nicht der schnellste Code wird produktiv, sondern der korrekteste schnelle Code.
- Hardware ist Teil der Strategie: Custom-FPGAs, eigene Network-Stacks (kernel bypass via DPDK oder Solarflare), Kernel-Tuning. C++ ist nur ein Werkzeug in einer viel größeren Toolchain.
Wer C++ ohne diese Begleit-Infrastruktur einsetzt, erbt die Komplexität ohne den Vorteil.
Meine Praxis: kein C++.
Ich schreibe meine eigenen Strategien in Python, mit gezielten Numba- und Rust-Bausteinen, wo es spürbar ist. Der Grund ist simpel: meine Strategien handeln auf 1-Minuten- bis Tages-Bars. Meine tick-to-trade-Anforderung liegt bei ca. 200 ms. Ein C++-Port würde mir null Edge verschaffen — und die Iterationsgeschwindigkeit halbieren.
Bei Mandanten empfehle ich C++ in den letzten zehn Jahren genau zweimal gemacht: einmal für einen institutionellen Market-Maker im DAX-Future-Bereich, einmal für eine Latency-Arb-Strategie mit eigener Cross-Connect. Beide Male war die Frage nicht „C++ oder Python", sondern „Welche Komponente in C++, welche in Python". Diese Mischarchitektur — schneller Kern, schnelle Forschung drumherum — ist meistens das richtige Modell.
Sie stehen vor der Frage, ob Ihre Strategie wirklich C++ braucht — oder ob Sie an der falschen Stelle optimieren? Erstgespräch buchen — wir prüfen die Latenz-Anforderung ehrlich gegen Ihre tatsächliche Strategie.