Hmmm, es scheint, diese einfach zu implementieren Funktion ist eigentlich ziemlich einfach, falsch zu werden und hat eine gute Diskussion über Gedächtnis Effizienz gefördert Ich bin glücklich, aufblasen, wenn es bedeutet zu wissen, dass etwas richtig gemacht wurde Richard Sep 20 14 um 19 23.NumPy Der Mangel an einer bestimmten domänenspezifischen Funktion ist vielleicht auf die Disziplin des Core Teams zurückzuführen, und die Treue zu NumPy s Prime Directive bietet einen N-dimensionalen Array-Typ sowie Funktionen zum Erstellen und Indizieren dieser Arrays Wie viele grundlegende Ziele, diese Ist nicht klein, und NumPy macht es brillant. Die viel größere SciPy enthält eine viel größere Sammlung von Domain-spezifischen Bibliotheken namens Subpackages von SciPy Devs - zum Beispiel numerische Optimierung zu optimieren, Signal Processing Signal und integrale Kalkül integrieren. Meine Vermutung ist Dass die Funktion, die Sie nachher sind, in mindestens einem der SciPy-Unterpakete vielleicht aber ich würde zuerst in der Sammlung von SciPy Scikits identifizieren die relevanten scikit s und suchen nach Die Funktion von Interesse dort. Scikits sind unabhängig entwickelte Pakete auf der Grundlage von NumPy SciPy und gerichtet auf eine bestimmte technische Disziplin zB Scikits-Bild Scikits-Lernen usw. Mehrere von diesen waren vor allem die awesome OpenOpt für numerische Optimierung wurden hoch angesehen, reife Projekte lange Vor der Wahl zu wohnen unter der relativ neuen scikits rubric Die Scikits Homepage gern oben listet etwa 30 solcher Scikits, obwohl mindestens einige von denen sind nicht mehr unter aktiver Entwicklung. Nach diesem Rat würde Sie zu scikits-timeseries führen, aber das Paket ist nein Länger unter aktiver entwicklung In der Tat ist Pandas geworden, AFAIK, die de facto NumPy-basierte Zeitreihenbibliothek. Pandas hat mehrere Funktionen, die verwendet werden können, um einen gleitenden Durchschnitt zu berechnen, das einfachste von diesen ist wahrscheinlich rollingmean, die Sie wie so verwenden , Rufen Sie einfach die Funktion rollingmean passing in der Serie Objekt und eine Fenstergröße, die in meinem Beispiel unten ist 10 Tage. verifizieren, dass es w Orked - zB verglichene Werte 10 - 15 in der Originalreihe gegen die neue Serie geglättet mit rollenden Mittel. Die Funktion Rollingmean, zusammen mit etwa einem Dutzend oder so anderen Funktion sind informell gruppiert in der Pandas Dokumentation unter der Rubrik beweglichen Fenster Funktionen eine Sekunde , Verwandte Gruppe von Funktionen in Pandas wird als exponentiell gewichtete Funktionen bezeichnet, zB ewma, die exponentiell verschobenen gewichteten Durchschnitt berechnet. Die Tatsache, dass diese zweite Gruppe nicht in die ersten beweglichen Fensterfunktionen eingeschlossen ist, liegt vielleicht daran, dass die exponentiell gewichteten Transformationen nicht darauf ankommen Ein fester längenfenster. derwerted Jan 14 13 at 6 38.Backtesting ein Moving Average Crossover in Python mit Pandas. In der vorherigen Artikel über Research Backtesting Umgebungen In Python Mit Pandas haben wir eine objektorientierte forschungsorientierte Backtesting-Umgebung erstellt und getestet Auf einer zufälligen Prognosestrategie In diesem Artikel werden wir von der Maschine Gebrauch machen, die wir eingeführt haben, um die Forschung über eine tatsächliche Str Ategy, nämlich die Moving Average Crossover auf AAPL. Moving Average Crossover-Strategie. Die Moving Average Crossover-Technik ist eine äußerst bekannte vereinfachte Impulsstrategie Es wird oft als das Hello World-Beispiel für den quantitativen Handel betrachtet. Die hier beschriebene Strategie ist nur langwierig Zwei getrennte einfache gleitende Durchschnittsfilter werden mit unterschiedlichen Lookback-Perioden einer bestimmten Zeitreihe erstellt. Signale zum Kauf des Assets treten auf, wenn der kürzere Rückblick gleitende Durchschnitt den längeren Rückblick gleitenden Durchschnitt übersteigt Wenn der längere Durchschnitt später den kürzeren Durchschnitt übersteigt, ist der Asset Zurück verkauft Die Strategie funktioniert gut, wenn eine Zeitreihe in einen Zeitraum von starkem Trend eintritt und dann langsam den Trend rückgängig macht. Für dieses Beispiel habe ich Apple, Inc AAPL als Zeitreihe gewählt, mit einem kurzen Rückblick auf 100 Tage und einem langen Rückblick Von 400 tagen Dies ist das Beispiel, das von der zipline algorithmischen Handelsbibliothek zur Verfügung gestellt wird. Wenn wir also unseren eigenen Backtester implementieren wollen, müssen wir t sorgen Hut es passt die Ergebnisse in Zipline, als ein grundlegendes Mittel der Validierung. Machen Sie sicher, das vorherige Tutorial hier zu folgen, die beschreibt, wie die anfängliche Objekthierarchie für den Backtester konstruiert wird, andernfalls wird der unten stehende Code nicht funktionieren Für diese spezielle Implementierung habe ich verwendet Die folgenden Bibliotheken. Die Implementierung von erfordert von der vorherigen Tutorial Der erste Schritt ist es, die notwendigen Module und Objekte zu importieren. Wie im vorherigen Tutorial werden wir die Unterrichtsklasse der Strategie abstrakte Basisklasse zu MovingAverageCrossStrategy zu produzieren, die alle Details enthält, wie Um die Signale zu erzeugen, wenn die gleitenden Mittelwerte von AAPL einander kreuzen. Das Objekt benötigt ein kurzes Fenster und ein langes Fenster, auf dem es betrieben werden soll. Die Werte wurden auf Vorgaben von 100 Tagen bzw. 400 Tagen gesetzt, wobei die gleichen Parameter in der Hauptbeispiel der Zipline. Die bewegten Durchschnitte werden durch die Verwendung der Pandas Rollingmean Funktion auf den Stäben erstellt. Schließen Sie den Schlusskurs der AAPL-Lager Sobald die einzelnen gleitenden Mittelwerte konstruiert wurden, wird die Signalreihe erzeugt, indem die Colum gleich 1 0 gesetzt wird, wenn der kurze gleitende Durchschnitt größer ist als der lange gleitende Durchschnitt oder 0 0. Andernfalls können die Positionen Aufträge erzeugt werden Repräsentieren Handelssignale. Das MarketOnClosePortfolio wird von Portfolio subkassiert, das gefunden wird. Es ist fast identisch mit der Implementierung, die im vorherigen Tutorial beschrieben wurde, mit der Ausnahme, dass die Trades nun auf einer Close-to-Close-Basis statt einer Open durchgeführt werden To-Open-Basis Für Details darüber, wie das Portfolio-Objekt definiert ist, lesen Sie das vorherige Tutorial, das ich den Code für die Vollständigkeit verlassen habe, und dieses Tutorial selbständig zu halten. Jetzt haben die MovingAverageCrossStrategy - und MarketOnClosePortfolio-Klassen eine Hauptfunktion definiert Wird aufgerufen, um alle Funktionalität zusammen zu binden Zusätzlich wird die Performance der Strategie über eine Kurve der Eigenkapitalkurve untersucht. Die Pandas DataR Eader object lädt OHLCV-Preise der AAPL-Aktie für den Zeitraum vom 1. Januar 1990 bis zum 1. Januar 2002 zu, an welcher Stelle die Signale DataFrame erstellt werden, um die Langzeitsignale zu generieren. Anschließend wird das Portfolio mit einer Anfangskapitalbasis von 100.000 USD generiert und die Renditen sind Berechnet auf der Eigenkapitalkurve. Der letzte Schritt ist es, matplotlib zu verwenden, um eine zweidimensionale Handlung von beiden AAPL-Preisen zu zeichnen, überlagert mit den gleitenden Durchschnitten und kaufen Verkaufssignale sowie die Eigenkapitalkurve mit den gleichen Kaufverkaufssignalen Der Plottencode Wird aus dem Zipline-Implementierungsbeispiel genommen und modifiziert. Die grafische Ausgabe des Codes ist wie folgt, ich habe den Befehl IPython-Paste verwendet, um diesen direkt in die IPython-Konsole zu setzen, während in Ubuntu, so dass die grafische Ausgabe in Sicht Die rosa upticks blieb Vertreten den Kauf der Aktie, während die schwarzen Abschlüsse den Verkauf wieder verkaufen. AAPL Moving Average Crossover Performance von 1990-01-01 bis 2002-01-01.As kann gesehen werden, die Strategie verliert Geld über Die Periode, mit fünf Hin - und Rückfahrten Dies ist nicht überraschend angesichts des Verhaltens von AAPL über den Zeitraum, der auf einem leichten Abwärtstrend war, gefolgt von einem signifikanten Aufschwung Anfang 1998 Die Rückblickperiode der gleitenden Durchschnittssignale ist ziemlich groß und Dies wirkte sich auf den Gewinn des Endhandels aus, der ansonsten die Strategie rentabel gemacht hat. In den folgenden Artikeln werden wir ein anspruchsvolleres Mittel zur Leistungsanalyse schaffen und beschreiben, wie man die Lookback-Perioden der einzelnen gleitenden Mittelsignale optimiert Erste Schritte mit quantitativem Trading. Die folgenden Beispiele erzeugen einen gleitenden Durchschnitt der vorangegangenen WINDOW-Werte. Wir schneiden die ersten WINDOW -1-Werte ab, da wir den Durchschnitt vor ihnen nicht finden können. Das Standardverhalten für die Faltung ist, dass die Werte vor dem Start von uns annehmen Sequenz sind 0 Formal formulieren wir die Sequenz y für die Sequenz x, wobei yi xi xi 1 xin n. This nutzt numpy s Faltung func Dies ist ein allgemeiner gleitender durchschnittlicher Vorgang. Die Hervorhebung von Gewichtungen macht einige Werte wichtiger, die Sie in der Lage haben, den Durchschnitt als um den Punkt zu sehen, anstatt vor dem Punkt. Anstatt die Werte zu verkürzen, können wir die Anfangswerte festlegen, wie in diesem Beispiel dargestellt .
No comments:
Post a Comment