Tuesday 11 July 2017

Exponentiell Gewichtet Gleitender Durchschnitt Python


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 erhalte 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 Ihre Antwort 2017 Stack Exchange, IncDer exponentiell gewichtete Moving Average (EWMA) - Algorithmus ist das einfachste diskrete Zeit-Tiefpassfilter. Er erzeugt in der i-ten Iteration eine Ausgabe yi, die einer skalierten Version der Stromeingabe xi und der vorherigen Ausgabe y entspricht. Der Glättungsfaktor alpha in 0,1 gibt das normalisierte Gewicht des neuen Eingangs im Ausgang an. Zum Beispiel bedeutet ein alpha0.03, dass jeder neue Eingang einen 3 zu dem Ausgang beitragen wird, während der vorherige Ausgang einen 97 beitragen wird. Die Grenzwerte für den Glättungsfaktor sind 0 und 1, was yiy bzw. yi xi impliziert. In den folgenden Punkten analysieren wir den Algorithmus aus verschiedenen Blickwinkeln. Die EWMA könnte als ARMA-Filter (Auto Regressive Moving Average) betrachtet werden, da sie von der Historie der Werte sowohl von Eingang als auch Ausgang abhängt. Wenn jedoch die EWMA-Gleichung entwickelt wird, ist es möglich, den Stromausgang nur auf der Grundlage der Beiträge früherer Eingaben, d. H. Des Moving Average (MA) - Filters, darzustellen. Yi alphacdot xi alpha (1-alpha) cdot x alpha (1-alpha) 2 cdot x. In der i-ten Iteration ist die Ausgabe eine gewichtete Summe von jedem vorhergehenden Eingangswert xj mit jin, wobei die Skalierung einem exponentiell gewichteten Koeffizienten w alpha cdot (1) entspricht Alpha;). Die Impulsantwort h (t) des linearen zeitinvarianten (LTI) Systemäquivalents hat eine unendliche Dauer, was bedeutet, daß die Übertragungsfunktion H (z) eine endliche Dauer hat. Wenn das Symbol den Faltungsoperanden darstellt und u (n) der Schrittfunktion entspricht, läßt sich sagen: y (n) x (n) h (n) mit h (n) ein cdot u (n) Alpha) n cdot u (n) Der EWMA-Algorithmus entspricht dem einfachsten Infinite Impulse Response (IIR) - Diskret-Filter. Der Hauptvorteil, dass IIR-Systeme über FIR sind, ist ihre Implementierungseffizienz. Auf der anderen Seite, IIR-Systeme sind schwerer zu analysieren. Um die Analyse zu vereinfachen, wird vorgegeben, dass das System Null-Anfangsbedingungen hat. Somit entspricht das IIR-Filter der zweiten Ordnung: In der Fig. 1 ist die vereinfachte und vollständige direkte Form 1 (DF1) des Filters dargestellt. Im Falle des EWMA haben die Koeffizienten feste Werte in bezug auf den Glättungsfaktor, die entsprechen: a01, a11-alpha, b0alpha, b10. Bei Anwendung dieser Einschränkungen wird die Übertragungsfunktion: technische Indikatoren 0.0.15 Dieses Modul enthält einige technische Indikatoren für die Analyse von Beständen. Dieses Modul bietet einige technische Indikatoren für die Analyse von Beständen. Wenn ich kann, werde ich mehr hinzufügen. Wenn jemand mit neuen Code oder Korrektur-Zugeständnisse beitragen möchte, fühlen Sie sich frei. Relative Strength Index (RSI), ROC, MA Umschläge Simple Moving Average (SMA), Weighted Moving Average (WMA), Exponential Moving Average (EMA) Bollinger Bands (B), Bollinger Bandbreite, B Es erfordert numpy. Dieses Modul wurde getestet und getestet unter Windows mit Python 2.7.3 und numpy 1.6.1.

No comments:

Post a Comment