Thursday, November 3, 2016

Java-Handelssystemarchitektur

W el c o m e Willkommen im Heim des offenen Java-Handelssystems Das Open Java Trading System (OJTS) ist eine gemeinsame Infrastruktur zur Entwicklung von Aktienhandels - systemen. Es besteht aus vier Teilen: das Sammeln von Rohdaten über das Internet die Erkennung von Handelssignalen ein Visualisierungsmodul und Module für die Verbindung zu den programmatischen Schnittstellen von Handelsplattformen wie Banken. Ziel der Projekte ist die Bereitstellung einer eigenständigen, reinen Java (plattformunabhängigen) gemeinsamen Infrastruktur für Entwickler von Handelssystemen. Einige der Aspekte, die behandelt werden sollten, sind die Bereitstellung eines gemeinsamen SQL92-konformen Datenbankschemas für die Speicherung von Finanzdaten, gemeinsamen Java-Schnittstellen für den Austausch von Daten zwischen verschiedenen Modulen, die Visualisierung von Rohdaten und Handelssignalen sowie einige andere gemeinsame Aspekte, die benötigt werden, um zu schaffen Ein abschließendes Handelssystem. Wegen meines Jobs und meiner Familie finde ich nicht die Zeit, OJTS länger zu verbessern. Ich fahre fort, den Verbindungen Abschnitt unten zu aktualisieren, der Sie zu den aktiveren Java-Quellprojekten in diesem Bereich, aber führt. In der Tat als Folge meines Interesses an der Dynamik der Aktienmärkte begann ich eine Reise in die tieferen Einzelheiten der Volkswirtschaft, um die Wechselkurse zu verstehen. Dieses Thema führt mich schließlich zu einem tieferen Studium des Geldes an sich als der metrischen Einheit, die wir in der Ökonomie verwenden, um Wert, Erfolg oder Nutzen zu messen. Dieses Thema erwies sich als äußerst interessant, aber zugleich war es sehr schwer, Informationen darüber zu finden, wie unser Geldsystem funktioniert. Gehen Sie herum und fragen Sie, woher das Geld kommt, wer es schafft und was seinen Wert bestimmt. Sie werden feststellen, dass auch die Menschen, die einen Master-Abschluss oder PhD. In der Ökonomie nicht wissen, diese Details. Oh, ja, sie werden in einigen kryptischen Fachbegriffe beantworten, aber sie werden nicht in der Lage sein, ein einfaches Diagramm zu zeichnen, das den Prozess umreißt. H. G. Wells wird berichtet, zu haben gesagt haben: Von Währung zu schreiben ist allgemein als eine anstößige, ja fast eine unanständige Praxis anerkannt. Die Redakteure werden den Schriftsteller fast weinerlich bitten, nicht über Geld zu schreiben, nicht weil es ein uninteressantes Thema ist, sondern weil es immer ein zutiefst beunruhigend war. Ich schlage vor, jede Person, die in einer demokratischen Gesellschaft zu lesen, über dieses Thema. Es beeinflusst unser Leben jeden Tag in einem Ausmaß, das nicht übertrieben werden kann Meiner Meinung nach sollte jeder Bürger eines demokratischen Landes auf dieser Welt wissen, wo unser Geld herkommt. Höchstwahrscheinlich kamen Sie zu dieser Web site, um nach Werkzeugen zu suchen, die Ihnen helfen, Ihre Geldmenge zu erhöhen. Um zu verstehen, die metrische Einheit Geld (egal ob Dollar oder Euro) wird ein wichtiger Bestandteil in Ihrem Toolkit für Geld zu verdienen. Wenn Sie wenig Zeit haben und nur sich leisten können, ein einzelnes Buch über dieses Thema zu lesen, dann schlage ich vor, dass Sie Reichtum, virtuellen Reichtum und Schuld durch Frederick Soddy lesen. Ich konnte eine gebrauchte Kopie über Amazon für 23.48 kaufen, aber es gibt auch eine Online-Version. Sie benötigen das DjVu-Plugin, um es zu lesen. Dieses Buch wurde ursprünglich im Jahr 1929 veröffentlicht, aber beschreibt noch die tatsächlichen Fakten sehr gut. Auch wenn ich nicht mit allen Schlußfolgerungen von Frederick Soddy einverstanden bin, ist seine Arbeit erfreulich erregend und führt Sie dazu, die richtigen Fragen zu stellen. N e w s Releases, Bugfixes und aktualisierte Dokumentation Ankündigung der Aussetzung der aktiven Entwicklung und Hinzufügung von Informationen über unsere Geldsysteme (Dollar / Euro). Hinzugefügt einen Links Abschnitt zu anderen interessanten Java-Trading-System-Projekte. Ich untersuche, wie OJTS kompatibler zu anderen Java-Trading-System-Bemühungen zu machen. Investition und Handelssystem Dokumentation Projekt auf ITSdoc. org gefunden werden. Auf der ITSdoc. org steht ein neues Wiki zur Verfügung, das sich auf die Verteilung von Wissen im Bereich der Investitions - und Handelssysteme konzentriert. Die Idee hinter ITSdoc. org ist, eine Kooperationsplattform ähnlich wikipedia zu haben, die der Gemeinschaft hilft, Wissen zu teilen. OpenJavaTradingSystem v0.13 veröffentlicht. Gestern habe ich die Version 0.13 der OpenJavaTradingSystem-Bibliothek veröffentlicht. Zu den neuen Features gehören: Datenabruf für Aktien, Fonds und Währungen von OnVista. Umsetzung der Währungsumrechnung und - umwandlungen. Portfolios umgesetzt werden und Sie können mit Einzel Sicherheit Papierartikel mit Portfolios auf die gleiche Weise arbeiten. Ein allgemeiner Rahmen für die Anwendung von Algorithmen auf Börsen-Zeitreihen wurde hinzugefügt. Switched vom SISC / Scheme interaktive Shell zu ABCL / CommonLisp plus seine Editor namens J. allgemeine Daten-Caching-Mechanismus hinzugefügt, um Daten zwischenspeichern, die bereits über das Internet in das Dateisystem abgerufen wurde. Und viele weitere kleinere Verbesserungen Wenn Sie Interesse an dieser neuen Version sind, sollten Sie bei der quickstart / Screenshot Abschnitt beginnen. Das Handbuch ist noch nicht aktualisiert, aber es kann Ihnen doch einige wertvolle Hintergrundinformationen geben, wenn Sie die Bibliothek in Ihrem Projekt verwenden möchten. Die Dokumentation sollte soon. Currently aktualisiert werden, gibt es nicht viel Entwicklung ist getan, weil ich meine Kenntnisse über Bayes-Netze bin aktualisieren. Siehe zum Beispiel die Liste der Bücher auf meiner Website. Zwei interessante Projekte sind WEKA und BNJ. Bald werde ich weiterhin die Entwicklung und ich werde beginnen, die erste Intelligenz in das System zu integrieren. Heute habe ich die erste Version in den Dateien Abschnitt des Sourceforge Download-Bereich. Außerdem habe ich das Handbuch aktualisiert, um die interaktive Nutzung des Projekts über die SISC Scheme Schicht dokumentieren. Für die ungeduldigen hier ist ein Quickstart / Screenshot Abschnitt, um Sie zu gehen. D o c u m e n t a t i o n Dokumente, die die Einbauten des Projekts beschreiben. Java Data Objects und Interface-Dokumentation gtgtHTML gtgtPDF Usage Dokumentation gtgtHTML gtgtPDF Investitions - und Handelssystem-Dokumentations-Projekt gtgtITSdoc. org T echnology Third Party-Bausteine ​​in diesem Projekt HSQL-Datenbank-Engine verwendet (Lizenz: hsqldblic. txt) Die HSQLDB ist die Datenbank-Engine mit der ausgeliefert So dass Sie sofort mit dem OJTS arbeiten können, ohne eine Datenbank von Drittanbietern installieren zu müssen. Aber wenn Sie planen, eine andere SQL92-konforme Datenbank zu verwenden, dann ist dies eine Konfigurationsoption. Castor (Lizenz: Die Exolab-Lizenz) Castor ist ein Open-Source-Datenbindungsrahmen für Javatm. Sein kürzester Pfad zwischen Java-Objekten, XML-Dokumenten und relationalen Tabellen. Castor bietet Java-to-XML-Bindung, Java-to-SQL-Persistenz und vieles mehr. Castor Doclet (Lizenz: GNU LGPL v2.1) Java Doclet, um sowohl Mapping-und DDL-Dateien für Castor JDO und Castor XML zu generieren. TestMaker (Lizenz: TestMaker Open-Source-Lizenz) Aus dem TestMaker-Projekt wird nur die Implementierung der Protokolle wie HTTP oder HTTPS verwendet, um Daten aus dem Web zu sammeln. JCookie (Lizenz: GNU LGPL v2.1) Die jCookie-Bibliothek ist erforderlich, damit die TestMaker-Bibliotheken funktionieren. Htmlparser (Lizenz: GNU LGPL v2.1) Die htmlparser-Bibliothek wird verwendet, um die Daten aus den Web-Ressourcen zu extrahieren. ABCL / CommonLisp (Lizenz: GNU GPL v2) Mit ABCL (Armed Bear Common Lisp) wird das algorithmische Herz des Projekts in der Programmiersprache ANSI Common Lisp implementiert. JFreeChart (Lizenz: GNU LGPL v2.1) JFreeChart dient der Visualisierung von Finanzdaten als Charts. JSci (Lizenz: GNU LGPL v2.1) JSci - Eine wissenschaftliche API für Java. Joda Time (Lizenz: Eigene OpenSource-Lizenz) Joda Time ersetzt die ursprünglichen JDK-Datums - und Zeitklassen. L i n k s Links zu anderen Projekten Die JavaTraders Google-Gruppe kann der beste Eintrag für Sie sein, um sich über andere Java-basierte Handelssysteme und Tools zu informieren. L i c e ns e Allgemeine Nutzungsbestimmungen Der Code des Projekts ist unter den Bedingungen der LGPL lizenziert, und alle Unterlagen, die Sie in diesem Projekt finden, sind unter den Bedingungen der FDL lizenziert. Es gibt nur drei Hauptblöcke in einem Algo-Handelssystem. 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 entwerfen, 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 Schlösser / Mutexes. Wenn Sie es verwenden müssen, versuchen Sie, sie durch lockless Strukturen mit Atomkernen zu 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 Sicherheit / Flexibilitä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, I / O-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. OS / Hardware-Optimierung: Schließlich sollten Sie mit Linux RT Kernel und Solarflare Netzwerkkarte mit OpenOnLoad Treiber für minimale Latenz arbeiten zu 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 Austausch / Ziel wäre. (OrderInfo) 0 virtual bool sendRplOrd (OrderInfo) 0 virtualBut bedeutet dies, dass die OrderInfo-Klasse ALLE Angaben benötigt, die von der Destination / Exchange benötigt werden. In der Regel erfordert der Austausch die gleiche Art von Informationen, aber wie Sie entlang gehen und unterstützen mehr Börsen / Destinationen würden Sie sich fügen Sie mehr Variablen in dieser Klasse. Im Folgenden sind die wichtigsten Fragen / Herausforderungen, 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 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 MCX / MCXSX, 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. 2.8k Views middot Ansicht Upvotes middot Nicht für Fortpflanzung Wie John erwähnt, ist OMS der Crux von jeder Handelsplattform und Sie sollten von der Erforschung darüber 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. Eine Menge von Sell Side OMS039s verwenden eine Kombination von proprietären Programmen in Java / C 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 Hoch / Niedrig / Offen / Schließen bis Best Bid / Best Ask, Total gehandeltes Volumen, Letzter Preis, Letztes Volumen, Bid-Anführungszeichen, Sie suchen wirklich hängt von der Art der Strategie, die Sie implementieren möchten. Ich glaube, Interactive Broker bietet einen Echtzeit-Daten-Feed über FIX. Exchange-Konnektivität ist als nächstes, 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. 1.8k Ansichten middot Ansicht Upvotes middot Nicht für Fortpflanzung Martin Krmer. Computer-Wissenschaftler, Full-Stack-Coder, eine gute Idee des maschinellen Lernens Es sieht viel einfacher, als Sie vielleicht vorstellen, wie sie Hauptziel ist es, Reaktionen auf Signale in der Größenordnung von Mikrosekunden und nicht optimieren für jede Art von komplizierten Modell zu erreichen. In der Praxis bedeutet dies, dass Sie sich nicht leisten können, außer ein paar sehr einfache mathematische Operationen. So große Händler in diesem Bereich wirklich Geld verdienen, indem sie in der Lage, eine Mikrosekunde schneller als ein Wettbewerber reagieren und nicht durch die Interpretation der Daten in einer komplizierten Weise. 2.1k Views middot View Upvotes middot Nicht für ReproductionSoftware für den Bau eines Market Trading System Wenn es einen Wettbewerb zwischen C und Java dann Java gewonnen hatte. Leider haben viele Leute, die Software für Markt-Trading-Systeme und - Modelle entwickeln, nicht die Nachrichten bekommen und immer noch C. C. wird immer die Sprache der Wahl für die enge Klasse von Software-Anwendungen, die in der Nähe des Metalls des Computersystems sind . Diese Anwendungen umfassen Gerätetreiber, Betriebssysteme und leistungsstarke Datenbanksysteme. Out Seite dieser schmalen Klasse, Java ist derzeit die einzige vernünftige Wahl für die Anwendung Umsetzung. Der Grund, dass Java die Sprache der Wahl ist, hat weniger mit der Sprache selbst zu tun als mit der massiven Software-Basis, die für Java beendet wird. Java ermöglicht es dem Anwendungsentwickler, den größten Teil der wiederverwendbaren Software zu nutzen, der jemals implementiert wurde. Seit Jahrzehnten haben die Menschen in der Informatik Literatur über tragbare, wiederverwendbare Software geschrieben. In Java ist dies endlich realisiert worden. Diese Seite bietet Links zu Ressourcen für den Aufbau eines Intra-Day-Handelssystems in Java. Ein solches Handelssystem besteht aus den folgenden Komponenten: Ein Java-Applikationsserver (z. B. Tomcat) basierte Intra-Day-Handelssystem. Ein Intraday-Daten-Feed für Markttransaktionsdaten. Eine Datenbank zum Aufzeichnen von Handelsinformationen. Eine webbasierte GUI zur Steuerung und Information über das Handelssystem. Eine Infrastruktur zur Unterstützung von Tests (Back-Tests) von Handelsalgorithmen mit historischen Intra-Day-Marktdaten. Inhaltsverzeichnis Ian Kaplan Letzte Aktualisierung, August 2008 zurück zu A Java Intra-Day Traeding System, Quantitative Finance und andere ThemenDesigning einer automatisierten Trading-Anwendung auf der Netbeans Rich Client Platform (Teil 1) Die DevOps-Zone wird Ihnen in Partnerschaft mit Ihnen gebracht Sonatype Nexus. Die Nexus Suite hilft bei der Skalierung Ihrer DevOps-Lieferung mit kontinuierlicher Komponenten-Intelligenz, die in Entwicklungswerkzeuge integriert ist, darunter Eclipse, IntelliJ, Jenkins, Bamboo, SonarQube und vieles mehr. Planen Sie eine Demo heute. In den letzten zehn Jahren haben sich neue Chancen in den Aktien-, Futures - und Devisenmärkten eröffnet, um Einzelhändlern die Möglichkeit zu geben, ihre eigenen automatisierten Handelsstrategien zu produzieren, die einst nur Hedgefonds und Investmentbanken waren. Interactive Brokers war eine der ersten Maklerfirmen, die ihren Privatkunden eine Java API anbieten konnten. Ursprünglich als Weg für Entwickler, um Interactive Brokers Trader Workstation (TWS) Desktop-Anwendung mit Funktionen wie Charting oder Datensatz zu erweitern vorgestellt, hat die API Popularität als eine Möglichkeit, Handelsstrategien zu automatisieren gewonnen. In meiner ersten Iteration der Entwicklung einer Handelsstrategie und Software zur Automatisierung der Trades Ich baute eine Java-Desktop-Anwendung mit Swing-Komponenten, die die Bestände überwachen würde den ganzen Tag und Ort Trades, wenn bestimmte Parameter erfüllt waren, und verlassen Sie den Handel am Ende der Handelstag. Die Software funktionierte gut, und es war ausreichend für die Strategie, die es entworfen, um den Handel, aber es war nicht erweiterbar und versuchen, neue Handelsstrategien zu automatisieren sowie die Verbindung zu verschiedenen Brokerage-Konten als schwierig und schwerfällig zu implementieren. Außerdem gibt es Einschränkungen, wie viele Aktien über den Broker-Daten-Feed überwacht werden könnten, so dass die Software in der Lage sein musste, um in Echtzeit-Markt-Daten-Feeds aus anderen Quellen zusätzlich zu den Brokern Daten-Feed unterzubringen. Ich wurde vor ein paar Jahren in die Netbeans Rich Client Platform (RCP) eingeführt und habe vor kurzem entschieden, meine Anwendung auf die Plattform zu portieren, da es eine Vielzahl von Vorteilen bietet. Das Netbeans RCP basiert auf einem modularen Entwurfsprinzip, das es dem Entwickler erlaubt, abstrakte APIs für Features zu definieren und dann Module bereitzustellen, die unterschiedliche Implementierungen der API haben können, so dass die Anwendung zur Laufzeit die zu verwendende Implementierung auswählen kann. Es sorgt nicht nur für eine sauberere Design durch die Trennung von Bedenken, sondern durch die Verwendung der Netbeans Lookup API es entkoppelt auch die Anwendung und ihre verschiedenen Komponenten voneinander. Es gibt zahlreiche andere Funktionen, die verwendet werden können, einschließlich ein eingebautes Fenster-System, Text-Editor, Datei-Explorer, Symbolleiste, Tabelle und Baum-Tabelle Komponenten sowie die Action API (nur um einige zu nennen). Die Handelsanwendung wird das RCP-Modulsystem verwenden, um abstrakte APIs mit den folgenden Funktionen zu definieren: Platzieren und Abbrechen von Aufträgen für Aktien, Optionen, Futures oder Währungen Geben Sie eine Ereignisbenachrichtigung an, wenn Aufträge gefüllt werden Überwachen Sie Kassenbestände im Konto Abonnieren Sie Echtzeit - (Market-Tiefe / Orderbuch) für jedes Tickersymbol Historische Daten-API Anforderung historischer Preisdaten für jedes Tickersymbol Trading-Strategie API Definieren Sie einen Satz von Regeln für die Eingabe und Beendigung von Trades Verwenden Sie Broker-, Marktdaten - und historische Daten-API-Implementierungen, um Handelsentscheidungen zu treffen. Die primäre Implementierung der API-Module Broker, Market Data und Historical Data wird Interactive Brokers Java API nutzen, aber auch andere Implementierungen können als Netbeans-Module erstellt und anschließend in die Handelsanwendung importiert werden, so dass Handelsstrategien Marktdaten nutzen können Wenn nötig. Neue Trading-Strategien können als Netbeans-Module implementiert werden, die die Trading-Strategie-API implementieren, wobei jede Strategie eine der Implementierungen der verschiedenen Daten - und Broker-APIs nutzen kann. Unter Verwendung der Netbeans Lookup-API können Strategien die Plattform abfragen, um eine Liste aller Implementierungen der Broker - und Marktdaten-APIs zu erhalten, die eine lose Kopplung zwischen den APIs ermöglichen und dem Benutzer erlauben, die Implementierung zur Laufzeit zu verwenden. Unten ist ein Diagramm, das die Organisation der verschiedenen API-Komponenten der Anwendung veranschaulicht: In zukünftigen Posts werde ich näher auf, wie man ein API-Plug-in für die Netbeans RCP erstellen sowie zeigen, wie eine konkrete Implementierung der API. In der obigen Abbildung werden die abstrakten Broker-, Marktdaten - und Handelsstrategie-APIs als Plug-ins im RCP installiert. Die Broker-API hat zu diesem Zeitpunkt eine einzige Implementierung für Interactive Brokers. Die Marktdaten-API verfügt über Plug-Ins, die Implementierungen für Echtzeit-Marktdaten von Yahoo Finance sowie Interactive Brokers Echtzeit-Marktdaten bereitstellen. Schließlich hat die Trading-Strategie-API 2 Implementierungen in diesem Beispiel. Die erste Strategie namens Limit Buyer wird die Preise von ca. 800 Aktien und Ort Limit Order zu kaufen, wenn bestimmte Bedingungen erfüllt werden. Die zweite Strategie in dem Beispiel oben, mit der Bezeichnung AUD / NZD Currency Strategy, wird die Wechselkurse der australischen und neuseeländischen Dollars überwachen und Aufträge zum Kauf oder Verkauf aufnehmen, wenn bestimmte Bedingungen erfüllt sind. Zu diesem Zeitpunkt ist die Anwendung funktionsfähig und nutzt Interactive Brokers als Hauptmakler sowie Marktdatenanbieter. Die Handelsstrategie AUD / NZD wird aktiv durch die Anwendung gehandelt, allerdings mit einer rudimentären Benutzeroberfläche, die Nachrichten zu einem Textbereich innerhalb der Hauptregisterkarte der Strategie veröffentlicht. Der Screenshot unten zeigt Interactive Brokers Trader Workstation Anwendung, die große schwarze Anwendung (die eine Java Swing App ist), sowie die Netbeans RCP automatisierte Handel Anwendung, die die kleine weiße Anwendung ist, mit dem großen Textbereich. In dem Screenshot unten überwacht die Anwendung derzeit die Preise und den Handel für den Australischen Dollar, den Neuseeland-Dollar, den Hongkong-Dollar und die japanischen Yen-Währungen. Dieser Beitrag ist nur eine hochrangige Übersicht über die Gestaltung einer RCP-Anwendung für den Handel an den Finanzmärkten. Zukünftige Teile dieser Serie umfassen weitere Informationen darüber, wie abstrakte APIs implementiert und für andere Teile der Anwendung, die über die Netbeans-Lookup-API verwendet werden sollen, verfügbar sind, sowie die Arbeit mit einigen der Netbeans-UI-Komponenten, die in der Plattform enthalten sind, wie z. B. Registerkarten , Bäume und Tabellen, die zeigen, wie einfach es ist, die gleichen Daten über diese verschiedenen Ansichten mit der Netbeans Nodes API zu rendern. Darüber hinaus möchte ich einige JavaFX-Komponenten in die Anwendung, wie die Charting-Komponenten, die in der Kern-JavaFX-Bibliothek gefunden werden, die eine grafische Darstellung von einigen der Daten die Strategien zu überwachen, die ein bisschen mehr sein werden, zu integrieren Benutzerfreundlich als der aktuelle große Textbereich. Die Integration von JavaFX-Komponenten innerhalb der Applikation wird auch in einer zukünftigen Post dokumentiert. Sie können meine Trading-bezogenen Blog folgen, wenn Sie möchten, um die tatsächlichen Handelsergebnisse der Anwendung als seine verfeinert zu sehen: LimitUpTrading. wordpress Die DevOps-Zone wird Ihnen in Partnerschaft mit Sonatype Nexus gebracht. Verwenden Sie die Nexus Suite, um Ihre Software-Lieferkette zu automatisieren und sicherzustellen, dass Sie mit den hochwertigsten Open-Source-Komponenten in jedem Schritt des Entwicklungslebenszyklus. Holen Sie sich Nexus heute. Best Programmiersprache für Algorithmic Trading Systems Von Michael Halls-Moore am 26. Juli 2013 Eine der häufigsten Fragen, die ich in der QS-Mail-Tasche erhalten ist Was ist die beste Programmiersprache für algorithmischen Handel. Die kurze Antwort ist, dass es keine beste Sprache. Strategieparameter, Leistung, Modularität, Entwicklung, Resiliency und Kosten müssen berücksichtigt werden. Dieser Artikel wird skizzieren die notwendigen Komponenten einer algorithmischen Handelssystemarchitektur und wie Entscheidungen über die Umsetzung beeinflussen die Wahl der Sprache. Zuerst werden die Hauptkomponenten eines algorithmischen Handelssystems betrachtet, wie die Forschungsinstrumente, der Portfoliooptimierer, der Risikomanager und die Ausführungsmaschine. Anschließend werden verschiedene Handelsstrategien untersucht und auf die Gestaltung des Systems eingegangen. Insbesondere werden die Handelshäufigkeit und das voraussichtliche Handelsvolumen diskutiert. Sobald die Handelsstrategie ausgewählt worden ist, ist es notwendig, das gesamte System zu gestalten. Dies beinhaltet die Wahl der Hardware, des Betriebssystems und der Systemresistenz gegenüber seltenen, potentiell katastrophalen Ereignissen. Während die Architektur in Erwägung gezogen wird, muss auf die Leistung - sowohl auf die Forschungsinstrumente als auch auf die Live-Ausführungsumgebung - geachtet werden. Was ist das Handelssystem zu tun, bevor die Entscheidung über die beste Sprache, mit der ein automatisiertes Handelssystem zu schreiben, ist es notwendig, die Anforderungen zu definieren. Ist das System wird rein Ausführungsbasis Will das System erfordern ein Risikomanagement oder Portfolio-Bau-Modul Wird das System erfordern eine leistungsstarke Backtester Für die meisten Strategien kann das Handelssystem in zwei Kategorien aufgeteilt werden: Forschung und Signal-Generierung. Die Forschung befasst sich mit der Bewertung einer Strategieleistung gegenüber historischen Daten. Das Verfahren zur Bewertung einer Handelsstrategie gegenüber früheren Marktdaten wird als Backtesting bezeichnet. Die Datengröße und die algorithmische Komplexität werden einen großen Einfluss auf die Rechenintensität des Backtests haben. CPU-Geschwindigkeit und Parallelität sind oft die begrenzenden Faktoren bei der Optimierung der Durchführungsgeschwindigkeit. Die Signalerzeugung betrifft die Erzeugung eines Satzes von Handelssignalen aus einem Algorithmus und das Senden solcher Befehle an den Markt, üblicherweise über eine Vermittlung. Für bestimmte Strategien ist ein hohes Leistungsniveau erforderlich. I / O-Probleme wie Netzwerkbandbreite und Latenz sind oft der limitierende Faktor bei der Optimierung von Ausführungssystemen. So kann die Wahl der Sprachen für jede Komponente Ihres gesamten Systems ganz anders sein. Art, Häufigkeit und Umfang der Strategie Die Art der verwendeten algorithmischen Strategie hat erhebliche Auswirkungen auf die Gestaltung des Systems. Es wird notwendig sein, die Märkte zu betrachten, die gehandelt werden, die Konnektivität zu externen Datenanbietern, die Häufigkeit und das Volumen der Strategie, der Kompromiss zwischen der Leichtigkeit der Entwicklung und der Leistungsoptimierung sowie jegliche benutzerdefinierte Hardware einschließlich der gemeinsamen Sitzung Server, GPUs oder FPGAs, die erforderlich sein könnten. Die Technologieentscheidungen für eine niederfrequente US-Aktienstrategie werden sich weitgehend von denen eines hochfrequenten statistischen Arbitrage-Strategiehandels auf dem Futures-Markt unterscheiden. Vor der Wahl der Sprache müssen viele Datenanbieter ausgewertet werden, die sich auf die vorliegende Strategie beziehen. Es wird notwendig sein, die Konnektivität zu dem Anbieter, die Struktur von beliebigen APIs, die Aktualität der Daten, die Speicheranforderungen und die Ausfallsicherheit in Anbetracht eines Offline-Vendors zu prüfen. Es ist auch ratsam, schnellen Zugriff auf mehrere Anbieter zu haben. Verschiedene Instrumente haben alle ihre eigenen Speicherquirks, wobei Beispiele davon mehrere Tickersymbole für Aktien und Verfallsdaten für Futures (ganz zu schweigen von spezifischen OTC-Daten) umfassen. Dies muss in der Plattform-Design berücksichtigt werden. Häufigkeit der Strategie ist wahrscheinlich einer der größten Treiber, wie der Technologie-Stack definiert werden. Strategien, die Daten häufiger als minutiös oder sekundär verwenden, erfordern eine beträchtliche Betrachtung hinsichtlich der Leistung. Eine Strategie, die zweite Balken überschreitet (d. H. Tick-Daten), führt zu einem leistungsgetriebenen Design als die primäre Anforderung. Für Hochfrequenzstrategien muss eine erhebliche Menge an Marktdaten gespeichert und ausgewertet werden. Software wie HDF5 oder kdb werden häufig für diese Rollen verwendet. Um die umfangreichen Datenmengen für HFT-Anwendungen zu verarbeiten, muss ein ausgereiftes Backtester - und Ausführungssystem eingesetzt werden. C / C (möglicherweise mit einigen Assembler) ist wahrscheinlich der stärkste Sprachkandidat. Ultra-Hochfrequenz-Strategien wird fast sicher erfordern benutzerdefinierte Hardware wie FPGAs, Austausch Co-Location und kernal / network interface tuning. Forschungssysteme Forschungssysteme umfassen typischerweise eine Mischung aus interaktiver Entwicklung und automatisiertem Scripting. Ersteres findet oft in einer IDE wie Visual Studio, MatLab oder R Studio statt. Letztere umfassen umfangreiche numerische Berechnungen über zahlreiche Parameter und Datenpunkte. Dies führt zu einer Sprachauswahl, die eine einfache Umgebung zum Testen von Code bereitstellt, aber auch eine ausreichende Leistung bietet, um Strategien über mehrere Parameterabmessungen auszuwerten. Typische IDEs in diesem Bereich sind Microsoft Visual C / C, das umfangreiche Debugging-Dienstprogramme, Code-Completion-Fähigkeiten (über Intellisense) und einfache Übersichten über den gesamten Projektstapel (über die Datenbank ORM, LINQ) MatLab enthält. Die für umfangreiche numerische lineare Algebra und vectorized Operationen, sondern in einer interaktiven Konsole Weise R Studio. Die die statistische Sprachkonsole R in einer vollwertigen IDE-Eclipse-IDE für Linux-Java und C und semi-proprietären IDEs wie Enthought Canopy für Python, die Datenanalyse-Bibliotheken wie NumPy enthalten, umschließt. SciPy Scikit-lernen und Pandas in einer einzigen interaktiven (Konsolen-) Umgebung. Für das numerische Backtesting sind alle obigen Sprachen geeignet, obwohl es nicht notwendig ist, eine GUI / IDE zu verwenden, da der Code im Hintergrund ausgeführt wird. Die Hauptbetrachtung in diesem Stadium ist die der Ausführungsgeschwindigkeit. Eine kompilierte Sprache (wie C) ist oft nützlich, wenn die Dimension des Backtesting-Parameters groß ist. Denken Sie daran, dass es notwendig ist, von solchen Systemen vorsichtig zu sein, wenn dies der Fall ist. Interpretierte Sprachen wie Python nutzen oft Hochleistungsbibliotheken wie NumPy / Pandas für den Backtesting-Schritt, um einen vernünftigen Grad an Wettbewerbsfähigkeit mit zusammenzustellen Äquivalente. Letztlich wird die für das Backtesting gewählte Sprache durch spezifische algorithmische Bedürfnisse sowie die Bandbreite der in der Sprache verfügbaren Bibliotheken bestimmt (weiter unten). Die Sprache, die für die Backtester - und Forschungsumgebungen verwendet wird, kann jedoch vollständig unabhängig von denjenigen sein, die im Portfolioaufbau, in den Risikomanagement - und Ausführungskomponenten verwendet werden, wie zu sehen ist. Portfolio-Bau und Risikomanagement Die Komponenten des Portfoliokonstruktions - und Risikomanagements werden oft von den Handelsalgorithmusern übersehen. Das ist fast immer ein Fehler. Diese Instrumente bieten den Mechanismus, durch den das Kapital erhalten bleibt. Sie versuchen nicht nur, die Anzahl der riskanten Wetten zu lindern, sondern auch die Abwanderung der Trades selbst zu minimieren und so die Transaktionskosten zu senken. Ausgefeilte Versionen dieser Komponenten können erhebliche Auswirkungen auf die Qualität und Wirtschaftlichkeit der Rentabilität haben. Es ist unkompliziert, eine stabile Strategie zu schaffen, da der Portfoliokonstruktionsmechanismus und der Risikomanager einfach modifiziert werden können, um mehrere Systeme zu behandeln. Sie sollten daher zu Beginn des Entwurfs eines algorithmischen Handelssystems als wesentliche Komponenten betrachtet werden. Die Aufgabe des Portfolio-Bau-System ist es, eine Reihe von gewünschten Trades zu nehmen und produzieren die Menge der tatsächlichen Trades, minimieren churn, halten Exposures zu verschiedenen Faktoren (wie Sektoren, Asset-Klassen, Volatilität etc.) und optimieren die Zuweisung von Kapital an verschiedene Strategien in einem Portfolio. Portfolio-Konstruktion reduziert oft auf eine lineare Algebra Problem (wie eine Matrix-Faktorisierung) und damit die Leistung ist stark abhängig von der Wirksamkeit der numerischen linearen Algebra-Implementierung zur Verfügung. Gemeinsame Bibliotheken sind uBLAS. LAPACK und NAG für C. MatLab besitzt auch umfangreich optimierte Matrixoperationen. Python nutzt NumPy / SciPy für solche Berechnungen. Ein häufig ausgeglichenes Portfolio erfordert eine kompilierte (und gut optimierte) Matrixbibliothek, um diesen Schritt auszuführen, um das Handelssystem nicht zu verkleinern. Das Risikomanagement ist ein weiterer äußerst wichtiger Bestandteil eines algorithmischen Handelssystems. Das Risiko kann in vielen Formen auftreten: Erhöhte Volatilität (obwohl dies für bestimmte Strategien als wünschenswert angesehen werden kann), erhöhte Korrelationen zwischen Assetklassen, Gegenpartei-Standard, Serverausfällen, Black Swan-Ereignissen und unentdeckten Bugs im Handelscode wenige. Risikomanagementkomponenten versuchen, die Effekte einer übermäßigen Volatilität und Korrelation zwischen den Assetklassen und ihren nachfolgenden Auswirkungen auf das Handelskapital vorwegzunehmen. Oft reduziert dies auf eine Reihe von statistischen Berechnungen wie Monte Carlo Stresstests. Dies ist sehr ähnlich zu den rechnerischen Bedürfnissen einer Derivate-Preis-Engine und als solche CPU-gebunden werden. Diese Simulationen sind sehr parallelisierbar (siehe unten) und bis zu einem gewissen Grad ist es möglich, Hardware auf das Problem zu werfen. Ausführungssysteme Die Aufgabe des Ausführungssystems besteht darin, gefilterte Handelssignale von den Portfolio-Bau - und Risikomanagementkomponenten zu empfangen und an eine Brokerage oder andere Mittel des Marktzugangs zu senden. Für die Mehrheit der Einzelhandel algorithmischen Handelsstrategien beinhaltet dies eine API oder FIX-Verbindung zu einem Brokerage wie Interactive Brokers. Die primären Erwägungen bei der Entscheidung über eine Sprache beinhalten die Qualität der API, die Verfügbarkeit der Sprachverpackung für eine API, die Ausführungshäufigkeit und den erwarteten Schlupf. Die Qualität der API bezieht sich darauf, wie gut sie dokumentiert ist, welche Art von Leistung sie bereitstellt, ob sie auf eine eigenständige Software zugreifen muss oder ob ein Gateway kopflos aufgebaut werden kann (d. h. keine GUI). Im Fall von Interactive Brokers muss das Trader WorkStation-Tool in einer GUI-Umgebung ausgeführt werden, um auf deren API zuzugreifen. Ich musste einmal eine Desktop-Ubuntu-Edition auf einen Amazon Cloud-Server installieren, um auf interaktive Broker remote zuzugreifen, rein aus diesem Grund. Die meisten APIs bieten eine C - und / oder Java-Schnittstelle. In der Regel ist es Aufgabe der Community, sprachspezifische Wrapper für C, Python, R, Excel und MatLab zu entwickeln. Beachten Sie, dass mit jedem zusätzlichen Plugin (vor allem API-Wrapper) gibt es Spielraum für Bugs in das System kriechen. Teste immer Plugins dieser Art und sorge dafür, dass sie aktiv gepflegt werden. Ein lohnendes Maß ist zu sehen, wie viele neue Updates zu einer Codebase in den letzten Monaten gemacht wurden. Die Ausführungshäufigkeit ist für den Ausführungsalgorithmus von größter Bedeutung. Beachten Sie, dass Hunderte von Bestellungen können jede Minute gesendet werden und als solche Leistung ist von entscheidender Bedeutung. Schlupf wird durch eine schlecht durchführende Ausführung System entstehen und dies wird einen dramatischen Einfluss auf die Rentabilität haben. Statisch getippte Sprachen (siehe unten) wie C / Java sind im Allgemeinen optimal für die Ausführung, aber es gibt einen Kompromiss in Entwicklungszeit, Test und Wartungsfreundlichkeit. Dynamisch getippte Sprachen wie Python und Perl sind mittlerweile meist schnell genug. Achten Sie immer darauf, dass die Komponenten modular aufgebaut sind (siehe unten), so dass sie bei der Systemwaage ausgetauscht werden können. Architektonischer Planungs - und Entwicklungsprozess Die Komponenten eines Handelssystems, dessen Frequenz - und Volumenanforderungen wurden bereits diskutiert, die Systeminfrastruktur ist jedoch noch nicht abgedeckt. Diejenigen, die als Einzelhändler oder arbeiten in einem kleinen Fonds wird wahrscheinlich tragen viele Hüte. Es wird notwendig sein, die Alpha-Modell-, Risikomanagement - und Ausführungsparameter sowie die endgültige Implementierung des Systems abzudecken. Vor dem Einarbeiten in bestimmte Sprachen wird das Design einer optimalen Systemarchitektur erörtert. Trennung von Bedenken Eine der wichtigsten Entscheidungen, die von vornherein getroffen werden müssen, ist die Trennung der Bedenken eines Handelssystems. In der Softwareentwicklung bedeutet dies im Wesentlichen, wie die verschiedenen Aspekte des Handelssystems in separate modulare Komponenten aufgeteilt werden. Durch die Freigabe von Schnittstellen an jedem der Komponenten ist es leicht, Teile des Systems für andere Versionen auszutauschen, die Leistung, Zuverlässigkeit oder Wartung unterstützen, ohne einen externen Abhängigkeitscode zu modifizieren. Dies ist die beste Vorgehensweise für solche Systeme. Für Strategien bei niedrigeren Frequenzen werden solche Praktiken empfohlen. Für Ultra-Hochfrequenz-Handel das Regelbuch muss auf Kosten der Optimierung des Systems für noch mehr Leistung ignoriert werden. Ein dichter gekoppeltes System kann wünschenswert sein. Das Erstellen einer Komponentenkarte eines algorithmischen Handelssystems ist einen Artikel wert. Ein optimaler Ansatz ist jedoch sicherzustellen, dass es separate Komponenten für die historischen und Echtzeit-Marktdateneingaben, Datenspeicherung, Datenzugriffs-API, Backtester, Strategieparameter, Portfolio-Konstruktion, Risikomanagement und automatisierte Ausführungssysteme gibt. Wenn beispielsweise der verwendete Datenspeicher selbst bei signifikanten Optimierungsniveaus noch unterdurchschnittlich ist, kann er mit minimalen Wiederbeschreibungen in die Datenaufnahme - oder Datenzugriffs-API ausgelagert werden. Soweit es die Backtester und nachfolgende Komponenten betrifft, gibt es keinen Unterschied. Ein weiterer Vorteil von getrennten Komponenten ist, dass es eine Vielzahl von Programmiersprachen für das Gesamtsystem verwendet werden kann. Es muss nicht auf eine einzige Sprache beschränkt werden, wenn die Kommunikationsmethode der Komponenten sprachunabhängig ist. Dies ist der Fall, wenn sie über TCP / IP, ZeroMQ oder ein anderes sprachunabhängiges Protokoll kommunizieren. Als konkretes Beispiel betrachten wir den Fall eines Backtesting-Systems, das in C für die Anzahl der Crunching-Leistungen geschrieben wird, während der Portfolio-Manager und die Ausführungssysteme in Python unter Verwendung von SciPy und IBPy geschrieben werden. Performance-Überlegungen Performance ist eine wesentliche Überlegung für die meisten Trading-Strategien. Für höhere Frequenzstrategien ist es der wichtigste Faktor. Die Leistung umfasst eine breite Palette von Problemen wie algorithmische Ausführungsgeschwindigkeit, Netzwerklatenz, Bandbreite, Daten-I / O, Parallelität / Parallelität und Skalierung. Jeder dieser Bereiche werden einzeln durch große Lehrbücher abgedeckt, so dass dieser Artikel nur die Oberfläche jedes Themas zerkratzen wird. Architektur und Sprachwahl werden nun im Hinblick auf ihre Auswirkungen auf die Leistung diskutiert. Die vorherrschende Weisheit, wie von Donald Knuth angegeben. Einer der Väter der Informatik, ist, dass vorzeitige Optimierung die Wurzel allen Übels ist. Dies ist fast immer der Fall - außer beim Bau eines Hochfrequenz-Handel Algorithmus Für diejenigen, die in niedrigere Frequenz-Strategien interessiert sind, ist ein gemeinsamer Ansatz, ein System auf die einfachste Art und Weise zu bauen und nur so optimieren, wie Engpässe zu erscheinen beginnen. Mit Hilfe von Profilierwerkzeugen wird ermittelt, wo Engpässe auftreten. Profile können für alle oben aufgeführten Faktoren in einer MS Windows - oder Linux-Umgebung erstellt werden. Es gibt viele Betriebssysteme und Sprach-Tools zur Verfügung, um dies zu tun, sowie Drittanbieter-Dienstprogramme. Die Sprachwahl wird im Rahmen der Performance diskutiert. C, Java, Python, R und MatLab enthalten alle Hochleistungsbibliotheken (entweder im Standard oder extern) für grundlegende Datenstrukturen und algorithmische Arbeiten. C wird mit der Standardvorlagenbibliothek geliefert, während Python NumPy / SciPy enthält. Gemeinsame mathematische Aufgaben sind in diesen Bibliotheken zu finden und es ist selten vorteilhaft, eine neue Implementierung zu schreiben. Eine Ausnahme ist, wenn eine hochgradig angepasste Hardwarearchitektur erforderlich ist und ein Algorithmus umfangreiche Verwendung von proprietären Erweiterungen (z. B. benutzerdefinierte Caches) durchführt. Allerdings, oft Neuerfindung des Rades verschwendet Zeit, die besser verbrachte Entwicklung und Optimierung anderer Teile der Handelsinfrastruktur sein könnte. Entwicklungszeit ist besonders im Zusammenhang mit einzelnen Entwicklern extrem kostbar. Latenz ist oft ein Problem des Ausführungssystems, da die Forschungsinstrumente üblicherweise auf derselben Maschine liegen. Für die ersteren kann Latenz an mehreren Punkten entlang des Ausführungspfades auftreten. Datenbanken müssen konsultiert werden (Datenträger / Netzwerk-Latenzzeit), Signale müssen erzeugt werden (Betriebssystem, Kernel-Messaging-Latenz), Handelssignale gesendet (NIC-Latenz) und Aufträge verarbeitet (interne Latenzzeit). Für höhere Frequenzoperationen ist es notwendig, sich mit der Kernoptimierung und der Optimierung der Netzwerkübertragung vertraut zu machen. Dies ist ein tiefer Bereich und ist deutlich über den Geltungsbereich des Artikels aber wenn ein UHFT-Algorithmus gewünscht wird dann bewusst sein, die Tiefe des Wissens erforderlich Caching ist sehr nützlich im Toolkit eines quantitativen Trading-Entwickler. Das Caching bezieht sich auf das Konzept der Speicherung von Daten, auf die häufig zugegriffen wird, in einer Weise, die einen leistungsfähigeren Zugriff ermöglicht, auf Kosten einer potentiellen Verzögerung der Daten. Ein häufiger Anwendungsfall tritt bei der Webentwicklung auf, wenn Daten von einer datenträgergestützten relationalen Datenbank übernommen und in den Speicher übertragen werden. Alle nachfolgenden Anforderungen für die Daten müssen nicht auf die Datenbank getroffen werden und so Leistungssteigerungen können erheblich sein. Für Handelssituationen Caching kann sehr vorteilhaft sein. Zum Beispiel kann der gegenwärtige Zustand eines Strategieportfolios in einem Cache gespeichert werden, bis er wieder ausgeglichen wird, so dass die Liste nicht auf jeder Schleife des Handelsalgorithmus regeneriert werden muss. Eine solche Regeneration ist wahrscheinlich eine hohe CPU - oder Platten-E / A-Operation. Allerdings ist das Caching nicht ohne eigene Probleme. Regeneration von Cache-Daten auf einmal, aufgrund der volatilie Natur der Cache-Speicher, kann eine erhebliche Nachfrage nach Infrastruktur. Ein weiteres Problem ist Hund-Haufen. Wo mehrere Generationen einer neuen Cache-Kopie unter extrem hoher Last durchgeführt werden, was zu einem Kaskadenausfall führt. Die dynamische Speicherzuordnung ist eine teure Operation in der Softwareausführung. Daher ist es für Hochleistungs-Handelsanwendungen unerlässlich, sich bewusst zu sein, wie Speicher während des Programmablaufs zugeteilt und freigegeben wird. Neuere Sprachstandards wie Java, C und Python führen alle automatische Garbage Collection durch. Die auf die Deallokation des dynamisch zugewiesenen Speichers verweist, wenn Objekte außerhalb des Gültigkeitsbereichs liegen. Garbage Collection ist äußerst nützlich während der Entwicklung, da es Fehler reduziert und hilft Lesbarkeit. Es ist jedoch oftmals für bestimmte hochfrequente Handelsstrategien suboptimal. Kundenspezifische Garbage Collection ist oft für diese Fälle erwünscht. In Java, zum Beispiel durch Abstimmung der Garbage Collector und Heap-Konfiguration, ist es möglich, hohe Leistung für HFT-Strategien zu erhalten. C stellt keinen nativen Garbage Collector zur Verfügung und so ist es notwendig, alle Speicherzuweisung / - zuweisung als Teil einer Objektimplementierung zu behandeln. Während potenziell fehleranfällig (potenziell dazu führen, dass baumelnde Zeiger) ist es äußerst nützlich, feinkörnige Kontrolle, wie Objekte auf dem Heap für bestimmte Anwendungen erscheinen. Bei der Auswahl einer Sprache stellen Sie sicher zu studieren, wie die Garbage Collector arbeitet und ob es geändert werden, um für einen bestimmten Anwendungsfall optimieren. Viele Operationen in algorithmischen Handelssystemen sind parallelisierbar. Dies bezieht sich auf das Konzept, mehrere programmatische Operationen gleichzeitig, d. H. Parallel, auszuführen. So genannte embarassingly parallele Algorithmen beinhalten Schritte, die völlig unabhängig von anderen Schritten berechnet werden können. Bestimmte statistische Operationen, wie Monte Carlo Simulationen, sind ein gutes Beispiel für peinlich parallele Algorithmen, da jede zufällige Zeichnung und nachfolgende Pfadoperation ohne Kenntnis anderer Pfade berechnet werden kann. Andere Algorithmen sind nur teilweise parallelisierbar. Fluiddynamische Simulationen sind ein solches Beispiel, bei dem die Berechnungsdomäne unterteilt werden kann, aber letztlich müssen diese Domänen miteinander kommunizieren und somit sind die Operationen teilweise sequentiell. Parallelisierbare Algorithmen unterliegen dem Amdahls-Gesetz. Was eine theoretische Obergrenze für die Leistungserhöhung eines parallelisierten Algorithmus ergibt, wenn er N-unabhängigen Prozessen unterworfen wird (z. B. auf einem CPU-Kern oder Thread). Die Parallelisierung hat zunehmend an Bedeutung gewonnen, da die Prozessortaktgeschwindigkeiten stagniert haben, da neuere Prozessoren viele Kerne enthalten, mit denen parallele Berechnungen durchgeführt werden können. Der Anstieg der Consumer-Grafikhardware (vorwiegend für Videospiele) hat zur Entwicklung von Graphical Processing Units (GPUs) geführt, die Hunderte von Cores für sehr gleichzeitige Operationen enthalten. Solche GPUs sind jetzt sehr erschwinglich. High-Level-Frameworks, wie Nvidias CUDA haben zu weit verbreiteten Akzeptanz in der Wissenschaft und Finanzen geführt. Solche GPU-Hardware ist im Allgemeinen nur für den Forschungsaspekt der quantitativen Finanzierung geeignet, während für (U) HFT weitere spezialisierte Hardware (einschließlich feldprogrammierbare Gate-Arrays - FPGAs) verwendet werden. Heutzutage unterstützen die meisten modernen Sprachen einen Grad der Parallelität / Multithreading. Somit ist es einfach, einen Backtester zu optimieren, da alle Berechnungen im allgemeinen unabhängig von den anderen sind. Die Skalierung von Software-Engineering und - Operationen bezieht sich auf die Fähigkeit des Systems, konsequent ansteigende Lasten in Form größerer Anforderungen, höherer Prozessorauslastung und mehr Speicherzuteilung zu handhaben. Im algorithmischen Handel kann eine Strategie skaliert werden, wenn sie größere Kapitalmengen akzeptieren kann und immer noch konsistente Renditen liefert. Der Handelstechnologie-Stack skaliert, wenn er größere Handelsvolumina und eine erhöhte Latenzzeit ohne Engpassierung aushalten kann. Während Systeme skaliert werden müssen, ist es oft schwer vorherzusagen, wo ein Engpass auftritt. Rigourous Logging, Testing, Profiling und Monitoring wird erheblich dazu beitragen, ein System skalieren.


No comments:

Post a Comment