Forex Py

Verwenden von Python, IBPy und der Interactive Brokers API, um Trades zu automatisieren Eine Weile zurück diskutierten wir, wie Sie ein Interactive Brokers Demo-Konto einrichten. Interactive Brokers ist einer der Hauptvermittler, die von den Handel algorithmischen Handelern wegen seiner verhältnismäßig niedrigen minimalen Kontostandanforderungen (10.000 USD) und (relativ) einfacher API benutzt werden. In diesem Artikel werden wir ein Demo-Konto verwenden, um Trades gegen die Interactive Brokers API, über Python und das IBPy-Plugin zu automatisieren. Disclosure: Ich habe keine Verbindung mit Interactive Brokers. Ich habe sie vorher in einem professionellen Fonds-Kontext verwendet und als solche bin vertraut mit ihrer Software. Die interaktive Broker API Interactive Brokers ist ein großes Unternehmen und als solches für eine breite Palette von Händlern, von diskretionären Einzelhandel zu automatisierten institutionellen. Dies hat ihre GUI-Schnittstelle, Trader Workstation (TWS) geführt, um eine beträchtliche Menge an Glocken und Pfeifen zu besitzen. Zusätzlich zu TWS gibt es auch eine leichte Komponente namens IB Gateway, die den gleichen Zugang zu den IB-Servern bietet, allerdings ohne die zusätzliche Funktionalität der GUI. Für unsere automatisierten Handelszwecke brauchen wir eigentlich nicht die TWS-GUI, aber ich denke für dieses Tutorial ist es demonstrativ, es zu nutzen. Die zugrundeliegende Architektur basiert auf einem Client-Server-Modell, das sowohl Ausführungs - als auch Marktdaten-Feeds (historisch und real-time) über eine API anbietet. Es ist diese API, die wir in diesem Tutorial nutzen werden, um automatisierte Bestellungen über IBPy zu senden. IBPy wurde geschrieben, um die native Java-API zu wickeln und machen es einfach, von Python aufzurufen. Die beiden Hauptbibliotheken, die wir in IBPy interessieren, sind ib. ext und ib. opt. Letzteres ist höheres Niveau und nutzt Funktionalität in ersterem. In der folgenden Implementierung werden wir ein extrem einfaches Beispiel erstellen, das einfach einen einzelnen Marktauftrag sendet, um 100 Einheiten von Google-Aktien zu kaufen, und zwar mittels Smart Order Routing. Letzteres soll den besten Preis in der Praxis erreichen, obwohl er in bestimmten Situationen suboptimal sein kann. Für die Zwecke dieses Tutorials genügt es jedoch. Implementierung in Python Bevor wir beginnen, ist es notwendig, die Schritte im vorherigen Tutorial zur Einrichtung eines Interactive Brokers-Kontos befolgt zu haben. Darüber hinaus ist es notwendig, einen vorherigen Python-Arbeitsbereich zu haben, damit wir IBPy installieren können. Die es Ihnen ermöglichen, andere Aspekte Ihres Codes zusammen zu binden. Das Tutorial zum Installieren einer Python-Forschungsumgebung wird den erforderlichen Arbeitsbereich erstellen. IBPy installieren IBPy ist ein Python-Wrapper, der um die Java-basierte Interactive Brokers API geschrieben wurde. Es macht die Entwicklung von algorithmischen Handelssysteme in Python etwas weniger problematisch. Es wird als Grundlage für alle nachfolgende Kommunikation mit Interactive Brokern verwendet, bis wir das FIX-Protokoll zu einem späteren Zeitpunkt berücksichtigen. Da IBPy auf GitHub als Git-Repository verwaltet wird, müssen wir git installieren. Auf einem Ubuntu-System wird dies behandelt: Sobald Sie git installiert haben, können Sie ein Unterverzeichnis erstellen, um IBPy zu speichern. Auf meinem System habe ich es einfach unter meinem Home-Verzeichnis platziert: Der nächste Schritt ist, IBPy via git clone herunterzuladen: Stellen Sie sicher, dass Sie das IbPy-Verzeichnis eingeben und mit der bevorzugten virtuellen Python-Umgebung installieren: Damit ist die Installation von IBPy abgeschlossen. Der nächste Schritt ist, TWS zu öffnen (wie im vorherigen Tutorial beschrieben). Automatisierter Handel Der folgende Code demonstriert einen extrem einfachen API-basierten Auftragsmechanismus. Der Code ist weit von der Produktion fertig, aber es zeigt die wesentliche Funktionalität der Interactive Brokers API und wie es für die Ausführung der Bestellung verwendet werden. Der folgende Code sollte sich in der Datei ibapidemo. py befinden. Der erste Schritt besteht darin, die Objekte Contract und Order aus der untergeordneten Bibliothek ib. ext zu importieren. Darüber hinaus importieren wir die Connection - und Message-Objekte aus der ib. opt Bibliothek: IB bietet uns die Möglichkeit, Fehler und Serverreaktionen durch einen Callback-Mechanismus zu behandeln. Die beiden folgenden Funktionen dienen dazu, den Inhalt der vom Server zurückgegebenen Nachrichten auszudrucken. Ein ausgeklügelteres Produktionssystem müsste eine Logik implementieren, um einen kontinuierlichen Betrieb des Systems im Falle eines außergewöhnlichen Verhaltens zu gewährleisten: Die folgenden beiden Funktionen wickeln die Erzeugung der Vertrags - und Auftragsobjekte mit ihren jeweiligen Parametern um. Die Funktionsdokumente beschreiben jeden Parameter einzeln: Die Hauptfunktion erzeugt zunächst ein Verbindungsobjekt zu Trader Workstation, das für den zu funktionierenden Code ausgeführt werden muss. Die Fehler - und Antworthandlerfunktionen werden dann mit dem Verbindungsobjekt registriert. Anschließend wird eine Ordnungsvariable definiert. In einem Produktionssystem muss dies für jede Trade-Reihenfolge erhöht werden. Die nächsten Schritte sind, einen Vertrag und einen Auftrag zu schaffen, der einen Marktauftrag zum Kauf von 100 Einheiten Google-Aktien darstellt. Die letzte Aufgabe ist es, diese Reihenfolge über die Methode placeOrder des Connection-Objekts zu platzieren. Wir trennen dann von TWS: Der letzte Schritt ist, den Code auszuführen: Sofort sieht man, dass sich die API-Registerkarte in der Trader Workstation öffnet und die Marktordnung so zeigt, dass man 100 Aktien von Google weit gehen kann Können wir die Google-Position sehen. Sie werden auch eine Forex-Position in der Liste notieren, die nicht von mir selbst generiert wurde. Ich kann nur annehmen, dass entweder das IB-Demo-Konto auf irgendeine Art und Weise (aufgrund der identischen Login-Informationen) geteilt wird oder IB willkürliche Aufträge in das Konto zu machen Es erscheint realistischer. Wenn jemand irgendeinen Einblick in dieses Verhalten hat, wäre ich fasziniert, mehr zu lernen: Dies ist die grundlegendste Form der automatisierten Ausführung, die wir betrachten könnten. In den folgenden Artikeln werden wir eine robustere ereignisorientierte Architektur konstruieren, die realistische Handelsstrategien verarbeiten kann. Klicken Sie unten, um mehr darüber zu erfahren. Die Informationen auf dieser Website ist die Meinung der einzelnen Autoren auf der Grundlage ihrer persönlichen Beobachtung, Forschung und jahrelange Erfahrung. Der Herausgeber und seine Autoren sind nicht registrierte Anlageberater, Rechtsanwälte, CPAs oder andere Finanzdienstleister und machen keine Rechts-, Steuer-, Rechnungswesen, Anlageberatung oder andere professionelle Dienstleistungen. Die Informationen, die von dieser Web site angeboten werden, sind nur allgemeine Ausbildung. Weil jeder Einzelne sachliche Situation anders ist, sollte der Leser seinen persönlichen Berater suchen. Weder der Autor noch der Herausgeber übernehmen jegliche Haftung oder Verantwortung für Fehler oder Unterlassungen und haben weder eine Haftung noch Verantwortung gegenüber Personen oder Körperschaften in Bezug auf Schäden, die direkt oder indirekt durch die auf dieser Website enthaltenen Informationen verursacht oder vermutet werden. Benutzung auf eigene Gefahr. Darüber hinaus kann diese Website erhalten finanzielle Entschädigung von den Unternehmen erwähnt durch Werbung, Affiliate-Programme oder auf andere Weise. Preise und Angebote von Inserenten auf dieser Website ändern sich häufig, manchmal ohne Vorankündigung. Während wir uns bemühen, rechtzeitige und genaue Informationen aufrechtzuerhalten, können Angebot Details veraltet sein. Besucher sollten daher die Bedingungen dieser Angebote vor der Teilnahme an ihnen überprüfen. Der Autor und sein Herausgeber haften nicht für die Aktualisierung von Informationen und haften nicht für Inhalte, Produkte und Dienstleistungen von Drittanbietern, auch wenn sie über Hyperlinks und Anzeigen auf dieser Website aufgerufen werden. Forex Trading Diary 1 - Automatisierte Forex Trading mit der OANDA API, die ich zuvor erwähnt habe Die QuantStart: 2014 Im Bericht Artikel, dass ich einige Ausgaben von 2015 über automatisierte Devisenhandel verbringen würde. Angesichts der Tatsache, dass ich selbst in der Regel Forschung in Aktien-und Futures-Märkte, Ich dachte, es wäre lustig (und pädagogisch), über meine Erfahrungen mit dem Eintritt in den Forex-Markt im Stil eines Tagebuchs zu schreiben. Jeder Tagebucheintrag wird versuchen, auf all jenen aufzubauen, sollte aber auch relativ eigenständig sein. In diesem ersten Eintrag des Tagebuchs Ill beschreiben, wie die Einrichtung eines neuen Praxis-Brokerage-Konto mit OANDA sowie wie eine grundlegende multithreaded ereignisgesteuerte Trading-Engine, die automatisch ausgeführt werden kann, sowohl in einer Praxis und Live-Einstellung zu schaffen. Letztes Jahr verbrachten wir viel Zeit mit Blick auf den ereignisgesteuerten Backtester. Vor allem für Aktien und ETFs. Die, die ich hier unten ist auf Forex ausgerichtet und kann sowohl für den Papierhandel oder Live-Handel verwendet werden. Ich habe alle folgenden Anweisungen für Ubuntu 14.04, aber sie sollten leicht zu Windows oder Mac OS X, mit einer Python-Distribution wie Anaconda zu übersetzen. Die einzige zusätzliche Bibliothek, die für die Python-Handelsmaschine verwendet wird, ist die Anforderungsbibliothek, die für die HTTP-Kommunikation zur OANDA-API erforderlich ist. Da dies der erste Posten direkt über den Devisenhandel ist und der nachfolgend dargestellte Kodex direkt an ein Live-Trading-Umfeld angepasst werden kann, möchte ich folgende Disclaimer vorstellen: Disclaimer: Der Handel mit Devisen an Margin trägt ein hohes Risiko, Und möglicherweise nicht für alle Anleger geeignet. Die Wertentwicklung in der Vergangenheit ist kein Hinweis auf zukünftige Ergebnisse. Der hohe Grad der Hebelwirkung kann sowohl gegen Sie als auch für Sie arbeiten. Vor der Entscheidung, in Devisen zu investieren, sollten Sie sorgfältig überlegen Sie Ihre Anlageziele, Erfahrung und Risikobereitschaft. Die Möglichkeit besteht, dass Sie einen Verlust von einigen oder allen Ihrer anfänglichen Investition zu erhalten und daher sollten Sie nicht Geld investieren, die Sie nicht leisten können, zu verlieren. Sie sollten sich bewusst sein, alle Risiken im Zusammenhang mit Devisenhandel und suchen Rat von einem unabhängigen Finanzberater, wenn Sie irgendwelche Zweifel haben. Diese Software wird bereitgestellt, wie es ist, und alle ausgedrückten oder implizierten Garantien, einschließlich, aber nicht beschränkt auf die implizierten Garantien der Marktgängigkeit und Eignung für einen bestimmten Zweck werden 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 Ersatzgütern oder Dienstleistungsverlusten, Daten oder Gewinnen oder Betriebsunterbrechungen) ), Die in irgendeinem Fall aus der Nutzung dieser Software entstanden sind, auch wenn auf die Möglichkeit eines solchen Schadens hingewiesen wird, auf irgendeine Haftungslehre, sei es auf vertraglicher, strikter Haftung oder unerlaubter Handlung (einschließlich Fahrlässigkeit oder anderweitig). Einrichten eines Kontos mit OANDA Die erste Frage, die in den Sinn kommt, ist Warum wählen Sie OANDA. Einfach gesagt, nach ein wenig Googeln herum für Forex Broker, die APIs hatte, sah ich, dass OANDA hatte vor kurzem eine richtige REST-API, die leicht mit fast jeder Sprache in einer äußerst direkten Weise kommuniziert werden konnte. Nach dem Lesen durch ihre Entwickler-API-Dokumentation. Ich beschloss, ihnen einen Versuch, zumindest mit einem Praxis-Konto. Um klar zu sein - ich habe keine vorherige oder bestehende Beziehung mit OANDA und bin nur die Bereitstellung dieser Empfehlung basierend auf meiner begrenzten Erfahrung herumspielen mit ihrer Praxis-API und einige kurze Nutzung (für Marktdaten-Download), während bei einem Fonds zuvor beschäftigt. Wenn jemand auf irgendwelche anderen Forex-Broker gekommen ist, die auch eine ähnlich moderne API dann Id sind glücklich, ihnen einen Blick auch zu geben. Vor der Nutzung der API muss man sich für ein Praxiskonto anmelden. Gehen Sie hierzu zum Anmelde-Link. Sie sehen dann den folgenden Bildschirm: Sie können sich dann mit Ihren Anmeldeinformationen anmelden. Achten Sie darauf, die Registerkarte fxTradePractice aus dem Anmeldebildschirm auszuwählen: Einmal müssen Sie eine Notiz über Ihre Kontonummer machen. Er wird unterhalb des schwarzen My Funds Headers neben Primary aufgelistet. Mine ist eine 7-stellige Zahl. Darüber hinaus müssen Sie auch ein persönliches API-Token generieren. Dazu klicken Sie unterhalb der Registerkarte Andere Aktionen links unten auf API-Zugriff verwalten: In diesem Stadium können Sie ein API-Token generieren. Sie benötigen den Schlüssel für Gebrauch später, also stellen Sie sicher, ihn aufzuschreiben auch. Sie werden nun die FXTrade Practice-Anwendung starten, die es uns ermöglicht, die ausgeführten Aufträge und unseren (Papier-) Gewinn amp loss zu sehen. Wenn Sie ein Ubuntu-System ausführen, müssen Sie eine etwas andere Java-Version installieren. Insbesondere die Oracle-Version von Java 8. Wenn Sie dies nicht tun, dann wird die Praxis-Simulator nicht aus dem Browser laden. Ich lief diese Befehle auf meinem System: Sie werden nun in der Lage, die Praxis Handelsumfeld zu starten. Kehren Sie zum OANDA Dashboard zurück und klicken Sie auf den grün markierten Link FXTrade Practice starten. Es wird ein Java-Dialog fragen, ob Sie es ausführen. Klicken Sie auf Ausführen, und das fxTrade-Übungsprogramm wird geladen. Mine fiel auf ein 15-minütiges Candle Chart von EURUSD mit dem Quote Panel auf der linken Seite: An diesem Punkt sind wir bereit, mit dem Entwerfen und Kodieren unseres automatisierten Devisenhandelssystems gegen die OANDA API zu beginnen. Überblick über die Trading-Architektur Wenn Sie die Event-getriebene Backtester-Serie für Aktien und ETFs, die ich im letzten Jahr erstellt habe, verfolgten, werden Sie sich bewusst sein, wie ein solches ereignisgesteuertes Handelssystem funktioniert. Für diejenigen unter Ihnen, die neu für ereignisgesteuerte Software sind. Ich würde stark vorschlagen, durch den Artikel zu lesen, um einen Einblick zu erhalten, wie sie funktionieren. Im Wesentlichen wird das gesamte Programm in einer infinte while-Schleife ausgeführt, die nur abschließt, wenn das Handelssystem abgeschaltet wird. Der zentrale Kommunikationsmechanismus des Programms erfolgt über eine Warteschlange, die Ereignisse enthält. Die Warteschlange wird ständig abgefragt, um nach neuen Ereignissen zu suchen. Sobald ein Ereignis aus der Warteschlange genommen wurde, muss es durch eine entsprechende Komponente des Programms behandelt werden. Daher könnte ein Marktdaten-Feed TickEvent s erzeugen, die bei Eintreffen eines neuen Marktpreises auf die Warteschlange gestellt werden. Ein signalgenerierendes Strategieobjekt kann OrderEvent-S erzeugen, die an eine Brokerage gesendet werden sollen. Die Nützlichkeit eines solchen Systems wird durch die Tatsache gegeben, dass es nicht wichtig ist, welche Reihenfolge oder Arten von Ereignissen auf der Warteschlange platziert werden, 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 irgendeines anderen. Dies ist äußerst nützlich in algorithmischen Handelssituationen, in denen Marktdaten-Feed-Handler und Strategie-Signalgeneratoren sehr unterschiedliche Leistungsmerkmale aufweisen. Die Haupthandelsschleife wird durch den folgenden Python-Pseudocode gegeben: Wie oben erwähnt, läuft der Code in einer Endlosschleife. Zuerst wird die Warteschlange abgefragt, um ein neues Ereignis abzurufen. Wenn die Warteschlange leer ist, wird die Schleife nach einer kurzen Schlafperiode, die als Herzschlag bezeichnet wird, einfach neu gestartet. Wenn ein Ereignis gefunden wird, wird sein Typ bewertet und dann wird das relevante Modul (entweder die Strategie oder der Ausführungsbehandler) aufgerufen, um das Ereignis zu behandeln und möglicherweise neue zu generieren, die wieder in die Warteschlange zurückkehren. Die grundlegenden Bestandteile, die wir für unser Handelssystem verursachen, schließen die folgenden ein: Streaming Price Handler - Dies hält eine langfristige Verbindung offen für OANDAs-Server und sendet Tick-Daten (dh Bidask) über die Verbindung für alle Instrumente, die interessiert waren. Strategie-Signal-Generator - Dies wird eine Sequenz von Tick-Ereignissen und verwenden sie zur Erzeugung von Handelsaufträgen, die durch die Ausführung Handler ausgeführt werden. Execution Handler - nimmt eine Reihe von Order-Events auf und führt sie dann blind mit OANDA aus. Ereignisse - Diese Objekte stellen die Nachrichten dar, die auf der Ereigniswarteschlange weitergegeben werden. Für diese Implementierung benötigen wir nur zwei, nämlich das TickEvent und das OrderEvent. Haupteingangspunkt - Der Haupteintragspunkt enthält auch die Handelsschleife, die kontinuierlich die Nachrichtenwarteschlange abfragt und Nachrichten an die richtige Komponente sendet. Dies wird häufig als Ereignis - oder Ereignishandler bezeichnet. Wir werden nun die Implementierung des Codes im Detail diskutieren. Am unteren Rand des Artikels ist die vollständige Auflistung aller Quellcode-Dateien. Wenn Sie sie im selben Verzeichnis platzieren und python trading. py ausführen, beginnen Sie mit der Generierung von Aufträgen, vorausgesetzt, Sie haben Ihre Kontonummer und Ihr Authentifizierungstoken von OANDA ausgefüllt. Python-Implementierung Es ist schlecht, Kennwörter oder Authentifizierungsschlüssel in einer Codebasis zu speichern, da Sie nie vorhersagen können, wer schließlich Zugriff auf ein Projekt erlaubt. In einem Produktionssystem würden wir diese Credentials als Umgebungsvariablen mit dem System speichern und diese Envvars dann jedes Mal abfragen, wenn der Code redeployed ist. Dadurch wird sichergestellt, dass Kennwörter und Auth-Token niemals in einem Versionskontrollsystem gespeichert werden. Da wir aber nur daran interessiert sind, ein Spielzeug-Handelssystem zu entwickeln und nicht mit Produktionsdetails in diesem Artikel zu tun haben, werden wir diese Autotoken stattdessen in eine Einstellungsdatei trennen. In der folgenden settings. py-Konfigurationsdatei haben wir ein Wörterbuch namens ENVIRONMENTS, das die API-Endpunkte für die OANDA-Streaming-API und die Trading-API speichert. Jedes Unterwörterbuch enthält drei separate API-Endpunkte: real. Praxis und Sandkasten. Die Sandbox-API ist rein zum Testen von Code und zur Überprüfung, dass es keine Fehler oder Bugs gibt. Es verfügt nicht über die Uptime-Garantien der realen oder Praxis-APIs. Die Praxis API, im Wesentlichen bietet die Fähigkeit, Papierhandel. Das heißt, es bietet alle Features der realen API auf einem simulierten Praxiskonto. Die wirkliche API ist nur, dass - es ist Live-Handel Wenn Sie diesen Endpunkt in Ihrem Code verwenden, wird es gegen Ihren Live-Kontostand zu handeln. SEHR EXTREM SORGFÄLTIG WICHTIG: Beim Trading gegen die Praxis API daran erinnern, dass eine wichtige Transaktion Kosten, dass der Auswirkungen auf den Markt. Wird nicht berücksichtigt. Da keine Trades tatsächlich in die Umwelt gelegt werden, müssen diese Kosten anderweitig mit einem Market-Impact-Modell verrechnet werden, wenn Sie die Performance realistisch beurteilen möchten. Im Folgenden verwenden wir das in der DOMAIN-Einstellung angegebene Praxiskonto. Wir benötigen zwei separate Wörterbücher für die Domänen, jeweils eine für die Streaming - und Handels-API-Komponenten. Schließlich haben wir die ACCESSTOKEN und ACCOUNTID. Ive gefüllt die beiden unten mit Dummy-IDs, so müssen Sie Ihre eigenen nutzen, die von der OANDA-Konto-Seite zugegriffen werden kann: Der nächste Schritt ist es, die Ereignisse, die die Warteschlange verwendet, um zu helfen, die alle einzelnen Komponenten kommunizieren zu definieren. Wir brauchen zwei: TickEvent und OrderEvent. Der erste speichert Informationen über Instrumentenmarktdaten wie die (beste) Bidask und die Handelszeit. Der zweite wird verwendet, um Aufträge an den Ausführungsbearbeiter zu übermitteln und enthält somit das Instrument, die Anzahl der zu handelnden Einheiten, die Auftragsart (Markt oder Grenze) und die Seite (d. H. Kauf und Verkauf). Um unseren Event-Code zukunftssicher zu machen, werden wir eine Basisklasse mit dem Namen Event erstellen und alle Ereignisse von diesem erben. Der Code wird unten in events. py zur Verfügung gestellt: Die nächste Klasse, die wir erstellen werden, wird die Handelsstrategie behandeln. In dieser Demo werden wir eine ziemlich unsinnige Strategie schaffen, die einfach alle Marktticks empfängt und bei jeder 5. Tick zufällig 10.000 Einheiten EURUSD kauft oder verkauft. Klar ist dies eine lächerliche Strategie Aber es ist fantastisch für Testzwecke, weil es einfach zu Code und zu verstehen ist. In zukünftigen Tagebucheinträgen werden wir dies durch etwas spannenderes ersetzen, das (hoffentlich) einen Gewinn macht. Die Strategie. py-Datei finden Sie weiter unten. Lässt Arbeit durch sie und sehen, was los ist. Zuerst importieren wir die zufällige Bibliothek und das OrderEvent-Objekt aus events. py. Wir benötigen die gelegentliche lib, um eine gelegentliche Kauf - oder Verkaufsorder zu wählen. Wir brauchen OrderEvent, da das Strategieobjekt Aufträge an die Ereigniswarteschlange sendet, die später von der Ausführungsbehandlungsroutine ausgeführt wird. Die TestRandomStrategy-Klasse übernimmt das Gerät (in diesem Fall EURUSD), die Anzahl der Einheiten und die Ereigniswarteschlange als Parametermenge. Es erstellt dann einen Ticks-Zähler, der verwendet wird, um zu sagen, wie viele TickEvent-Instanzen es gesehen hat. Der Großteil der Arbeit erfolgt in der calculatesignals-Methode, die einfach ein Ereignis nimmt, bestimmt, ob es sich um ein TickEvent handelt (andernfalls ignorieren) und den Tickzähler erhöht. Dann prüft es, ob die Zählung durch 5 teilbar ist und dann nach dem Zufallsprinzip mit einer Marktordnung die angegebene Anzahl von Einheiten kauft oder verkauft. Seine 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ührung Handler. Diese Klasse hat die Aufgabe, auf OrderEvent-Instanzen zu reagieren und Anfragen an den Broker (in diesem Fall OANDA) stumm zu stellen. Das heißt, es gibt keine Risikomanagement - oder Potfolio-Konstruktionsüberlagerung. Der Ausführungsbehandler führt einfach eine beliebige Reihenfolge aus. Wir müssen alle Authentifizierungsinformationen an die Execution-Klasse übergeben, einschließlich der Domäne (Praxis, real oder Sandbox), des Zugriffstokens und der Konto-ID. Anschließend erstellen wir eine sichere Verbindung mit httplib. Einer der Pythons in Bibliotheken gebaut. Der Großteil der Arbeit erfolgt 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 codiert (teilweise durch urllib eine andere Python-Bibliothek), die als HTTP-POST-Anfrage an OANDAs API gesendet werden soll. Wir übergeben die Content-Type - und Authorization-Header-Parameter, zu denen unsere Authentifizierungsinformationen gehören. Darüber hinaus codieren wir die Parameter, die das Gerät (EURUSD), Einheiten, Auftragsart und Seite (buysell) gehören. Schließlich machen wir die Anfrage und speichern die Antwort: Die komplexeste Komponente des Handelssystems ist das StreamingForexPrices-Objekt, das die Marktpreisaktualisierungen von OANDA übernimmt. 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 und Parametern herzustellen. Zu den Parametern gehören die Konto-ID und die notwendige Instrumentenliste, die für Updates zu hören ist (in diesem Fall nur EURUSD). Beachten Sie die folgende Zeile: Damit wird die Verbindung gestreamt und so lange offen gehalten. Die zweite Methode, streamtoqueue. Tatsächlich versucht, eine Verbindung zum Stream herzustellen. Wenn die Antwort nicht erfolgreich ist (d. h. der Antwortcode ist nicht HTTP 200), dann kehren wir einfach zurück und beenden. Wenn es erfolgreich ist, versuchen wir, das in ein Python-Wörterbuch zurückgegebene JSON-Paket zu laden. Schließlich konvertieren wir das Python-Wörterbuch mit dem Instrument, dem Bidask und dem Zeitstempel in ein TickEvent, das an die Ereignis-Warteschlange gesendet wird: Wir haben jetzt alle wichtigen Komponenten. Der letzte Schritt ist, alles, was wir bisher geschrieben haben, in ein Hauptprogramm aufzunehmen. Das Ziel dieser Datei, bekannt als trading. py. Ist es, zwei separate Threads zu erstellen. Von denen einer den Preispreis führt und der andere, der den Handelsbehandler ausführt. Warum brauchen wir zwei separate Threads Put einfach, führen wir zwei separate Stücke von Code, die beide kontinuierlich ausgeführt werden. Wenn wir ein Programm ohne Threads erstellen sollten, würde der Streaming-Socket, der für die Preisaktualisierungen verwendet wird, niemals den Hauptcodepfad wieder freigeben und daher würden wir niemals irgendeinen Handel durchführen. Ähnlich, wenn wir lief die Handelsschleife (siehe unten), würden wir eigentlich nie wieder die Flow-Pfad zu den Preis-Streaming-Sockel. Daher benötigen wir mehrere Threads, eine für jede Komponente, so dass sie unabhängig ausgeführt werden können. Sie kommunizieren miteinander über die Warteschlange. Lets untersuchen dies ein wenig weiter. Wir erstellen zwei separate Threads mit den folgenden Zeilen: Wir übergeben die Funktion oder den Methodennamen an das Schlüsselwort-Argument des Ziels und übergeben dann eine iterable (wie eine Liste oder ein Tupel) an das Argument args-Schlüsselwort, das diese Argumente an die eigentliche Methodenfunktion weitergibt . Schließlich starten wir beide Threads mit den folgenden Zeilen: So sind wir in der Lage, zwei, effektiv unendlich Schleifen, Code-Segmente unabhängig, die beide über die Ereignis-Warteschlange zu kommunizieren laufen. Beachten Sie, dass die Python-Threading-Bibliothek aufgrund der CPython-Implementierung von Python und des Global Interpreter Lock (GIL) keine echte Multicode-Multithread-Umgebung erzeugt. Wenn Sie mehr über Multithreading auf Python lesen möchten, werfen Sie einen Blick auf diesen Artikel. Lets untersuchen den Rest des Codes im Detail. Zuerst importieren wir alle notwendigen Bibliotheken einschließlich Warteschlange. Gewinde und Zeit. Wir importieren dann alle oben genannten Code-Dateien. Ich persönlich bevorzuge die Aktivierung von Konfigurationseinstellungen, die eine Gewohnheit ist, die ich von der Arbeit mit Django abgeholt habe. Danach definieren wir die Trade-Funktion, die im Python-Pseudocode oben erklärt wurde. Eine unendliche while-Schleife wird durchgeführt (während True:), die kontinuierlich aus der Ereignis-Warteschlange abfragt und nur die Schleife überspringt, falls sie leer ist. Wenn ein Ereignis gefunden wird, ist es entweder ein TickEvent oder ein OrderEvent und dann wird die entsprechende Komponente aufgerufen, um es auszuführen. In diesem Fall handelt es sich entweder um eine Strategie - oder eine Ausführungsbehandlungsroutine. 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 Haupteintrittspunkt des Codes in der Hauptfunktion. Es ist gut kommentiert unten, aber ich werde hier zusammenfassen. Im Wesentlichen instanziieren wir die Ereigniswarteschlange und definieren die Instrumenteneinheiten. Danach erstellen wir die StreamingForexPrices-Preis-Streaming-Klasse und anschließend die Execution-Execution-Prozedur. Beide erhalten die erforderlichen Authentifizierungsdaten, die von OANDA beim Erstellen eines Kontos angegeben werden. Dann erstellen wir die TestRandomStrategy-Instanz. Schließlich definieren wir die beiden Threads und starten sie dann: Um den Code auszuführen, müssen Sie einfach alle Dateien im selben Verzeichnis platzieren und am Terminal folgendes anrufen: Beachten Sie, dass zum Stoppen des Codes in diesem Stadium ein schwerer Abbruch der Python-Prozess. Über Strg-Z oder Äquivalent Ive nicht ein zusätzlicher Thread zu behandeln, die Suche nach der sys. exit (), die erforderlich wäre, um den Code sicher zu stoppen. Eine Möglichkeit, den Code auf einer UbuntuLinux-Maschine zu stoppen, besteht darin, Folgendes einzugeben: Anschließend übergeben Sie die Ausgabe dieser (eine Prozessnummer) in die folgende: Wo PROCESSID durch die Ausgabe von pgrep ersetzt werden muss. Beachten Sie, dass dies nicht besonders gut ist In späteren Artikeln werden wir einen anspruchsvolleren Stopp-Mechanismus erstellen, der von der Ubuntus-Prozessüberwachung Gebrauch macht, damit das Handelssystem 247 läuft. Die Ausgabe nach 30 Sekunden oder so, abhängig von der Zeit von Tage im Verhältnis zu den Haupthandelstunden für EURUSD für den obigen Code ist unten angegeben: Die ersten fünf Zeilen zeigen die von OANDA mit Bidask-Preisen zurückgegebenen JSON-Tickdaten. Anschließend können Sie die Ausgabe der Ausführungsreihenfolge sowie die von OANDA zurückgegebene JSON-Antwort sehen, die die Eröffnung eines Kaufhandels für 10.000 Einheiten EURUSD und den erzielten Preis bestätigt. Dies wird unbegrenzt weiterlaufen, bis Sie das Programm mit einem Ctrl-Z-Befehl oder ähnlichem beenden. Whats Next In späteren Artikeln werden wir einige dringend benötigte Verbesserungen durchführen, darunter: Reale Strategien - Richtige Forex-Strategien, die rentable Signale generieren. Produktionsinfrastruktur - Remote-Server-Implementierung und 247 überwachtes Handelssystem mit Stopstart-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 in die Risikomanagement-Overlay integrieren Wie bei den equities event-driven Backtester, müssen wir auch ein Forex Backtesting-Modul zu erstellen. Das wird uns eine schnelle Forschung ermöglichen und es einfacher machen, Strategien einzusetzen. Settings. py (vergessen Sie nicht, ACCOUNTID und ACCESSTOKEN zu ändern): OANDA API Trading Utilities in Python Beispielprogramme, die mit dem OANDA API durch Python2.7 handeln Dieses Repo enthält ein Handelsprogramm, das Trades ausführt, wenn WMA und SMA kreuzen. Es gibt auch eine Akte, die einige extrem einfache Funktionen enthält, die einen Handel oder einen Auftrag öffnen. Klonen Sie dieses Repo an den Speicherort Ihrer Wahl Ändern Sie api - ror. py, um das zu tun, was Sie wollen, oder führen Sie einfach api-trade-averages. py mit Python2.7 aus. Um das Skript auszuführen, geben Sie bitte die Anzahl der Kerzen an, WMA und SMA, die Kerzengranularität, das Instrument und Ihre Rechnung. Dieses Skript verwendet die Sandbox-Umgebung, also benutzen Sie bitte Sandbox accountId. Python api-trade-averages. py 10 S5 EURUSD Dieses Programm soll OANDA API Funktionalität demonstrieren und ist nicht als Anlageberatung oder als Lösung zum Kauf oder Verkauf von Anlageprodukten gedacht.


Comments

Popular posts from this blog

Belajar Forex Mudah

Aims Trading System Kostenlos Herunterladen

Airbnb Mitarbeiter Aktienoptionen