Devisenhandel Api Python

Mastering Python for Finance Forex Trading mit OANDA API In den vorangegangenen Abschnitten implementierten wir ein Handelssystem durch die Anbindung an Interactive Brokers Trader WorkStation X über die Socket-Verbindungen über einen einzigen Port. Allerdings bieten viele andere Broker verschiedene Möglichkeiten zum Anschließen maßgeschneiderte Trading-Software über eine API. In diesem Abschnitt erfahren wir, wie wir unsere Handelsstrategie mit OANDAs REST API verbinden können. OANDA ist ein wichtiger Akteur in der Devisen (Forex) Business-Service-Retail-Investoren. Wir verwenden eine Trend-folgende Strategie, um Forex-Produkte zu handeln. Was bedeutet REST REST steht für Representational State Transfer. Es bezieht sich auf Web-Service-APIs für die Übertragung von Daten über HTTP mit dem GET. STELLEN. POST. Oder DELETE-Methoden. Mit der REST API können wir streamen. Der beste Inhalt für Ihre Karriere. Entdecken Sie unbegrenztes Lernen auf Nachfrage für rund 1 / day. Machine Learning und Pattern Recognition für algorithmische Forex und Stock Trading Einführung Machine Lernen in jeder Form, einschließlich Mustererkennung, hat natürlich viele Anwendungen von Stimme und Gesichtserkennung, medizinische Forschung. In diesem Fall ist unsere Frage, ob wir Mustererkennung verwenden können, um vorhergehende Situationen, die ähnlich in Muster waren, zu beziehen. Wenn wir das tun können, können wir dann Trades basieren auf dem, was wir wissen, passiert mit diesen Mustern in der Vergangenheit und tatsächlich einen Gewinn zu tun, würde vollständig komplett Code alles selber. Wenn Sie dieses Thema zu genießen, wäre der nächste Schritt, um in GPU-Beschleunigung oder Threading. Ich brauche nur Matplotlib (für Datenvisualisierung) und einige NumPy (für Nummernknirschen), und der Rest ist bis zu uns. Python ist natürlich eine Singlethread-Sprache, was bedeutet, dass jedes Skript nur eine einzelne CPU verwendet (normalerweise bedeutet dies, dass es einen einzelnen CPU-Kern verwendet, und manchmal sogar nur halb oder viertel oder schlechter als dieser Kern). Dies ist der Grund, warum Programme in Python kann eine Weile dauern, bis Computer etwas, aber Ihre Verarbeitung möglicherweise nur 5 und RAM 10. Um mehr über Threading zu erfahren, können Sie die Threading-Tutorial auf dieser Website. Der einfachste Weg, um diese Module heutzutage zu erhalten, ist die Verwendung von pip install. Pip ist wahrscheinlich der einfachste Weg, um Pakete zu installieren Wenn Sie Python installieren, sollten Sie in der Lage sein, Ihre Eingabeaufforderung wie cmd. exe auf Windows oder bash auf linux zu öffnen, und geben Sie: pip ein Installieren Sie numpy pip install matplotlib Haben Sie Probleme noch kein Problem, theres ein Tutorium dafür: pip installieren Python Module Tutorial. Wenn Sie noch Probleme haben, zögern Sie nicht uns zu kontaktieren, mit dem Kontakt in der Fußzeile dieser Website. Der Plan ist, eine Gruppe von Preisen in einem Zeitrahmen nehmen, und wandeln sie in Prozent Veränderung in dem Bemühen, die Daten zu normalisieren. Nehmen wir an, wir nehmen 50 aufeinander folgende Preispunkte im Interesse der Erklärung. Was gut ist, ist dieses Muster in das Gedächtnis zuzuordnen, einen Preispunkt vorwärts zu bewegen und das Muster neu zuzuordnen. Für jedes Muster, das wir in den Speicher abbilden, wollen wir einen Sprung nach vorne ein bisschen, sagen wir, 10 Preispunkte und Protokoll, wo der Preis an diesem Punkt ist. Dann ordnen wir dieses Ergebnis dem Muster zu und fahren fort. Jedes Muster hat sein Ergebnis. Als nächstes nehmen wir das gegenwärtige Muster und vergleichen es mit allen vorherigen Mustern. Was gut ist, vergleichen Sie die prozentuale Ähnlichkeit mit allen vorherigen Mustern. Wenn ihre prozentuale Ähnlichkeit mehr als eine bestimmte Schwelle ist, dann würden sie darüber nachdenken. Von hier haben wir vielleicht 20-30 vergleichbare Muster aus der Geschichte. Mit diesen ähnlichen Mustern, können wir dann alle ihre Ergebnisse zu aggregieren, und kommen mit einem geschätzten durchschnittlichen Ergebnis. Mit diesem durchschnittlichen Ergebnis, wenn es sehr günstig ist, dann könnten wir einen Kauf zu initiieren. Wenn das Ergebnis nicht günstig ist, vielleicht verkaufen wir oder kurz. Für die Visualisierung ist Heres ein Beispiel: In dem obigen Beispiel ist das vorhergesagte Durchschnittsmuster zu steigen, so dass wir einen Kauf initiieren könnten. Diese Serie wird nicht mit Ihnen mit jeder Art von get-rich-quick-Algorithmus enden. Es gibt ein paar bekannte Fehler mit diesem Programm, und die Chancen für Sie in der Lage, Trades schnell genug mit diesem Tick-Daten auszuführen ist unwahrscheinlich, es sei denn, Sie sind eine Bank. Das Ziel hier ist, Ihnen zu zeigen, wie einfach und grundlegende Mustererkennung ist. Solange Sie einige grundlegende Programmierkenntnisse Python haben, sollten Sie in der Lage sein, entlang zu folgen. OANDA API Trading Utilities in Python Beispielprogramme Handel mit der OANDA API durch Python2.7 Dieses Repo enthält ein Handelsprogramm, das Geschäfte ausführt, wenn WMA und SMA Kreuz . 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 eine Lösung zum Kauf oder Verkauf von Anlageprodukten vorgesehen. QSForex ist ein Open-Source Event-getriebenes Backtesting und Live Trading-Plattform für den Einsatz in den Devisenmärkten, derzeit in einem Alpha-Staat. Es wurde als Teil der Forex Trading Diary-Serie auf QuantStart erstellt, um die systematische Trading-Community mit einem robusten Trading-Engine, die einfache Forward-Strategie-Implementierung und Tests ermöglicht. Die Software wird unter einer zulässigen MIT-Lizenz bereitgestellt (siehe unten). Open-Source - QSForex wurde unter einer äußerst zulässigen Open-Source-MIT-Lizenz freigegeben, die eine vollständige Nutzung sowohl in der Forschung als auch in kommerziellen Anwendungen erlaubt, ohne Einschränkung, jedoch ohne jegliche Garantie. Free - QSForex ist völlig kostenlos und kostet nichts zum Herunterladen oder verwenden. Zusammenarbeit - Da QSForex Open Source ist, arbeiten viele Entwickler zusammen, um die Software zu verbessern. Neue Funktionen werden häufig hinzugefügt. Alle Fehler werden schnell bestimmt und behoben. Software-Entwicklung - QSForex ist in der Python-Programmiersprache für einfache Cross-Plattform-Unterstützung geschrieben. QSForex enthält eine Suite von Unit-Tests für den Großteil seines Berechnungscodes und neue Tests werden ständig für neue Funktionen hinzugefügt. Eventgetriebene Architektur - QSForex ist sowohl für Backtesting als auch für Live-Trader vollständig ereignisgesteuert, was zu einem direkten Übergang von Strategien von einer Forschungs - / Testphase zu einer Live-Trading-Implementierung führt. Transaktionskosten - Spread-Kosten sind standardmäßig für alle BackTest-Strategien enthalten. Backtesting - QSForex bietet intraday Tick-Auflösung mehrtägigen Multi-Währungs-Paar Backtesting. Trading - QSForex unterstützt derzeit den Live-Intraday-Handel mit der OANDA Brokerage API über ein Portfolio von Paaren. Performance Metrics - QSForex unterstützt derzeit grundlegende Performance-Messung und Equity-Visualisierung über die Visualisierungsbibliotheken Matplotlib und Seaborn. Installation und Nutzung 1) Besuchen Sie www. oanda / und richten Sie ein Konto ein, um die Anmeldeinformationen für die API-Authentifizierung zu erhalten, die Sie für den Live-Handel benötigen. Ich erkläre, wie man dies in diesem Artikel: www. quantstart / articles / Forex-Trading-Tagebuch-1-Automatisiert-Forex-Trading-mit-der-OANDA-API. 2) Klonen Sie dieses Git-Repository an einem geeigneten Ort auf Ihrem Computer mit dem folgenden Befehl in Ihrem Terminal: git clone github / mhallsmoore / qsforex. git. Alternativ können Sie die ZIP-Datei des aktuellen Master-Zweigs bei github / mhallsmoore / qsforex / archive / master. zip herunterladen. 3) Erstellen Sie einen Satz von Umgebungsvariablen für alle Einstellungen, die in der Datei settings. py im Stammverzeichnis der Anwendung gefunden wurden. Alternativ können Sie Ihre spezifischen Einstellungen durch Überschreiben der Aufrufe von os. environ. get (.) Für jede Einstellung festlegen: 4) Erstellen Sie eine virtuelle Umgebung (virtualenv) für den QSForex-Code und verwenden Sie pip, um die Anforderungen zu installieren. Zum Beispiel in einem Unix-basierten System (Mac oder Linux) können Sie ein solches Verzeichnis wie folgt erstellen, indem Sie die folgenden Befehle im Terminal eingeben: Dadurch wird eine neue virtuelle Umgebung zur Installation der Pakete erstellt. Unter der Annahme, dass Sie das QSForex git Repository in ein Beispielverzeichnis wie / projects / qsforex / kopiert haben (ändern Sie dieses Verzeichnis unten, wo Sie QSForex installiert haben), dann müssen Sie, um die Pakete zu installieren, die folgenden Befehle ausführen: Dies wird einige benötigen Zeit als NumPy, SciPy, Pandas, Scikit-Learn und Matplotlib zusammengestellt werden. Es gibt viele Pakete, die für diese Arbeit erforderlich sind, also werfen Sie einen Blick auf diese beiden Artikel für weitere Informationen: Sie müssen auch einen symbolischen Link aus Ihrem Site-Paket-Verzeichnis zu Ihrem QSForex-Installationsverzeichnis zu erstellen, um in der Lage sein zu rufen Import qsforex innerhalb des Codes. Dazu benötigen Sie einen Befehl, der folgend ähnelt: Stellen Sie sicher, dass Sie / projects / qsforex in Ihr Installationsverzeichnis und /venv/qsforex/lib/python2.7/site-packages/ in das Verzeichnis virtualenv site packages wechseln. Sie können nun die folgenden Befehle korrekt ausführen. 5) In diesem Stadium, wenn Sie einfach wollen, um Praxis oder Live-Handel, dann können Sie Python Handel / trading. py laufen. Die die Standardstrategie von TestStrategy verwenden wird. Dies kauft einfach oder verkauft ein Währungspaar alle 5. Tick. Es ist nur zum Testen - verwenden Sie es nicht in einer Live-Trading-Umgebung Wenn Sie eine nützliche Strategie zu erstellen, dann erstellen Sie einfach eine neue Klasse mit einem beschreibenden Namen, z. MeanReversionMultiPairStrategy und sicherstellen, dass es eine calculatesignals-Methode hat. Sie müssen diese Klasse übergeben die Paare sowie die Ereignisse Warteschlange auflisten, wie sie in den Handel / trading. py. Siehe Strategie / Strategie. py für Details. 6) Um das Backtesting durchzuführen ist es notwendig, simulierte Forex-Daten zu erzeugen oder historische Tickdaten herunterladen. Wenn Sie die Software einfach zu wollen ausprobieren, der schnellste Weg, ein Beispiel Backtest zu erzeugen, ist es, einige simulierte Daten zu erzeugen. Die aktuelle Datenformat von QSForex verwendet wird, ist die gleiche wie die von der Dukascopy Historical Data Feed bei www. dukascopy / Swiss / Englisch / Market / historische / zur Verfügung gestellt. Um einige historische Daten zu erzeugen, stellen Sie sicher, dass die CSVDATADIR Einstellung in settings. py auf ein Verzeichnis gesetzt ist, wo Sie die historischen Daten leben wollen. Sie müssen dann generatesimulatedpair. py ausführen. Die sich im Verzeichnis scripts / befindet. Er erwartet, dass eine einzige Zeile Argument Befehl, der in diesem Fall ist das Währungspaar in BBBQQQ Format. Beispiel: In diesem Stadium wird das Skript eine einzelne Monate Daten für Januar 2014 zu schaffen, fest einprogrammiert Das heißt, Sie einzelne Dateien zu sehen, von dem Format BBBQQQYYYYMMDD. csv (zB GBPUSD20140112.csv) erscheinen in Ihrem CSVDATADIR für alle Werktage in In diesem Monat. Wenn Sie den Monat / Jahr der Datenausgabe ändern möchten, ändern Sie einfach die Datei und starten. 7) Nachdem die historischen Daten erzeugt wurden, ist es möglich, einen Backtest durchzuführen. Die Backtest-Datei selbst wird in backtest / backtest. py gespeichert. Aber das enthält nur die Backtest-Klasse. Um einen Backtest auszuführen, müssen Sie diese Klasse instanziieren und mit den notwendigen Modulen versorgen. Moving Average Crossover Umsetzung in den Beispielen / mac. py Datei Der beste Weg, um zu sehen, wie dies geschieht, ist am Beispiel zu sehen und verwenden diese als Vorlage. Dies nutzt die MovingAverageCrossStrategy, die in der Strategie / Strategie. py gefunden wird. Diese Voreinstellung bezieht sich auf den Handel mit GBP / USD und EUR / USD, um mehrere Währungspaare anzuzeigen. Es verwendet Daten, die in CSVDATADIR gefunden werden. Führen Sie zum Ausführen des Beispiel-Backtests einfach Folgendes aus: Dies wird einige Zeit in Anspruch nehmen. Auf meinem Ubuntu-Desktopsystem zu Hause, mit den historischen Daten, die über generatesimulatedpair. py generiert wurden. Es dauert etwa 5-10 Minuten zu laufen. Ein großer Teil dieser Berechnung am Ende des eigentlichen Backtest auftritt, wenn der Verlust berechnet wird, denken Sie daran, so wenden Sie sich bitte, dass der Code nicht aufgelegt hat bis zum Abschluss Bitte verlassen. 8) Wenn Sie die Leistung des Backtests sehen möchten, können Sie einfach output. py verwenden, um eine Equity-Kurve, Periodenrenditen (dh Tick-to-Tick-Returns) und eine Drawdown-Kurve anzuzeigen: Und das ist es In diesem Stadium sind Sie bereit Um eigene Backtests zu erstellen, indem Sie Strategien in Strategie / Strategie. py ändern oder anhängen und die von DukasCopy (www. dukascopy / swiss / english / marketwatch / historical /) heruntergeladenen Daten verwenden. Wenn Sie irgendwelche Fragen über die Installation haben, dann fühlen Sie bitte sich frei, mich an mikequantstart zu mailen. Wenn Sie irgendwelche Fehler oder andere Probleme, die Sie vielleicht denken, speziell auf die Codebasis zurückzuführen sein, fühlen sich frei, ein Github Problem zu öffnen hier: Github / mhallsmoore / qsforex / Fragen Copyright (c) 2015 Michael Hallen-Moore Hiermit wird die Erlaubnis erteilt, die der Ladung, eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die Software) für Personen zu erhalten, die in der Software ohne Einschränkung zu umgehen, einschließlich und ohne Einschränkung der Rechte zu nutzen, zu kopieren, zu ändern, fusionieren, zu veröffentlichen, zu verbreiten, weiter lizenzieren und / oder Kopien der Software zu verkaufen, und Personen, denen die Software zu erlauben, so unter den folgenden Bedingungen zur Verfügung gestellt wird: die obige Copyright-Hinweis und diese Erlaubnis in allen Kopien oder wesentlichen Teilen der Software enthalten sein werden. Die Software wird als vorgesehen, ohne Gewährleistung irgendeiner Art, DIREKT ODER INDIREKT, EINSCHLIESSLICH, ABER NICHT AUF DIE GARANTIEN DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER HAFTUNG FÜR SCHADEN ODER ANDERE HAFTUNG, WEDER IN EINEM VERTRAG, SCHULD ODER AUF ANDERE WEISE, DIE AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER EINER ANDEREN IN DER SOFTWARE. Forex Trading Haftungsausschluss Devisenhandel auf Margin trägt ein hohes Maß an Risiko und ist möglicherweise nicht für alle Anleger geeignet sein. 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 Beratung durch einen unabhängigen Finanzberater, wenn Sie irgendwelche Zweifel. Forex Trading Diary 1 - Automatisierte Forex Trading mit der OANDA API Von Michael Halls-Moore am 21. Januar 2015 Ich habe bereits erwähnt in der 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 der 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 Haftungstheorie, sei es auf vertraglicher, fahrlässiger 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 jetzt 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 möchten. Klicken Sie auf Ausführen, und das fxTrade-Übungsprogramm wird geladen. Mine wurde mit dem Zählpanel auf der linken Seite zu einem 15-minütigen Kerzendiagramm von EUR / USD eingestellt: 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-driven Backtester-Serie für Aktien und ETFs, die ich im letzten Jahr erstellt habe, verfolgt haben, 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 die Warteschlange gestellt 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 Komponenten, die wir für unser Handelssystem erstellen werden, umfassen die folgenden: Streaming Price Handler - Dies hält eine langfristige Verbindung offen für OANDAs-Server und senden Tick-Daten (dh bid / ask) über die Verbindung für alle Instrumente, die interessiert waren In. Strategie-Signal-Generator - Dies wird eine Sequenz von Tick-Ereignisse 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 Handel gegen die Praxis API daran erinnern, dass eine wichtige Transaktion Kosten, die 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 wird, um zu helfen, alle einzelnen Komponenten kommunizieren zu definieren. Wir brauchen zwei: TickEvent und OrderEvent. Der erste speichert Informationen über Instrumentenmarktdaten wie das (beste) Angebot / Nachfrage 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 erhält und bei jeder 5. Tick zufällig 10.000 Einheiten EUR / USD 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 EUR / USD), 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 Trading-Strategie, 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) als HTTP-POST-Anforderung an OANDAs API gesendet werden. Wir übergeben die Content-Type - und Authorization-Header-Parameter, zu denen unsere Authentifizierungsinformationen gehören. Darüber hinaus codieren wir die Parameter, die das Instrument (EUR / USD), Einheiten, Auftragsart und Seite (Kauf / Verkauf). 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 EUR / USD). 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, Bid / Ask 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, 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 tatsächliche Methode übergibt /Funktion. Schließlich starten wir beide Threads mit den folgenden Zeilen: So sind wir in der Lage, zwei, effektiv unendliche Schleifen, Code-Segmente unabhängig, die beide über die Ereignis-Queue kommunizieren laufen. Beachten Sie, dass die Python-Threading-Bibliothek aufgrund der CPython-Implementierung von Python und des Global Interpreter Lock (GIL) keine Multithreading-Multicast-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 Handelsfunktion, 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 Ereignis-Warteschlange und definieren die Instrumente / Einheiten. 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 Ubuntu / Linux-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 Stop / Start-Mechanismus erstellen, der die Ubuntus-Prozessüberwachung nutzt, damit das Handelssystem rund um die Uhr laufen kann. Die Ausgabe nach 30 Sekunden oder so, abhängig von der Tageszeit relativ zu den Haupthandelstunden für EUR / USD für den obigen Code, ist unten angegeben: Die ersten fünf Zeilen zeigen die von OANDA mit Bid / Ask zurückgegebenen JSON-Tickdaten Preise. 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 EUR / USD 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 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 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. Full Code settings. py (vergessen Sie nicht, ACCOUNTID und ACCESSTOKEN zu ändern):


Comments

Popular Posts