Wednesday, October 12, 2016

Gleitender Durchschnittsfilter Python

Ich habe ein Array, wo diskrete Sinuswerte aufgezeichnet und gespeichert werden. Ich möchte die max und min der Wellenform zu finden. Da die Sinus-Daten werden aufgezeichnet Spannungen mit einem DAQ, wird es einige Rauschen, so möchte ich einen gewichteten Durchschnitt zu tun. Angenommen, self. yArray enthält meine sinewave-Werte, hier ist mein Code so weit: Mein Problem scheint in der zweiten für die Schleife zu sein, wo abhängig von meiner durchschnittlichen Fenstergröße (filterize), möchte ich zusammenfassen, die Werte in dem Fenster zu nehmen Der Durchschnitt von ihnen. Ich bekomme eine Fehlermeldung: Ich bin ein EE mit sehr wenig Erfahrung in der Programmierung, so dass jede Hilfe wäre sehr dankbar gefragt, Paul, danke für die Empfehlung. Es sollte jedoch beachtet werden, dass, obwohl x: y doesn39t einen Fehler erzeugen, es win39t geben das erwartete Ergebnis im OP39s-Code. Entweder OP müsste Ihre Korrektur verwenden, aber mit yxfiltersize und aus der Schleife genommen oder die Summe entfernt werden sollte, mit dem XY-Indexierung an Ort und Stelle. Ndash tom10 Mai 30 13 um 17:18 tom10, I39m sicher, Sie haben Recht. Meine Antwort war meistens gehen einige Intuition über das, was das Problem wahrscheinlich war, ich bin nicht knowledgable über die Problem-Domäne, um die Genauigkeit des aktuellen Algorithmus zu kennen. Aus diesem Grund habe ich das OP auf Ihre Antwort verwiesen. Ndash Paul Woolcock Die anderen Antworten richtig beschreiben Sie Ihren Fehler, aber diese Art von Problem wirklich ruft für die Verwendung von numpy. Numpy läuft schneller, ist mehr Speicher effizient und ist ausdrucksstarker und bequemer für diese Art von Problem. Heres ein Beispiel: Wenn Sie nicht möchten, numpy verwenden, sollte es auch darauf hingewiesen werden, dass theres ein logischer Fehler in Ihrem Programm, die Ergebnisse in der TypeError. Das Problem ist, dass in der Zeile youre mit Summe innerhalb der Schleife, wo Sie auch die Berechnung der Summe. Also entweder müssen Sie die Summe ohne die Schleife verwenden, oder Schleife durch das Array und addieren Sie alle Elemente, aber nicht beide (und ihre beides, dh das Anlegen von Summe an das indexierte Array-Element, das führt zu dem Fehler in der ersten Ort). Das heißt, hier sind zwei Lösungen: numpy. average Axis, auf der durchschnittlich ein. Wenn Keine. Wird eine Mittelung über das abgeflachte Array durchgeführt. Gewichte. Arraylike, optional Ein Array von Gewichten in Verbindung mit den Werten in einer. Jeder Wert in a trägt zum Durchschnitt nach seinem zugehörigen Gewicht bei. Die Gewichtsanordnung kann entweder 1-D (in diesem Fall ihre Länge die Größe von a entlang der gegebenen Achse sein) oder von der gleichen Form wie a sein. Wenn weightsNone. Dann wird angenommen, daß alle Daten in a ein Gewicht gleich Eins haben. ist zurückgekommen . Bool, optional Der Standardwert ist False. Wenn wahr . Wird das Tupel (durchschnittliche Summengewichte) zurückgegeben, ansonsten wird nur der Durchschnitt zurückgegeben. Wenn weightsNone. Die Summe der Gewichtungen entspricht der Anzahl der Elemente, über die der Durchschnitt genommen wird. Durchschnittlich, sumofweights. Arraytype oder double Gibt den Durchschnitt entlang der angegebenen Achse zurück. Wenn die Rückgabe True ist. Ein Tupel mit dem Durchschnitt als das erste Element und die Summe der Gewichte als zweites Element zurück. Der Rückgabetyp ist Float, wenn a vom Integer-Typ ist, andernfalls ist er vom gleichen Typ wie a. Sumofweights ist von der gleichen Art wie Durchschnitt. Wir haben vorgestellt, wie man bewegliche Durchschnitte mit Python erstellen. Dieses Tutorial wird eine Fortsetzung dieses Themas sein. Ein gleitender Durchschnitt im Rahmen von Statistiken, auch Rolling / Run Average genannt, ist eine Art von endlicher Impulsantwort. In unserem vorherigen Tutorial haben wir die Werte der Arrays x und y: Let8217s plot x gegen den gleitenden Durchschnitt von y aufgetragen, den wir yMA nennen wollen: Erstens, let8217s gleichen die Länge beider Arrays aus: Und dies im Kontext: Das Ergebnis Diagramm: Um zu verstehen, dies, let8217s plot zwei verschiedene Beziehungen: x vs y und x vs MAy: Der gleitende Durchschnitt hier ist das grüne Diagramm, das bei 3 beginnt: Share this: So verwandte Post navigation Lassen Sie eine Antwort Antworten abbrechen Sehr nützlich Ich möchte den letzten Teil auf großen Datensätzen lesen Hope wird es bald kommen8230 d Blogger wie folgt: Backtesting ein Moving Average Crossover in Python mit Pandas Von Michael Halls-Moore am 21. Januar 2014 Im vorigen Artikel auf Research Backtesting Environments 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 kurzlebige Durchschnitt größer ist als der lang fortschreitende 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 deutlichen Aufschwung, der 1998 begann. Die Rückblickperiode der gleitenden Durchschnittssignale 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 ein anspruchsvolleres Verfahren zur Leistungsanalyse erstellen sowie die Optimierung der Rückblickperioden der einzelnen gleitenden Durchschnittssignale beschreiben. Michael Halls-Moore Mike ist der Begründer von QuantStart und seit fünf Jahren in der quantitativen Finanzbranche tätig, vorwiegend als Quant-Entwickler und später als Quant-Trader-Consulting für Hedgefonds. Advanced Matplotlib-Serie (nur Videos und Endgeräte) ) Sobald Sie ein grundlegendes Verständnis davon haben, wie Matplotlib arbeitet, können Sie ein Interesse daran haben, Ihr Wissen ein wenig weiter zu nehmen. Einige der komplexesten grafischen Bedürfnisse kommen in Form von Aktien-Analyse und Charting, oder Forex. In diesem Tutorial-Serie, wurden zu decken, wo und wie automatisch greifen, sortieren und organisieren einige freie Aktien-und Forex-Preise Daten. Als nächstes wollten wir es mit einigen der beliebtesten Indikatoren als Beispiel. Hier, gut tun MACD (Moving Average Convergence Divergence) und der RSI (Relative Strength Index). Damit wir diese berechnen können, verwenden wir NumPy, aber sonst berechnen wir diese alle auf unseren eigenen. Um die Daten zu erwerben, würden die Yahoo Finance API verwenden. Diese API gibt die historischen Preisdaten für das von uns angegebene Tickersymbol und die von Ihnen gewünschte Zeitlänge zurück. Je größer der Zeitrahmen ist, desto geringer ist die Auflösung der Daten, die wir erhalten. Wenn Sie also nach einem eintägigen Zeitrahmen für AAPL fragen, erhalten Sie 3-Minuten-OHLC-Daten (open high low close). Wenn Sie für 10 Jahre Wert fragen, erhalten Sie täglich Daten oder sogar 3 Tage Zeitrahmen. Beachten Sie dies und wählen Sie einen Zeitrahmen, der Ihre Ziele passt. Auch wenn Sie einen niedrig genug Zeitrahmen wählen und hoch genug Granularität erhalten, wird die API die Zeit in einem Unix-Zeitstempel zurückgeben, verglichen mit einem Datumsstempel. Sobald wir die Daten haben, wollen wir sie grafisch darstellen. Um zu beginnen, gut gerade die Linien, aber die meisten Leute wollen einen Kerzenstab stattdessen. Wir verwenden Matplotlibs Candlestick-Funktion, und machen Sie eine einfache Bearbeitung, um es leicht zu verbessern. Auf dieser Tabelle, auch überlagern ein paar gleitende Durchschnitt Berechnungen. Danach wollten wir einen Subplot erstellen und die Lautstärke grafisch darstellen. Wir können das Volumen auf demselben Subplot nicht sofort plotten, weil die Skala unterschiedlich ist. Um zu beginnen, werden wir das Volumen unterhalb in einem anderen Sub-Diagramm, aber schließlich tatsächlich tatsächlich überlagern Volumen auf die gleiche Figur und machen es etwas transparent. Dann wurden zwei Sub-Plots hinzuzufügen und eine RSI-Indikator oben und die MACD-Anzeige auf der Unterseite. Für alle diese, würden die X-Achse zu teilen, so können wir vergrößern und verkleinern in 1-Plot, und sie werden alle mit dem gleichen Zeitrahmen. Wurden zu plotten in Datum-Format für die X-Achse, und passen Sie so ziemlich alle Dinge, die wir für die Ästhetik. Dazu gehören wechselnde Tick-Beschriftungsfarben, Rand / Wirbelsäulenfarben, Linienfarben, OHLC-Leuchterfarben, lernen, wie man einen gefüllten Graphen (für Volumen), Histogramme, zeichnende Linien (hline für RSI) und vieles mehr erstellt. Heres das Endergebnis (Ich habe sowohl eine Python-3 und eine Python-2-Version für diese Python 3 zuerst, dann Python 2. Stellen Sie sicher, dass Sie mit der, die Ihre Python-Version entspricht): Das ist alles für jetzt. Wollen Sie mehr Tutorials Kopf zur Startseite Matplotlib Crash-Kurs


No comments:

Post a Comment