Java Exponentiell Gleitender Durchschnitt Algorithmus

Ich habe im Wesentlichen ein Array von Werten wie folgt. Das oben genannte Array ist vereinfacht, ich sammle 1 Wert pro Millisekunde in meinem realen Code und ich muss die Ausgabe auf einem Algorithmus verarbeiten, den ich schrieb, um den nächstgelegenen Peak vor einem Zeitpunkt zu finden Logik scheitert, weil in meinem Beispiel oben, 0 36 ist die reale Spitze, aber mein Algorithmus würde nach hinten schauen und sehen die letzte Zahl 0 25 als die Spitze, da es eine Abnahme auf 0 24 vor it. The Ziel ist, diese Werte zu nehmen Und wendet einen Algorithmus an sie an, die sie ein bisschen glätten wird, damit ich mehr lineare Werte habe, dh ich mag meine Resultate, um curvy zu sein, nicht jaggedy. Ich wurde gesagt, um einen exponentiellen gleitenden durchschnittlichen Filter auf meine Werte anzuwenden Wie kann ich Tu es das ist es wirklich schwer für mich, mathematische Gleichungen zu lesen, ich befasse mich viel besser mit Code. Wie verarbeite ich Werte in meinem Array und wende eine exponentielle gleitende durchschnittliche Berechnung an, um sie auch auszumachen. 8. Februar um 20 27.Zur berechnen Ein exponentieller gleitender Durchschnitt muss man einen Zustand um und halten Sie benötigen einen Tuning-Parameter Dies erfordert eine kleine Klasse, die davon ausgeht, dass Sie Java 5 oder höher verwenden. Mit dem Zerfallsparameter, den Sie tun möchten, sollte das Tuning zwischen 0 und 1 liegen und dann den Durchschnitt verwenden, um zu filtern. Wenn Sie eine Seite auf etwas mathematisch lesen Rezidiv, alles, was du wirklich wissen musst, wenn du es in Code umwandst, ist, dass Mathematiker gerne Indizes in Arrays und Sequenzen mit Indizes schreiben. Sie haben auch ein paar andere Notationen, die nicht helfen Aber die EMA ist ziemlich einfach, wie du nur brauchst An einen alten Wert zu erinnern, keine komplizierten Zustand Arrays erforderlich. answered Feb 8 12 bei 20 42. TKKocheran Ziemlich viel Isn t it nice, wenn die Dinge einfach sein können Wenn Sie mit einer neuen Sequenz beginnen, erhalten Sie einen neuen Mittelwert. Beachten Sie, dass die ersten paar Begriffe in der Gemittelte Sequenz springt um ein bisschen wegen der Brenneffekte, aber man bekommt die mit anderen gleitenden Durchschnitten auch Allerdings ist ein guter Vorteil, dass man die gleitende durchschnittliche Logik in den Mittelalter einpacken kann und ohne zu stören t Er Rest deines Programms zu viel Donal Fellows Feb 9 12 bei 0 06.Ich habe eine harte Zeit, deine Fragen zu verstehen, aber ich werde versuchen, irgendwie zu antworten.1 Wenn dein Algorithmus 0 25 statt 0 36 gefunden hat, dann ist es falsch Es ist falsch, weil es eine monotone Zunahme oder Abnahme annimmt, die immer aufwärts geht oder immer hinuntergeht, es sei denn, du durchschnittlich alle deine Daten, deine Datenpunkte - wie du sie vorstellst --- sind nichtlinear Wenn du wirklich das Maximum finden willst Wert zwischen zwei Punkten in der Zeit, dann schneiden Sie Ihr Array von tmin zu tmax und finden Sie die max von diesem subarray.2 Nun ist das Konzept der gleitenden Durchschnitte sehr einfach vorstellen, dass ich die folgende Liste 1 4, 1 5, 1 4, 1 5, 1 5 Ich kann es glätten, indem ich den Durchschnitt von zwei Zahlen 1 45, 1 45, 1 45, 1 5 Beachten Sie, dass die erste Zahl der Durchschnitt von 1 5 und 1 4 Sekunden und erste Zahlen die zweite neue Liste ist Ist der Durchschnitt von 1 4 und 1 5 Drittel und zweite alte Liste die dritte neue Liste der Durchschnitt von 1 5 und 1 4 vierte und dritte, und so weiter könnte ich Haben es Zeitraum drei oder vier, oder n Hinweis, wie die Daten ist viel glatter Ein guter Weg, um gleitende Durchschnitte bei der Arbeit zu sehen ist, um zu gehen, um Google Finance, wählen Sie eine Aktie Tesla Motors ziemlich volatile TSLA und klicken Sie auf technische an der Unterseite von Das Diagramm Wählen Sie Moving Average mit einer vorgegebenen Periode und Exponential gleitenden Durchschnitt, um ihre Unterschiede zu vergleichen. Exponential gleitenden Durchschnitt ist nur eine weitere Ausarbeitung dieser, aber gewichtet die älteren Daten weniger als die neuen Daten ist dies ein Weg, um die Glättung nach hinten voranzutreiben Bitte lesen Sie die Wikipedia-Eintrag. So, das ist mehr ein Kommentar als eine Antwort, aber die kleine Kommentar-Box war nur zu winzigen Viel Glück. Wenn Sie Probleme mit der Mathematik haben, könnten Sie mit einem einfachen gleitenden Durchschnitt statt exponentiell So gehen Die Ausgabe, die du bekommst, wäre die letzten x Begriffe, die durch x Ungetestetes Pseudocode geteilt werden. Hinweis, dass du die Anfangs - und Endteile der Daten behandeln musst, da du die letzten 5 Begriffe, wenn du auf deinem zweiten Datenpunkt bist, , das Re sind effizientere Wege zur Berechnung dieser gleitenden durchschnittlichen Summe Summe - älteste neueste, aber dies ist, um das Konzept, was s passiert über. Erweiterte Feb 8 12 bei 20 41.Exponential Moving Average - EMA. BREAKING DOWN Exponential Moving Average - EMA. Die 12- und 26-Tage-EMAs sind die beliebtesten Kurzzeitdurchschnitte, und sie werden verwendet, um Indikatoren wie die gleitende durchschnittliche Konvergenz Divergenz MACD und der prozentuale Preis Oszillator PPO Im Allgemeinen sind die 50-und 200-Tage-EMAs zu schaffen Verwendet als Signale von langfristigen Trends. Trader, die technische Analyse verwenden, finden sich im Durchschnitt sehr nützlich und aufschlussreich, wenn sie richtig angewendet werden, aber schaffen Verwüstung, wenn sie unsachgemäß verwendet oder falsch interpretiert werden Alle gleitenden Mittelwerte, die üblicherweise in der technischen Analyse verwendet werden, sind ihrer Natur nach rückläufig Indikatoren Folglich sollten die Schlussfolgerungen, die aus der Anwendung eines gleitenden Durchschnitts auf eine bestimmte Marktdiagramm gezogen werden, darin bestehen, eine Marktbewegung zu bestätigen oder ihre Stärke anzugeben. Sehr oft, wenn es sich um einen bewegten Durchschnitt handelt E Indikatorlinie hat sich geändert, um einen bedeutenden Marktzugang zu reflektieren, der optimale Punkt des Markteintritts ist bereits bestanden Ein EMA dient dazu, dieses Dilemma zu einem gewissen Grad zu lindern Da die EMA-Berechnung mehr Gewicht auf die neuesten Daten setzt, umarmt es Die Preis-Aktion ein bisschen fester und reagiert daher schneller Dies ist wünschenswert, wenn eine EMA verwendet wird, um ein Handels-Eingangssignal ableiten. Die Auslegung der EMA. Like alle gleitenden durchschnittlichen Indikatoren sind sie viel besser geeignet für Trending-Märkte Wenn der Markt ist in einem starken Und anhaltender Aufwärtstrend wird die EMA-Indikatorlinie auch einen Aufwärtstrend und umgekehrt für einen Down-Trend zeigen. Ein wachsamer Trader wird nicht nur auf die Richtung der EMA-Linie achten, sondern auch auf das Verhältnis der Änderungsrate von einer Bar zur nächsten Zum Beispiel, da die Preiswirkung eines starken Aufwärtstrends beginnt zu glätten und umzukehren, beginnt die EMA-Änderungsrate von einem Stab zum nächsten zu vermindern, bis zu dem Zeitpunkt, dass die Indikatorlinie flach und die Die Änderungsrate ist Null. Wegen des nacheilenden Effektes, bis zu diesem Punkt oder sogar ein paar Takte vorher, sollte sich die Preisaktion bereits umkehren. Daraus folgt, dass die Einhaltung einer konsequenten Abnahme der Änderungsrate der EMA selbst genutzt werden könnte Als Indikator, der dem Dilemma entgegenwirken könnte, das durch die nacheilende Wirkung des bewegten Durchschnitts verursacht wird. Die Verwendung der EMA. EMAs wird häufig in Verbindung mit anderen Indikatoren verwendet, um signifikante Marktbewegungen zu bestätigen und ihre Gültigkeit zu beurteilen. Für Händler, die intraday und schnell bewegten Märkte, die EMA ist mehr anwendbar Sehr häufig Händler verwenden EMAs, um eine Handels-Bias zu bestimmen Wenn zum Beispiel eine EMA auf einer Tages-Chart einen starken Aufwärtstrend zeigt, kann eine Intraday-Trader-Strategie nur von der langen Seite an einem Intraday handeln Chart. Ich muss die letzten 7 Tage Arbeitsstunden in einer flachen Datei Leseschleife zu behalten Es wird verwendet, um die Ermüdbarkeit der Arbeit Rosters zu messen. Right jetzt habe ich etwas, das funktioniert, aber es scheint eher v Erbose und ich bin mir nicht sicher, ob es ein Muster gibt, das süßer ist. Zur Zeit habe ich eine Java-Klasse mit einem statischen Array, um die letzten x Tage Daten zu halten, dann, wie ich durch die Datei lese, schneide ich das erste Element und verschiebe Die anderen 6 für eine Woche rollen insgesamt zurück um eins Die Verarbeitung dieses statischen Arrays erfolgt in seiner eigenen Methode ie. My Frage ist dies ein vernünftiger Design-Ansatz, oder gibt es etwas blendend offensichtlich und einfach, diese Aufgabe zu tun Danke guys. asked Aug 30 11 at 14 33. Danke viel Jungs habe ich die Nachricht benutzt ein übergeordnetes Objekt und nutze die relevanten Methoden oder einen kreisförmigen Puffer Große Antworten, alle von ihnen Wenn du darüber nachdenkst, brauchst du immer Zugriff auf das gesamte Array So können Sie diesen ersten Eintrag loswerden - was ich mir nicht ganz sicher war, ich habe mich entschlossen, dass ich einen 1 Liner nicht verpasst habe und war grundsätzlich auf eine vernünftige, wenn nicht effiziente und knappe Spur. Das ist es, was ich liebe Diese Website qualitativ hochwertige, relevante Antworten von Leuten, die ihr Tier kennen E855217 Aug 30 11 at 15 05.Warum initialisst du runTotal zu null Was ist sein Typ Wo es deklariert ist Es würde gut tun, wenn du irgendwelche Code-Samples passt, die dem tatsächlichen Java-Code ähneln. Moving on, wäre meine Kritik die folgende Ihre Funktion Ist zu viel Eine Funktion oder Methode, sollte zusammenhängend sein, passend, sollten sie eine Sache und eine Sache nur tun. Worse noch, was passiert in deiner for-Schleife, wenn x 5 Sie kopieren runningTotal 6 in runTotal 5 aber dann haben Sie zwei Kopien Von dem gleichen Wert an Position 5 und 6.In Ihrem Entwurf, Ihre function. moves shuffles die Einzelteile in Ihrem array. calculates das total. prints Zeug zum Standardfehler. returns das total. It tut zu viel. Mein erster Vorschlag ist nicht zu Verschieben Sie Sachen herum in das Array Stattdessen implementieren Sie einen kreisförmigen Puffer und verwenden Sie es statt des Arrays Es wird Ihr Design vereinfachen Mein zweiter Vorschlag ist es, Dinge in Funktionen, die zusammenhängen zu brechen. Haben Sie eine Datenstruktur ein kreisförmiger Puffer, der Ihnen erlaubt, hinzuzufügen Dazu und d Leitet den ältesten Eintrag, wann immer es seine Kapazität erreicht. Haben die Datenstruktur implementieren einen Interator. have eine Funktion, die die Summe auf dem Iterator berechnet, die Sie nicht interessieren, wenn Sie die Summe aus einem Array, Liste oder kreisförmigen bufer. don t berechnen Nennen Sie es total Rufen Sie es Summe, was ist das, was Sie computing. That s was ich d do. That s große info luis, aber denken Sie daran, diese Funktion ist ein kleiner Teil der Funktionalität der Klasse, und es wäre Overkill zu hinzufügen Viel Code, um es perfekt zu machen Sie sind technisch korrekt, und ich verstehe meinen Code zu viel, aber zur gleichen Zeit manchmal ist es besser, auf der Seite des kleineren, klareren Codes zu irren, als für Perfektion zu gehen. Angesichts meiner Java-Fähigkeiten, sogar das machen Pseudocode Sie beschreiben Kompilieren würde mich blasen mein Budget auf diesem, aber danke für die klare Beschreibung Pete855217 Aug 31 11 at 2 23.Hmmm, es geht nicht um Perfektion, sondern um etablierte industrielle Praktiken, die wir für die letzten 3 Jahrzehnte kennen Sauber Code ist immer ein th At ist partitioniert Wir haben jahrzehntelange Beweise, die darauf hindeuten, dass dies der Weg ist, um im allgemeinen Fall in Bezug auf Kosteneffizienz, Defektreduktion, Verständnis, etc. zu gehen, es sei denn, es ist wegwerfen Code für eine einmalige Art von Ding Es ist Niemals kostspielig, dies zu tun, wenn man irgendeine Problemanalyse auf diese Weise startet Codierung 101, brechen das Problem und der Code folgt, weder Overkill noch schwierig 31. August 11 um 15 55. Ihre Aufgabe ist zu einfach und die Vorwürfe, die Sie angenommen haben, ist sicherlich Gut für den Job Allerdings, wenn Sie ein besseres Design verwenden möchten, müssen Sie loszuwerden, alle diese Nummer Bewegung Sie besser verwenden eine FIFO-Warteschlange und machen gute Nutzung von Push-und Pop-Methoden, die Art und Weise der Code nicht reflektieren jede Datenbewegung, nur Die beiden logischen Aktionen von neuen Daten und entfernen Sie Daten älter als 7 Tage. Erweiterte Aug 30 11 bei 14 49.


Comments