Event Driven Devisenhandel

QSForex ist eine Open-Source-Event-basierte Backtesting - und Live-Handelsplattform 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 Verwendung 1) Besuchen Sie 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: quantstart / articles / Forex-Trading-Tagebuch-1-Automated-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 unter 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 können Sie in einem Unix-basierten System (Mac oder Linux) ein solches Verzeichnis wie folgt erstellen, indem Sie die folgenden Befehle im Terminal eingeben: Dadurch wird eine neue virtuelle Umgebung zum Installieren 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-Pakete-Verzeichnis zu Ihrem QSForex-Installationsverzeichnis 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 die Paaren Liste sowie die Ereignis-Queue, wie im Handel / trading. py passieren. Siehe Strategie / Strategie. py für Details. 6) Zur Durchführung von Backtesting ist es notwendig, simulierte Forex-Daten zu erzeugen oder historische Tickdaten herunterzuladen. Wenn Sie einfach die Software ausprobieren möchten, ist der schnellste Weg, einen Beispiel-Backtest zu generieren, einige simulierte Daten zu generieren. Das aktuelle Datenformat von QSForex ist das gleiche wie im DukasCopy Historical Data Feed bei dukascopy / swiss / english / marketwatch / historical /. Um einige historische Daten zu erzeugen, stellen Sie sicher, dass die CSVDATADIR-Einstellung in settings. py auf ein Verzeichnis festgelegt ist, in dem die historischen Daten gespeichert werden sollen. Sie müssen dann generatesimulatedpair. py ausführen. Die sich im Verzeichnis scripts / befindet. Es erwartet ein einziges Befehlszeilenargument, das in diesem Fall das Währungspaar im BBBQQQ-Format ist. Zum Beispiel: In diesem Stadium wird das Skript hartcodiert, um für Januar 2014 einzelne Monate zu erstellen. Das heißt, Sie sehen in Ihrem CSVDATADIR für alle Werktage in der Liste einzelne Dateien des Formats BBBQQQYYYYMMDD. csv (zB GBPUSD20140112.csv) In diesem Monat. Wenn Sie den Monat / Jahr der Datenausgabe ändern möchten, ändern Sie einfach die Datei und wiederholen Sie den Vorgang. 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. Der beste Weg, um zu sehen, wie dies getan wird, ist, die Beispiel Moving Average Crossover-Implementierung in der Beispiele / mac. py-Datei zu betrachten und diese als Vorlage zu verwenden. 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 erfolgt am Ende des eigentlichen Backtests, wenn der Drawdown berechnet wird. Bitte denken Sie daran, dass der Code nicht aufgelegt hat. Bitte lassen Sie ihn bis zur Fertigstellung. 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 (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 (Die Software) in der Software, ohne Einschränkung, einschließlich der Nutzungsrechte, der Nutzung, der Vervielfältigung, der Änderung, der Zusammenführung, der Veröffentlichung, der Verbreitung, der Unterlizenzierung und der Nutzung der Software Oder Kopien der Software zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, unter den folgenden Bedingungen zu gestatten: Der oben genannte Urheberrechtshinweis und diese Genehmigung müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein. 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 HAFTEN DIE AUTOREN ODER URHEBERRECHTSHÄNDLER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDEREN HAFTUNGEN ODER IN VERBINDUNG VON ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER VERWENDUNG ODER ANDEREN HÄNDLERN IN DER SOFTWARE. Forex Trading Disclaimer Trading Devisen auf Margin trägt ein hohes Maß an Risiko, und kann 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 Ihre Anlageziele, Erfahrungsniveau und Risiko Appetit. Die Möglichkeit besteht, dass Sie einen Verlust von einigen oder allen Ihrer anfänglichen Investition zu erhalten und daher sollten Sie nicht investieren Geld, das Sie sich 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. Event-Driven Backtesting mit Python - Teil I Weve verbrachte die letzten paar Monate auf QuantStart Backtesting verschiedene Handelsstrategien Unter Verwendung von Python und Pandas. Die vektorisierte Natur von Pandas stellt sicher, dass bestimmte Vorgänge auf großen Datasets extrem schnell sind. Allerdings leiden die Formen der vektorisierten Backtester, die wir bisher studiert haben einige Nachteile in der Art und Weise, dass Handelsausführung simuliert wird. In dieser Reihe von Artikeln werden wir einen realistischeren Ansatz zur historischen Strategie-Simulation durch die Konstruktion einer Ereignis-getriebenen Backtesting-Umgebung mit Python diskutieren. Event-Driven Software Bevor wir uns mit der Entwicklung eines solchen Backtests beschäftigen, müssen wir das Konzept der ereignisgesteuerten Systeme verstehen. Videospiele bieten einen natürlichen Anwendungsfall für ereignisgesteuerte Software und bieten ein einfaches Beispiel zu erkunden. Ein Videospiel hat mehrere Komponenten, die miteinander interagieren in einer Echtzeit-Einstellung bei hohen Frameraten. Dies wird durch Ausführen des gesamten Satzes von Berechnungen innerhalb einer Endlosschleife, die als die Ereignisschleife oder die Spielschleife bekannt ist, behandelt. An jedem Tick der Game-Loop wird eine Funktion aufgerufen, um das letzte Event zu empfangen. Die durch eine entsprechende vorherige Aktion innerhalb des Spiels erzeugt worden sind. Abhängig von der Art des Ereignisses, das einen Tastendruck oder einen Mausklick beinhalten könnte, wird eine nachfolgende Aktion ausgeführt, die entweder die Schleife beendet oder einige zusätzliche Ereignisse erzeugt. Der Vorgang wird dann fortgesetzt. Hier ist ein Beispiel Pseudocode: Der Code prüft ständig nach neuen Ereignissen und führt dann Aktionen aus, die auf diesen Ereignissen basieren. Insbesondere ermöglicht es die Illusion von Echtzeit-Response-Handling, weil der Code ständig geschleift wird und Ereignisse überprüft werden. Wie deutlich wird, ist dies genau das, was wir brauchen, um Hochfrequenz-Handel Simulation durchzuführen. Warum ein Ereignis-getriebener Backtester Ereignisgesteuerte Systeme bieten viele Vorteile gegenüber einem vektorisierten Ansatz: Code Reuse - Ein ereignisgesteuerter Backtester kann durch Design sowohl für das historische Backtesting als auch für den Live-Trading mit minimalem Aus - schalten von Komponenten verwendet werden. Dies gilt nicht für vektorisierte Backtester, bei denen alle Daten zur Verfügung stehen müssen, um statistische Analysen durchzuführen. Lookahead Bias - Bei einem ereignisgesteuerten Backtester gibt es keine Lookahead-Bias, da der Marktdateneingang als Ereignis behandelt wird, auf das gehandelt werden muss. Somit ist es möglich, Feeds mit einem Ereignis-getriebenen Backtester mit Marktdaten zu trocknen und zu replizieren, wie sich ein Order - und Portfolio-System verhalten würde. Realismus - Eventgetriebene Backterters ermöglichen eine wesentliche Anpassung, wie Aufträge ausgeführt und Transaktionskosten angefallen sind. Es ist einfach, grundsätzliche Markt - und Limitaufträge sowie Market-on-Open (MOO) und Market-on-Close (MOC) zu behandeln, da ein Custom-Exchange-Handler aufgebaut werden kann. Obwohl ereignisgesteuerte Systeme mit vielen Vorteilen verbunden sind, leiden sie an zwei Hauptnachteilen gegenüber einfacheren vektorisierten Systemen. Erstens sind sie wesentlich komplexer zu implementieren und zu testen. Es gibt mehr bewegliche Teile, die zu einer größeren Chance zur Einführung von Bugs führen. Um diese angemessene Software-Testmethode zu verringern, wie z. B. eine testgetriebene Entwicklung, kann angewendet werden. Zweitens sind sie im Vergleich zu einem vektorisierten System langsamer. Optimale vektorisierte Operationen können bei der Durchführung mathematischer Berechnungen nicht verwendet werden. Wir werden über Möglichkeiten diskutieren, diese Einschränkungen in späteren Artikeln zu überwinden. Event-Driven Backtester Überblick Für die Anwendung eines ereignisgesteuerten Ansatzes auf ein Backtesting-System ist es notwendig, unsere Komponenten (oder Objekte) zu definieren, die bestimmte Aufgaben behandeln: Event - Das Event ist die fundamentale Klasseneinheit des ereignisgesteuerten Systems. Es enthält einen Typ (wie MARKET, SIGNAL, ORDER oder FILL), der bestimmt, wie er innerhalb der Ereignisschleife behandelt wird. Ereigniswarteschlange - Die Ereigniswarteschlange ist ein im Arbeitsspeicher befindliches Python-Warteschlangenobjekt, das alle Objekte der Ereignisunterklasse speichert, die vom Rest der Software generiert werden. DataHandler - Der DataHandler ist eine abstrakte Basisklasse (ABC), die eine Schnittstelle zur Handhabung von historischen oder Live-Marktdaten darstellt. Dies bietet eine beträchtliche Flexibilität, da die Strategy - und Portfolio-Module somit zwischen beiden Ansätzen wiederverwendet werden können. Der DataHandler erzeugt bei jedem Herzschlag des Systems ein neues MarketEvent (siehe unten). Strategie - Die Strategie ist auch ein ABC, das eine Schnittstelle für die Aufnahme von Marktdaten und die Erzeugung entsprechender SignalEvents präsentiert, die letztendlich vom Portfolio-Objekt genutzt werden. Ein SignalEvent enthält ein Tickersymbol, eine Richtung (LONG oder SHORT) und einen Zeitstempel. Portfolio - Hierbei handelt es sich um ein ABC, das das Auftragsmanagement mit aktuellen und nachfolgenden Positionen für eine Strategie verknüpft. Darüber hinaus wird ein Risikomanagement über das gesamte Portfolio hinweg, einschließlich Sektor-Exposition und Position Sizing durchgeführt. In einer anspruchsvolleren Implementierung könnte dies an eine RiskManagement-Klasse delegiert werden. Das Portfolio nimmt SignalEvents aus der Warteschlange und generiert OrderEvents, die der Warteschlange hinzugefügt werden. ExecutionHandler - Der ExecutionHandler simuliert eine Verbindung zu einem Brokerage. Die Aufgabe des Handlers besteht darin, OrderEvents aus der Warteschlange zu nehmen und sie entweder über einen simulierten Ansatz oder eine tatsächliche Verbindung zu einem Lever-Brokerage auszuführen. Sobald Aufträge ausgeführt werden, erstellt der Handler FillEvents, die beschreiben, was tatsächlich getätigt wurde, einschließlich Gebühren, Provision und Schlupf (falls modelliert). Der Loop - Alle diese Komponenten werden in eine Ereignis-Schleife gepackt, die alle Ereignistypen korrekt verarbeitet und sie an die entsprechende Komponente weiterleitet. Dies ist ein ganz grundlegendes Modell eines Trading-Engine. Es gibt erhebliche Erweiterungsmöglichkeiten, insbesondere in Bezug auf die Verwendung des Portfolios. Darüber hinaus könnten auch unterschiedliche Transaktionskostenmodelle in ihre eigene Klassenhierarchie abstrahiert werden. In diesem Stadium führt es unnötige Komplexität in dieser Reihe von Artikeln, so dass wir nicht diskutieren sie weiter. In späteren Tutorials werden wir wahrscheinlich erweitern das System um zusätzliche Realismus. Hier ist ein Snippet aus Python-Code, der zeigt, wie der Backtester in der Praxis funktioniert. Es gibt zwei Schleifen, die im Code auftreten. Die äußere Schleife wird verwendet, um dem Rückentester einen Herzschlag zu geben. Für Live-Handel ist dies die Häufigkeit, mit der neue Marktdaten abgefragt werden. Für Backtesting-Strategien ist dies nicht unbedingt erforderlich, da der Backtester die im Drip-Feed-Formular bereitgestellten Marktdaten verwendet (siehe die Zeile bars. updatebars ()). Die innere Schleife verarbeitet die Ereignisse aus dem Ereigniswarteschlangenobjekt. Spezifische Ereignisse werden an die jeweilige Komponente delegiert und anschließend werden neue Ereignisse zur Warteschlange hinzugefügt. Wenn die Ereignis-Warteschlange leer ist, fährt die Heartbeat-Schleife fort: Dies ist der grundlegende Überblick, wie ein ereignisgesteuerter Backtester entworfen wird. Im nächsten Artikel werden wir die Ereignisklassenhierarchie diskutieren.


Comments