Enger Tail. Keine Überraschungen bei p99.
Lock-freie SPSC-Queues, branchlose Tag-Decoder, Hot-Path-Inlining. Die langsamste Nachricht sieht aus wie die schnellste. Genau das bewerten Handelsplätze tatsächlich.
Eine C++23-FIX-Protokoll-Engine für Handelsplätze, die einen verpassten Heartbeat nicht verzeihen. Null Allokationen auf dem Hot Path, Sub-Mikrosekunden-Parsing, deterministischer Sitzungszustand.
Vorhersehbar. Bis ins Detail.
Jede Zahl, nach der Sie in einem Produktions-Runbook greifen würden. Unter Last auf Standard-Hardware gegen einen deterministischen Replay gemessen.
Drei architektonische Entscheidungen, die sich aufaddieren. Jede macht die nächste erst möglich.
Lock-freie SPSC-Queues, branchlose Tag-Decoder, Hot-Path-Inlining. Die langsamste Nachricht sieht aus wie die schnellste. Genau das bewerten Handelsplätze tatsächlich.
Statische Arenas, intrusive Freelisten, Nachrichtenslots fester Größe. Der Allokator läuft nie, während Orders fließen. Damit der Kernel Sie nie unterbricht, um eine Page zurückzufordern.
Pro Version generierte Wörterbücher, pro Sitzung zur Laufzeit wählbar. Custom-Dialekt-Overlays für plattformspezifische Felder. Das Wire-Format des Handelsplatzes ist das Format, das Sie senden.
Vorgefertigte Sitzungsprofile für die wichtigsten Aktien-, Futures-, FX- und Krypto-Handelsplätze. Heartbeats, Sequence-Reset-Semantik und Resend-Request-Eigenheiten aus realen Produktions-Traces.
Eine NewOrderSingle dekodiert und geroutet, nebeneinander. Dieselbe Nachricht, dieselbe Maschine, sehr unterschiedliche Kosten.
void Application::onMessage(const FIX44::NewOrderSingle& msg, const SessionID& sid) { FIX::ClOrdID clOrdId; msg.get(clOrdId); // allocates FIX::Symbol symbol; msg.get(symbol); // allocates FIX::Side side; msg.get(side); FIX::OrderQty qty; msg.get(qty); // allocates Decimal FIX::Price price; msg.get(price); // allocates Decimal std::string key = symbol.getString(); // allocates std::string router_->route(key, clOrdId.getString(), qty, price); } // ~14 heap allocs / msg
void OrderHandler::on_message(MessageView m, SessionRef sid) noexcept { auto [cl_ord_id, symbol, side, qty, price] = m.decode<D::ClOrdID, D::Symbol, D::Side, D::OrderQty, D::Price>(); // in-place, span<const char> // fixed-arena order slot, no heap, no copies auto& slot = arena_.acquire(cl_ord_id); slot.init(symbol, side, qty, price, sid); router_.route(slot); // 0 heap allocs / msg }
QuickFIX hat zwei Jahrzehnte lang die Schwerarbeit für die Branche geleistet. NexusFIX greift man, wenn diese Entscheidungen zum Flaschenhals geworden sind.
| QuickFIX | NexusFIX | |
|---|---|---|
| Hot-Path-Allokationen | ~14 Heap-Allokationen pro Nachricht (std::string, Decimal) | 0 · statische Arenen, In-Place-Decode |
| p99 Parse-Latenz | 1,2–1,8 µs je nach Dialekt | < 500 ns · verzweigungsfreies Tag-Decode |
| Durchsatz / Kern | 60–90K msg/s nachhaltig | 240K+ msg/s nachhaltig |
| Tail-Verhalten unter Last | Kein GC, aber Allokator-Churn = unvorhersehbare Spikes | Kein Allokator im Hot-Path. flacher Tail |
| Protokollversionen | 4.2 / 4.4 / 5.0. Pro Build ein XML-Datenwörterbuch | 4.2 / 4.4 / 5.0 / FIXT + Runtime-Dialekt-Overlay |
| Sprache | C++03 / C++11 Idiome, virtueller Dispatch | C++23, Concepts + Ranges, kein virtual im Hot-Path |
Wire-Bytes rein. Geroutete Order raus. Drei Stufen, alle im selben Thread, alle ohne Allokation.
Der SOH-getrennte Stream wird in-place durchlaufen. Jedes Tag löst zu einer typisierten Sicht auf den Originalpuffer auf; numerische Felder werden verzweigungsfrei geparst, das Dialekt-Overlay wird zum Zeitpunkt des Session-Bindings angewendet.
Sequenznummern, Heartbeat-Fenster, Gap-Fill-Semantik, Resend-Request-Eigenheiten. Bearbeitet von einer generierten State-Machine pro Venue-Profil. Jeder Übergang wird in einem Memory-Mapped-Journal protokolliert.
Ein Order-Slot aus einer festen Arena wird beschafft, per Referenz befüllt und über eine lock-free SPSC-Queue an Ihre Anwendung übergeben. Der Slot lebt, bis die Order ihren Endzustand erreicht, dann kehrt er in die Arena zurück.
Zwei Fäden, an denen man als nächstes ziehen kann. Der Architektur-Aufsatz, oder der lebendige Konversations-Erklärer.
Wie NexusFIX statische Arenen, lock-free SPSC-Queues und generierte State-Machines nutzt, um die langsamste Nachricht wie die schnellste aussehen zu lassen. Mit Zahlen.
Den Deep-Dive lesen →Eine konversationelle Schnittstelle zu den Docs der Engine, Message-Dictionaries, Venue-Profilen und der Benchmark-Suite. Trainiert auf der produktiven Codebasis, geerdet in echten Headern.
Den Chatbot öffnen →NexusFIX wird als eine einzige statische Bibliothek und ein CLI-Session-Simulator ausgeliefert. Bringen Sie eine Venue-Konfiguration und einen Handler mit, und Sie haben eine deterministische FIX-Session, die lokal läuft. Aus einem Journal wiedergebbar, byte-genau nachvollziehbar.
NexusFIX ist eine von drei Engines, die wir bauen. Dieselbe Philosophie: Open Source, wo möglich, Performance zuerst, kein Lock-in.
KI-Generierung im Großmaßstab + C++23-Backtest-Geschwindigkeit + statistische Komposition auf Institutsniveau. Der dreischichtige Wettbewerbsgraben, der 1000+-Signal-Quant-Trading zugänglich macht.
Mehr erfahren →C++23-Backtest-Engine mit 138+ Indikatoren und produktionsreifen Strategien. Die Replay-Schicht unter StratCraft, eigenständig verfügbar für Ihren eigenen Research-Stack.
Mehr erfahren →