Architektur Eines Hochfrequenz Handelssystems
Hochfrequenz-Trading-System-Design und Prozess-Management Hochfrequenz-Trading-System-Design und Prozess-Management Berater: Roy E. Welsch. Abteilung: Systemdesign und Managementprogramm. Herausgeber: Massachusetts Institute of Technology Datum der Herausgabe: 2009 Handelsunternehmen sind heutzutage sehr stark auf Data Mining, Computermodellierung und Softwareentwicklung angewiesen. Financial Analysts erfüllen viele ähnliche Aufgaben wie die in der Software-und Fertigungsindustrie. Allerdings hat die Finanzbranche noch nicht in vollem Umfang verabschiedet High-Standard-Systeme Engineering Frameworks und Prozess-Management-Ansätze, die erfolgreich in der Software-und Fertigungsindustrie waren. Viele der traditionellen Methoden des Produktdesigns, der Qualitätskontrolle, der systematischen Innovation und der kontinuierlichen Verbesserung, die in Ingenieurdisziplinen gefunden werden, können auf den Finanzbereich angewendet werden. Diese Arbeit zeigt, wie das Wissen aus Ingenieurdisziplinen das Design und Prozessmanagement von Hochfrequenz-Handelssystemen verbessern kann. Hochfrequenz-Handelssysteme sind rechnerisch. Diese Systeme sind automatische oder halbautomatische Softwaresysteme, die von Natur aus komplex sind und ein hohes Maß an Konstruktionsgenauigkeit erfordern. Der Entwurf eines Hochfrequenz-Handelssystems verbindet mehrere Felder, darunter quantitative Finanzen, Systemdesign und Software-Engineering. In der Finanzbranche, wo mathematische Theorien und Handelsmodelle relativ gut recherchiert sind, ist die Fähigkeit, diese Entwürfe in echten Handelspraktiken umzusetzen, eines der Schlüsselelemente der Wettbewerbsfähigkeit einer Wertpapierfirma. Die Fähigkeit, Investmentideen effizient und effizient in leistungsfähige Handelssysteme zu verwandeln, kann einer Investmentfirma einen enormen Wettbewerbsvorteil verschaffen. (Fortsetzung) Diese Diplomarbeit enthält eine detaillierte Studie, die sich aus Hochfrequenzsystemen, Systemmodellen und - grundsätzen sowie Prozessmanagement zusammensetzt Für die Systementwicklung. Besonderes Augenmerk wird auf Backtesting und Optimierung gelegt, die als die wichtigsten Bestandteile beim Aufbau eines Handelssystems gelten. Diese Forschung baut System-Engineering-Modelle, die den Entwicklungsprozess zu führen. Es verwendet auch experimentelle Handelssysteme zur Überprüfung und Validierung von Grundsätzen, die in dieser Arbeit behandelt werden. Schließlich kommt diese These zu dem Schluss, dass systemtechnische Grundlagen und Rahmenbedingungen der Schlüssel zum Erfolg für die Durchführung hochfrequenter Handelssysteme oder quantitativer Investitionssysteme sein können. Thesis (S. M.) - Massachusetts Institut für Technologie, System Design und Management-Programm, 2009. Cataloged aus PDF-Version der Arbeit. Enthält bibliographische Hinweise (S. 78-79). Schlüsselwörter: System Design and Management Program. My AccountAlgorithmic Trading System Architecture Bisher habe ich in diesem Blog über die konzeptionelle Architektur eines intelligenten algorithmischen Handelssystems sowie die funktionalen und nicht-funktionalen Anforderungen eines algorithmischen Produktionssystems geschrieben. Seitdem habe ich eine Systemarchitektur entworfen, von der ich glaube, dass sie diese architektonischen Anforderungen erfüllen kann. In diesem Beitrag werde ich beschreiben die Architektur nach den Richtlinien der ISOIECIEEE 42010 Systeme und Software Engineering Architektur Beschreibung Standard. Nach dieser Norm muss eine Architekturbeschreibung enthalten: Mehrere standardisierte architektonische Ansichten (z. B. in UML) enthalten und die Rückverfolgbarkeit zwischen Entwurfsentscheidungen und architektonischen Anforderungen beibehalten Softwarearchitekturdefinition Es gibt noch keinen Konsens darüber, was eine Systemarchitektur ist. Im Rahmen dieses Artikels wird sie als die Infrastruktur definiert, innerhalb der Anwendungskomponenten, die funktionalen Anforderungen genügen, spezifiziert, implementiert und ausgeführt werden können. Funktionale Anforderungen sind die erwarteten Funktionen des Systems und seiner Komponenten. Nicht funktionale Anforderungen sind Maßnahmen, durch die die Qualität des Systems gemessen werden kann. Ein System, das seine funktionalen Anforderungen voll erfüllt, kann die Erwartungen nicht erfüllen, wenn nicht funktionale Anforderungen unbefriedigt bleiben. Um dieses Konzept zu veranschaulichen, betrachten Sie das folgende Szenario: ein algorithmisches Handelssystem, das Sie gerade gekauft haben, macht ausgezeichnete Handelsentscheidungen, ist aber völlig inoperabel mit den Organisationen Risikomanagement und Buchhaltungssysteme. Würde dieses System Ihren Erwartungen entsprechen Konzeptionelle Architektur Eine konzeptionelle Sicht beschreibt hochrangige Konzepte und Mechanismen, die im System auf höchster Granularität existieren. Auf dieser Ebene folgt das algorithmische Handelssystem einer ereignisgesteuerten Architektur (EDA), die über vier Schichten aufgebrochen ist, und zwei architektonische Aspekte. Für jede Schicht - und Aspektreferenz werden Architekturen und Muster verwendet. Architektonische Muster sind bewährte, generische Strukturen, um spezifische Anforderungen zu erfüllen. Architektonische Aspekte sind Querschnittsaufgaben, die sich über mehrere Komponenten erstrecken. Ereignisgetriebene Architektur - eine Architektur, die Ereignisse erzeugt, erkennt, konsumiert und reagiert. Ereignisse umfassen Echtzeitbewegungen, komplexe Ereignisse oder Trends und Handelsereignisse, z. B. Einreichung einer Bestellung. Dieses Diagramm veranschaulicht die Konzeptarchitektur des algorithmischen Handelssystems Referenzarchitekturen Um eine Analogie zu verwenden, ähnelt eine Referenzarchitektur den Blaupausen für eine tragende Wand. Dieses Blau-Druck kann für mehrfache Gebäudeentwürfe wiederverwendet werden, unabhängig davon, welches Gebäude errichtet wird, da es einen Satz von allgemein auftretenden Anforderungen erfüllt. Ähnlich definiert eine Referenzarchitektur eine Vorlage, die generische Strukturen und Mechanismen enthält, die verwendet werden können, um eine konkrete Softwarearchitektur zu konstruieren, die spezifischen Anforderungen genügt. Die Architektur für das algorithmische Handelssystem verwendet eine raumbasierte Architektur (SBA) und einen Model View Controller (MVC) als Referenzen. Gute Vorgehensweisen wie der Betriebsdaten-Speicher (ODS), das Extrakt-Transformations - und Belastungsmuster (ETL) und ein Data Warehouse (DW) werden ebenfalls verwendet. Modellansicht-Controller - ein Muster, das die Darstellung von Informationen von der Benutzerinteraktion mit ihr trennt. Raumbasierte Architektur - spezifiziert eine Infrastruktur, in der lose gekoppelte Verarbeitungseinheiten miteinander über einen gemeinsamen assoziativen Speicher mit dem Namen Space interagieren (siehe unten). Strukturansicht Die Strukturansicht einer Architektur zeigt die Komponenten und Unterkomponenten des algorithmischen Handelssystems. Es zeigt auch, wie diese Komponenten auf physische Infrastruktur eingesetzt werden. Die in dieser Ansicht verwendeten UML-Diagramme umfassen Komponentendiagramme und Bereitstellungsdiagramme. Im Folgenden finden Sie eine Übersicht der Implementierungsdiagramme des algorithmischen Handelssystems und der Verarbeitungseinheiten in der SBA-Referenzarchitektur sowie zugehörige Komponentendiagramme für die einzelnen Schichten. Architectural Tactics Nach dem Software Engineering Institute ist eine architektonische Taktik ein Mittel zur Befriedigung einer Qualitätsanforderung durch Manipulation eines Aspekts eines Qualitätsattributmodells durch architektonische Designentscheidungen. Ein einfaches Beispiel, das in der algorithmischen Handelssystemarchitektur verwendet wird, ist, einen operativen Datenspeicher (ODS) mit einer kontinuierlichen Abfragekomponente zu manipulieren. Diese Komponente würde das ODS kontinuierlich analysieren, um komplexe Ereignisse zu identifizieren und zu extrahieren. Folgende Taktiken werden in der Architektur verwendet: Das Disruptormuster im Ereignis - und Auftragswarteschlange Gemeinsamer Speicher für die Ereignis - und Auftragswarteschlangen Ununterbrochene Abfragesprache (CQL) auf dem ODS Datenfilterung mit dem Filterentwurfsmuster auf eingehenden Daten Vermeidungsalgorithmen auf allen Eingehende und ausgehende Verbindungen Active Queue Management (AQM) und explizite Staubenachrichtigung Rohstoffrechenressourcen mit Kapazitäten für Upgrade (skalierbar) Aktive Redundanz für alle Single Points of Fail Indexierung und optimierte Persistenzstrukturen im ODS Planen Sie regelmäßige Datensicherungs - und Bereinigungsskripte für ODS Transaktionshistorie auf allen Datenbanken Prüfsummen für alle Aufträge, um Fehler zu erkennen Annotieren von Ereignissen mit Zeitstempeln, um veraltete Ereignisse zu überspringen Bestellen von Validierungsregeln zB Maximale Handelsmengen Automatisierte Händlerkomponenten verwenden eine Speicher-Datenbank für die Analyse Zweistufige Authentifizierung für Benutzerschnittstellen, die eine Verbindung zu den ATs herstellen Verschlüsselung auf Benutzerschnittstellen und Verbindungen zu den ATs Observer-Entwurfsmuster für das MVC zur Verwaltung von Ansichten Die obige Liste ist nur ein paar Design Entscheidungen, die ich bei der Gestaltung der Architektur identifiziert habe. Es ist nicht eine vollständige Liste der Taktiken. Da das System entwickelt wird, sollten zusätzliche Taktiken auf mehreren Ebenen der Granularität eingesetzt werden, um funktionale und nicht-funktionale Anforderungen zu erfüllen. Unten sind drei Diagramme, die das Disruptor-Designmuster, das Filterentwurfsmuster und die kontinuierliche Abfragekomponente beschreiben. Verhaltensansicht Diese Ansicht einer Architektur zeigt, wie die Komponenten und Schichten miteinander interagieren sollen. Dies ist hilfreich bei der Erstellung von Szenarien zum Testen von Architekturentwürfen und zum Verständnis des Systems von Ende zu Ende. Diese Ansicht besteht aus Sequenzdiagrammen und Aktivitätsdiagrammen. Aktivitätsdiagramme, die den internen Prozess der algorithmischen Handelssysteme zeigen und wie Händler mit dem algorithmischen Handelssystem interagieren sollen, sind nachfolgend dargestellt. Technologien und Rahmenbedingungen Der letzte Schritt beim Entwerfen einer Softwarearchitektur besteht darin, mögliche Technologien und Rahmenbedingungen zu identifizieren, die zur Verwirklichung der Architektur genutzt werden könnten. Grundsätzlich ist es sinnvoll, bestehende Technologien auszuschöpfen, sofern sie sowohl funktionale als auch nicht funktionale Anforderungen adäquat erfüllen. Ein Framework ist eine realisierte Referenzarchitektur, z. B. JBoss ist ein Framework, das die JEE-Referenzarchitektur realisiert. Die folgenden Technologien und Frameworks sind interessant und sollten bei der Implementierung eines algorithmischen Handelssystems berücksichtigt werden: CUDA - NVidia verfügt über eine Reihe von Produkten, die eine hochleistungsfähige Computational Finance Modellierung unterstützen. Man kann bis zu 50x Performance-Verbesserungen in der Ausführung von Monte Carlo Simulationen auf der GPU anstelle der CPU erreichen. Apache River - River ist ein Tool-Kit zur Entwicklung verteilter Systeme. Es wurde als Rahmen für den Aufbau von Anwendungen auf der Grundlage der SBA-Muster Apache Hadoop - für den Fall, dass pervasive Logging ist eine Anforderung, dann die Verwendung von Hadoop bietet eine interessante Lösung für die Big-Data-Problem. Hadoop kann in einer Clusterumgebung eingesetzt werden, die CUDA-Technologien unterstützt. AlgoTrader - eine Open-Source-algorithmische Handelsplattform. AlgoTrader könnte an Stelle der automatisierten Händlerkomponenten eingesetzt werden. FIX Engine - eine eigenständige Anwendung, die die Financial Information Exchange (FIX) - Protokolle einschließlich FIX, FAST und FIXatdl unterstützt. Obwohl es sich nicht um eine Technologie oder ein Framework handelt, sollten Komponenten mit einer API (Application Programming Interface) aufgebaut werden, um die Interoperabilität des Systems und seiner Komponenten zu verbessern. Fazit Die vorgeschlagene Architektur wurde entwickelt, um sehr allgemeine Anforderungen für algorithmische Handelssysteme zu erfüllen. Im Allgemeinen werden algorithmische Handelssysteme durch drei Faktoren kompliziert, die bei jeder Implementierung variieren: Abhängigkeiten von externen Unternehmen und Exchange-Systemen Herausfordernde nicht-funktionale Anforderungen und sich entwickelnde architektonische Zwänge Die vorgeschlagene Softwarearchitektur muss daher im Einzelfall von Fall zu Fall angepasst werden Um spezifische organisatorische und regulatorische Anforderungen zu erfüllen sowie regionale Zwänge zu überwinden. Die algorithmische Handelssystemarchitektur sollte nur als Referenz für Einzelpersonen und Organisationen betrachtet werden, die ihre eigenen algorithmischen Handelssysteme entwerfen wollen. Für eine vollständige Kopie und Quellen verwendet, laden Sie bitte eine Kopie meines Berichts. Thank you. There sind eigentlich nur 3 große Blöcke in einem Algo Trading System. 1. Market Data Handler (z. B. FAST-Handler) 2. Strategie-Modul (z. B. crossOver-Strategie) 3. Order Router (z. B. FIX Router) können Sie Risikotests entweder am Strategy Module oder dem Order Router Module oder beides hinzufügen. So lange Ihr Datenfluss ist richtig, sollten Sie gut zu gehen. Denken Sie daran, dass Sie ein ATS für minimale Latenz entwickeln, und das Hinzufügen von mehr Ebenen oder Komplexität wird auf Kosten der Latenz kommen. Minimal ATS-Architektur Und wenn Sie die Glocken und Pfeifen hinzufügen, würde es wie die folgenden aussehen: Wenn Sie auch an der Nitty-Gritty der Umsetzung der oben genannten Architektur interessiert sind, sollten Sie die folgenden Dinge im Auge behalten. Vermeiden Sie locksmutexes. Wenn Sie es verwenden müssen, versuchen Sie es durch lockless Strukturen mit Atomkernen ersetzen. Es gibt mehrere Bibliotheken für locklose Datenstrukturen (z. B. libcds, Concurrency-Kit usw.). C-11 unterstützt std :: atomar. Und Sie sollten danach streben, sie zu benutzen. Vermeiden Sie, was in QuickFIX getan wird. Seine geschrieben für Sicherheitselektivität Wiederverwendbarkeit als Objekt (Sperren) Erstellung und Vernichtung wird für jeden Aufruf einer Nachricht an den Router durchgeführt. Sicherlich keine Möglichkeit, eine Latenz sensible Code schreiben. Keine Laufzeitspeicherbelegung. Laufzeitpfad sollte maßgeschneiderte und sperrenfreie Speicherverwaltung mit vorab zugewiesenem Speicherpool verwenden. Die gesamte Initialisierung kann in Konstruktoren durchgeführt werden. Feste Verbindung. Threading-Modell, IO-Modell und Speicher-Management sollte so konzipiert, zusammen zu arbeiten, um eine optimale Gesamtleistung zu erzielen. Dies geht gegen das OOP-Konzept der losen Kopplung, aber es ist notwendig, um Laufzeitkosten des dynamischen Polymorphismus zu vermeiden. Verwenden Sie Vorlagen. In der gleichen Vene, würde ich auch vorschlagen, dass Sie auf C-Templatierung, um Flexibilität des Codes zu erreichen. OSHardware-Optimierung: Schließlich sollten Sie mit Linux RT Kernel und Solarflare Netzwerkkarte mit OpenOnLoad Treiber für die Erreichung minimale Latenz arbeiten. Können Sie weiter schauen, um die CPU zu isolieren und führen Sie Ihr Programm auf, dass bestimmte Kern. Und schließlich die öffentliche API, die Sie benötigen, um strategischen Entwicklern auszusetzen. Ich möchte, dass dies die minimale Menge, die die gesamte Komplexität dieser bestimmten Austauschstation verkapseln würde. Class OrderRowOrd (OrderInfo) 0 virtual bool sendRplOrd (OrderInfo) 0 virtuelles bool sendCxlOrd (OrderInfo) 0 virtualBut bedeutet dies, dass die OrderInfo-Klasse ALLE Angaben benötigen, die für den destinationexchange erforderlich sind. In der Regel erfordert der Austausch die gleiche Art von Informationen, aber wie Sie entlang gehen und unterstützen mehr AustauscheDestinationen würden Sie sich hinzufügen, mehr Variablen in dieser Klasse. Im Folgenden sind die wichtigen Fragen, die Sie sich stellen müssen: 1. Multi-Prozess-Architektur oder Multi-Thread-Architektur. Ob ein monolithischer Prozess mit mehreren Threads zu bauen, oder schreiben Sie mehrere Prozesse. Die Kosten für mehrere Prozesse ist die Nachricht übergeben Latenz, während die Kosten für mehrere threaded einzigen Prozess ist, dass jeder Fehler kann das gesamte System zu senken. 2. Nachrichtenübergabe: Während Sie aus einer Vielzahl von Optionen wählen können, sind Sie durch Latenzbetrachtung eingeschränkt. Am schnellsten IPC wäre Shared Memory, aber dann, wie würden Sie tun, die Synchronisation verbringen einige Zeit mit diesen beiden Fragen, weil sie den Baustein, auf dem Ihre Architektur steht. Bearbeiten: FIX und FAST Bezüglich populäres Standardprotokoll ist FIX zum Senden von Aufträgen und FAST für Marktdaten. Having said, dass die meisten Börsen haben ihre eigene native Protokoll, das schneller als FIX ist, weil FIX ist in der Regel auf der Oberseite ihres nativen Protokolls implementiert. Aber sie unterstützen immer noch FIX erhöht die Geschwindigkeit der Bereitstellung. Auf der anderen Seite, während FIX von den meisten Börsen übernommen wird, genießt FAST nicht so viel Akzeptanz. Wenn überhaupt, würde es nur eine Handvoll Austausch geben. Die meisten von ihnen senden entweder über FIX selbst (niedrige Latenzzeit) oder verwenden Sie ihre eigenen nativen binären Protokoll. z. B. In Indien, NSE, BSE und MCXMCXSX, alle drei Börsen gibt Ihnen FIX-Protokoll zusätzlich zu nativen Protokoll, aber nur BSE gibt Ihnen FAST für Marktdaten. Und das ist auch von FAST auf native mit Einführung von EOBI. Können Sie die gleiche Sache an andere Börsen extrapolieren. 3.6k Views middot View Upvotes middot Nicht für Fortpflanzung Wie John erwähnt, ist OMS die Crux von jeder Handelsplattform und Sie sollten von der Erforschung beginnen. Sie müssen Zeit verbringen, um Ihre Handelslebenszyklus, Ereignisse und Eigenschaften zu bestimmen, die Sie auf dem OMS einbetten möchten und die, die Sie Ihre Algo-Maschine behandeln möchten. Metcetera bietet eine Open-Source-OMS, ich haven039t verwendet es persönlich aber it039s einer der wenigen auf dem Markt. Die nächste Sache, die Sie betrachten sollte, ist die Bereitstellung einer Schnittstelle zu Quelldaten in und schieben Sie es aus. Dies ist für ein Kundenauftragseingabesystem, um die Auftragsdetails zu werfen und Algo-Motor, um es zu quellen. Viele Sell Side OMS039s verwenden eine Kombination von proprietären Programmen in JavaC mit FIX geschrieben. FIX-Protokoll ermöglicht es Ihnen, Echtzeit über Systeme in einem vereinfachten amp-vordefinierten Nachrichtenformat zu kommunizieren, das von der FIX-Protokollgemeinschaft festgelegt wird. Gehen Sie zu der FIX-Protokoll-Organisation gt Homepage, um mehr darüber zu lesen. Betrachtet auch Open Source FIX Engine. Eine Open-Source-Implementierung der FIX-Engine. Als nächstes kommt eine Marktdaten-Schnittstelle, um Echtzeit-Zeitsicherheits-Marktinformationen zu liefern, Daten, die von HighLowOpenClose zu Best BidBest Ask, Total gehandeltes Volumen, Letzter Preis, Letztes Volumen, Gebotsanfragen, Ask-Anführungszeichen usw. reichen Strategie, die Sie implementieren möchten. Ich glaube, Interactive Broker bietet einen Echtzeit-Daten-Feed über FIX. Exchange-Konnektivität ist die nächste, wo Ihr Algo interpretiert die Signale, erstellen Sie eine Bestellung und Routen zu einem Exchange oder ECN. Entwickeln sie im eigenen Haus könnte hart sein, wie Sie benötigen, um auszutauschen Exchange-Mitgliedschaft, zertifizieren Sie Ihre Plattform und zahlen einen regulären Mitgliedsbeitrag. Ein billiger Weg ist, eine Broker-API (wie IB) zu verwenden und Route der Reihenfolge durch sie. Historische Daten sind ebenso von wesentlicher Bedeutung, wie man das aktuelle Marktverhalten mit seinen historischen Werten vergleichen möchte. Parameter wie durchschnittlicher Spread, VWAP-Profile, durchschnittliches Tagesvolumen usw. können erforderlich sein, um die Entscheidungsfindung zu beeinflussen. Sie können es auf Datenbank (bevorzugt), aber wenn Geschwindigkeit der Essenz dann laden Sie es auf dem Server-Cache, wenn Sie Ihr Programm beginnen. Sobald Ihre Peripherie-Systeme eingerichtet sind, können Sie die Entwicklung Ihrer Algo-Programm, wie Sie es funktionieren wollen. Diese grundlegende Infrastruktur ermöglicht es Ihnen, einen übergeordneten Algo-Auftrag einzugeben, Marktdaten zu lesen, auf die Signale zu reagieren, aber untergeordnete Aufträge zu generieren und sie auf das Austauschauftragsbuch und die historischen Daten zu setzen, um die Entscheidungsfindung zu beeinflussen. Das OMS hält die Verknüpfung zwischen der übergeordneten Amp-Kinderreihenfolge, deren Echtzeitstatus und Aktualisierungen durch die Algo - oder Exchange-Konnektivitätsplattform. Was Sie innerhalb des Algo umsetzen wollen, ist ganz bei Ihnen. 2.1k Ansichten middot Ansicht Upvotes middot Nicht für Fortpflanzung
Comments
Post a Comment