Saturday 11 November 2017

Quantstart Forex Handel


Forex Trading Diary 3 - Open Sourcing der Forex Trading System In der heutigen Eintragung der Forex Trading Diary Ich möchte die längerfristigen Plan für die Forex Trading System zu diskutieren. Darüber hinaus möchte ich skizzieren, wie Ive Pythons Decimal Datentyp verwendet, um Berechnungen genauer zu machen. Bisher haben wir mit der OANDA Rest API experimentiert, um zu sehen, wie es mit der API von Interactive Brokers verglichen wird. Weve auch gesehen, wie man in einem grundlegenden Portfolio Replikationselement als der erste Schritt zu einem richtigen Event-driven Backtesting-System hinzuzufügen. Ive hatte auch einige hilfreiche Kommentare zu beiden früheren Artikeln (1 und 2), was darauf hindeutet, dass viele von euch scharf darauf sind, den Code selbst zu verändern und zu erweitern. Open Sourcing der Forex Trading System Aus den oben genannten Gründen habe ich beschlossen, Open-Source der Forex Trading System. Was bedeutet das bedeutet, dass alle aktuellen und zukünftigen Code kostenlos zur Verfügung stehen, unter einer liberalen MIT Open Source Lizenz, auf der Github Version Control Website unter der folgenden URL: githubmhallsmooreqsforex. Für diejenigen von euch, die Git und Github vorher benutzt haben, können Sie in der Lage sein, das Repo zu klonen und es für Ihren eigenen Zweck zu ändern. Das QuantStart Automated Forex Trading System ist jetzt Open-Source unter einer liberalen MIT-Lizenz. Sie finden den neuesten Code auf Github unter dem qsforex Repository bei githubmhallsmooreqsforex. Für diejenigen von euch, die neu sind, um Quellversion Kontrolle werden Sie wahrscheinlich wollen, um zu lesen, wie git (und Version Kontrolle im Allgemeinen) arbeitet mit dem fantastischen kostenlosen ebook Pro Git. Es lohnt sich, einige Zeit damit zu lernen, über die Quellcodeverwaltung zu lernen, da es Ihnen eine riesige Menge an künftigen Kopfschmerzen ersparen wird, wenn Sie viel Zeit für die Programmierung und Aktualisierung von Projekten verbringen. Der schnelle Start für ein Ubuntu-System ist, git zu installieren: Sie müssen dann machen Ein Verzeichnis für das qsforex-Projekt, um das Projekt von der Github-Site zu leben und zu klonen, wie folgt: An dieser Stelle müssen Sie eine virtuelle Umgebung erstellen, in der der Code ausgeführt werden soll: Sie müssen dann die Anforderungen installieren (dies wird dauern Einige Zeit): Schließlich müssen Sie einen symbolischen Link in Ihrer virtuellen Python-Umgebung erstellen, damit Sie den Import qsforex in Ihren Code eingeben und ausführen können. Wie ich in den vorherigen Einträgen erwähnt habe, müssen Sie die notwendigen Umgebungsvariablen erstellen Für Ihre OANDA-Authentifizierungsanmeldeinformationen. Bitte beachten Sie, wie Sie dies tun können. Bitte achten Sie auf die README, die mit dem Repo verbunden ist, da es Installationsanweisungen enthält, einen Haftungsausschluss und eine Garantie über die Verwendung des Codes. Da die Software im Alpha-Modus ist, werden diese Anweisungen im Laufe der Zeit einfacher. Insbesondere werde ich versuchen, das Projekt in ein Python-Paket zu verpacken, damit es einfach per Pip installiert werden kann. Wenn Sie Fragen zum Installationsverfahren haben, dann zögern Sie bitte nicht, mich per E-Mail an mikequantstart zu schicken. Longer-Term-Plan Die Philosophie des Devisenhandelssystems, wie mit dem Rest der QuantStart-Website, ist es, den realen Handel so weit wie möglich in unserem Backtesting zu imitieren. Dies bedeutet, dass die Details, die oft aus mehr forschungsorientierten Backtesting Situationen ausgeschlossen sind. Latenz, Serverausfälle, Automatisierung, Überwachung, realistische Transaktionskosten werden alle in die Modelle aufgenommen, um uns eine gute Vorstellung davon zu geben, wie gut eine Strategie wahrscheinlich ist. Da wir Zugang zu Tick-Daten haben (Bidask-Zeitstempel), können wir den Spread in die Transaktionskosten integrieren. Wir können auch Schlupf modellieren. Es ist weniger aufrichtig, die Marktauswirkungen zu modellieren, obwohl dies bei kleineren Handelsbeträgen weniger ein Anliegen ist. Neben den Transaktionskosten wollen wir ein robustes Portfoliomanagement mit Risikoüberlagerungen und Positionsgrößen modellieren. Also, was ist derzeit in der Forex Trading System bis heute Event-Driven Architecture enthalten - Das Forex Trading System wurde als Event-driven-System von Grund auf entworfen, wie dies ist, wie ein Intraday-Trading-System wird in einer Live-Umgebung implementiert werden . Preis-Streaming - Wir haben ein Grundpreis-Streaming-Objekt. Dies behandelt derzeit das Abonnement nur für ein einziges Paar, aber wir können dies einfach ändern, um mehrere Währungspaare zu abonnieren. Signalgenerierung - Mit dem Strategy-Objekt, das SignalEvent-Objekte erzeugt, können wir Handelsstrategien (direkt aus der Vergangenheit und aktuelle Tickpreise) einbinden. Order Execution - Wir haben ein naives Order Execution System, das blindlings Aufträge aus dem Portfolio an OANDA sendet. Mit blindem Ich meine, dass es kein Risikomanagement oder Positionsbestimmung gibt, noch irgendeine algorithmische Ausführung, die zu reduzierten Transaktionskosten führen könnte. GBP Basiswährung - Um die Dinge einfach zu halten, habe ich nur das System für GBP Basiswährung geschrieben. Dies ist vielleicht der wichtigste Aspekt zu ändern, wie viele von Ihnen haben Praxis Konten in USD, EUR, CAD, JPY, AUD und NZD GBPUSD Trading - Ich wählte das Kabel als Währungspaar, um die ursprünglichen Position und Portfolio-Objekte zu testen mit. Die Handhabung von mehreren Währungspaaren ist ein wichtiger nächster Schritt. Dabei handelt es sich um eine Änderung der Positions - und Portfolioberechnungen. Dezimal-Handling - Jedes Produktionssystem muss die Währungsberechnungen korrekt handhaben. Insbesondere sollten Währungswerte nicht als Gleitkommadatentypen gespeichert werden, da sich die Rundungsfehler ansammeln. Bitte sehen Sie diesen fantastischen Artikel auf Fließkomma-Darstellungen für weitere Details. LongShort Trading - Zwischen den Tagebucheinträgen 2 und 3 fügte ich die Fähigkeit hinzu, ein Währungspaar zu kürzen (im Gegensatz zu nur in der Lage, lange zu gehen). Entscheidend ist dies auch Einheit getestet. Lokale Portfolio-Handhabung - Meiner Meinung nach führt ein Backtest aus, der die Strategie-Performance aufgrund unrealistischer Annahmen aufbläst, im besten Fall ärgerlich und äußerst unrentabel ist. Ein lokales Portfolio-Objekt, das die OANDA-Berechnungen repliziert, bedeutet, dass wir unsere internen Berechnungen bei der Durchführung der Praxis überprüfen können Handeln Was uns mehr Vertrauen schenkt, wenn wir später das gleiche Portfolioobjekt für das Backtesting auf historische Daten verwenden. Unit-Tests für PositionPortfolio - Während ich es nicht direkt in den Tagebucheinträgen 1 und 2 erwähnt habe, habe ich eigentlich einige Unit-Tests für die Portfolio - und Positionsobjekte geschrieben. Da diese für die Berechnungen der Strategie so entscheidend sind, muss man sehr zuversichtlich sein, dass sie wie erwartet funktionieren. Ein zusätzlicher Vorteil solcher Tests ist, dass sie die zugrunde liegende Berechnung modifizieren lassen, so dass, wenn alle Tests noch bestehen, wir sicher sein können, dass sich das Gesamtsystem weiterhin wie erwartet verhalten wird. In diesem Stadium fehlt dem Forex Trading System folgende Funktionalität: Slippage Handling - Das System erzeugt derzeit aufgrund der hochfrequenten Art der von OANDA gelieferten Tickdaten viel Schlupf. Dies bedeutet, dass die lokal berechnete Portfoliobilanz nicht die von OANDA berechnete Saldo widerspiegelt. Bis eine korrekte Event-Handling - und Schlupfanpassung durchgeführt wird, bedeutet dies, dass ein Backtest die Realität nicht korrekt wiedergibt. Mehrere Basiswährungen - Wir sind derzeit auf GBP beschränkt. Zumindest müssen wir die wichtigsten Währungsbezeichnungen - USD, EUR, CAD, AUD, JPY und NZD enthalten. Mehrere Währungspaare - Ähnlich müssen wir die wichtigsten Währungspaare über Kabel (GBPUSD) unterstützen. Dafür gibt es zwei Aspekte. Die erste ist, die Berechnungen korrekt zu behandeln, wenn weder die Basis noch das Zitat eines Währungspaares gleich der Kontenwährung ist. Der zweite Aspekt besteht darin, mehrere Positionen zu unterstützen, damit wir ein Portfolio von Währungspaaren handeln können. Risikomanagement - Viele Forschungs-Backtests ignorieren das Risikomanagement völlig. Leider ist dies in der Regel für die Kürze bei der Beschreibung der Regeln einer Strategie notwendig. In Wirklichkeit müssen wir eine Risikoüberlagerung beim Handel verwenden, sonst ist es sehr wahrscheinlich, dass wir zu einem gewissen Zeitpunkt einen erheblichen Verlust erleiden werden. Das heißt nicht, dass das Risikomanagement dies ganz verhindern kann, aber es ist sicherlich weniger wahrscheinlich Portfolio-Optimierung - In einem institutionellen Rahmen werden wir ein Investitionsmandat haben, das ein robustes Portfoliomanagementsystem mit verschiedenen Zuteilungsregeln diktiert. In einer Einzelhandelsumgebung können wir einen Positionsanpassungsansatz wie das Kelly Criterion verwenden, um unsere langfristige zusammengesetzte Wachstumsrate zu maximieren. Robuste Strategien - ich habe nur einige einfache zufällige Signal-Spielzeug-Strategien bis heute gezeigt. Jetzt, da wir anfangen, ein zuverlässiges Intraday-Forex-Handelssystem zu schaffen, sollten wir mit einigen interessanteren Strategien beginnen. Zukünftige Tagebucheinträge konzentrieren sich auf Strategien aus einer Mischung von technischen Indikatorenfiltern sowie Zeitreihenmodellen und maschinellen Lerntechniken. Remote Deployment - Seit wir uns für den Handel 24 Stunden (zumindest während der Woche) interessieren, benötigen wir ein anspruchsvolleres Setup als den Backtester auf einem lokalen Desktop-Switch zu Hause zu betreiben. Es ist wichtig, dass wir eine robuste Remote-Server-Implementierung unseres Systems mit entsprechender Redundanz und Überwachung erstellen. Historisches Backtesting - Wir haben das Portfolio-Objekt aufgebaut, um uns ein realistisches Backtesting zu ermöglichen. In diesem Stadium fehlt uns ein historisches Tick-Datenspeichersystem. In nachfolgenden Artikeln werden wir uns mit dem Erhalten historischer Tick-Daten beschäftigen und in einer geeigneten Datenbank wie HDF5 speichern. Trade Database - Eventuell möchten wir unsere Live Trades in unserer eigenen Datenbank speichern. Dies ermöglicht es uns, unsere eigenen Analysen auf Live-Trading-Daten durchzuführen. Eine gute Empfehlung für eine relationale Datenbank wäre PostgreSQL oder MySQL. Monitoring und Hochverfügbarkeit - Da wir ein Hochfrequenz-Intraday-System betrachten, müssen wir eine umfassende Überwachung und Hochverfügbarkeits-Redundanz setzen. Dies bedeutet, dass die CPU-Nutzung, die Datenträgerverwendung, das Netzwerk-IO, die Latenzzeit und die Überprüfung, dass alle periodischen Skripts so lange ausgeführt werden sollen, berichtet. Darüber hinaus benötigen wir eine Backup - und Restore-Strategie. Fragen Sie sich, welche Backup-Pläne Sie haben, wenn Sie große offene Positionen hatten, in einem volatilen Markt, und Ihr Server starb plötzlich. Glauben Sie mir, es passiert Multiple BrokerFIX Integration - Im Moment sind wir stark mit dem OANDA Broker verbunden. Wie ich schon sagte, das ist einfach, weil ich auf ihre API stieß und fand es ein modernes Angebot. Es gibt viele andere Broker da draußen, von denen viele das FIX-Protokoll unterstützen. Das Hinzufügen einer FIX-Fähigkeit würde die Anzahl der Broker erhöhen, die mit dem System verwendet werden könnten. GUI Control und Reporting - Im Moment ist das System komplett konsolen - und linienbasiert. Zumindest benötigen wir einige grundlegende Charting, um Backtest-Ergebnisse anzuzeigen. Ein anspruchsvolleres System wird zusammenfassende Statistiken über Trades, Strategie-Level-Performance-Metriken sowie Gesamt-Portfolio-Performance. Diese GUI könnte mit einem Cross-Plattform-Fenster-System wie Qt oder Tkinter implementiert werden. Es könnte auch mit einem Web-basierten Front-End, mit einem Web-Framework wie Django präsentiert werden. Wie man sehen kann, gibt es eine Menge Funktionalität auf der Roadmap Das heißt, jeder neue Tagebucheintrag (und potenzielle Beiträge aus der Community) wird das Projekt voranbringen. Dezimal-Datentypen Nun, da wir den längerfristigen Plan besprochen haben, möchte ich einige der Änderungen vorstellen, die ich seit dem Tagebucheintrag 2 an den Code gemacht habe. Insbesondere möchte ich beschreiben, wie ich den Code geändert habe, um die Dezimal - Typ statt der Gleitkomma-Speicherung. Dies ist eine äußerst wichtige Veränderung, da Fließkomma-Darstellungen eine wesentliche Quelle für Langzeitfehler in Portfolio - und Auftragsmanagementsystemen sind. Python nativ unterstützt dezimale Darstellungen zu einer beliebigen Präzision. Die Funktionalität ist in der dezimalen Bibliothek enthalten. Insbesondere müssen wir - jeden Wert - ändern, der in einer Positionsberechnung zu einem Dezimal-Datentyp erscheint. Dazu gehören die Einheiten, die Exposition, die Pips, der Gewinn und der prozentuale Gewinn. Damit ist sichergestellt, dass wir die volle Kontrolle darüber haben, wie Rundungsprobleme im Umgang mit Währungsdarstellungen behandelt werden, die zwei Dezimalstellen von Präzision haben. Insbesondere müssen wir die Methode der Rundung wählen. Python unterstützt ein paar verschiedene Typen, aber wir gehen mit ROUNDHALFDOWN. Die auf die nächstgelegene Ganzzahl umgibt, wobei die Bindungen auf Null gehen. Hier ist ein Beispiel dafür, wie der Code modifiziert wird, um Dezimaldatentypen aus ihren bisherigen Gleitkomma-Darstellungen zu verarbeiten. Im Folgenden finden Sie eine Liste von position. py: Beachten Sie, dass wir Dezimal mit einem String-Argument und nicht mit einem Gleitkomma-Argument versehen müssen. Dies ist, weil ein String genau die Genauigkeit des Wertes spezifiziert, während ein Gleitkomma-Typ nicht. Beachten Sie auch, dass wir bei der Speicherung unserer Trades in einer relationalen Datenbank (wie oben beschrieben in der Roadmap) darauf achten, dass wir wieder den richtigen Datentyp verwenden. PostgreSQL und MySQL unterstützen eine dezimale Darstellung. Es ist wichtig, dass wir diese Datentypen nutzen, wenn wir unser Datenbankschema erstellen, sonst werden wir in Rundungsfehler geraten, die extrem schwer zu diagnostizieren sind Für diejenigen, die an einer tieferen Diskussion dieser Themen interessiert sind, in Mathematik und Informatik Gegenstand der Numerischen Analyse umfasst Fließkomma-Speicherprobleme, unter vielen anderen interessanten Themen. In nachfolgenden Tagebucheinträgen werden wir diskutieren, wie ich Unit-Tests auf den Code angewendet habe und wie wir die Software auf mehr Währungspaare erweitern können, indem wir die Positionsberechnungen ändern. Voller Python-Code Da der vollständige Quellcode für das Projekt nun Open Source ist, unter einer MIT-Lizenz. Es kann immer bei githubmhallsmooreqsforex gefunden werden. Mit der begleitenden Dokumentation. Wenn Sie die anderen Einträge in der Serie lesen möchten, folgen Sie bitte den untenstehenden Links: Just Getting Started mit Quantitative TradingForex Trading Diary 5 - Trading Mehrere Währungspaare Gestern habe ich einige wichtige Änderungen an der QSForex Software veröffentlicht. Diese Änderungen haben die Nützlichkeit des Systems erheblich auf den Punkt erhöht, wo es fast bereit ist für mehrtägige Tick-Daten-Backtesting über eine Reihe von Währungspaaren. Folgende Änderungen wurden an Github gebucht: Weitere Änderungen an den Positions - und Portfolio-Objekten, um mehrere Währungspaare zu handeln, sowie Währungen, die nicht auf die Kontowährung lauten. Daher kann ein GBP-deonomiertes Konto nun EURUSD handeln. Vollständige Überarbeitung, wie sich die Positions - und Portfolio-Berechnungen öffnet, schließt, ergänzt und ergänzt die Einheiten. Das Positionsobjekt führt nun das schwere Heben aus, das ein relativ schlankes Portfolioobjekt hinterlässt. Hinzufügung der ersten nicht-trivialen Strategie, nämlich der bekannten Moving Average Crossover-Strategie mit einem Paar einfacher gleitender Durchschnitte (SMA). Änderung an backtest. py, um es einzeln-threaded und deterministisch zu machen. Trotz meines Optimismus, dass ein Multi-Thread-Ansatz wäre nicht zu schädlich für Simulation Genauigkeit, fand ich es schwierig, zufriedenstellende Backtesting Ergebnisse mit einem Multi-Thread-Ansatz zu erhalten. Ein sehr einfaches Matplotlib-basiertes Ausgabeskript für die Betrachtung der Aktienkurve des Portfolios eingeführt. Die Aktienkurvenerzeugung ist in einem frühen Stadium und erfordert noch viel Arbeit. Wie ich bereits erwähnt habe. Für diejenigen unter Ihnen, die mit QSForex nicht vertraut sind und zum ersten Mal zu dieser Forex-Tagebuch-Serie kommen, schlage ich vor, dass ich die folgenden Tagebucheinträge lesen muss, um mit der Software zu beschleunigen: Neben der Github-Seite für QSForex : Mehrfache Währungsunterstützung Eine Funktion, die ich in diesen Tagebucheinträgen ständig diskutiert habe, ist die Fähigkeit, mehrere Währungspaare zu unterstützen. In diesem Stadium Ive jetzt die Software geändert, um unterschiedliche Kontobezeichnungen zu erlauben, da vorher GBP die hartcodierte Währung war. Es ist auch möglich, in anderen Währungspaaren zu handeln, mit Ausnahme derjenigen, die aus einer Basis oder einem Zitat im japanischen Yen (JPY) bestehen. Letzteres ist darauf zurückzuführen, wie die Tickgrößen in JPY-Währungen gekoppelt sind. Um dies zu erreichen, habe ich geändert, wie der Gewinn berechnet wird, wenn Einheiten entfernt oder die Position geschlossen ist. Hier ist das aktuelle Snippet für die Berechnung von Pips, in der Position. py Datei: Wenn wir die Position schließen, um einen Gewinn oder Verlust zu realisieren, müssen wir das folgende Snippet für die Schließung verwenden. Auch in der position. py-Datei: Zuerst erhalten wir die Geld - und Briefkurse für das Währungspaar, das gehandelt wird, sowie das Quotehome-Währungspaar. Zum Beispiel für ein Konto, das auf GBP lautet, wo wir EURUSD handeln, müssen wir Preise für USDGBP erhalten, da EUR die Basiswährung ist und USD das Angebot ist. In diesem Stadium überprüfen wir, ob die Position selbst eine lange oder kurze Position ist und dann den passenden Entfernungspreis und den Quotehome-Entfernungspreis berechnen, die durch den Entfernungspreis und den qhclose gegeben werden. Wir aktualisieren dann die aktuellen und durchschnittlichen Preise innerhalb der Position und berechnen schließlich die PampL durch Multiplikation der Pips, der Quotehome Entfernung Preis und dann Anzahl der Einheiten wurden ausgeschlossen. Wir haben die Notwendigkeit, die Exposition zu besprechen, völlig eliminiert, was eine redundante Variable war. Diese Formel stellt dann korrekt die PampL gegen irgendwelche (nicht JPY bezeichnet) Währung Paar Handel. Überholung von Positions - und Portfolio-Handling Neben der Fähigkeit, in mehreren Währungspaaren zu handeln, habe ich auch weiterentwickelt, wie die Position und das Portfolio die Verantwortung für die Eröffnung und Schließung von Positionen sowie das Hinzufügen und Subtrahieren von Einheiten teilen. Insbesondere hat Ive eine Menge der Position-Handling-Code, der in portfolio. py in position. py war bewegt. Dies ist natürlicher, da die Position sich um sich selbst kümmern und sie nicht an das Portfolio delegieren sollte. Insbesondere die Addunits. Removeunits und closeposition Methoden wurden erstellt oder erweitert: In den beiden letzteren sehen Sie, wie die neue Formel für die Berechnung des Profits umgesetzt wird. Damit wurde die Funktionalität der Portfolio-Klasse entsprechend reduziert. Insbesondere die Methoden addnewposition. Addpositionunits Removepositionunits und closposition wurden modifiziert, um der Tatsache Rechnung zu tragen, dass die Berechnungsarbeiten im Positionsobjekt durchgeführt werden: Im Wesentlichen prüfen sie alle (abgesehen von addnewposition) einfach, ob die Position für dieses Währungspaar existiert und dann die entsprechende Positionsmethode aufruft Unter Berücksichtigung des Gewinns, wenn nötig. Moving Average Crossover Strategie Weve diskutierte die Moving Average Crossover Strategie vor auf QuantStart. Im Rahmen des Aktienhandels. Es ist eine sehr nützliche Test-Bed-Indikator-Strategie, weil es einfach ist, die Berechnungen von Hand zu replizieren (zumindest bei niedrigeren Frequenzen), um zu überprüfen, ob sich der Backtester so verhält, wie er sollte. Die Grundidee der Strategie lautet wie folgt: Zwei separate, einfach gleitende Durchschnittsfilter werden mit unterschiedlichen Lookback-Perioden einer bestimmten Zeitreihe erstellt. Signale zum Kauf des Vermögenswertes treten auf, wenn der kürzere Rückblick gleitende Durchschnitt den längeren Rückblick gleitenden Durchschnitt überschreitet. Wenn der längere Durchschnitt später den kürzeren Durchschnitt übersteigt, wird der Vermögenswert zurückverkauft. Die Strategie funktioniert gut, wenn eine Zeitreihe einen starken Trend einbringt und dann langsam den Trend rückgängig macht. Die Umsetzung ist einfach. Zuerst stellen wir eine Methode calcrollingsma zur Verfügung, die es uns ermöglicht, die vorherige Zeitspanne SMA-Berechnung effizienter zu nutzen, um die neue zu generieren, ohne die SMA bei jedem Schritt vollständig neu zu berechnen. Zweitens erzeugen wir in zwei Fällen Signale. Im ersten Fall generieren wir ein Signal, wenn die kurze SMA die lange SMA übersteigt und nicht lange das Währungspaar war. Im zweiten Fall generieren wir ein Signal, wenn die lange SMA die kurze SMA übersteigt und wir schon lange sind. Ich habe das Standardfenster auf 500 Ticks für die kurze SMA und 2.000 Ticks für die lange SMA gesetzt. Offensichtlich in einer Produktionseinstellung würden diese Parameter optimiert, aber sie funktionieren gut für unsere Testzwecke. Single-Threaded Backtester Eine weitere wesentliche Änderung war, die Backtesting-Komponente zu modifizieren, um Single-Threaded zu sein, anstatt Multi-Threaded. Ich habe diese Änderung gemacht, weil ich eine sehr harte Zeit hatte, die Threads zu synchronisieren, um in einer Weise auszuführen, die in einer Live-Umgebung auftreten würde. Es bedeutete grundsätzlich, dass die Ein - und Ausstiegspreise sehr unrealistisch waren, oftmals (virtuelle) Stunden nach der eigentlichen Tickung. Daher habe ich das Streamen von TickEvent-Objekten in die Backtesting-Loop integriert, wie man im folgenden Snippet von backtest. py sehen kann: Beachten Sie die Zeile ticker. streamnexttick (). Dies wird vor einer Abfrage der Ereignis-Warteschlange aufgerufen und als solches wird immer garantieren, dass ein neues Tick-Event angekommen ist, bevor die Warteschlange wieder abgefragt wird. Insbesondere bedeutet dies, dass ein Signal ausgeführt wird, wenn neue Marktdaten eintreffen, auch wenn es aufgrund des Schlupfes eine gewisse Verzögerung im Bestellvorgang gibt. Ive auch einen Maxiters Wert, der steuert, wie lange die Backtesting-Schleife fortgesetzt wird. In der Praxis muss dies ziemlich groß sein, wenn es um mehrere Währungen über mehrere Tage geht, aber Ive setzt es auf einen Standardwert, der für einzelne Tage Daten eines Währungspaares erlaubt. Die streamnexttick-Methode der Preishandler-Klasse ähnelt dem streamtoqueue, außer dass sie die Iterator next () - Methode manuell anruft, anstatt das Tick-Streaming in einer for-Schleife auszuführen: Beachten Sie, dass es bei Empfang einer StopIteration-Ausnahme aufhört. Damit kann der Code wieder aufgenommen werden, anstatt bei der Ausnahme zu stürzen. Matplotlib Output Ive hat auch ein sehr einfaches Matplotlib-Ausgangsskript erstellt, um die Eigenkapitalkurve anzuzeigen. Output. py lebt derzeit im Backtest-Verzeichnis von QSForex und ist unten angegeben: Beachten Sie, dass es eine neue settings. py Variable gibt, die jetzt OUTPUTRESULTSDIR heißt. Die in Ihren Einstellungen eingestellt werden müssen. Ich habe es auf ein temporäres Verzeichnis anderswo auf meinem Dateisystem hinweisen, da ich nicht zufällig irgendwelche Eigenkapital-Backtest-Ergebnisse in die Code-Basis hinzufügen möchte. Die Equity-Kurve funktioniert, indem sie einen Balance-Wert zu einer Liste von Wörterbüchern hinzugefügt hat, wobei ein Wörterbuch einem a entspricht Zeitstempel Sobald der Back-Test abgeschlossen ist, wird die Liste der Wörterbücher in einen Pandas DataFrame konvertiert und die tocsv-Methode wird verwendet, um equity. csv auszugeben. Dieses Ausgabe-Skript liest dann einfach die Datei und zeichnet die Balance-Spalte des nachfolgenden DataFrame auf. Sie können das Snippet für die appendequityrow - und outputresults-Methoden der Portfolio-Klasse unten sehen: Jedes Mal, wenn executesignal aufgerufen wird, wird die frühere Methode aufgerufen und fügt den Timeestampbalance-Wert an das Equity-Mitglied an. Am Ende der Backtest-Ausgabe werden die Ergebnisse angezeigt, die einfach die Liste der Wörterbücher in einen DataFrame konvertieren und dann in das angegebene OUTPUTRESULTSDIR-Verzeichnis ausgeben. Leider ist dies nicht besonders geeignet, eine Eigenkapitalkurve zu erstellen, wie sie nur bei der Erstellung eines Signals auftritt. Dies bedeutet, dass es nicht berücksichtigt unrealisierte PampL. Während dies ist, wie tatsächlichen Handel auftritt (Sie havent tatsächlich irgendwelche Geld, bis Sie eine Position zu schließen) bedeutet, dass die Eigenkapitalkurve bleibt völlig flach zwischen Balance Updates. Schlimmer noch, Matplotlib wird standardmäßig eine lineare Interpolation zwischen diesen Punkten, so dass der falsche Eindruck der nicht realisierten PampL. Die Lösung für dieses Problem besteht darin, einen unrealisierten PampL-Tracker für die Positionsklasse zu erstellen, der bei jedem Tick korrekt aktualisiert wird. Dies ist ein wenig mehr rechnerisch teuer, aber ermöglicht eine sinnvollere Eigenkapitalkurve. Diese Funktion ist für ein späteres Datum geplant. Nächste Schritte Die nächste Hauptaufgabe für QSForex ist es, mehrtägiges Backtesting zu ermöglichen. Im Moment lädt das HistoricCSVPriceHandler-Objekt nur einen einzigen Tag im Wert von DukasCopy-Tick-Daten für alle angegebenen Währungspaare. Um mehrtägige Tests zu ermöglichen, wird es notwendig sein, jeden Tag sequentiell zu laden und zu streamen, um zu vermeiden, dass RAM mit der gesamten Geschichte der Tickdaten abgefüllt wird. Dies erfordert eine Änderung, wie die streamnexttick-Methode funktioniert. Sobald dies abgeschlossen ist, wird es eine langfristige Strategie-Backtesting über mehrere Paare ermöglichen. Eine weitere Aufgabe ist es, die Leistung der Aktienkurve zu verbessern. Um eine der üblichen Leistungsmesswerte (wie zB die Sharpe Ratio) zu berechnen, müssen wir prozentuale Renditen über einen bestimmten Zeitraum berechnen. Allerdings erfordert dies, dass wir die Tick-Daten in Bars, um eine Rückkehr für einen bestimmten Zeitraum zu berechnen. Solche Binning muss auf einer Stichprobenhäufigkeit auftreten, die der Handelshäufigkeit ähnlich ist oder die Sharpe Ratio nicht über die wahre Risikobereitschaft der Strategie reflektiert wird. Diese Binning ist nicht eine triviale Übung, da es viele Annahmen gibt, die in die Erzeugung eines Preises für jeden Behälter gehen. Sobald diese beiden Aufgaben abgeschlossen sind und genügend Daten erworben wurden, werden wir in der Lage sein, eine breite Palette von Tick-Daten-basierten Forex-Strategien zu unterstützen und Eigenkapitalkurven abzüglich der Mehrheit der Transaktionskosten zu produzieren. Darüber hinaus wird es äußerst unkompliziert sein, diese Strategien auf dem von OANDA zur Verfügung gestellten Praxis-Trading-Account zu testen. Dies soll Ihnen erlauben, viel bessere Entscheidungen darüber zu treffen, ob eine Strategie im Vergleich zu einem forschungsorientierteren Backtesting-System durchgeführt werden soll. Just Getting Started mit quantitativen TradingQSForex ist eine Open-Source-Event-driven Backtesting und Live-Trading-Plattform für den Einsatz in der Devisen - (Forex-) Märkte, derzeit in einem Alpha-Zustand. Es wurde als Teil der Forex Trading Diary-Serie auf QuantStart erstellt, um die systematische Handelsgemeinschaft mit einer robusten Handelsmaschine zu versorgen, die eine einfache Implementierung und Prüfung von Forex-Strategien ermöglicht. Die Software wird unter einer zulässigen MIT-Lizenz (siehe unten) zur Verfügung gestellt. Open-Source - QSForex wurde unter einer äußerst permissiven Open-Source-MIT-Lizenz veröffentlicht, die den vollen Einsatz sowohl in der Forschung als auch in kommerziellen Anwendungen ohne Einschränkung, aber ohne jegliche Gewährleistung ermöglicht. Free - QSForex ist völlig kostenlos und kostet nichts zu downloaden oder zu verwenden. Collaboration - Da QSForex Open-Source ist, arbeiten viele Entwickler zusammen, um die Software zu verbessern. Neue Funktionen werden häufig hinzugefügt. Alle Bugs sind schnell entschlossen und behoben. Softwareentwicklung - QSForex ist in der Programmiersprache Python für eine einfache plattformübergreifende Unterstützung geschrieben. QSForex enthält eine Reihe von Unit-Tests für die Mehrheit seiner Berechnungs-Code und neue Tests werden ständig für neue Features hinzugefügt. Event-Driven Architecture - QSForex ist sowohl für das Backtesting als auch für den Live-Trading komplett ereignisgesteuert, was zu einem einfachen Übergang von Strategien von einer Forschungstestphase zu einer Live-Trading-Implementierung führt. Transaktionskosten - Spread-Kosten sind standardmäßig für alle zurückgesetzten Strategien enthalten. Backtesting - QSForex bietet intraday Tick-Auflösung Multi-Tage-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 die Grundleistungsmessung und die Equity Visualisierung über die Visualisierungsbibliotheken Matplotlib und Seaborn. Installation und Nutzung 1) Besuchen Sie Oanda und richten Sie ein Konto ein, um die API-Authentifizierungsanmeldeinformationen zu erhalten, die Sie für den Live-Handel benötigen. Ich erkläre, wie man das in diesem Artikel ausführt: quantstartarticlesForex-Trading-Tagebuch-1-Automated-Forex-Trading-mit-die-OANDA-API. 2) Klonen Sie dieses Git-Repository in einen geeigneten Ort auf Ihrem Computer mit dem folgenden Befehl in Ihrem Terminal: git clone githubmhallsmooreqsforex. git. Alternativ können Sie die Zip-Datei des aktuellen Master-Zweigs bei githubmhallsmooreqsforexarchivemaster. zip herunterladen. 3) Erstellen Sie eine Reihe von Umgebungsvariablen für alle Einstellungen, die in der Datei settings. py im Anwendungsverzeichnis gefunden wurden. Alternativ können Sie Ihre spezifischen Einstellungen durch Überschreiben der os. environ. get (.) Aufrufe für jede Einstellung hart kodieren: 4) Erstellen Sie eine virtuelle Umgebung (virtualenv) für den QSForex-Code und nutzen Sie Pipe, 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: Damit wird eine neue virtuelle Umgebung erstellt, um die Pakete zu installieren. Angenommen, Sie haben das QSForex-Git-Repository in ein Beispielverzeichnis wie projectqsforex heruntergeladen (ä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 Zeit dauern, da NumPy, SciPy, Pandas, Scikit-Learn und Matplotlib müssen zusammengestellt werden. Es gibt viele Pakete, die für diese Arbeit erforderlich sind, also bitte werfen Sie einen Blick auf diese beiden Artikel für weitere Informationen: Sie müssen auch einen symbolischen Link aus Ihrem Website-Paket-Verzeichnis zu Ihrem QSForex-Installationsverzeichnis erstellen, um anrufen zu können Importiere qsforex innerhalb des codes. Um dies zu tun, benötigen Sie einen Befehl, der folgend ähnelt: Vergewissern Sie sich, dass Sie pro Outlook-Verzeichnis in Ihr Installationsverzeichnis und venvqsforexlibpython2.7site-Pakete in Ihr virtualenv-Site-Paketverzeichnis umwandeln. Sie können nun die nachfolgenden Befehle korrekt ausführen. 5) In diesem Stadium, wenn Sie einfach wünschen, um Praxis oder Live-Handel durchführen, dann können Sie Python Tradingtrading. py laufen. Die die Standard-TestStrategy-Handelsstrategie verwenden wird. Dies kauft oder verkauft einfach ein Währungspaar jedes 5. Tick. Es ist nur zum Testen - benutze es nicht in einer Live-Handelsumgebung Wenn du eine sinnvollere Strategie schaffen willst, dann schaffe einfach eine neue Klasse mit einem beschreibenden Namen, z. B. MeanReversionMultiPairStrategy und sicherstellen, dass es eine calculatesignals Methode hat. Du musst diese Klasse sowohl die Paarliste als auch die Event-Queue übergeben, wie bei tradingtrading. py. Bitte schauen Sie auf Strategiestrategy. py für Details. 6) Um ein Backtesting durchzuführen, ist es notwendig, simulierte Forex-Daten zu generieren oder historische Tick-Daten herunterzuladen. Wenn Sie einfach die Software ausprobieren möchten, ist der schnellste Weg, um einen Beispiel Backtest zu generieren, um einige simulierte Daten zu generieren. Das aktuelle Datenformat, das von QSForex verwendet wird, ist das gleiche wie das, das vom DukasCopy Historical Data Feed bei dukascopyswissenglishmarketwatchhistorical bereitgestellt wird. Um einige historische Daten zu erzeugen, stellen Sie sicher, dass die Einstellung CSVDATADIR in settings. py auf ein Verzeichnis gesetzt wird, in dem die historischen Daten live leben sollen. Sie müssen dann generatesimulatedpair. py ausführen. Die sich unter dem Skriptverzeichnis befindet. Es erwartet ein einziges Kommandozeilenargument, das in diesem Fall das Währungspaar im Format BBBQQQ ist. Zum Beispiel: In diesem Stadium ist das Skript hartcodiert, um eine einmonatige Daten für Januar 2014 zu erstellen. Das heißt, Sie sehen einzelne Dateien des Formats BBBQQQYYYYMMDD. csv (zB GBPUSD20140112.csv) erscheinen in Ihrem CSVDATADIR für alle Werktage in In diesem Monat Wenn Sie das Monatsdatum der Datenausgabe ändern möchten, ändern Sie einfach die Datei und re-run. 7) Nun, da die historischen Daten erzeugt wurden, ist es möglich, einen Backtest durchzuführen. Die Backtest-Datei selbst wird in backtestbacktest. py gespeichert. Aber das enthält nur die Backtest-Klasse. Um einen Backtest tatsächlich auszuführen, musst du diese Klasse instanziieren und ihm die notwendigen Module zur Verfügung stellen. Der beste Weg, um zu sehen, wie dies geschieht, ist, das Beispiel Moving Average Crossover-Implementierung in der Datei examplesmac. py zu betrachten und diese als Vorlage zu verwenden. Dies nutzt die MovingAverageCrossStrategy, die in strategiestrategy. py gefunden wird. Dies ist standardmäßig der Handel mit GBPUSD und EURUSD, um mehrere Währungspaarnutzung zu demonstrieren. Es verwendet Daten in CSVDATADIR gefunden. Um das Beispiel Backtest auszuführen, führen Sie einfach folgendes aus: Dies wird einige Zeit dauern. Auf meinem Ubuntu-Desktop-System zu Hause, mit den historischen Daten generiert über generatesimulatedpair. py. Es dauert ca. 5-10 Minuten zu laufen. Ein großer Teil dieser Berechnung tritt am Ende des tatsächlichen Backtests auf, wenn der Drawdown berechnet wird, also bitte daran erinnern, dass der Code nicht aufgelegt ist. Bitte lassen Sie ihn bis zur Fertigstellung. 8) Wenn du die Leistung des Backtests ansehen möchtest, kannst du einfach output. py verwenden, um eine Eigenkapitalkurve zu sehen, Periodenrenditen (dh Tick-to-Tick-Renditen) und eine Drawdown-Kurve: Und das ist es. In diesem Stadium bist du bereit Um mit dem Erstellen eigener Backtests zu beginnen, indem du Strategien in Strategiestrategy. py modifizierst oder anhängst und echte Daten von DukasCopy (dukascopyswissenglishmarketwatchhistorical) herunterlädt. Wenn Sie irgendwelche Fragen über die Installation haben, dann fühlen Sie bitte sich frei, mich bei mikequantstart zu mailen. Wenn Sie irgendwelche Bugs oder andere Probleme haben, die Sie denken, kann aufgrund der Codebase spezifisch sein, fühlen Sie sich frei, ein Github Problem hier zu öffnen: githubmhallsmooreqsforexissues Copyright (c) 2015 Michael Halls-Moore Erlaubnis wird hiermit kostenlos an jede Person gewährt Das Erhalten einer Kopie dieser Software und der zugehörigen Dokumentationsdateien (Software), um die Software ohne Einschränkung zu behandeln, einschließlich, ohne Einschränkung, die Nutzungsrechte, Kopie, Änderung, Zusammenführung, Veröffentlichung, Verbreitung, Unterlizenzierung und Verkauf von Kopien der Software, Und Personen, denen die Software zur Verfügung gestellt wird, unter den folgenden Bedingungen zuzulassen: Der oben genannte Urheberrechtshinweis und diese Erlaubnismitteilung sind in allen Kopien oder wesentlichen Teilen der Software enthalten. DIE SOFTWARE WIRD OHNE GEWÄHRLEISTUNG JEGLICHER ART, AUSDRÜCKLICH ODER STILLSCHWEIGEND, EINSCHLIESSEN, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL HAFTEN DIE AUTOREN ODER URHEBERRECHTLICHEN HOLDERS FÜR IRGENDEINEN ANSPRÜCHE, SCHÄDEN ODER ANDERER HAFTUNG, OHNE VERTRAG, SCHÄDEN ODER ANDERWEITIG, DIE AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER VERWENDUNG ODER ANDEREN HÄNDLUNGEN IN DER SOFTWARE. Forex Trading Disclaimer Handel Devisen am Rande trägt ein hohes Risiko und ist 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, Ihre Investition Ziele, Erfahrungsstand und Risiko Appetit. Die Möglichkeit besteht, dass Sie einen Verlust von einigen oder allen Ihrer ursprünglichen Investition aufrechterhalten könnten und deshalb sollten Sie nicht Geld investieren, das 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 irgendwelche Zweifel haben. About mike Hallo Mein Name ist Michael Halls-Moore und Im der Kerl hinter QuantStart. Ich habe mit einem MMath in Mathematik von der University of Warwick graduiert, promovierte am Imperial College London in Fluid Dynamics und arbeitete in einem Hedgefonds als quantitativen Handelsentwickler für die letzten Jahre in Mayfair, London. Ich verbringe jetzt Zeit für Forschung, Entwicklung, Backtesting und Implementierung von intraday algorithmischen Handelsstrategien. Im wirklich nur ein Kerl, der einmal einen Job als quantitativen Analytiker in der Stadt von London bekommen wollte. Als junger Postgraduiertenstudentin fühlte ich, dass das Werden ein Quant wurde, war der nächste logische Schritt, um meine mathematischen Fähigkeiten in einer aufregenden, lukrativen Karriere zu nutzen. Ich begann zu studieren, um ein Quant im Oktober 2006 zu sein, aber bald bemerkte, dass die Informationen, die ich wissen musste, ziemlich dicht und ziemlich schwierig war, ohne viel Arbeit zu verstehen. Ich brauchte wirklich Organisation, Diagramme und nützliche Tipps von anderen, die es besser wussten. Nichts von dieser Art existierte wirklich für die quante Vorstellungsgesprächsvorbereitung im Internet, also habe ich gedacht, dass ich es selbst mache. Und so wurde QuantStart geboren. Ich organisierte meine Notizen, las alle mathematischen Finanzen und algorithmischen Trading Lehrbücher, sprach mit einem Haufen von Menschen und stellte alle diese Informationen online, so konnte ich leicht auf meine Notizen von überall zu helfen, mir zu verstehen. Damals habe ich nicht erkannt, dass ich half, etwas Großes zu beginnen. Seit QuantStarts im März 2010 starten, werde ich ein quantitativer Entwickler für einen Londoner Hedgefonds und habe mehr als 500.000 Unique Visitors für die Hilfe gebraucht - und mehr Interessenten und Trader besuchen weiter. Wieder, ich bedanke mich bei der Verwendung von QuantStart. Das Beste an QuantStart ist es, deine Geschichten von Quant - und Trading-Erfolg zu hören. Im getrieben, um die Website besser zu machen, indem sie weiterhin mehr Informationen hinzufügen und die Welt mit den besten algorithmischen Handel und Quant Finanzen Informationen zur Verfügung stellen, dank Ihrer freundlichen Worte und Lob. Es ist ein tolles Gefühl jedes Mal zu hören, dass jemand hat ihre Traum-Quant-Job gewonnen oder hat schließlich ein profitables algorithmisches Handelsmodell wegen dieser Website entwickelt. Ihre Kommentare, Anregungen und Danke werden sehr geschätzt. Ich glaube, dass meine Arbeit mit QuantStart ist meine Art zu helfen, die jüngere Generation in diesen schwierigen wirtschaftlichen Zeiten eingesetzt wurden durchlaufen. Wenn ich Zehntausenden helfen kann, einen Job in der Wall Street oder der City of London zu gewinnen, und sie schaffen es, eine erfolgreiche quantitative Karriere zu haben, dann fühle ich mich wie ich einen großen Unterschied mache. Wenn du neu bist, dann bin ich hier, um dir zu helfen, also wenn du irgendwelche Fragen oder Anmerkungen (oder Vorschläge) über irgendetwas hast, bitte fühlen Sie sich frei, mit mir jederzeit in Verbindung zu treten. Der beste Weg, um mich zu erreichen ist, E-Mail mikequantstart. Viel Glück für euch alle Beifall

No comments:

Post a Comment