Saturday, 25 March 2017

Quantstart Forex Handel

Quant Strategien - sind sie für Sie Quantitative Anlagestrategien haben sich zu sehr komplexen Werkzeugen mit dem Aufkommen moderner Computer entwickelt, aber die Strategien Wurzeln gehen über 70 Jahre zurück. Sie werden in der Regel von hochgebildeten Teams geführt und verwenden proprietäre Modelle, um ihre Fähigkeit zu erhöhen, den Markt zu schlagen. Es gibt sogar off-the-shelf Programme, die Plug-and-Play für diejenigen sind, die Einfachheit suchen. Quant-Modelle funktionieren immer gut, wenn sie zurück getestet wurden, aber ihre tatsächlichen Anwendungen und Erfolgsquoten sind umstritten. Während sie in den Bullenmärkten gut funktionieren scheinen. Wenn die Märkte haywire gehen, werden Quant Strategien den gleichen Risiken ausgesetzt wie jede andere Strategie. Die Geschichte Einer der Gründungsväter der Studie der quantitativen Theorie, die auf die Finanzierung angewendet wurde, war Robert Merton. Man kann sich nur vorstellen, wie schwierig und zeitaufwendig der Prozess vor dem Gebrauch von Computern war. Andere Theorien in der Finanzierung entwickelten sich auch aus einigen der ersten quantitativen Studien, einschließlich der Basis der Portfolio-Diversifizierung auf der Grundlage der modernen Portfolio-Theorie. Die Verwendung von quantitativen Finanzen und Kalkül führte zu vielen anderen gemeinsamen Tools, darunter eine der bekanntesten, die Black-Scholes Option Preisformel, die nicht nur Investoren Preis Optionen und Strategien zu entwickeln, sondern hilft, die Märkte in Schach mit Liquidität zu halten. Bei der direkten Portfoliomanagement. Das Ziel ist wie jede andere Anlagestrategie. Um Wert, Alpha oder Überschuss zurückzugeben. Quants, wie die Entwickler genannt werden, komponieren komplexe mathematische Modelle, um Investitionsmöglichkeiten zu erkennen. Es gibt so viele Modelle da draußen wie Quants, die sie entwickeln, und alle behaupten, die besten zu sein. Eines der Quant-Investment-Strategien Best-Selling-Punkte ist, dass das Modell, und letztlich der Computer, macht die eigentliche Buysell Entscheidung, nicht ein Mensch. Dies neigt dazu, jede emotionale Reaktion zu entfernen, die eine Person beim Kauf oder Verkauf von Investitionen erleben kann. Quant-Strategien werden nun in der Investitionsgemeinschaft akzeptiert und werden durch Investmentfonds, Hedgefonds und institutionelle Investoren geführt. Sie gehen in der Regel durch den Namen Alpha-Generatoren. Oder alpha gens Hinter dem Vorhang Wie im Zauberer von Oz ist jemand hinter dem Vorhang, der den Prozess antreibt. Wie bei jedem Modell ist es nur so gut wie der Mensch, der das Programm entwickelt. Zwar gibt es keine spezifische Anforderung, um ein Quant zu werden, die meisten Firmen, die Quant-Modelle betreiben, kombinieren die Fähigkeiten von Investment-Analysten, Statistiker und die Programmierer, die den Prozess in den Computern kodieren. Aufgrund der komplexen Natur der mathematischen und statistischen Modelle, ihre gemeinsame zu sehen, Anmeldeinformationen wie Graduate Grad und Doktoranden in Finanzen, Wirtschaft, Mathematik und Ingenieurwesen zu sehen. Historisch gesehen arbeiteten diese Teammitglieder in den Backoffices. Aber da Quellmodelle immer häufiger wurden, geht das Backoffice zum Frontbüro. Vorteile von Quant-Strategien Während die allgemeine Erfolgsquote umstritten ist, ist der Grund, warum einige Quant-Strategien funktionieren, dass sie auf Disziplin basieren. Wenn das Modell richtig ist, hält die Disziplin die Strategie, mit Blitzschnellcomputern zu arbeiten, um Ineffizienzen in den Märkten auf der Grundlage quantitativer Daten auszunutzen. Die Modelle selbst können auf so wenig wie einige Verhältnisse wie PE basieren. Schulden auf Eigenkapital und Ergebniswachstum oder Tausende von Inputs zur gleichen Zeit zusammenarbeiten. Erfolgreiche Strategien können sich in Trends in ihren frühen Stadien abholen, da die Computer ständig Szenarien laufen, um Ineffizienzen zu lokalisieren, bevor andere es tun. Die Modelle sind in der Lage, eine sehr große Gruppe von Investitionen gleichzeitig zu analysieren, wo der traditionelle Analytiker nur einige auf einmal betrachten kann. Der Screening-Prozess kann das Universum nach Klassenstufen wie 1-5 oder A-F je nach Modell bewerten. Dies macht den eigentlichen Handelsprozess sehr einfach, indem er in die hoch bewerteten Investitionen investiert und die niedrig bewerteten verkauft. Quant-Modelle eröffnen auch Variationen von Strategien wie Long, Short und Longshort. Erfolgreiche Mengenfonds halten die Risikokontrolle aufgrund der Art ihrer Modelle im Blick. Die meisten Strategien beginnen mit einem Universum oder Benchmark und nutzen Sektor und Industrie Gewichtungen in ihren Modellen. Damit können die Mittel die Diversifikation bis zu einem gewissen Grad kontrollieren, ohne das Modell selbst zu beeinträchtigen. Quant-Fonds laufen in der Regel auf einer niedrigeren Kostenbasis, weil sie nicht so viele traditionelle Analytiker und Portfoliomanager brauchen, um sie zu führen. Nachteile von Quant Strategies Es gibt Gründe, warum so viele Investoren nicht vollständig umarmen das Konzept der Vermietung einer Black Box laufen ihre Investitionen. Für alle erfolgreichen quant Fonds da draußen, so viele scheinen nicht erfolgreich zu sein. Leider für die Quants Reputation, wenn sie scheitern, sie scheitern große Zeit. Long-Term Capital Management war eines der bekanntesten Quoten-Hedge-Fonds, wie es von einigen der angesehensten akademischen Führer und zwei Nobel Memorial Preisträger Ökonomen Myron S. Scholes und Robert C. Merton geführt wurde. In den 1990er Jahren erzielte ihr Team überdurchschnittliche Renditen und zog Kapital von allen Investoren an. Sie waren berühmt dafür, dass sie nicht nur Ineffizienzen ausnutzen, sondern auch einen leichten Zugang zu Kapital nutzen, um enorme gehebelte Wetten auf Marktanweisungen zu schaffen. Die disziplinierte Natur ihrer Strategie schuf tatsächlich die Schwäche, die zu ihrem Zusammenbruch führte. Langfristiges Kapitalmanagement wurde im Frühjahr 2000 liquidiert und aufgelöst. Seine Modelle enthielten nicht die Möglichkeit, dass die russische Regierung auf einige ihrer eigenen Schulden verstoßen könnte. Diese ein Ereignis ausgelöst Ereignisse und eine Kettenreaktion vergrößert durch Leverage-verursachte Chaos. LTCM war so stark mit anderen Investitionsvorgängen beschäftigt, dass sein Zusammenbruch die Weltmärkte beeinflusste und dramatische Ereignisse auslöste. Auf lange Sicht trat die Federal Reserve ein, um zu helfen, und andere Banken und Investmentfonds unterstützten LTCM, um weitere Schäden zu vermeiden. Dies ist einer der Gründe, warum quant Fonds fehlschlagen können, da sie auf historischen Ereignissen basieren, die keine zukünftigen Ereignisse beinhalten können. Während ein starkes Quant-Team ständig neue Aspekte der Modelle hinzufügt, um zukünftige Ereignisse vorherzusagen, ist es unmöglich, die Zukunft jedes Mal vorherzusagen. Quant-Fonds können auch überwältigt werden, wenn die Wirtschaft und die Märkte eine überdurchschnittliche Volatilität erfahren. Die Kauf - und Verkaufssignale können so schnell kommen, dass der hohe Umsatz hohe Provisionen und steuerpflichtige Ereignisse schaffen kann. Quant-Fonds können auch eine Gefahr darstellen, wenn sie als Bärensicherheit vermarktet werden oder auf kurzen Strategien basieren. Vorhersage von Abschwüngen. Mit Derivaten und Kombination von Hebelwirkung kann gefährlich sein. Eine falsche Wendung kann zu Implosionen führen, die oft die Neuigkeiten machen. Die Bottom Line Quantitative Anlagestrategien haben sich von Backoffice Black Boxen zu Mainstream Investment Tools entwickelt. Sie sind entworfen, um die besten Köpfe in der Wirtschaft und die schnellsten Computer zu nutzen, um Ineffizienzen zu nutzen und nutzen Hebel, um Marktwetten zu machen. Sie können sehr erfolgreich sein, wenn die Modelle alle richtigen Eingaben enthalten haben und sind flink genug, um abnorme Marktereignisse vorherzusagen. Auf der Flip-Seite, während Quant-Fonds rigoros zurück getestet werden, bis sie arbeiten, ihre Schwäche ist, dass sie sich auf historische Daten für ihren Erfolg verlassen. Während die Quant-Style-Investition ihren Platz auf dem Markt hat, ist es wichtig, sich ihrer Mängel und Risiken bewusst zu sein. Im Einklang mit Diversifizierungsstrategien sein. Es ist eine gute Idee, Quant-Strategien als Investitionsstil zu behandeln und mit traditionellen Strategien zu kombinieren, um eine ordnungsgemäße Diversifizierung zu erreichen. Eine Art von Steuern, die auf Kapitalgewinne von Einzelpersonen und Kapitalgesellschaften angefallen sind. Kapitalgewinne sind die Gewinne, die ein Investor ist. Ein Auftrag, eine Sicherheit bei oder unter einem bestimmten Preis zu erwerben. Ein Kauflimitauftrag erlaubt es Händlern und Anlegern zu spezifizieren. Eine IRS-Regel (Internal Revenue Service), die strafrechtliche Abhebungen von einem IRA-Konto ermöglicht. Die Regel verlangt das. Der erste Verkauf von Aktien von einem privaten Unternehmen an die Öffentlichkeit. IPOs werden oft von kleineren, jüngeren Unternehmen ausgesucht. DebtEquity Ratio ist Schuldenquote verwendet, um eine company039s finanzielle Hebelwirkung oder eine Schuldenquote zu messen, um eine Person zu messen. Eine Art von Vergütungsstruktur, die Fondsmanager in der Regel beschäftigen, in welchem ​​Teil der Entschädigung Leistung basiert. Forex 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 solche 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 TradingForex 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 Handel 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 Links unten: Just Getting Started mit Quantitative Trading


No comments:

Post a Comment