Ich spiele in Python ein bisschen wieder, und ich fand ein ordentliches Buch mit Beispielen Eines der Beispiele ist, einige Daten zu zeichnen, die ich eine Datei mit zwei Spalten habe, und ich habe die Daten, die ich die Daten genau gezeichnet habe, aber in der Übung es Sagt Ändern Sie Ihr Programm weiter zu berechnen und plotten den laufenden Durchschnitt der Daten, definiert durch. wo r 5 in diesem Fall und die yk ist die zweite Spalte in der Datendatei Haben Sie das Programm sowohl die ursprünglichen Daten und die laufenden Durchschnitt auf der Same graph. So weit habe ich diese. So Wie berechne ich die Summe In Mathematica ist es einfach, da es s symbolische Manipulation Summe i, zum Beispiel, aber wie man Summe in Python berechnen, die alle zehn Punkte in den Daten nimmt und sie durchgibt , Und tut dies bis zum Ende der Punkte. Ich blickte auf das Buch, aber fand nichts, was das erklären würde. heltonbiker s Code hat den Trick D. Danke Sie sehr viel. Es gibt ein Problem mit der akzeptierten Antwort Ich denke wir müssen Benutze anstelle von selben hier - Rückkehrfenster, same. As ein Beispiel ausprobieren die MA dieses Datensatzes 1,5,7,2,6,7,8,2,2,7,8,3,7, 3,7,3,15,6 - das Ergebnis sollte 4 2,5 4,6 0,5 0,5 0,5 2,5 4,4 4,5 4,5 6,5 6,4 6, 7 0,6 8, jedoch mit uns ergibt sich eine fehlerhafte Leistung von 2 6,3 0,4 2,5 4,6 0,5 0,5 0,5 2,5 4,4 4,5 4,5 6, 5 6, 4 6,7 0,6 8,6 2,4 8.Rusty Code, um dies auszuprobieren. Try dies mit gültigen gleich und sehen, ob die Mathematik macht sense. answered Okt 29 14 bei 4 27.Haven t versucht dies Raus, aber ich schaue hinein, es ist schon eine Weile her, seit ich in Python-Dingod kodiert habe. Okt 29 14 um 7 07. Dingod Warum ziehst du es nicht schnell mit dem rostigen Code und dem Sample-Set als einfach aus Liste, ich habe für einige faulen Menschen wie ich war auf den ersten - seine Masken aus der Tatsache, dass gleitenden Durchschnitt ist, sollten Sie in Erwägung ziehen Ihre ursprüngliche Antwort Ich versuchte es nur gestern und doppelte Überprüfung gespeichert mich Gesicht von schauen schlecht auf Berichterstattung auf Cxo Ebene Alles, was Sie tun müssen, ist, den gleichen gleitenden Durchschnitt einmal mit gültiger und anderer Zeit mit dem gleichen zu versuchen - und sobald Sie überzeugt sind, geben Sie mir etwas Liebe aka-up-vote ekta Okt 29 14 at 7 16.Moving Averages Was sind sie. Unter den populärsten technischen Indikatoren werden gleitende Mittelwerte verwendet, um die Richtung des aktuellen Trends zu messen. Jede Art von gleitendem Durchschnitt, die üblicherweise in diesem Tutorial geschrieben wird, da MA ein mathematisches Ergebnis ist, das durch Mittelung einer Anzahl von vergangenen Datenpunkten berechnet wird Der daraus resultierende Durchschnitt wird dann auf ein Diagramm aufgetragen, um es den Händlern zu erlauben, geglättete Daten zu betrachten, anstatt sich auf die alltäglichen Preisschwankungen zu konzentrieren, die allen Finanzmärkten innewohnen. Die einfachste Form eines gleitenden Durchschnitts, der in geeigneter Weise bekannt ist Einfacher gleitender durchschnittlicher SMA, wird berechnet, indem man das arithmetische Mittel eines gegebenen Satzes von Werten annimmt. Zum Beispiel, um einen grundlegenden 10-tägigen gleitenden Durchschnitt zu berechnen, würden Sie die Schlusskurse aus den letzten 10 Tagen addieren und dann das Ergebnis durch 10 In teilen Abbildung 1, die Summe der Preise für die letzten 10 Tage 110 wird durch die Anzahl der Tage 10 geteilt, um den 10-Tage-Durchschnitt zu erreichen Wenn ein Händler einen 50-Tage-Durchschnitt sehen möchte, wäre die gleiche Art der Berechnung Gemacht, aber es würde die Preise in den letzten 50 Tagen beinhalten Der daraus resultierende Durchschnitt unter 11 berücksichtigt die letzten 10 Datenpunkte, um den Händlern eine Vorstellung davon zu geben, wie ein Vermögenswert relativ zu den letzten 10 Tagen bezahlt wird. Vielleicht fragen Sie sich Warum technische Händler nennen dieses Werkzeug einen gleitenden Durchschnitt und nicht nur ein regelmäßiges Mittel Die Antwort ist, dass als neue Werte verfügbar werden, müssen die ältesten Datenpunkte aus dem Satz fallen und neue Datenpunkte müssen kommen, um sie zu ersetzen So ist der Datensatz Wird ständig auf neue Daten umbenannt, sobald es verfügbar wird. Diese Berechnungsmethode stellt sicher, dass nur die aktuellen Informationen berücksichtigt werden. In Abbildung 2 wird, sobald der neue Wert von 5 dem Satz hinzugefügt wird, das rote Feld die letzten 10 Daten repräsentiert Punkte bewegt sich nach rechts und der letzte Wert von 15 wird aus der Berechnung gelöscht Da der relativ kleine Wert von 5 den hohen Wert von 15 ersetzt, würden Sie erwarten, dass der Durchschnitt der Datensatzabnahme, was es in diesem Fall ist, zu sehen ist Von 11 bis 10.Was bewegte Mittelwerte aussehen Sobald die Werte des MA berechnet wurden, werden sie auf ein Diagramm gezeichnet und dann verbunden, um eine gleitende durchschnittliche Linie zu schaffen Diese geschwungenen Linien sind auf den Charts der technischen Händler üblich, aber wie Sie werden verwendet werden können drastisch mehr auf diese später variieren Wie Sie in Abbildung 3 sehen können, ist es möglich, mehr als einen gleitenden Durchschnitt zu jedem Diagramm hinzuzufügen, indem Sie die Anzahl der Zeitperioden, die bei der Berechnung verwendet werden. Diese geschwungenen Linien können ablenkend oder verwirrend erscheinen Auf den ersten, aber du wirst an sie gewöhnen, wie die Zeit vergeht Die rote Linie ist einfach der durchschnittliche Preis in den letzten 50 Tagen, während die blaue Linie ist der durchschnittliche Preis in den letzten 100 Tagen. Jetzt, dass Sie verstehen, was ein gleitender Durchschnitt Ist und wie es aussieht, wir stellen eine andere Art von gleitenden Durchschnitt vor und untersuchen, wie es sich von dem oben erwähnten einfachen gleitenden Durchschnitt unterscheidet. Der einfache gleitende Durchschnitt ist bei den Händlern sehr beliebt, aber wie alle technischen Indikatoren hat er seine Kritiker Viele Einzelpersonen argumentieren, dass die Nützlichkeit der SMA begrenzt ist, weil jeder Punkt in der Datenreihe gleich gewichtet wird, unabhängig davon, wo es in der Sequenz auftritt. Kritiker argumentieren, dass die jüngsten Daten signifikanter sind als die älteren Daten und sollte eine größere haben Einfluss auf das Endergebnis Als Reaktion auf diese Kritik begannen die Händler, mehr Gewicht auf die jüngsten Daten zu geben, die seither zur Erfindung der verschiedenen Arten von neuen Mitteln geführt haben, die beliebteste davon ist der exponentielle gleitende Durchschnitt EMA Für die weitere Lesung, Siehe Basics of Weighted Moving Averages und was ist der Unterschied zwischen einem SMA und einem EMA. Exponential Moving Average Der exponentielle gleitende Durchschnitt ist eine Art von gleitenden Durchschnitt, die mehr Gewicht auf die jüngsten Preise in einem Versuch, um es mehr reagiert auf neue Informationen Learning Die etwas komplizierte Gleichung für die Berechnung einer EMA kann für viele Händler unnötig sein, da fast alle Charting-Pakete die Berechnungen für Sie machen. Doch für Sie sind Mathe-Aussenseiter da draußen, hier ist die EMA-Gleichung. Wenn die Formel verwendet, um den ersten Punkt zu berechnen Die EMA, können Sie feststellen, dass es keinen Wert zur Verfügung stellt, um als vorheriges EMA zu verwenden. Dieses kleine Problem kann gelöst werden, indem Sie die Berechnung mit einem einfachen gleitenden Durchschnitt beginnen und mit der obigen Formel von dort fortfahren. Wir haben Ihnen eine Beispielkalkulationstabelle zur Verfügung gestellt Das beinhaltet echte Beispiele, wie man sowohl einen einfachen gleitenden Durchschnitt als auch einen exponentiellen gleitenden Durchschnitt berechnet. Der Unterschied zwischen EMA und SMA Nun, da Sie ein besseres Verständnis dafür haben, wie die SMA und die EMA berechnet werden, lassen Sie sich einen Blick nehmen Wie sich diese Durchschnitte unterscheiden, indem man sich die Berechnung der EMA ansieht, werden Sie feststellen, dass mehr Aufmerksamkeit auf die jüngsten Datenpunkte gelegt wird, so dass es eine Art von gewichtetem Durchschnitt ist. In Abbildung 5 ist die Anzahl der Zeitperioden, die in jedem Durchschnitt verwendet werden, identisch 15, aber die EMA reagiert schneller auf die wechselnden Preise Beachten Sie, wie die EMA einen höheren Wert hat, wenn der Preis steigt und fällt schneller als die SMA, wenn der Preis sinkt. Diese Reaktionsfähigkeit ist der Hauptgrund, warum viele Händler es vorziehen, EMA über die SMA. Was sind die verschiedenen Tage Mean Moving Mittelwerte sind ein völlig anpassbarer Indikator, was bedeutet, dass der Benutzer frei wählen können, was Zeitrahmen sie wollen, wenn die Erstellung der Durchschnitt Die häufigsten Zeiträume in gleitenden Durchschnitten verwendet werden, sind 15, 20, 30, 50, 100 und 200 Tage Je kürzer die Zeitspanne, die verwendet wird, um den Durchschnitt zu schaffen, desto empfindlicher wird es Preisänderungen sein. Je länger die Zeitspanne, desto weniger empfindlich oder mehr geglättet wird, wird der Durchschnitt sein. Es gibt keine Richtigen Zeitrahmen, um bei der Einrichtung Ihrer bewegenden Mittelwerte zu verwenden Der beste Weg, um herauszufinden, welche am besten für Sie ist es, mit einer Reihe von verschiedenen Zeiträumen zu experimentieren, bis Sie eine finden, die Ihre Strategie passt. Ich weiß, das ist eine alte Frage, Aber hier ist eine Lösung, die keine zusätzlichen Datenstrukturen oder Bibliotheken verwendet. Es ist linear in der Anzahl der Elemente der Eingabeliste und ich kann nicht anders denken, um es effizienter zu machen, wenn jemand von einem besseren Weg zuzuteilen weiß Das Ergebnis, lass es mich bitte wissen. HINWEIS Dies wäre viel schneller mit einem numpy Array statt einer Liste, aber ich wollte alle Abhängigkeiten zu beseitigen Es wäre auch möglich, Leistung durch Multi-Threaded Ausführung zu verbessern. Die Funktion geht davon aus, dass die Eingabe Liste ist eindimensional, also seien Sie vorsichtig. Sie können ein laufendes Mittel mit berechnen. Zufällig, numpy schließt eine Faltenfunktion ein, die wir verwenden können, um die Dinge zu beschleunigen Das laufende Mittel ist gleichbedeutend mit dem Falten von x mit einem Vektor, der N lang ist, mit allen Mitglieder gleich 1 N Die numpy Implementierung von convolve beinhaltet die Start-Transient, also musst du die ersten N-1 Punkte entfernen. Auf meiner Maschine ist die schnelle Version 20-30 mal schneller, je nach Länge des Eingangsvektors und Größe des Mittelungsfensters. Hinweis, dass convolve enthält einen gleichen Modus, der scheint, wie es sollte die Start-Transient Problem Adresse, aber es teilt es zwischen dem Anfang und Ende. Es entfernt die Transient von Ende, und der Anfang doesn t haben eine Nun, ich denke, es ist eine Frage der Prioritäten, ich brauche nicht die gleiche Anzahl von Ergebnissen auf Kosten des Erhaltens eines Hanges in Richtung Null, dass es nicht in den Daten BTW ist, hier ist ein Befehl, um den Unterschied zwischen den Modi Modi voll zu zeigen , Gleiches, gültiges Plot, das 200,, 50, 50, Modus m für m in den Modi-Achsen -10, 251, - 1, 1 1 Legenden-Modi, loc-unteres Zentrum mit pyplot und numpy importierten Lapis Mar 24 14 bei 13 56.pandas ist besser geeignet für diese als NumPy oder SciPy Seine Funktion Rollingmean macht den Job bequem Es gibt auch ein NumPy-Array, wenn die Eingabe ein Array ist. Es ist schwer zu Rollingmean in Leistung mit jeder benutzerdefinierten reinen Python-Implementierung zu schlagen Hier ist eine Beispiel-Performance Gegen zwei der vorgeschlagenen lösungen. Es gibt auch schöne Optionen, wie man mit den Kantenwerten umgehen kann. Ich bin immer durch Signalverarbeitungsfunktion verärgert, die Ausgangssignale unterschiedlicher Form als die Eingangssignale zurückgibt, wenn beide Ein - und Ausgänge gleich sind Natur zB beides zeitliche Signale Es bricht die Korrespondenz mit verwandter unabhängiger Variable zB Zeit, Häufigkeit, die Plotten oder Vergleich nicht eine direkte Sache sowieso, wenn Sie das Gefühl teilen, möchten Sie vielleicht die letzten Zeilen der vorgeschlagenen Funktion als gleiche Rückkehr y windowlen ändern -1 - windowlen-1 Christian O Reilly Aug 25 15 bei 19 56. Ein bisschen spät zur Party, aber ich habe meine eigene kleine Funktion gemacht, die sich nicht um die Enden oder Pads mit Nullen wickelt, die dann verwendet werden, um den Durchschnitt zu finden Als auch eine weitere behandeln ist, dass es auch das Signal an linear beabstandeten Punkten neu anpasst. Passen Sie den Code nach Belieben an, um andere Features zu erhalten. Die Methode ist eine einfache Matrixmultiplikation mit einem normalisierten Gaußschen Kernel. Eine einfache Verwendung auf einem sinusförmigen Signal Mit zusätzlichen normal verteilten Lärm. Diese Frage ist jetzt noch älter als wenn NeXuS schrieb darüber im letzten Monat, aber ich mag, wie seine Code befasst sich mit Rand Fällen Allerdings, weil es ein einfacher gleitender Durchschnitt ist, liegt es hinter den Daten, die sie anwenden Zu dachte ich, dass der Umgang mit Randfällen in einer befriedigenderen Weise als NumPy s Modi gültig gleich und voll könnte durch die Anwendung eines ähnlichen Ansatzes zu einer Faltung basierte Methode erreicht werden. Mein Beitrag verwendet einen zentralen Lauf Durchschnitt, um seine Ergebnisse mit ihren Daten auszurufen Wann Es gibt zwei wenige Punkte für das vollformatige Fenster, das verwendet werden soll, laufende Mittelwerte werden aus sukzessiv kleineren Fenstern an den Kanten des Arrays berechnet. Eigentlich von sukzessiv größeren Fenstern, aber das ist ein Implementierungsdetail. Es ist relativ langsam, weil es Nutzt gefallten und könnte wahrscheinlich ziemlich viel durch eine echte Pythonista aufgeholt werden, aber ich glaube, dass die Idee stands. answered Jan 2 bei 0 28. ist schön, aber langsam, wenn die Fensterbreite wächst groß Einige Antworten bieten mehr effecient Algorithmen mit aber Scheinen nicht in der Lage, Kantenwerte zu behandeln Ich selbst habe einen Algorithmus implementiert, der dieses Problem gut behandeln kann, wenn dieses Problem als Input-Parameter deklariert wird. Mergenum kann als 2 windowwidth gedacht werden 1.Ich kenne diesen Code ist ein wenig unleserlich, wenn du es findest Nützlich und will einige Ausbreitungen, lass es mich wissen und ich werde diese Antwort aktualisieren Da das Schreiben einer Erklärung mir viel Zeit kosten kann, hoffe ich, dass ich es nur tue, wenn jemand es braucht. Bitte vergib mir für meine Faulheit. Wenn du nur interessiert bist Seine ursprüngliche version. It s noch mehr unleserlich die erste Lösung befreit von Rand Problem durch padding Nullen um das Array, aber die zweite Lösung hier gehandhabt es in einer harten und direkten Weise. In meinem letzten Satz Ich versuchte zu zeigen, warum es Hilft bei der Fließpunktfehler Wenn zwei Werte etwa die gleiche Größenordnung haben, dann verliert man ihnen weniger Präzision, als wenn man eine sehr große Zahl zu einem sehr kleinen addiert. Der Code verbindet benachbarte Werte in einer Weise, dass auch Zwischensummen immer vernünftig sein sollten In der Größenordnung, um den Gleitkomma-Fehler zu minimieren Nichts ist Narr-Beweis, aber diese Methode hat ein paar sehr schlecht umgesetzte Projekte in der Produktion gespeichert Mayur Patel 15.12. Um 17 22. Alleo Anstatt einen Zusatz pro Wert zu machen, wirst du zwei machen Der Beweis ist der gleiche wie das Bit-Flipping-Problem Allerdings ist der Punkt dieser Antwort nicht unbedingt Leistung, aber Präzision Memory-Nutzung für die Mittelung 64-Bit-Werte würde nicht mehr als 64 Elemente im Cache, so ist es freundlich in Speicher Nutzung als Brunnen Mayur Patel 29. Dezember 14 um 17 04.
No comments:
Post a Comment