Tuesday 14 November 2017

Quantmod Moving Average Crossover


Backtesting eines Moving Average Crossover in Python mit Pandas Im vorigen Artikel über Research Backtesting Umgebungen In Python Mit Pandas haben wir eine objektorientierte forschungsbasierte Backtesting-Umgebung erstellt und auf einer zufälligen Prognosestrategie getestet. In diesem Artikel werden wir nutzen die Maschinen, die wir eingeführt, um die Forschung über eine tatsächliche Strategie, nämlich die Moving Average Crossover auf AAPL. Moving Average Crossover-Strategie Die Moving Average Crossover-Technik ist eine äußerst bekannte simples Impulsstrategie. Es wird oft als die Hello World Beispiel für quantitative Handel. Die Strategie, wie hier skizziert, ist lang-nur. Zwei getrennte einfache gleitende Durchschnittsfilter werden mit variierenden Rückblickperioden einer bestimmten Zeitreihe erzeugt. Beim Kauf des Assets treten Signale auf, wenn der kürzere Lookback-Bewegungsdurchschnitt den längeren Lookback-Bewegungsdurchschnitt übersteigt. Wenn der längere Durchschnitt anschließend den kürzeren Durchschnitt übersteigt, wird der Vermögenswert zurückgekauft. Die Strategie funktioniert gut, wenn eine Zeitreihe einen starken Trend eintritt und dann langsam den Trend rückgängig macht. Für dieses Beispiel habe ich Apple, Inc. (AAPL) als Zeitreihe mit einem kurzen Rückblick von 100 Tagen und einem langen Rückblick von 400 Tagen gewählt. Dies ist das Beispiel der zipline algorithmischen Handelsbibliothek. Wenn wir also unseren eigenen Backtester implementieren wollen, müssen wir sicherstellen, dass er die Ergebnisse in Zipline, als ein grundlegendes Mittel der Validierung entspricht. Implementierung Bitte folgen Sie dem vorherigen Tutorial. Die beschreibt, wie die anfängliche Objekthierarchie für den Backtester konstruiert wird, andernfalls funktioniert der nachfolgende Code nicht. Für diese spezielle Implementierung habe ich die folgenden Bibliotheken verwendet: Die Implementierung von macross. py erfordert backtest. py aus dem vorherigen Tutorial. Der erste Schritt ist, die notwendigen Module und Objekte zu importieren: Wie im vorherigen Tutorial werden wir die abstrakte Basisklasse Strategy unterteilen, um MovingAverageCrossStrategy zu produzieren. Die alle Details enthält, wie die Signale erzeugt werden, wenn die sich bewegenden Mittelwerte von AAPL einander kreuzen. Das Objekt benötigt ein kurzes Fenster und ein langes Fenster. Die Werte wurden auf Standardwerte von 100 Tagen bzw. 400 Tagen gesetzt, wobei es sich um dieselben Parameter handelt, die im Hauptbeispiel der Zipline verwendet werden. Die gleitenden Mittelwerte werden durch die Verwendung der Pandas-Rollmechanik auf den BarsClose-Schlusskurs der AAPL-Aktie erstellt. Sobald die einzelnen Bewegungsdurchschnitte konstruiert worden sind, wird die Signalserie dadurch erzeugt, daß die Säule gleich 1,0 gesetzt wird, wenn der kurze gleitende Durchschnitt größer ist als der langgängige Durchschnitt oder 0,0 sonst. Daraus können Positionsaufträge generiert werden, um Handelssignale darzustellen. Das MarketOnClosePortfolio wird von Portfolio subklassen. Die in backtest. py gefunden wird. Es ist fast identisch mit der im vorherigen Tutorial beschriebenen Implementierung, mit der Ausnahme, dass die Trades nun auf einer Close-to-Close-Basis statt einer Open-to-Open-Basis durchgeführt werden. Einzelheiten darüber, wie das Portfolio-Objekt definiert ist, finden Sie im vorherigen Tutorial. Ive ließ den Code in für Vollständigkeit und dieses Tutorium in sich geschlossen halten: Nun, da die MovingAverageCrossStrategy und MarketOnClosePortfolio Klassen definiert worden sind, wird eine Hauptfunktion aufgerufen, um alle Funktionalität zusammen zu binden. Darüber hinaus wird die Performance der Strategie durch eine Kurve der Eigenkapitalkurve untersucht. Das Pandas DataReader-Objekt lädt OHLCV-Preise für AAPL-Aktien für den Zeitraum vom 1. Januar 1990 bis zum 1. Januar 2002 herunter, wobei an diesem Punkt die Signale DataFrame erzeugt werden, um die Langzeitsignale zu erzeugen. Anschließend wird das Portfolio mit einer Stammkapitalzuführung von 100.000 USD erstellt und die Erträge auf der Eigenkapitalkurve berechnet. Der letzte Schritt ist die Verwendung von matplotlib, um eine zweidimensionale Plot der beiden AAPL Preise, überlagert mit den gleitenden Durchschnitten und kaufen / verkaufen Signale, sowie die Equity-Kurve mit den gleichen Kauf / Verkauf Signale. Der Plot-Code wird aus dem Zipline-Implementierungsbeispiel genommen (und modifiziert). Die grafische Ausgabe des Codes ist wie folgt. Ich benutzte den IPython-Einfüge-Befehl, um diesen direkt in die IPython-Konsole zu legen, während in Ubuntu, so dass die grafische Ausgabe in Sicht blieb. Die rosafarbenen upticks stellen Kauf der Vorlage dar, während die schwarzen downticks Vertretung verkaufen es zurück: Wie gesehen werden kann, verliert die Strategie Geld über dem Zeitraum mit fünf Hin - und Rücktransaktionen. Dies ist nicht überraschend angesichts des Verhaltens der AAPL in der Periode, die auf einem leichten Abwärtstrend war, gefolgt von einem erheblichen Aufschwung, der 1998 begann. Die Rückblickperiode der gleitenden durchschnittlichen Signale ist ziemlich groß und dieses beeinflußte den Profit des abschließenden Geschäfts , Die sonst die Strategie rentabel gemacht haben könnte. In nachfolgenden Artikeln werden wir eine anspruchsvollere Methode zur Leistungsanalyse erstellen sowie die Optimierung der Rückblickperioden der einzelnen gleitenden Durchschnittssignale beschreiben. Moving Average Crossovers Moving durchschnittliche Crossover sind ein gängiger Weg, den Händler mit Moving Averages nutzen können. Eine Überkreuzung tritt auf, wenn ein schnelleres Moving Average (d. h. ein kürzerer Periodenbewegungsdurchschnitt) entweder über einen langsameren Moving Average (d. h. einen längeren Zeitraum Moving Average) kreuzt, der als bullish Crossover oder unterhalb betrachtet wird, der als ein bearish Crossover betrachtet wird. Die nachstehende Tabelle des SampP Depository Receipts Exchange Traded Fund (SPY) zeigt den 50-tägigen Simple Moving Average und den 200-Tage Simple Moving Average. Dieses Moving Average-Paar wird oft von großen Finanzinstituten als Langstreckenindikator der Marktrichtung betrachtet : Beachten Sie, wie die langfristige 200-Tage-Simple Moving Average in einem Aufwärtstrend ist dies oft als ein Signal, dass der Markt ist ziemlich stark interpretiert. Ein Händler könnte erwägen, zu kaufen, wenn die kürzerfristige 50-Tage-SMA über die 200-tägige SMA kreuzt und kontrastreich, könnte ein Händler zu verkaufen, wenn die 50-Tage-SMA kreuzt unter dem 200-Tage-SMA. In dem obigen Diagramm des SampP 500 wären beide potentiellen Kaufsignale extrem rentabel gewesen, aber das eine potentielle Verkaufssignal hätte einen kleinen Verlust verursacht. Denken Sie daran, dass die 50-Tage, 200-Tage Simple Moving Average Crossover ist eine sehr langfristige Strategie. Für diejenigen Händler, die mehr Bestätigung wünschen, wenn sie Moving Average Crossover verwenden, kann die 3 Simple Moving Average Crossover-Technik verwendet werden. Ein Beispiel hierfür ist im Diagramm von Wal-Mart (WMT) gezeigt: Die 3 Simple Moving Average Methode könnte wie folgt interpretiert werden: Der erste Crossover der schnellsten SMA (im Beispiel oben, der 10-Tage SMA) Über die nächste schnellste SMA (20-Tage-SMA) fungiert als eine Warnung, dass die Preise Trend rückläufig sein könnte jedoch in der Regel ein Händler würde nicht eine tatsächliche Kauf-oder Verkaufsauftrag dann. Danach könnte der zweite Crossover der schnellsten SMA (10 Tage) und der langsamste SMA (50-Tage) einen Händler zum Kauf oder Verkauf auslösen. Es gibt viele Varianten und Methoden für die Verwendung des 3 Simple Moving Average Crossover-Methode, einige sind unten vorgesehen: Ein konservativer Ansatz könnte sein, zu warten, bis die mittlere SMA (20-Tage) kreuzt über die langsamere SMA (50-Tage) aber dies Ist im Grunde ein zwei SMA Crossover-Technik, nicht eine drei SMA-Technik. Ein Händler könnte eine Geld-Management-Technik der Kauf einer halben Größe, wenn die schnelle SMA kreuzt über die nächste schnellste SMA und dann geben Sie die andere Hälfte, wenn die schnelle SMA kreuzt über die langsamere SMA. Anstatt halbiert, kaufen oder verkaufen ein Drittel einer Position, wenn die schnelle SMA kreuzt über die nächste schnellste SMA, ein weiteres Drittel, wenn die schnelle SMA kreuzt über die langsame SMA und das letzte Drittel, wenn die zweite schnellste SMA über die langsame SMA kreuzt . Eine Moving Average Crossover-Technik, die 8 Moving Averages (exponentiell) verwendet, ist die Moving Average Exponential Ribbon Indicator (siehe: Exponential Ribbon). Moving Durchschnittliche Crossover werden oft von Händlern angesehen. In der Tat Frequenzweichen sind oft in den beliebtesten technischen Indikatoren einschließlich der Moving Average Convergence Divergence (MACD) Indikator (siehe: MACD) enthalten. Andere gleitende Durchschnitte verdienen eine sorgfältige Berücksichtigung in einem Handelsplan: Die obigen Informationen dienen nur zu Informationszwecken und zu Unterhaltungszwecken und stellen weder eine Handelsberatung noch eine Aufforderung zum Kauf oder Verkauf von Aktien, Optionen, Zukunfts-, Rohstoff - oder Devisenprodukten dar. Die Wertentwicklung in der Vergangenheit ist nicht unbedingt ein Hinweis auf die zukünftige Wertentwicklung. Handel ist von Natur aus riskant. OnlineTradingConcepts haftet nicht für besondere oder Folgeschäden, die aus der Nutzung oder Nichtnutzung, den auf dieser Website bereitgestellten Materialien und Informationen entstehen. Siehe vollständigen Disclaimer. Python vs R 3: Ein einfacher gleitender Durchschnitt Crossover Backtest auf SPY Dies ist der dritte in einer Serie, die Python und R für quantitative Trading-Analyse vergleicht. Mit dem Zipline-Framework für Python und der Arbeit von Systematic Investor Toolbox für R. Ich implementiere das gleiche gleitende Durchschnitt Cross-Over-Modell in jeder Sprache. Wegen der OOP-Natur von Python gibt es viele Unterschiede zwischen den beiden Sprachen, was zu etwa doppelt so viel Code. Vermutlich ist die addierte OO-Komplexität in viel komplizierteren Strategien nützlich. Als nächstes in der Serie werden die eingebauten Performance Metriken der Sprachen und verfügbaren Backtesting-Pakete.

No comments:

Post a Comment