Exponentiell Gleitender Durchschnitt Algorithmus


Ich muss die letzten 7 Tage Arbeitsstunden in einer flachen Datei Leseschleife zu verfolgen Es wird verwendet, um die Ermüdbarkeit der Arbeit Rosters zu messen. Right jetzt habe ich etwas, das funktioniert, aber es scheint ziemlich ausführlich und ich bin mir nicht sicher, ob es sa Muster, das s succinct. Currently, ich habe 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 By one Die Verarbeitung dieses statischen Arrays erfolgt in seiner eigenen Methode ie. My Frage ist dies eine vernünftige 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 Ich habe die Nachricht verwenden ein übergeordnetes Objekt und nutzen die relevanten Methoden oder einen kreisförmigen Puffer Große Antworten, alle von ihnen Wenn Sie darüber nachdenken, benötigen Sie immer Zugriff auf das gesamte Array, so dass Sie diesen ersten Eintrag loswerden können - was ich mir nicht sicher war, ich habe mich erleichtert Hadn t verpasste einige 1 Liner und war im Grunde auf eine vernünftige, wenn nicht effiziente und knappe Spur Dies ist, was ich liebe über diese Website qualitativ hochwertige, relevante Antworten von Menschen, die wissen, ihre sh t Pete855217 Aug 30 11 um 15 05.Warum tun Sie initialisieren runningTotal zu null Was ist sein Typ Wo es deklariert ist Es würde gut tun, wenn Sie einige Code-Samples, die tatsächlichen Java-Code ähneln, setzen. Moving on, meine Kritik wäre die folgende Ihre Funktion ist zu viel Eine Funktion oder Methode, sollte Sei zusammenhängend, sollten sie eine Sache und nur eine Sache machen. Worse noch, was passiert in deiner for-Schleife, wenn x 5 Du klickst runTotal 6 in runningTotal 5 aber dann hast du zwei Kopien des gleichen Wertes an Position 5 und 6. In deinem Design, deine Funktion. moves mischt die Elemente in deinem Array. calculates die total. prints Zeug auf Standardfehler. returns die total. It tut zu viel. Mein erster Vorschlag ist nicht, Sachen herum in das Array zu bewegen Stattdessen implementiere ein Kreisförmigen Puffer und verwenden Sie es statt Das Array Es wird Ihr Design zu vereinfachen Mein zweiter Vorschlag ist es, Dinge in Funktionen, die zusammenhängen sind zu brechen. Haben Sie eine Datenstruktur ein kreisförmiger Puffer, der Ihnen erlaubt, es hinzuzufügen, und das fällt den ältesten Eintrag, wenn es seine Kapazität erreicht. have die Daten Struktur implementieren einen Interator. have eine Funktion, die die Summe auf dem Iterator berechnet, die Sie nicht interessieren, wenn Sie die Summe aus einem Array, einer Liste oder einer kreisförmigen Bufer. don t anrufen, rufen Sie es an Summen Sie es Summe, was ist das, was Sie rechnen. Das ist das, was ich tue. Das ist eine tolle Info Luis, aber denken Sie daran, diese Funktion ist ein kleiner Teil der Funktionalität der Klasse, und es wäre übertrieben, zu viel Code hinzuzufügen, um es perfekt zu machen Sie sind technisch korrekt und ich Verstehe meinen Code ist 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 die Pseudocode Sie beschreiben Kompilieren würde ich blasen mein Budget auf diesem, Aber danke für 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. Sauberer Code ist immer einer, der partitioniert ist Wir haben jahrzehntelange Beweise, die dies angeben Ist der Weg, um in den allgemeinen Fall in Bezug auf Kosten-Effizienz, Defekt Verringerung, Verständnis, etc., es sei denn, es ist wegwerfen Code für eine einmalige Art von Ding Es ist niemals kostspielig, dies zu tun, wenn man eine Problemanalyse beginnt Auf diese Weise 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 Aber wenn Sie wollen, zu verwenden Ein besseres Design, 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 der neuen Daten und entfernen Sie Daten älter Als 7 days. answered Aug 30 1 1 bei 14 49. Ich habe im Wesentlichen ein Array von Werten wie diese. Das obige Array ist vereinfacht, ich s sammle 1 Wert pro Millisekunde in meinem realen Code und ich muss die Ausgabe auf einem Algorithmus verarbeiten, den ich geschrieben habe, um den nächstgelegenen Peak vorher zu finden Ein Punkt in der Zeit Meine Logik scheitert, weil in meinem Beispiel oben, 0 36 ist die echte Spitze, aber mein Algorithmus würde rückwärts schauen und sehen die letzte Zahl 0 25 als die Spitze, da es eine Abnahme auf 0 24 vor ihm. Das Ziel Ist es, diese Werte zu nehmen und einen Algorithmus an sie anzupassen, der sie ein bisschen glätten wird, so dass ich mehr lineare Werte habe, dh ich möchte meine Ergebnisse als kurvenreich, nicht jaggedy. Ich wurde gesagt, um einen exponentiellen gleitenden durchschnittlichen Filter anzuwenden Meine Werte Wie kann ich das machen Es ist wirklich schwer für mich, mathematische Gleichungen zu lesen, ich mache viel besser mit Code. Wie verarbeite ich Werte in meinem Array, mit einer exponentiellen gleitenden durchschnittlichen Berechnung, um sie auch out. asked Feb 8 12 at 20 27. Um einen exponentiellen gleitenden Durchschnitt zu berechnen, musst du einen Zustand behalten Um und du brauchst einen Tuning-Parameter Dies erfordert eine kleine Klasse vorausgesetzt, Sie re verwenden Java 5 oder später. Instantiate mit dem Zerfall Parameter, den Sie tun möchten, sollte die Abstimmung zwischen 0 und 1 und dann verwenden Sie durchschnittlich zu filtern. Wenn das Lesen einer Seite auf Etwas mathematisches 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, was nicht hilft. Doch die EMA ist ziemlich einfach wie du Muss nur an einen alten Wert erinnern keine komplizierten Zustand Arrays required. 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 Hinweis, dass die ersten paar Begriffe In der gemittelten Sequenz wird um ein bisschen wegen Brenneffekte springen, aber man bekommt die mit anderen gleitenden Durchschnitten auch Allerdings ist ein guter Vorteil, dass man die gleitende durchschnittliche Logik in den Mittelwert und das Experiment ohne d einpacken kann Ich mache eine harte Zeit, deine Fragen zu verstehen, aber ich werde versuchen, irgendwie zu antworten.1 Wenn dein Algorithmus 0 25 anstelle von 0 36 gefunden hat, dann ist es doch. Deutsch: www. db-artmag. de//03/d/magazin. php Falsch Es ist falsch, weil es eine monotone Zunahme oder Abnahme annimmt, die immer nach oben geht oder immer hinuntergeht, es sei denn, du durchschnittst alle deine Daten, deine Datenpunkte - wie du sie präsentierst --- sind nichtlinear Wenn du das wirklich finden möchtest Maximalwert zwischen zwei Punkten in der Zeit, dann schneide dein Array von tmin zu tmax und finde das Maximum dieses Subarray.2 Jetzt ist das Konzept der gleitenden Durchschnitte sehr einfach vorstellen, dass ich die folgende Liste 1 4, 1 5, 1 4 habe , 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 ist der Durchschnitt von 1 5 und 1 4 Sekunden und erste Zahlen die zweite neue Liste ist der Durchschnitt von 1 4 und 1 5 dritte und zweite alte Liste die dritte neue Liste der Durchschnitt von 1 5 und 1 4 vierte und dritte, und so Auf Ich hätte 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 Google Finance zu gehen, wählen Sie eine Aktie Tesla Motors ziemlich volatile TSLA und klicken Sie auf technische an Die Unterseite des Diagramms 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 von diesem, aber gewichtet die älteren Daten weniger als die neuen Daten ist dies ein Weg, um die Glättung voranzutreiben In Richtung der Rückseite 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 Von exponentiell Also die Ausgabe, die du bekommst, wäre die letzten x Begriffe, die durch x Ungetestetes Pseudocode geteilt werden. Hinweis, dass du die Start - und Endteile der Daten behandeln musst, da du die letzten 5 Begriffe, wenn du auf deinem 2. bist, Daten poin T Auch gibt es effizientere Möglichkeiten zur Berechnung dieser gleitenden durchschnittlichen Summe Summe - älteste neueste, aber dies ist, um das Konzept, was s passiert über. Erwerben Feb 8 12 bei 20 41.I m in den Prozess der Schaffung eines Forex Trading Algorithmus und wollte meinen Schuss bei der Berechnung von EMA Exponential Moving Averages ausprobieren Meine Ergebnisse scheinen korrekt zu sein im Vergleich zu den Berechnungen, die ich von Hand gemacht habe, so glaube ich die folgende Methode funktioniert, aber wollte nur einen zusätzlichen Satz von Augen, um sicherzustellen, dass im nicht Fehlt nichts. Hinweis, dass dies nur die EMA für den letzten Preis zurückgibt, es doesn t wieder ein Array von EMAs wie das isn t was ich für meine Anwendung. Recursion ist ein gutes Werkzeug für den richtigen Job, aber hier ist es verwendet Um einfaches Looping zu erreichen Als solches ist der Code. is schwieriger zu lesen und zu begründen. So langsamer, weil viel von dem Code in ema muss nur einmal laufen. Wird mit groß genug Wert des Fensters wegen überlaufenden Python s call stack. Please Dokumentieren mindestens die Parameter von jedem Funktion, zB das 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 ein normaler Vorwärtsindex in data. Raise eine Ausnahme, wenn Sie einen Parameter einen ungültigen Wert finden Die Rückkehr Keine stattdessen wird nur eine verwirrende Ausnahme später verursachen In der Tat, wenn ich versuche 600 Ich bekomme unendliche Rekursion, weil sma zurückgibt Keine, was macht ema rufen sma immer und immer wieder. Der vorherige Punkt zeigt auch, dass, wenn len Datenfenster 2 nicht ist Richtige Gültigkeitsprüfung Die 1 in Daten-Fenster 2 1-Fenster 1 don t scheinen mir korrekt zu sein Ich nehme an, du wünschst Daten-Fenster 2-Window. Die Aussage Rückmeldung ist in einem seltsamen Ort, weil an diesem Punkt haben Sie eine neue berechnet Currentema Dies ist der Grundfall der Rekursion, und es ist üblich, die Basis Fall zuerst behandeln. Mein Vorschlag für ema. answered Nov 26 14 bei 18 56.Pretty shallow review. You don t müssen eine Klasse für das, was Sie sind schreiben Und ich schlage vor, dass du einen Blick hast Dieses Video Ihre Klasse nicht verkapseln alle Daten und Sie nur verwenden, um Ihre Funktionen in einer gleichen Entität Ich denke, die Dinge wäre einfacher zu verstehen, wenn Sie zu definieren würde classmethod, um es offensichtlich, dass Sie gewonnen haben wirklich wirklich auf irgendeine Instanz zu verlassen Allerdings wäre eine noch bessere Option, um nur Funktionen in einem Indikator-Modul definieren. answered 24. November 14 um 18 04. Danke für die Vorschläge, die ich tatsächlich haben sie als Klassenzahlen und diskutiert hin und her zwischen sogar mit einer Klasse oder einfach nur definieren Funktionen in einem Indikator-Modul, die ich jetzt tun werde ChrisC Nov 25 14 bei 19 12.Just beobachtete das Video zu, tolles Zeug ChrisC Nov 25 14 bei 19 43.Ihr Antwort.2017 Stack Exchange, Inc.

Comments