Wie entwerfe ich Hochfrequenzhandelssysteme und deren Architektur? Teil III

Dies ist der letzte Teil von 3 Artikelserien, die ich geschrieben habe. In diesem Teil werde ich erklären, was ich als den besten Ansatz für Systeme mit extrem geringer Latenz empfunden habe.

Obwohl ich mich auf Handelssysteme konzentriert habe, kann dies auf alle Systeme mit geringer Latenz angewendet werden: Kommunikation, Audio, Video usw.

Ich verwende also das folgende Muster:

Beschäftigt / Warten oder Drehen : Dies ist keine Kategorie r als Muster, sondern wird als „Anti-Muster“ betrachtet und normalerweise nicht empfohlen. Wenn Sie jedoch Systeme mit geringer Latenz entwerfen, ist es uns egal, wie schön es ist oder ob es den bewährten Methoden folgt. Wir kümmern uns nur um die Latenz.

Der Prozess befindet sich in einer engen Schleife und wartet auf etwas. Diese Schleife belegt 100% der CPU-Zyklen. In unserem Fall lesen wir Marktdaten aus unserem Limit-Orderbuch-Modul. Wenn wir bestimmte Strategiekriterien erfüllen, senden wir bestimmte Aufträge, um diesen Handel auszuführen. Dies ist bei weitem der schnellste Weg, um die Daten von anderen Modulen abzurufen.

Aber nicht nur das, mit dieser Art von Prozess werden wir meistens Cache-Fehler und den Kontextwechsel der CPU vermeiden. Etwas, über das ich in meinem letzten Artikel gesprochen habe.

Das Folgende ist ein grundlegender Codeausschnitt zur Funktionsweise

Aber nicht alles so gut wie es scheint, Busy / Wait-Prozesse sind sehr schwer zu entwerfen und zu gefährlich für die Gesamtleistung, da die gesamte CPU-Leistung die Leistung des gesamten Systems beeinträchtigen könnte.

Nun ist der Schlüsselteil für die Verwendung von Besetzt / Warten in unseren Systemen das Festlegen einer Thread-Affinität zu einem bestimmten CPU-Kern. Das bedeutet, dass wir unserem System sagen, dass dieser Besetzt- / Wartevorgang nur in einem CPU-Kern ausgeführt werden soll (könnte Kern 1, 2, 3 usw. sein). Und wir werden in der Lage sein, so viele Prozesse wie CPU-Kerne zu „pinnen“, die wir haben. Wenn wir dies nicht tun, weil der Thread-Zeitplan funktioniert, wird die gesamte CPU-Leistung verbraucht.

Mit dieser Art von Methoden sollten Threading-Modell, E / A-Modell und Speicherverwaltung so konzipiert sein, dass sie zusammenarbeiten, um die beste Gesamtleistung zu erzielen. Dies widerspricht dem OOP-Konzept der losen Kopplung , es ist jedoch erforderlich, Laufzeitkosten für dynamischen Polymorphismus zu vermeiden.

Natürlich müssen Sie sich immer noch um Synchronisationsmethoden (Sperren) kümmern, wenn dies erforderlich ist. Mein Ansatz hierfür ist es, meine Datenstrukturen so zu gestalten, dass ich nur wenig Synchronisation benötige.

Fazit: Dieser Teil ist die empfindlichste Sache in unserem System. Mit dieser Technik erhalten Sie die beste Latenz.

6. Position & amp; Risikomanagement

Alle von der Strategie gesendeten Aufträge sollten in Positionen konsolidiert werden, damit Sie Ihre offenen / geschlossenen Aufträge und vor allem Ihr Engagement am Markt verfolgen können. Im Idealfall sollte Ihre Strategie ein flaches Engagement beibehalten. Bei bestimmten Strategien, wie z. B. Market Making, können Sie jedoch ein kontrolliertes Engagement zulassen (wenn Sie Inventar halten).

Ausgehend von einem Stop-Loss pro Position oder für das gesamte Engagement im Portfoliomanagement ist das Risikomodul ein wichtiges Element, das mit Ihrer Strategie interagiert und alle offenen Positionen und das gesamte Engagement am Markt in Echtzeit überwacht .

Im Folgenden sind einige beliebte Risikomanagementregeln aufgeführt:

In diesem Modul möchten Sie möglicherweise auch verschiedene Zuordnungen zu Strategien oder Trades analysieren. Es gibt viele Studien, die belegen, dass eine Allokationsstrategie zu einer geringeren Volatilität Ihrer Renditen und zu einer hervorragenden Versicherung führen kann, wenn etwas schief geht.

7. Überwachungssysteme

Da wir ein vollautomatisches System aufbauen, das in der Lage sein muss, Positionen innerhalb von Millisekunden zu öffnen und zu schließen, müssen wir geeignete Überwachungssysteme sicherstellen, um den Gesamtbetrieb zu steuern.

Stellen Sie sich vor, was passieren würde, wenn ein Mensch erkennt, dass eine Strategie nicht das tut, was er sollte, oder wenn ein Veranstaltungsort die Preise nicht so bereitstellt, wie er sollte. Wenn wir das System stoppen müssen, können bereits nicht behebbare Verluste gemacht werden.

Wie viele Minuten benötigt diese Person, um das System herunterzufahren? 5 Minuten? 1 Minuten?

Innerhalb dieses Zeitraums können mehr als Tausende falscher offener Bestellungen eingehen. Beängstigend!

Deshalb müssen wir Überwachungssysteme einrichten, um einige der folgenden Punkte zu überprüfen:

Wenn Sie diese Artikel gelesen haben, würde ich gerne von Ihnen hören und neue oder andere Ansätze diskutieren. Bitte teilen !!

Ariel Silahian

http://www.sisSoftwareFactory.com

Schlüsselwörter: #hft #quants #forex #fx #risk $ EURUSD $ EURGBP $ EURJPY #trading