Wie ein FIX-Trading-Terminal mit Rust-Kern gebaut wird, von der Session-Recovery bis zur Ladder, und welcher Nachweis zeigt, dass ein Anbieter schon eines gebaut hat.
Kein Verzeichnis sagt Ihnen, welche Unternehmen tatsächlich ein FIX-Trading-Terminal mit Live-Orderbuch, Scalping-Panel und Rust-Hot-Path gebaut haben, denn „wir haben ein Trading-Terminal gebaut“ umfasst alles von einem Chart-Skin auf der API eines Brokers bis zu einem FIX-Client mit eigenem Order-Zustandsautomaten. Ein Anbieter, der eines gebaut hat, kann es beweisen: das Terminal gegen einen Live-Handelsplatz laufen lassen, während Sie zusehen, die Handelsplätze nennen, die seine FIX-Anbindung zertifiziert haben, sagen, wo seine Latenz-Zeitstempel genommen werden, und Code übergeben, den Sie ohne seine Hilfe bauen können.
Die kurze Antwort zur Architektur: Ein Rust-Kern besitzt die FIX-Session und ihre Sequenznummern, den Order-Zustandsautomaten, das lokale Orderbuch und die Pre-Trade-Prüfungen, und bei mehr als ein paar Tradern läuft er als Gateway nahe am Handelsplatz. Die Oberfläche sendet nur Befehle und zeichnet einmal pro Frame den neuesten Zustand, sodass sie einfrieren oder abstürzen kann, ohne dass eine Order verloren geht.
Lesen Sie auch
Alles, dessen Verlust oder Verzögerung eine Order verändert, liegt im Kern. Nach dieser Regel gehören fünf Teile dorthin.
Die Oberfläche hält eine Ansicht vor: Ladder, Charts, Order-Blotter, Positionen, Hotkeys. Fällt sie aus, hält der Kern weiterhin die Session, die offenen Orders und alle Stopps, die er verwaltet. Rust zählt vor allem im Kern. Ohne Garbage Collector fällt keine GC-Pause zwischen einen Befehl und die Leitung, und der Compiler weist Code zurück, der ein Orderbuch aus zwei Threads beschreibt, es sei denn, das Buch wird hinter einem Lock geteilt.
Eine gewöhnliche Webseite kann die TCP-Verbindung, auf der eine FIX-Session läuft, nicht öffnen. Die Chrome-Dokumentation sagt, dass Standard-Webanwendungen „keine rohen TCP- oder UDP-Verbindungen aufbauen können“, und die Direct Sockets API von Chrome hebt diese Grenze nur für Isolated Web Apps auf. Ein natives Terminal könnte eine solche Verbindung halten, aber dann trägt jeder Desk seine eigene Handelsplatz-Session, seine eigene Netzwerkroute und seinen eigenen Sequenzzustand. Sobald es mehr als ein paar Trader sind, gehört der Kern in ein Gateway nahe am Handelsplatz: in die Colocation, wenn die Entfernung das Latenzbudget dominiert, in eine nahe Cloud-Region, wenn Trader von Hand klicken und ihre Entscheidungen weit länger dauern als der Netzwerkweg.
Die Sessionschicht bietet Ihnen eine geordnete Verarbeitung und einen Weg, verpasste Nachrichten anzufordern. Sie verpflichtet die Gegenseite nicht, alle davon erneut zu senden. Die Regeln legt der technische Standard FIX Session Layer (Juni 2020) fest.
Daraus folgen drei Pflichten. Persistieren Sie die Sequenznummern bei jedem Senden und Empfangen, sonst fordert ein Neustart entweder den ganzen Tag erneut an, oder Sie werden wegen zu niedriger Nummern getrennt. Merken Sie sich, welche ExecID(17)-Werte bereits angewendet wurden, denn der Standard überlässt die Erkennung von Duplikaten dem Empfänger. Und schließen Sie jeden Reconnect mit einer Prüfung des Orderstatus ab, über OrderMassStatusRequest(35=AF), wo der Handelsplatz das unterstützt: Ein Gap Fill über eine Order hinweg bedeutet, dass Ihrem Bild von ihr eine Tatsache fehlt.
Ein ExecutionReport(35=8) trägt zwei Felder, die leicht zu verwechseln sind. In der FIX-Definition steht, dass ExecType(150) „den konkreten ExecutionRpt (z. B. Pending Cancel) beschreibt, während OrdStatus(39) immer den aktuellen Orderstatus angibt (z. B. Partially Filled)“. Steuern Sie den Zustandsautomaten über das Ereignis und nutzen Sie den Status zur Gegenprüfung.
Das FIX-Dictionary definiert LeavesQty(151), solange die Order aktiv ist, als OrderQty(38) minus CumQty(14). Damit ist es eine billige Invariante, die sich bei jedem Report zu einer offenen Order prüfen lässt. Ein Report, der sie verletzt, oder ein ExecType ohne Übergang aus dem aktuellen Zustand sollte die Order einfrieren und einen Alarm auslösen. Durch Raten landet ein Terminal am Ende bei einer Position, der der Handelsplatz widerspricht.
Ein Scalper ändert eine Order oft, bevor der Handelsplatz auf die vorherige Änderung geantwortet hat. Jede der folgenden Race Conditions ist eine Nachricht, die sich auf der Leitung mit einer anderen kreuzt.
Drop Copy liefert eine zweite Sicht. CME beschreibt den Dienst als Echtzeitkopien von Execution Reports und Bestätigungen, die „auf einem separaten, dedizierten Pfad“ gesendet werden. Gleichen Sie die Positionen im Kern damit ab und behandeln Sie jede Abweichung von der Order-Session als Incident.
Ein L2-Feed veröffentlicht Preislevel. Binance dokumentiert ein Verfahren aus Snapshot plus Updates: den Stream puffern, einen Snapshot holen, gepufferte Events verwerfen, die der Snapshot bereits enthält, den Rest der Reihe nach anwenden und ganz von vorn beginnen, wenn eine Update-ID übersprungen wird. Die Snapshots enden bei 5000 Leveln pro Seite, sodass tiefere Level unbekannt bleiben, bis sie sich ändern.
Ein L3-Feed veröffentlicht einzelne Orders. In Nasdaq TotalView-ITCH 5.0 trägt eine Nachricht vom Typ Add Order eine Order-Referenznummer, spätere Änderungsnachrichten verweisen darauf zurück, und bei null angezeigten Aktien „ist die Order tot und sollte aus dem Buch entfernt werden“. Der Builder hält eine Map von der Referenznummer zur Order und aggregiert daraus die Level: mehr Speicher und ein Lookup pro Nachricht, im Gegenzug für die Anzahl der Orders pro Level und eine Schätzung, an welcher Stelle der Warteschlange Ihre eigene Order steht.
Für die Ladder schlägt ein nach Preis indiziertes Array rund um den Touch (bestes Geld/bester Brief) meist einen Baum, da sich Preise in Ticks über einen zusammenhängenden Bereich bewegen. Ein Writer pro Instrument besitzt das Buch und hält fest, welche Sequenznummer es widerspiegelt; Recovery nach Lücken und Fan-out behandelt der Artikel über Marktdaten unter Burst-Last. Das Terminal fügt eine Regel hinzu: Ein Buch in Recovery wird als in Recovery dargestellt, nie als live.
Das Panel ist eine Depth-Ladder, aus der heraus Sie handeln. Ein Klick auf einen Preis platziert eine Limit-Order, Ziehen verschiebt sie, ein Hotkey sendet eine voreingestellte Größe oder stellt die Position glatt. Ohne Bestätigungsdialog liegt das Sicherheitsnetz im Kern, der bei jeder One-Click-Order die maximale Größe, die Preisbänder und die Exposure pro Konto prüft. Diese Prüfungen behandelt der Artikel über Pre-Trade-Risiko im Orderpfad.
Bei Bracket- und OCO-Orders entscheiden Sie zuerst, wo sie leben. FIX definiert ContingencyType(1385) auf NewOrderList(35=E), darunter One Cancels the Other und One Triggers the Other. Nutzen Sie die Variante des Handelsplatzes, wo es eine gibt; andernfalls emuliert der Kern sie, indem er Ausführungen beobachtet und das andere Leg sendet. Emulieren Sie nie im Prozess der Oberfläche: Ein Laptop, der mit einer ungeschützten Position in den Ruhezustand geht, ist genau der Fall, für den die Bracket-Order gedacht war.
Die Position ergibt sich aus den Ausführungen, Korrekturen und Stornierungen (Busts) eingeschlossen, und der Kern bewertet sie bei jeder Änderung gegen das lokale Orderbuch; die Oberfläche liest Position und PnL einmal pro Frame.
Einen Scalper interessieren zwei Ketten: von der Taste oder dem Klick bis zur Order, die die Netzwerkkarte verlässt, und vom Marktdatenpaket bis zum geänderten Pixel. Jedes Glied braucht seinen eigenen Zeitstempel.
Geben Sie jedes Glied in Perzentilen unter einer von Ihnen benannten Last an, nicht als Durchschnitt aus einem ruhigen Markt. Eine einzelne Zahl ohne ihre Messpunkte lässt sich mit keiner anderen Zahl vergleichen.
MDN nennt 60 Hz als häufigste Bildwiederholrate von Displays, wobei auch 120 und 144 Hz weit verbreitet sind; das ergibt 16.7 ms pro Frame bei 60 Hz und unter 7 ms bei 144 Hz. Ein lebhafter Börsenfeed kann das Buch innerhalb eines Frames viele Male ändern, deshalb wendet der Kern in jeder Technologie jedes Update an, und die Oberfläche zeichnet den neuesten Zustand einmal pro Frame.
MDN weist außerdem darauf hin, dass die meisten Browser requestAnimationFrame in Hintergrund-Tabs pausieren, daher kann nichts in der Seite leben, was weiterlaufen muss. Eine Web-Oberfläche auf einem Rust-Kern erfüllt diese Anforderung, ein Web-Stack im Orderpfad nicht.
Die Handelsplätze entscheiden, wann Sie hineindürfen. CME zum Beispiel „verlangt, dass alle Client-Systeme, die über iLink-Order-Routing auf CME Globex handeln oder Marktdaten der CME Group verarbeiten, durch AutoCert+ zertifiziert sind“, das automatisierte Testwerkzeug von CME. Laut CME umfasst die Zertifizierung Messaging, Verarbeitung und die Wiederherstellung nach anormalen Nachrichtenereignissen, und die Funktionstests laufen mit höchstens 10 Transaktionen pro Sekunde. Ein Bestehen sagt Ihnen nicht, was die Ladder zur Eröffnung tut, während ein Trader klickt.
Proben Sie die Fehlerfälle auf Ihrem eigenen Handelsplatz-Simulator: ein Gap Fill über Orders hinweg nach einem Reconnect, zu spät für ein Cancel, ein im Pending-Zustand abgelehntes Replace, ein Trade Bust, eine abgebrochene Session mit ruhenden Orders, eine Feed-Lücke mitten im Burst, während der Trader klickt. Spielen Sie dann aufgezeichneten FIX-Verkehr und Marktdaten in den Kern ein. Dieselbe Eingabe muss bei jedem Lauf dieselben Orderzustände und dasselbe Buch erzeugen, und damit wird aus dem Bug-Report eines Traders ein Test.
Kaufen Sie ein fertiges Terminal, wenn Ihre Handelsplätze auf seiner Liste stehen und Ihr Workflow dem Standard entspricht. Bauen Sie, wenn die Oberfläche zu den Gründen gehört, warum Ihre Kunden Sie wählen, wenn Ihre Handelsplätze nicht unterstützt werden oder wenn Ihnen der Orderpfad und seine Risikoprüfungen selbst gehören müssen. Der Mittelweg lizenziert eine FIX-Engine oder Handelsplatz-Adapter und baut den Rest.
Behandeln Sie „wir haben eines gebaut“ als Behauptung, die der Anbieter im ersten Termin belegt. Sechs Anforderungen erledigen den Großteil der Arbeit.
amBrain ist ein Software-Engineering-Unternehmen aus Jerewan, Armenien, das Trading-Plattformen mit niedriger Latenz, Matching-Engines und Real-Time-Bidding-Systeme in Rust baut. amBrain entwickelt seit 2019 Software.
amBrain baut Infrastruktur für den algorithmischen Handel: Orderausführung, Marktdaten und Pre-Trade-Risikokontrollen. Seine Leistungen im Trading umfassen die Entwicklung von Trading-Terminals, Order-Management-Systeme und die Börsenanbindung über das FIX-Protokoll.
Zwei Werte sind auf den Pfaden gemessen, die amBrain baut: Marktdatenlatenz unter 5 ms und Risikolatenz unter 1 ms. Keiner von beiden ist ein Wert vom Tastendruck bis zur Leitung, fragen Sie also wie bei jedem Anbieter nach den Messpunkten und der Last hinter beiden.
amBrain hat das Trading-Terminal für Spectre Trade gebaut. amBrain hat außerdem eine Mini-Börse gebaut, die im Produktivbetrieb in der Colocation von MOEX läuft. Das Design in diesem Artikel ist allgemein. Es beschreibt keines der beiden Systeme und nennt auch nicht die Protokolle, die eines von ihnen verwendet.
Drei Formate: vollständige Umsetzung, ein dediziertes Team oder in Ihr Team eingebettete Entwickler. Der Kunde behält das volle Eigentum an Produkt und Code, ausgenommen unsere wiederverwendbaren Komponenten.
Schreiben Sie vor dem ersten Gespräch mit jedem Anbieter, amBrain eingeschlossen, Ihre Handelsplätze auf, die FIX-Version oder den Dialekt, den jeder davon spricht, und die Latenz, die Sie zwischen benannten Messpunkten brauchen.
Bringen Sie Ihre aktuelle Architektur und den Fehlerfall mit, der Sie beunruhigt - wir gehen ihn in einer halben Stunde gemeinsam durch.