Thursday 19 January 2017

Berechnen Sie Die Gleitende Durchschnittliche Python

Lets sagen, ich habe eine Liste: Ich möchte eine Funktion, die die bewegte n-Tage-Durchschnitt berechnet zu erstellen. Also, wenn n 5 war, würde ich wollen, dass mein Code die ersten 1-5 zu berechnen, fügen Sie es und finden Sie den Durchschnitt, was wäre 3.0, dann auf 2-6 gehen, berechnen den Durchschnitt, die 4,0 werden würde, dann 3 -7, 4-8, 5-9, 6-10. Ich möchte nicht die ersten n-1 Tage zu berechnen, so ab dem n-Tag, es zählen die letzten Tage. Dies scheint zu drucken, was ich will: Aber ich weiß nicht, wie die Zahlen in diesen Listen zu berechnen. Ich mag Martijns Antwort auf diesem, wie george, Ich frage mich, ob dies nicht schneller wäre, indem Sie eine laufende Summierung anstelle der Anwendung der Summe () immer und immer wieder auf die meisten die gleichen Zahlen . Auch die Idee, während der Hochlaufphase keine Werte als Vorgabe zu haben, ist interessant. In der Tat kann es viele verschiedene Szenarien, die man für bewegte Durchschnitte konzipieren kann. Wir können die Berechnung der Mittelwerte in drei Phasen aufteilen: Ramp Up: Starten von Iterationen, bei denen die aktuelle Iteration lt-Fenstergröße anzeigt Steady Progress: Wir haben genau die Fenstergröße Anzahl der verfügbaren Elemente, um einen normalen Durchschnitt zu berechnen: sum (xiterationcounter-windowsize: iterationcounter) windowsize Ramp Down: Am Ende der Eingabedaten könnten wir wieder eine andere Fenstergröße - 1 durchschnittliche Anzahl - zurückgeben. Heres eine Funktion, die Arbitrary iterables akzeptiert (Generatoren sind fein) als Eingabe für Daten Beliebige Fenstergrößen 1 Parameter zum Einschalten der Produktion von Werten während der Phasen für Ramp UpDown Callback-Funktionen für jene Phasen, um zu steuern, wie Werte erzeugt werden. Dies kann verwendet werden, um kontinuierlich eine Vorgabe (z. B. keine) vorzusehen oder Teildurchschnitte bereitzustellen. Es scheint ein bisschen schneller als die Martijns-Version zu sein, was jedoch viel eleganter ist. Heres der Test-Code: Die ursprüngliche Frage kann nun mit dieser Funktion Aufruf gelöst werden: Im in den Prozess der Schaffung eines Forex Trading-Algorithmus und wollte meinen Versuch bei der Berechnung EMA (Exponential Moving Averages) versuchen. Meine Ergebnisse scheinen korrekt zu sein (im Vergleich zu den Berechnungen, die ich von Hand gemacht habe), so dass ich glaube, die folgende Methode funktioniert, aber wollte nur eine zusätzliche Menge von Augen, um sicherzustellen, dass im nicht fehlt etwas zu bekommen. Beachten Sie, dass dies nur die EMA für den letzten Preis zurückgibt, gibt es nicht ein Array von EMAs, wie das ist nicht das, was ich für meine Anwendung benötigen. Rekursion ist ein gutes Werkzeug für den richtigen Job, aber hier wird es verwendet, um einfaches Looping zu erreichen. Als solcher der Code. Ist schwerer zu lesen und zu begründen. Ist langsamer, da ein Großteil des Codes in ema nur einmal ausgeführt werden muss. Wird fehlschlagen mit groß genug Wert des Fensters durch überlaufende Python-Aufruf-Stack. Bitte dokumentieren Sie mindestens die Parameter jeder Funktion, zB. Dieses Fenster ist die Länge des Fensters, und diese Position zählt rückwärts vom Ende der Daten. (In der Tat wäre es klarer, wenn Position waren ein normaler Vorwärts-Index in Daten) Heben Sie eine Ausnahme, wenn Sie einen Parameter einen ungültigen Wert finden. Wenn Sie stattdessen nichts zurückgeben, wird dies später nur zu einer verwirrenden Ausnahme führen. In der Tat, wenn ich Indicators () versuchen. Ema (closeprices, 600) Ich bekomme unendliche Rekursion, weil sma keine zurückgibt. Das macht ema sma immer und immer wieder. Der vorhergehende Punkt zeigt auch, dass wenn len (data) lt window 2 nicht die richtige Gültigkeitsprüfung ist. Die 1 in data-window2 1: - window 1 scheint mir nicht richtig zu sein. Ich nehme an, Sie möchten data-window2: - window Die Anweisung return previousema ist an einem ungeraden Ort, da Sie an diesem Punkt haben Sie eine neue currentema berechnet. Dies ist der Basisfall der Rekursion, und es ist üblich, das Basisgehäuse zuerst zu behandeln. Mein Vorschlag für ema: beantwortet 26 November at 18:56 Pretty flachen Überprüfung: Sie müssen nicht eine Klasse für das, was Sie tun, schreiben (und ich schlage vor, Sie haben einen Blick auf dieses Video). Ihre Klasse kapselt keine Daten und Sie verwenden es nur, um Ihre Funktionen in einer gleichen Entität haben. Ich denke, Dinge wäre leichter zu verstehen, wenn Sie classmethod zu definieren, um es offensichtlich, dass Sie nicht wirklich auf irgendeine Instanz verlassen wollen. Eine noch bessere Möglichkeit wäre jedoch, Funktionen in einem Indikatormodul zu definieren. Antwortete Nov 24 14 am 18:04 Vielen Dank für die Vorschläge, die ich tatsächlich haben sie als classmethods und debattiert hin und her zwischen sogar mit einer Klasse oder einfach nur definieren Funktionen in einem Indikator-Modul (was ich jetzt tun). Ndash ChrisC Nov 25 14 am 19:12 Nur gerade das Video zu, große Sachen. Ndash ChrisC Nov 25 14 um 19:43 Deine Antwort 2017 Stack Exchange, IncErweiterte Matplotlib-Serie (nur Videos und Endgeräte) Sobald Sie ein grundlegendes Verständnis davon haben, wie Matplotlib funktioniert, haben Sie möglicherweise ein Interesse daran, Ihr Wissen ein wenig weiter zu bringen. 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-Etikettenfarben, Randdornfarben, Linienfarben, OHLC-Leuchterfarben, lernen, wie man einen gefüllten Graphen (für Volumen), Histogramme, bestimmte Linien (hline für RSI) und eine ganze Menge 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