Wednesday, 3 May 2017

Forex Python Api


Erfahren Sie Quant skills. If Sie sind ein Händler oder ein Investor und möchte eine Reihe von quantitativen Trading-Fähigkeiten zu erwerben, sind Sie an der richtigen Stelle Der Trading With Python Kurs wird Ihnen die besten Werkzeuge und Praktiken für quantitative Handelsforschung, einschließlich Funktionen und Skripte von Experten quantitativen Händlern geschrieben Der Kurs gibt Ihnen maximale Wirkung für Ihre investierte Zeit und Geld Es konzentriert sich auf die praktische Anwendung der Programmierung zum Handel statt theoretischen Informatik Der Kurs wird sich schnell bezahlen, indem Sie Zeit in der manuellen Verarbeitung von Daten sparen Sie werden mehr Zeit damit verbringen, Ihre Strategie zu erforschen und profitable Trades zu realisieren. Grundübersicht. Part 1 Grundlagen Sie werden lernen, warum Python ein ideales Werkzeug für den quantitativen Handel ist. Wir werden mit der Entwicklung einer Entwicklungsumgebung beginnen und dann die wissenschaftlichen Bibliotheken vorstellen. Teil 2 Umgang mit den Daten Erfahren Sie, wie Sie Daten aus verschiedenen freien Quellen wie Yahoo Finance, CBOE und anderen Websites erhalten Lesen und Schreiben Sie mehrere Datenformate einschließlich CSV und Excel-Dateien. Part 3 Erforschung von Strategien Lernen Sie, PL und begleitende Performance-Metriken wie Sharpe und Drawdown zu berechnen Erstellen Sie eine Handelsstrategie und optimieren Sie die Leistung Mehrere Beispiele für Strategien werden in diesem Teil diskutiert. Part 4 Going live Dieser Teil konzentriert sich auf Interactive Brokers API Sie werden lernen, wie man Echtzeit-Bestandsdaten und Platz Live-Bestellungen. Lots von Beispiel code. The Kurs Material besteht aus Notebooks, die Text zusammen mit interaktiven Code wie diese enthalten Sie können in der Lage sein, durch die Interaktion mit dem Code zu lernen und zu ändern, um Ihre eigenen Geschmack Es wird ein guter Ausgangspunkt für das Schreiben Ihrer eigenen Strategien. Während einige Themen sind Erklärte ausführlich, um Ihnen zu helfen, die zugrunde liegenden Konzepte zu verstehen, in den meisten Fällen, die Sie gewonnen haben, müssen Sie sogar Ihren eigenen Low-Level-Code schreiben, da die Unterstützung durch vorhandene Open-Source-Bibliotheken TradingWithPython-Bibliothek kombiniert viel von der Funktionalität, die in diesem Kurs als diskutiert wird Eine gebrauchsfertige Funktion und wird während des gesamten Kurses verwendet werden Pandas wird Ihnen die ganze Heavy-Heben Macht, die in Daten knirschen benötigt wird Alle Code wird unter der BSD-Lizenz zur Verfügung gestellt, so dass seine Verwendung in kommerziellen Anwendungen. Course Bewertung. Ein Pilot des Kurses wurde im Frühjahr 2013 abgehalten, das ist es, was die Schüler zu sagen haben. Matej gut entworfenen Kurs und guter Trainer Auf jeden Fall seinen Preis wert und meine Zeit Lave Jev offensichtlich wusste, dass seine Sachen Tiefe der Abdeckung perfekt war Wenn Jev irgendetwas läuft Wie dieses wieder, ich werde der erste sein, um sich anzumelden John Phillips Ihr Kurs hat mich wirklich gestartet, um anfangen zu betrachten Python für Lager Systemanalyse. Forex Trading Diary 1 - Automatisierte Forex Trading mit der OANDA API. I zuvor erwähnt in der QuantStart 2014 In Review Artikel, dass ich verbringen einige von 2015 schreiben über automatisierte Forex Trading. Gegeben, dass ich selbst in der Regel Forschung in Aktien und Futures-Märkte, ich dachte, es wäre lustig und pädagogisch zu schreiben über meine Erfahrungen der Eingabe der Forex-Markt im Stil Eines Tagebuchs Jeder Tagebucheintrag wird versuchen, auf all jene vor zu bauen, aber sollte auch relativ selbstbewohnt sein. In diesem ersten Eintrag des Tagebuchs werde ich beschreiben, wie man ein neues Praxis-Brokerage-Konto mit OANDA einrichtet und wie Um eine grundlegende multithreaded ereignisgesteuerte Trading-Engine zu schaffen, die automatisch Trades in einer Praxis und Live-Einstellung ausführen kann. In letzter Zeit haben wir viel Zeit damit verbracht, den ereignisgesteuerten Backtester vor allem für Aktien und ETFs zu betrachten. Das, was ich unten präsentiere, ist ausgerichtet In Richtung Forex und kann für entweder Papierhandel oder Live-Trading verwendet werden. Ich habe alle folgenden Anweisungen für Ubuntu 14 04 geschrieben, aber sie sollten leicht auf Windows oder Mac OS X, mit einer Python-Distribution wie Anaconda Die einzige zusätzliche Bibliothek zu übersetzen Verwendet für die Python-Trading-Engine ist die Anfragen Bibliothek, die für die Kommunikation mit der OANDA API erforderlich ist. Da dies der erste Post direkt über Devisenhandel ist, und der unten dargestellte Code kann einfach an eine Live-Handelsumgebung angepasst werden Wie die folgenden Haftungsausschlüsse zu präsentieren. Disclaimer Handel Devisen am Rande trägt ein hohes Risiko und kann nicht für alle Anleger geeignet sein Vergangene Wertentwicklung ist kein Hinweis auf zukünftige Ergebnisse Die hohe Hebelwirkung kann sowohl gegen Sie als auch für Sie arbeiten Bevor Sie sich entscheiden, in Devisen zu investieren, sollten Sie sorgfältig überlegen, Ihre Investitionsziele, Erfahrungsstand und Risiko Appetit Die Möglichkeit besteht, dass Sie einen Verlust von einigen oder alle Ihrer ursprünglichen Investition zu erhalten und daher sollten Sie nicht Geld investieren, die Sie sich nicht leisten können Zu verlieren Sie sollten sich bewusst sein, alle Risiken im Zusammenhang mit Devisenhandel, und suchen Sie Rat von einem unabhängigen Finanzberater, wenn Sie Zweifel haben. Diese Software wird zur Verfügung gestellt, wie es ist und alle ausgedrückten oder implizite Garantien, einschließlich, aber nicht beschränkt auf, Die implizierten Garantien der Marktgängigkeit und der Eignung für einen bestimmten Zweck sind ausgeschlossen. In keinem Fall haften die Regenten oder Mitwirkenden für direkte, indirekte, zufällige, besondere, vorbildliche oder Folgeschäden, einschließlich, aber nicht beschränkt auf die Beschaffung von Ersatzwaren oder Dienstleistungen Verlust der Nutzung, Daten oder Gewinne oder Betriebsunterbrechung verursacht jedoch und auf jegliche Haftungsart, ob im Vertrag, strenge Haftung oder unerlaubter Handlung, einschließlich Fahrlässigkeit oder anderweitig, die sich aus der Nutzung dieser Software ergibt, auch wenn sie von der Möglichkeit eines solchen Schadens. Setting ein Konto mit OANDA. Die erste Frage, die in den Sinn kommt, warum ist OANDA Einfach gesagt, nach ein bisschen Googeln um für Forex Broker, die APIs hatte, sah ich, dass OANDA hatte vor kurzem eine richtige REST API veröffentlicht Das konnte leicht von fast jeder Sprache in einer extrem einfachen Weise kommuniziert werden Nach dem Lesen durch ihre Entwickler-API-Dokumentation habe ich beschlossen, ihnen einen Versuch zu geben, zumindest mit einem Praxis-Account. Um klar zu sein - ich habe keine vorherige oder bestehende Beziehung mit OANDA Und bin nur die Bereitstellung dieser Empfehlung auf der Grundlage meiner begrenzten Erfahrung spielen mit ihrer Praxis-API und einige kurze Nutzung für Marktdaten-Download, während bei einem Fonds zuvor verwendet Wenn jemand hat sich über alle anderen Forex-Broker, die auch eine ähnlich moderne API dann habe ich d Sei froh, ihnen einen Blick zu geben, wie gut. Before Nutzung der API ist es notwendig, sich für ein Praxis-Account Um dies zu tun, Kopf auf die Anmelde-Link Sie sehen die folgenden Bildschirm. OANDA Anmelde-Screen. Sie werden Dann können Sie sich mit Ihren Anmeldeinformationen anmelden. Vergewissern Sie sich, die Registerkarte fxTradePractice aus dem Anmeldebildschirm auszuwählen. OANDA Anmeldebildschirm. Einmal in Sie müssen eine Notiz von Ihrer Account-ID notieren Es ist unter dem schwarzen My aufgelistet Funds Header neben Primary Mine ist eine 7-stellige Nummer Zusätzlich müssen Sie auch ein persönliches API-Token generieren Um dies zu tun, klicken Sie auf API Access unterhalb der Registerkarte Andere Aktionen unten links. In diesem Stadium können Sie generieren Ein API-Token Sie benötigen den Schlüssel für den Einsatz später, also stellen Sie sicher, dass Sie es auch aufschreiben. Sie wollen nun die FXTrade Practice-Anwendung starten, die es uns ermöglicht, die ausgeführten Aufträge und unseren Papiergewinnverlust zu sehen. Wenn Sie Laufen ein Ubuntu-System, das Sie benötigen, um eine etwas andere Version von Java zu installieren. Insbesondere die Oracle-Version von Java 8 Wenn Sie dies nicht tun, dann wird der Übungssimulator nicht aus dem Browser laden Ich lief diese Befehle auf meinem System Wird nun in der Lage sein, die Praxis Trading-Umgebung zu starten Rückkehr in die OANDA Dashboard und klicken Sie auf die grüne hervorgehoben Starten FXTrade Practice Link Es wird ein Java-Dialog zu fragen, ob Sie es ausführen möchten Klicken Sie auf Run und das fxTrade Practice-Tool wird geladen Mine ausgefallen auf Ein 15-min-kerzen-Diagramm von EUR USD mit dem Zitat-Panel auf der linken Seite. OANDA fxTrade Praxis-Bildschirm. An diesem Punkt sind wir bereit zu entwerfen und Codierung unserer automatisierten Forex Trading System gegen die OANDA API. Overview der Trading Architecture. If Sie Haben die ereignisgesteuerte Backtester-Serie für Aktien und ETFs verfolgt, die ich letztes Jahr erschaffen habe, werden Sie sich bewusst sein, wie solch ein ereignisgesteuertes Trading-System funktioniert. Für diejenigen von Ihnen, die neu für ereignisgesteuerte Software sind, würde ich Ihnen vorschlagen, zu lesen Durch den Artikel, um einen Einblick in, wie sie arbeiten zu gewinnen. Im Wesentlichen wird das gesamte Programm in einer Infinte while-Schleife ausgeführt, die nur beendet wird, wenn das Handelssystem abgeschaltet wird Der zentrale Kommunikationsmechanismus des Programms wird über eine Warteschlange gegeben Enthält Ereignisse. Die Warteschlange wird ständig abgefragt, um nach neuen Ereignissen zu suchen. Sobald ein Ereignis aus der Warteschlange genommen wurde, muss es von einer entsprechenden Komponente des Programms abgewickelt werden. Daher kann ein Marktdaten-Feed TickEvent s erzeugen, Warteschlange, wenn ein neuer Marktpreis ankommt Ein signalgenerierendes Strategieobjekt könnte OrderEvent s schaffen, die an eine Brokerage gesendet werden sollen. Die Nützlichkeit eines solchen Systems ist gegeben durch die Tatsache, dass es nicht darum geht, welche Reihenfolge oder Arten von Veranstaltungen platziert werden Auf der Warteschlange, da sie immer korrekt von der richtigen Komponente innerhalb des Programms behandelt werden. Darüber hinaus können verschiedene Teile des Programms in separaten Threads ausgeführt werden, was bedeutet, dass es nie irgendwelche warten auf eine bestimmte Komponente vor der Verarbeitung von anderen Dies ist extrem Nützlich in algorithmischen Handelssituationen, in denen Marktdaten-Feed-Handler und Strategie-Signal-Generatoren haben sehr unterschiedliche Leistungsmerkmale. Die wichtigsten Trading-Schleife ist durch die folgenden Python-Pseudocode gegeben. Wie wir oben gesagt, der Code läuft in einer Endlosschleife Zuerst ist die Warteschlange Abgefragt, um ein neues Ereignis abzurufen Wenn die Warteschlange leer ist, startet die Schleife nach einer kurzen Schlafperiode, die als Herzschlag bekannt ist, neu. Wenn ein Ereignis gefunden wird, wird sein Typ beurteilt und dann das entsprechende Modul entweder die Strategie oder der Ausführungsbearbeiter aufgerufen Um die Veranstaltung zu behandeln und eventuell neue zu generieren, die auf die Warteschlange zurückgehen. Die grundlegenden Komponenten, die wir für unser Handelssystem schaffen werden, beinhalten folgendes. Streaming Price Handler - Dies hält eine langlebige Verbindung offen für OANDAs Server und sendet Tick Daten dh Bid fragen über die Verbindung für alle Instrumente, die wir interessiert in. Strategy Signal Generator - Dies wird eine Sequenz von Tick-Veranstaltungen und verwenden sie, um Trading-Bestellungen, die von der Ausführung Handler ausgeführt werden. Execution Handler - nimmt einen Satz Von Auftragsereignissen und dann blind ausgeführt sie mit OANDA. Events - Diese Objekte bilden die Nachrichten, die auf der Ereignis-Warteschlange weitergegeben werden. Wir benötigen nur zwei für diese Implementierung, nämlich die TickEvent und die OrderEvent. Main Entry Point - Der Haupteingangspunkt auch Schließt die Handelsschleife ein, die die Nachrichtenwarteschlange kontinuierlich abfragt und Nachrichten an die korrekte Komponente sendet. Dies wird oft als Ereignisschleife oder Ereignisbehandler bezeichnet. Wir werden nun die Implementierung des Codes im Detail besprechen. Am unteren Ende des Artikels befindet sich die vollständige Auflistung Von allen Quellcode-Dateien Wenn Sie sie in das gleiche Verzeichnis platzieren und Python ausführen, werden Sie mit der Erstellung von Aufträgen beginnen, vorausgesetzt, Sie haben Ihre Konto-ID und Ihr Authentifizierungs-Token aus OANDA. Python Implementation ausgefüllt. Es ist eine schlechte Praxis, Passwörter oder Authentifizierungsschlüssel innerhalb zu speichern Eine Codebasis, wie Sie niemals vorhersagen können, wer den Zugang zu einem Projekt erlaubt. In einem Produktionssystem würden wir diese Anmeldeinformationen als Umgebungsvariablen mit dem System speichern und diese Umfragen jedes Mal abfragen, wenn der Code neu ausgegeben wird. Damit ist sichergestellt, dass Passwörter und Auth-Token sind Nie in einem Versionskontrollsystem gespeichert. Jedoch, da wir nur daran interessiert sind, ein Spielzeug-Handelssystem zu bauen, und sind nicht mit Produktionsdetails in diesem Artikel beschäftigt, werden wir stattdessen trennen diese auth-Token in eine Einstellungsdatei. In der folgenden Konfigurationsdatei Wir haben ein Wörterbuch namens UMGEBUNGSMITTEL, das die API-Endpunkte für die OANDA-Preisstreaming-API und die Handels-API speichert. Jedes Unterverzeichnis enthält drei separate API-Endpunkte, die echte Praxis und Sandbox sind. Die Sandbox-API ist ausschließlich zum Testen von Code und zur Überprüfung, dass es keine gibt Fehler oder Bugs Es hat nicht die Uptime-Garantien der Real - oder Practice-APIs Die Praxis-API bietet im Wesentlichen die Möglichkeit, Papierhandel darzustellen. Das heißt, es bietet alle Features der realen API auf einem simulierten Praxis-Account Die echte API Ist genau das - es ist Live-Handel Wenn Sie diesen Endpunkt in Ihrem Code verwenden, wird es gegen Ihren Live-Kontostand handeln BEZUFÜHREN SORGFÄLTIG. WICHTIG Beim Handel mit der Praxis API erinnern, dass eine wichtige Transaktionskosten, die der Markt Auswirkungen nicht berücksichtigt wird Da keine Trades tatsächlich in die Umwelt gelegt werden, müssen diese Kosten in anderer Weise anderweitig mit einem Marktwirkungsmodell berücksichtigt werden, wenn man die Leistung realistisch beurteilen möchte. Im Folgenden nutzen wir das Praxiskonto, wie es die DOMAIN-Einstellung gegeben hat Zwei separate Wörterbücher für die Domains, jeweils eine für die Streaming - und Trading-API-Komponenten Schließlich haben wir die ACCESSTOKEN und ACCOUNTID I ve gefüllt die beiden unten mit Dummy-IDs, so dass Sie Ihre eigenen nutzen müssen, auf die von der OANDA-Account-Seite zugegriffen werden kann. Der nächste Schritt ist es, die Ereignisse zu definieren, die die Warteschlange verwenden wird, um allen einzelnen Komponenten zu helfen, zu kommunizieren. Wir brauchen zwei TickEvent und OrderEvent Die ersten Speicherinformationen über Instrumentenmarktdaten wie das beste Gebot und die Handelszeit Die zweite wird verwendet Um Aufträge an den Ausführungsbeauftragten zu übermitteln und somit das Instrument, die Anzahl der zu handelnden Einheiten, die Auftragsart Markt oder Grenze und die Seite dh Kauf und Verkauf zu enthalten. Um zukunftssicher unsere Veranstaltungen Code werden wir eine Basisklasse namens Event und haben alle Ereignisse von diesem erben Der Code wird unten angegeben. Die nächste Klasse, die wir schaffen werden, wird die Handelsstrategie behandeln In dieser Demo werden wir eine eher unsinnige Strategie schaffen, die einfach alle Marktticks und weiter erhält Jeder 5. Tick kauft zufällig 10.000 Einheiten von EUR USD. Klärlich ist dies eine lächerliche Strategie Allerdings ist es fantastisch für Testzwecke, weil es einfach ist, Code und verstehen In zukünftigen Tagebucheinträgen werden wir dies mit etwas deutlich spannender sein Wird hoffentlich einen Gewinn machen. Die Datei kann unten gefunden werden Lassen Sie es durch sie arbeiten und sehen, was los ist Zuerst importieren wir die zufällige Bibliothek und das OrderEvent-Objekt von Wir brauchen die zufällige lib, um einen zufälligen Kauf oder Verkauf zu bestellen Wir haben Notwendigkeit OrderEvent, wie das ist, wie das Strategieobjekt Aufträge an die Ereignis-Warteschlange sendet, die später vom Ausführungs-Handler ausgeführt wird. Die TestRandomStrategy-Klasse nimmt einfach das Instrument in diesem Fall EUR USD, die Anzahl der Einheiten und die Ereignisse in die Warteschlange als Satz von Parametern Es erstellt dann einen Ticks-Zähler, der verwendet wird, um zu erzählen, wie viele TickEvent-Instanzen es gesehen hat. Die meisten der Arbeit tritt in der calculatesignals-Methode auf, die einfach ein Ereignis nimmt, bestimmt, ob es ein TickEvent sonst ignoriert und das Tick inkrementiert Zähler Es prüft dann, ob der Zähler von 5 teilbar ist und dann zufällig kauft oder verkauft, mit einer Marktordnung, die angegebene Anzahl von Einheiten Es ist sicherlich nicht die weltweit größte Handelsstrategie, aber es wird mehr als geeignet für unsere OANDA-Brokerage-API-Testzwecke. Die nächste Komponente ist die Ausführungs-Handler Diese Klasse ist beauftragt, auf OrderEvent-Instanzen zu handeln und Anfragen an den Broker in diesem Fall OANDA in einer dummen Art und Weise zu machen, dh es gibt kein Risikomanagement oder Potfolio-Konstruktions-Overlay Die Ausführung Handler wird einfach jede Bestellung ausführen, die es gegeben hat. Wir müssen alle Authentifizierungsinformationen an die Execution-Klasse übergeben, einschließlich der Domain-Praxis, Real - oder Sandbox, dem Zugriffstoken und der Account-ID. Dann erstellen wir eine sichere Verbindung mit einem der Pythons Eingebaute Bibliotheken. Mehr der Arbeit tritt in executeorder Die Methode erfordert ein Ereignis als Parameter Es konstruiert dann zwei Wörterbücher - die Header und die params Diese Wörterbücher werden dann korrekt korrekt codiert, indem man eine andere Python-Bibliothek als POST-Anfrage senden kann Zu OANDAs API. Wir übergeben die Content-Type und Authorization Header-Parameter, die unsere Authentifizierungsinformationen enthalten Darüber hinaus kodieren wir die Parameter, die das Instrument enthalten EUR USD, Einheiten, Auftragsart und Seite Kauf verkaufen Schließlich machen wir die Anfrage und sparen Die Antwort. Die komplexeste Komponente des Handelssystems ist das StreamingForexPrices-Objekt, das die Marktpreisaktualisierungen von OANDA verarbeitet. Es gibt zwei Methoden connecttostream und streamtoqueue. Die erste Methode verwendet die Python-Anforderungsbibliothek, um eine Verbindung zu einem Streaming-Socket mit den entsprechenden Headern herzustellen Und Parameter Die Parameter beinhalten die Account-ID und die notwendige Instrumentenliste, die für Updates in diesem Fall zugehört werden soll. Es ist nur EUR USD Beachten Sie die folgende Zeile. Dies sagt, dass die Verbindung gestreamt wird und somit in einer langwierigen Weise offen gehalten wird. Die zweite Methode, Streamtoque tatsächlich versucht, eine Verbindung zum Stream Wenn die Antwort nicht erfolgreich ist, dh der Antwort-Code ist nicht 200, dann kehren wir einfach zurück und beenden Wenn es erfolgreich ist, versuchen wir, das JSON-Paket in ein Python-Wörterbuch zurückzuladen , Konvertieren wir das Python-Wörterbuch mit dem Instrument, bitten und Zeitstempel in ein TickEvent, das an die Ereignis-Warteschlange gesendet wird. Wir haben jetzt alle wichtigen Komponenten vorhanden. Der letzte Schritt ist, alles, was wir bisher geschrieben haben, zu verpacken Hauptprogramm Das Ziel dieser Datei, bekannt als ist es, zwei separate Threads zu erstellen, von denen einer den Preishandler und der andere, der den Handelshandler betreibt, ausführt. Warum brauchen wir zwei getrennte Threads Setzen wir einfach, wir führen zwei getrennte Stücke von Code aus , Die beide kontinuierlich laufen Wenn wir ein Non-Thread-Programm erstellen würden, dann würde der Streaming-Socket, der für die Preis-Updates verwendet wird, niemals jemals wieder auf den Hauptcode-Pfad zurückkehren und daher würden wir niemals irgendeinen Handel ausführen. Ähnlich, wenn Wir liefen die Handelsschleife siehe unten, wir würden niemals den Flow-Pfad zum Preis-Streaming-Sockel zurückgeben. Daher benötigen wir mehrere Threads, eine für jede Komponente, so dass sie unabhängig durchgeführt werden können. Sie werden beide über die Ereignisse miteinander kommunizieren Queue. Let s untersuchen dies ein bisschen weiter Wir erstellen zwei separate Threads mit den folgenden Zeilen. Wir übergeben die Funktion oder Methodenname an das Ziel Keyword-Argument und dann übergeben Sie eine iterable wie eine Liste oder Tupel auf die Args Keyword-Argument, die dann Übergibt diese Argumente an die eigentliche Methode function. Finally starten wir beide Threads mit den folgenden Zeilen. Thus sind wir in der Lage, zwei, effektiv unendlich Looping, Code-Segmente unabhängig laufen, die beide kommunizieren durch die Ereignisse Warteschlange Beachten Sie, dass die Python-Threading-Bibliothek nicht Produzieren eine echte Multi-Core-Multithread-Umgebung aufgrund der CPython-Implementierung von Python und der Global Interpreter Lock GIL Wenn Sie mehr über Multithreading auf Python lesen möchten, schauen Sie sich bitte diesen Artikel an. Lassen Sie sich den Rest des Codes in Detail Zuerst importieren wir alle notwendigen Bibliotheken einschließlich Queue Threading und Zeit Wir importieren dann alle oben genannten Code-Dateien Ich persönlich bevorzuge es, alle Konfigurationseinstellungen zu nutzen, was eine Gewohnheit ist, die ich von der Arbeit mit Django abgeholt habe. Danach definieren wir den Handel Funktion, die in Python-Pseudocode oben beschrieben wurde. Eine unendliche while-Schleife wird durchgeführt, während True, die ständig von der Ereignis-Warteschlange abfragt und nur die Schleife überspringt, wenn sie leer gefunden wird. Wenn ein Ereignis gefunden wird, dann ist es entweder ein TickEvent oder ein OrderEvent Und dann ist die entsprechende Komponente aufgerufen, um es auszuführen In diesem Fall ist es entweder eine Strategie oder Ausführung Handler Die Schleife schläft dann einfach für Herzschlag Sekunden in diesem Fall 0 5 Sekunden und fährt fort. Schließlich definieren wir den Haupteingangspunkt des Codes in Die Hauptfunktion Es ist gut kommentiert unten, aber ich werde hier zusammenfassen Im Wesentlichen instanziieren wir die Ereignisse Warteschlange und definieren die Instrumente Einheiten Wir erstellen dann die StreamingForexPrices Preis Streaming-Klasse und dann anschließend die Execution Execution Handler Beide erhalten die notwendigen Authentifizierungsdetails, die gegeben werden Von OANDA bei der Erstellung eines Kontos. Wir erstellen dann die TestRandomStrategy-Instanz Schließlich definieren wir die beiden Threads und dann starten sie. Um den Code zu starten, müssen Sie einfach alle Dateien in das gleiche Verzeichnis und rufen Sie die folgenden am Terminal. Hinweis, dass Um den Code in diesem Stadium zu stoppen erfordert eine harte Tötung des Python-Prozesses über Ctrl-Z oder gleichwertig Ich habe nicht hinzugefügt einen zusätzlichen Thread zu behandeln suchen für die, die benötigt werden, um den Code sicher zu stoppen Eine mögliche Möglichkeit, den Code zu stoppen Ein Ubuntu-Linux-Rechner ist zu geben. Und dann übergeben Sie die Ausgabe dieser eine Prozessnummer in die folgenden. Wo PROCESSID muss durch die Ausgabe von pgrep ersetzt werden, dass dies nicht besonders gut praktisch ist. In späteren Artikel werden wir erstellen eine mehr Anspruchsvoller Stopp-Startmechanismus, der die Ubuntu-Prozessüberwachung nutzt, um das Trading-System laufen zu lassen. 7.Die Ausgabe nach 30 Sekunden oder so, je nach Tageszeit im Verhältnis zu den Haupthandelszeiten für EUR USD, für die oben genannten Code, wird unten angegeben. Die ersten fünf Zeilen zeigen die JSON-Tick-Daten, die von OANDA mit Bid-Ask-Preisen zurückgegeben werden. Anschließend können Sie die Ausgabe-Ausgabe sowie die JSON-Antwort von OANDA, die die Eröffnung eines Kaufhandels für 10.000 Einheiten von EUR USD und der Preis, den es erreicht hat. Dies wird immer unbegrenzt laufen, bis Sie das Programm mit einem Ctrl-Z-Befehl oder ähnlichem töten. In späteren Artikeln werden wir einige dringend benötigte Verbesserungen durchführen, einschließlich. Real Strategien - Richtig Forex-Strategien, die profitable Signale generieren. Produktionsinfrastruktur - Remote-Server-Implementierung und 24 7 überwachtes Handelssystem mit Stop-Start-Fähigkeit. Portfolio - und Risikomanagement - Portfolio - und Risiko-Overlays für alle vorgeschlagenen Aufträge aus der Strategie. Mehrere Strategien - Aufbau eines Portfolio von Strategien Die sich in das Risikomanagement-Overlay integrieren. Wie mit dem Equity Event-driven Backtester, müssen wir auch ein Forex Backtesting-Modul erstellen, die uns eine schnelle Recherche durchführen und es einfacher machen, Strategien einzusetzen. Denken Sie daran, ACCOUNTID und ACCESSTOKEN zu wechseln. Just Erste Schritte mit quantitativen Trading. Using Python, IBPy und die Interactive Broker API zu automatisieren Trades. A während zurück haben wir diskutiert, wie man ein Interactive Brokers Demo-Konto einrichten Interactive Brokers ist eines der wichtigsten Broker verwendet Durch Einzelhandel algorithmische Händler aufgrund seiner relativ niedrigen minimalen Kontostand Anforderungen 10.000 USD und relativ einfach API In diesem Artikel werden wir nutzen ein Demo-Konto zu automatisieren Trades gegen die Interactive Brokers API, über Python und die IBPy-Plugin. Disclosure habe ich keine Zugehörigkeit zu interaktiven Brokern habe ich sie schon früher in einem professionellen Fonds-Kontext verwendet und bin damit mit ihrer Software vertraut. Der Interactive Brokers API. Interactive Brokers ist ein großes Unternehmen und bietet so eine breite Palette von Händlern, die von diskretionärem Handel reichen Zu automatisierte institutionelle Dies hat ihre GUI-Schnittstelle, Trader Workstation TWS geführt, um eine signifikante Menge an Glocken und Pfeifen besitzen. Zusätzlich zu TWS gibt es auch eine leichte Komponente namens IB Gateway, die den gleichen Zugang zu den IB-Servern bietet, obwohl Ohne die zusätzliche Funktionalität der GUI Für unsere automatisierten Handelszwecke haben wir t tatsächlich brauchen die TWS GUI, aber ich denke für dieses Tutorial ist es demonstrativ, es zu nutzen. Die zugrunde liegende Architektur basiert auf einem Client-Server-Modell, das beide Ausführung bietet Und Marktdaten-Feeds historische und Echtzeit über eine API Es ist diese API, die wir in diesem Tutorial nutzen, um automatisierte Aufträge zu senden, über IBPy. IBPy wurde geschrieben, um die native Java API zu wickeln und es einfach zu machen, von Python The zu nennen Zwei Hauptbibliotheken, die wir in IBPy interessieren, sind und letzteres ist höheres Niveau und nutzt die Funktionalität in der ehemaligen. In der folgenden Implementierung werden wir ein extrem einfaches Beispiel schaffen, das einfach einen einzelnen Marktauftrag zum Kauf von 100 schicken wird Einheiten von Google-Aktie, mit Smart-Order-Routing Letzteres ist entworfen, um den besten Preis in der Praxis zu erreichen, obwohl in bestimmten Situationen kann es suboptimal sein Jedoch für die Zwecke dieses Tutorials wird es genügen. Implementierung in Python. Before wir beginnen es ist notwendig Um die Schritte im vorherigen Tutorial bei der Einrichtung eines Interactive Brokers-Kontos zu haben. Darüber hinaus ist es notwendig, einen vorherigen Python-Arbeitsbereich zu haben, damit wir IBPy installieren können, mit dem Sie andere Aspekte Ihres Codes zusammenbinden können. Das Tutorial zur Installation eines Python-Forschungsumgebung wird den notwendigen Arbeitsbereich schaffen. Stalling IBPy. IBPy ist ein Python-Wrapper um die Java-basierte Interactive Brokers API geschrieben Es macht die Entwicklung von algorithmischen Handelssystemen in Python etwas weniger problematisch Es wird als Grundlage für alle nachfolgende Kommunikation mit verwendet werden Interaktive Broker, bis wir das FIX-Protokoll zu einem späteren Zeitpunkt in Betracht ziehen. Da IBPy auf GitHub als Git-Repository gepflegt wird, müssen wir git installieren. Auf einem Ubuntu-System wird das von Ihnen bearbeitet. Wenn Sie git installiert haben, können Sie ein Unterverzeichnis erstellen, das gespeichert werden soll IBPy Auf meinem System habe ich es einfach unter mein Home-Verzeichnis platziert. Der nächste Schritt ist, IBPy über git clone herunterzuladen. Machen Sie sicher, dass Sie das IbPy-Verzeichnis eingeben und mit der bevorzugten virtuellen Umgebung von Python installieren. Das schließt die Installation von IBPy ab. Der nächste Schritt Ist es, TWS zu öffnen, wie in der vorherigen Tutorial. TWS Portfolio View vor Google Trade. Automated Trading beschrieben. Der folgende Code wird ein extrem einfacher API-basierter Bestellmechanismus demonstrieren Der Code ist weit von Produktions-bereit, aber es zeigt das Wesentliche Funktionalität der Interactive Brokers API und wie man sie für die Auftragsausführung verwendet. Alle der folgenden Code sollte sich in der Datei befinden Der erste Schritt besteht darin, die Vertrags - und Auftragsobjekte aus der Bibliothek der unteren Ebene zu importieren Zusätzlich importieren wir die Verbindungs - und Nachrichtenobjekte Aus der übergeordneten library. IB bietet uns die Möglichkeit, Fehler und Server-Antworten durch einen Callback-Mechanismus zu behandeln. Die folgenden zwei Funktionen tun nichts weiter als den Inhalt der vom Server zurückgegebenen Meldungen auszudrucken. Ein anspruchsvolleres Produktionssystem müsste implementieren Logik, um den kontinuierlichen Betrieb des Systems im Falle eines außergewöhnlichen Verhaltens zu gewährleisten. Die folgenden zwei Funktionen wickeln die Erstellung der Vertrags - und Auftragsobjekte ein und legen deren jeweilige Parameter fest. Die Funktionsdokumente beschreiben jeden Parameter einzeln. Die Hauptfunktion erzeugt zunächst ein Verbindungsobjekt an Trader Workstation, die für den Code laufen muss, um zu funktionieren Die Fehler - und Antworthandlerfunktionen werden dann mit dem Verbindungsobjekt registriert. Anschließend wird eine Bestellvariable definiert. In einem Produktionssystem muss diese für jede Handelsordnung inkrementiert werden. Die nächsten Schritte sind zu erstellen Ein Vertrag und ein Auftrag, der eine Marktordnung darstellt, um 100 Einheiten von Google-Aktie zu kaufen Die endgültige Aufgabe besteht darin, diese Bestellung tatsächlich über die placeOrder-Methode des Connection-Objekts zu platzieren. Dann trennen wir von TWS. Der letzte Schritt ist, den Code auszuführen Kann man sehen, dass sich die API-Registerkarte in Trader Workstation öffnet, wobei der Marktauftrag angezeigt wird, um lange 100 Aktien der Google. TWS API Tab-Ansicht nach Google-Bestellung zu gehen. Wenn wir nun die Portfolio-Registerkarte sehen, können wir die Google-Position sehen Notiz eine Forex-Position in der Liste, die nicht von mir selbst generiert wurde, kann ich nur davon ausgehen, dass entweder das IB-Demo-Konto in irgendeiner Weise aufgrund der identischen Login-Informationen geteilt wird oder IB Orte willkürliche Aufträge in das Konto, um es realistischer erscheinen zu lassen Jeder hat einen Einblick in dieses Verhalten Ich würde fasziniert sein, mehr zu lernen. TWS API Portfolio-Ansicht nach Google-Bestellung. Dies ist die grundlegendste Form der automatisierten Ausführung, die wir in Erwägung ziehen könnten In nachfolgenden Artikeln werden wir ein robusteres Event - Getriebene Architektur, die realistische Handelsstrategien behandeln kann. Just Erste Schritte mit quantitativen Trading.

No comments:

Post a Comment