Friday 31 March 2017

Moving Average Funktion 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 Sie 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. Irgendwelche Ideen gefragt Martijns Antwort auf diesem, wie george, Ich frage mich, ob dies nicht schneller wäre, indem 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 ständig eine Vorgabe (z. B. keine) vorzusehen oder Teildurchschnitte bereitzustellen. Es scheint ein bisschen schneller als 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: beantwortet Feb 18 13 at 18:15 Verwenden Sie die Summe und Karte Funktionen. Die Map-Funktion in Python 3 ist im Grunde eine faulen Version von diesem: Im sicher können Sie erraten, was die Summe-Funktion. Antwort # 2 am: April 23, 2011, 04:37:25 pm »Ein Ansatz, der vermeidet Zwischensummen Zwischensummen .. make, die läuft (int (v)). dann. (5) Wenn Sie Ameisen tragen um Zahlen ein Strings .. Alt ohne die globale: sicher sein, schwimmende Mathematik zu tun, auch wenn Sie Werte eingegeben werden ganze Zahlen beantwortet Summenalgorithmus schneller ist. Ich habe eine Antwort, die Ihren Standpunkt. Es gibt einfach keine Notwendigkeit für eine globale Variable hier. Ich habe versucht zu schwer zu aviod eine explizite for-Schleife. Ndash agentp Es gibt eine andere Lösung, die ein itertools Rezept paarweise () erweitert. Sie können dies auf nwise () erweitern. Die Ihnen das Schiebefenster (und arbeitet, wenn das iterable ist ein Generator): Während eine relativ hohe Setup-Kosten für kurze iterable s diese Kosten verringert in Auswirkungen, je länger der Datensatz. Dies nutzt Summe () aber der Code ist einigermaßen elegant: beantwortet Nov 26 16 um 14: 59We zuvor eingeführt, wie man gleitende Durchschnitte mit Python erstellen. Dieses Tutorial wird eine Fortsetzung dieses Themas sein. Ein gleitender Durchschnitt im Rahmen der Statistik, auch rollingrunning average genannt, ist eine Art von endlicher Impulsantwort. In unserem vorangegangenen Tutorial haben wir die Werte der Arrays x und y: Let8217s plot x gegen den gleitenden Durchschnitt von y aufgetragen, den wir yMA nennen werden: Erstens haben let8217s die Länge beider Arrays gleich: Und dies im Kontext: Das Ergebnis Diagramm: Um dies zu verstehen, let8217s plotten zwei verschiedene Beziehungen: x vs y und x vs MAy: Der gleitende Durchschnitt hier ist die grüne Handlung, die bei 3 beginnt: Share this: Gefällt mir: Post navigation Lassen Sie eine Antwort Antworten abbrechen Sehr nützlich I Möchte den letzten Teil auf großen Datensätzen zu lesen Hoffe, es wird bald kommen8230 d Blogger wie folgt: 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: antwortete am 26. November um 18:56 Hübsche flache Ü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, Inc


No comments:

Post a Comment