Ist es möglich, einen gleitenden Durchschnitt in C ohne die Notwendigkeit für ein Fenster von Proben Ive gefunden, dass ich ein bisschen optimieren kann, indem Sie eine Fenstergröße, die eine Macht von zwei, um Bit-Verschiebung statt zu teilen, aber nicht brauchen Ein Puffer wäre schön. Gibt es eine Möglichkeit, ein neues gleitendes durchschnittliches Ergebnis nur als eine Funktion des alten Ergebnisses auszudrücken und das neue Sample Definieren Sie ein Beispiel gleitender Durchschnitt, über ein Fenster von 4 Samples: Add new sample e: Ein gleitender Durchschnitt kann rekursiv implementiert werden , Aber für eine genaue Berechnung des gleitenden Durchschnitts müssen Sie sich an die älteste Eingabe Probe in der Summe (dh die a in Ihrem Beispiel) erinnern. Für eine Länge N gleitenden Durchschnitt berechnen Sie: wobei yn das Ausgangssignal ist und xn das Eingangssignal ist. Gl. (1) kann rekursiv geschrieben werden, also musst du dich immer an die Probe xn-N erinnern, um zu berechnen (2). Wie von Conrad Turner hervorgehoben, können Sie stattdessen ein (unendlich langes) exponentielles Fenster verwenden, mit dem Sie die Ausgabe nur aus der Vergangenheit und dem aktuellen Eingang berechnen können. Dies ist jedoch kein Standard (ungewichtet) gleitender Durchschnitt, sondern exponentiell Gewichteter gleitender Durchschnitt, wo Proben in der Vergangenheit ein kleineres Gewicht bekommen, aber (zumindest in der Theorie) vergisst du niemals etwas (die Gewichte werden in der Vergangenheit immer kleiner und kleiner). Ich habe einen gleitenden Durchschnitt ohne Einzelposten-Speicher für ein GPS-Tracking-Programm, das ich geschrieben habe. Ich fange mit 1 Probe an und teile mit 1, um die aktuelle avg zu bekommen. Ich füge dann eine Probe hinzu und teile mit 2 auf die aktuelle avg. Das geht weiter, bis ich die Länge des Durchschnitts erreicht habe. Jedes Mal danach füge ich die neue Probe hinzu, bekomme den Durchschnitt und beseitige diesen Durchschnitt von der Summe. Ich bin kein Mathematiker, aber das schien ein guter Weg, es zu tun. Ich dachte, es würde den Magen eines echten Mathe-Kerls drehen, aber es stellt sich heraus, dass es eine der akzeptierten Möglichkeiten ist, es zu tun. Und es geht gut Denken Sie daran, dass je höher Ihre Länge desto langsamer ist es, was Sie folgen wollen. Das mag die meiste Zeit nicht ausmachen, aber wenn man den Satelliten folgt, wenn man langsam ist, könnte der Weg weit von der aktuellen Position entfernt sein und es wird schlecht aussehen. Du hättest eine Lücke zwischen dem Sat und den hinteren Punkten. Ich wählte eine Länge von 15 aktualisiert 6 mal pro Minute, um ausreichende Glättung zu bekommen und nicht zu weit von der tatsächlichen Sat-Position mit den geglätteten Pfad-Punkten zu bekommen. Antwortete 16. November 16 um 23:03 initialize total 0, count0 (jedes Mal, wenn du einen neuen Wert sehe, dann eine Eingabe (scanf), man add totalnewValue, ein Inkrement (count), ein divide average (totalcount) Dies wäre ein gleitender Durchschnitt über Alle Eingänge Um den Durchschnitt über nur die letzten 4 Eingänge zu berechnen, würde es 4 Eingangsvariablen erfordern, vielleicht jede Eingabe in einen älteren Eingabevariablen kopieren und dann den neuen gleitenden Durchschnitt berechnen, als Summe der 4 Eingangsvariablen, geteilt durch 4 (rechte Verschiebung 2 wäre Gut, wenn alle Eingänge waren positiv, um die durchschnittliche Berechnung beantwortet Feb 3 15 um 4:06 Das wird tatsächlich berechnen den Gesamtdurchschnitt und NICHT der gleitende Durchschnitt. Wie Zähler wird größer die Auswirkungen einer neuen Eingabe Probe wird verschwindend klein ndash Hilmar Feb 3 15 um 13:53 Ihre Antwort 2017 Stack Exchange, IncI wissen, dass dies mit Boost wie folgt erreichbar ist: Aber ich möchte wirklich vermeiden, Boost zu machen. Ich habe gegoogelt und keine passenden oder lesbaren Beispiele gefunden. Grundsätzlich möchte ich die Gleitender Durchschnitt eines laufenden Stroms eines Stroms von Gleitkommazahlen unter Verwendung der letzten 1000 Zahlen als Datenprobe Was ist der einfachste Weg, um dies zu erreichen, experimentierte ich mit einem kreisförmigen Array, einem exponentiellen gleitenden Durchschnitt und einem einfacheren gleitenden Durchschnitt und fand, dass die Ergebnisse aus dem kreisförmigen Array meinen Bedürfnissen am besten entsprechen. Gefragt am 12. Juni 12 um 4:38 Wenn Ihre Bedürfnisse einfach sind, können Sie nur versuchen, einen exponentiellen gleitenden Durchschnitt. Setzen Sie einfach, Sie machen eine Akkumulator-Variable, und wie Ihr Code bei jedem Sample sieht, aktualisiert der Code den Akkumulator mit dem neuen Wert. Sie wählen eine konstante Alpha, die zwischen 0 und 1 ist, und berechnen Sie diese: Sie müssen nur einen Wert von Alpha zu finden, wo die Wirkung einer bestimmten Probe nur für etwa 1000 Proben dauert. Hmm, Im nicht wirklich sicher, dass dies für Sie geeignet ist, jetzt, dass Ive es hier. Das Problem ist, dass 1000 ist ein ziemlich langes Fenster für einen exponentiellen gleitenden Durchschnitt Im nicht sicher, es gibt ein Alpha, die den Durchschnitt über die letzten 1000 Zahlen, ohne Unterlauf in der Gleitkomma Berechnung zu verbreiten würde. Aber wenn du einen kleineren Durchschnitt wünschst, wie 30 Zahlen oder so, das ist eine sehr einfache und schnelle Möglichkeit, es zu tun. Antwortete Jun 12 12 um 4:44 1 auf deinem Post. Der exponentielle gleitende Durchschnitt kann das Alpha variabel sein. So kann es verwendet werden, um Zeitbasis-Mittelwerte (z. B. Bytes pro Sekunde) zu berechnen. Wenn die Zeit seit dem letzten Akkumulator-Update mehr als 1 Sekunde ist, lassen Sie Alpha 1,0 sein. Andernfalls kannst du alpha sein (usecs seit letztem update1000000). Ndash jxh Grundsätzlich möchte ich den gleitenden Durchschnitt eines laufenden Stroms eines Stroms von Gleitkommazahlen mit den aktuellsten 1000 Zahlen als Datenmuster verfolgen. Beachten Sie, dass die unten genannte Gesamtsumme als Elemente als addreplaced, Vermeidung kostspieliger O (N) Traversal, um die Summe zu berechnen - benötigt für die durchschnittliche - on demand. Insgesamt wird ein anderer Parameter von T verwendet, um z. B. Mit einer langen langen, wenn insgesamt 1000 lang s, ein int für char s, oder ein doppeltes bis total float s. Dies ist ein bisschen fehlerhaft, dass Numsamples an INTMAX vorbeikommen könnten - wenn man sich vorstellt, dass man eine langjährige langjährige langwierige Zeit haben könnte. Oder verwenden Sie ein zusätzliches bool Datenelement, um aufzuzeichnen, wenn der Container zum ersten Mal gefüllt wird, während er Numsamples um das Array herumtreibt (am besten dann umbenannt etwas Unschuldiges wie Pos). Antwortete am 12. Juni 12 um 5:19 man geht davon aus, dass der Quanten-Operator (T-Stichprobe) tatsächlich quasi Operator (T-Probe) ist. Ndash oPless Jun 8 14 um 11:52 oPless ahhh. Gut beobachtet. Eigentlich habe ich gedacht, dass es nicht leer ist () (T Probe), aber natürlich könntest du auch immer Notizen verwenden, die du mochst. Werde reden, danke Ndash Tony D Juni 8 14 bei 14: 27 Ich möchte die Berechnung für den Aktienkurs im Durchschnitt entwickeln. Aber viel komplexe Berechnung wurde später geplant. Mein erster Schritt zu wissen, wie man Moving Average effizient berechnen kann. Ich muss wissen, wie man die Input-und Return-Output effizient zu nehmen. Betrachtete Input Datum und Preis. Konsumierte Ausgabe Datum, Preis und Moving Average. Wenn ich 500 Datensätze habe und ich will, um zu berechnen Moving Average für 5 Tage was ist der effiziente Weg, anstatt hin und her zu gehen in der Array von Datum und Preis wieder zu vermeiden, was ist der beste Weg, um Eingang zu erhalten (ArrayList, Tabelle, Array Etc) und return output. Anmerkung: Die heutige MA von 5 Tagen wird der Durchschnitt der letzten 5 Tage einschließlich des heutigen Preises sein. Gestern wird MA der Durchschnitt der letzten 5 Tage von gestern sein. Ich möchte die Tage bleiben, um flexibel zu sein, anstatt 5 könnte es 9, 14, 20 usw. sein. Donnerstag, 10. April 2008 um 15:21 Uhr Wenn du eine einfache Berechnung ohne deine Mühe benötigst, kannst du TA-Lib benutzen. Aber wenn Sie möchten, dass Ihre Berechnung effizienter als TA-Lib ist, dann können Sie Ihren eigenen technischen Indikator erstellen. TA-Lib ist großartig, aber Problem ist, dass diese Bibliothek nur statische Methoden hat. Das heißt, wenn Sie SMA-Array-Werte auf der Grundlage von 500 Preisscheinen berechnen müssen, dann werden Sie das gesamte Array von Bars senden und es wird Array von SMA-Werten zurückgeben. Aber wenn du neue 501-st-Wert bekommst, dann solltest du wieder das ganze Array senden und TA-Lib wird wieder rechnen und SMA-Array von Werten zurückgeben. Stellen Sie sich jetzt vor, Sie brauchen einen solchen Indikator auf echten Preisfutter, und für jede Preisänderung benötigen Sie einen neuen Indikatorwert. Wenn Sie einen Indikator haben, ist kein großes Problem, aber wenn Sie Hunderte Indikatoren arbeiten, könnte es ein Performance-Problem sein. Ich war in einer solchen Situation und fange an, Echtzeit-Indikatoren zu entwickeln, die effizient sind und zusätzliche Berechnungen für neue Preisleisten oder für geänderte Preisscheine machen. Unglücklicherweise brauchte ich nie SMA-Indikator für meine Handelssysteme, aber ich habe solche für EMA, WMA, AD und andere. Ein solcher Indikator AD wird auf meinem Blog veröffentlicht und man kann von dort aus sehen, was die Grundstruktur meiner Echtzeit-Indikator-Klasse ist. Ich hoffe, dass Sie kleine Änderungen benötigen, um SMA-Indikator zu implementieren, denn ist einer der einfachsten. Die Logik ist einfach. Um SMA zu berechnen, benötigen Sie nur n letzte Preiswerte. So Klasseninstanz wird eine Sammlung von Preisen haben, die speichern wird nur die letzten n Anzahl der Preise halten, wie SMA definiert ist (in Ihrem Fall 5). Wenn du also eine neue Bar hast, wirst du die älteste entfernen und neue hinzufügen und die Berechnung erstellen. Donnerstag, 10. April 2008 16:04 Alle Antworten Es gibt eine Bibliothek namens TA-Lib, die alles für dich macht und es ist Open Source. Es hat etwa 50 Indikatoren, die ich denke. Weve hat es in der Produktionsumgebung verwendet und es ist sehr effizient und realibel. Sie können es in C, Java, C, etc. verwenden. Wenn Sie einfache Berechnung ohne Ihre Bemühung benötigen, als Sie TA-Lib verwenden können. Aber wenn Sie möchten, dass Ihre Berechnung effizienter als TA-Lib ist, dann können Sie Ihren eigenen technischen Indikator erstellen. TA-Lib ist großartig, aber Problem ist, dass diese Bibliothek nur statische Methoden hat. Das heißt, wenn Sie SMA-Array-Werte auf der Grundlage von 500 Preisscheinen berechnen müssen, dann werden Sie das gesamte Array von Bars senden und es wird Array von SMA-Werten zurückgeben. Aber wenn du neue 501-st-Wert bekommst, dann solltest du wieder das ganze Array senden und TA-Lib wird wieder rechnen und SMA-Array von Werten zurückgeben. Stellen Sie sich jetzt vor, Sie brauchen einen solchen Indikator auf echten Preisfutter, und für jede Preisänderung benötigen Sie einen neuen Indikatorwert. Wenn Sie einen Indikator haben, ist kein großes Problem, aber wenn Sie Hunderte Indikatoren arbeiten, könnte es ein Performance-Problem sein. Ich war in einer solchen Situation und fange an, Echtzeit-Indikatoren zu entwickeln, die effizient sind und zusätzliche Berechnungen für neue Preisleisten oder für geänderte Preisscheine machen. Unglücklicherweise brauchte ich nie SMA-Indikator für meine Handelssysteme, aber ich habe solche für EMA, WMA, AD und andere. Ein solcher Indikator AD wird auf meinem Blog veröffentlicht und man kann von dort aus sehen, was die Grundstruktur meiner Echtzeit-Indikator-Klasse ist. Ich hoffe, dass Sie kleine Änderungen benötigen, um SMA-Indikator zu implementieren, denn ist einer der einfachsten. Die Logik ist einfach. Um SMA zu berechnen, benötigen Sie nur n letzte Preiswerte. So Klasseninstanz wird eine Sammlung von Preisen haben, die speichern wird nur die letzten n Anzahl der Preise halten, wie SMA definiert ist (in Ihrem Fall 5). Wenn du also eine neue Bar hast, wirst du die älteste entfernen und neue hinzufügen und die Berechnung erstellen. Donnerstag, 10. April 2008 16:04 Ich würde den gleitenden Durchschnitt in der Datenbank über eine gespeicherte Prozedur oder in einen Würfel berechnen. Haben Sie Analysis Services gesehen, hat es die Möglichkeit, gleitende Durchschnitte zu berechnen. Donnerstag, 10. April 2008 16:05 Ja. TA-LIB ist gut, aber vielleicht nicht für mich geeignet. Wenn ich neuen Wert oder aktualisierten Wert für die Geschichte der Datensätze Ich werde die Berechnung in einer separaten Funktion nur für das neue Angebot und speichern Sie es in der Datenbank. Ich plane, das Zitat jede Stunde zu aktualisieren. Ich muss etwa 25 bis 30 technische Indikatoren für 2200 Aktien machen. Donnerstag, 10. April 2008 17:51 Die Ausführungszeit eines TA-Lib-Aufrufs auf einem Array von 10000 Elementen dauert ca. 15 Millisekunden (auf einem Intel Core Duo 2.13 Ghz). Dies ist der Durchschnitt aller Funktionen. Zu den schnellsten gehört SMA weniger als 2,5 Millisekunden. Die langsamste, HTTRENDMODE, nimmt 450 Millisekunden. Mit weniger Elementen ist es schneller. SMA dauert ca. 0,2 Millisekunden für 1000 Eingangselemente. Die Geschwindigkeitsverstärkung ist fast linear (der Overhead der Ausführung des Funktionsaufrufs ist vernachlässigbar). Im Rahmen Ihrer Bewerbung ist TA-Lib sehr unwahrscheinlich, dass Ihr Engpass für Geschwindigkeitsleistung ist. Auch ich in der Regel nicht empfehlen, diese quotlast nquot Lösung. Lesen Sie weiter unten für Details. Zuerst eine Korrektur zur Boban. s-Anweisung Alle Funktionen in TA-Lib können auch einen einzigen letzten Wert berechnen, indem sie ein Minimum an Quell-Nquot-Elementen verwenden. Sie können ein Array von Größe 10000 haben, haben Daten initialisieren nur für die ersten 500 Elemente, fügen Sie ein Element und rufen TA-Lib, um die SMA nur für das neue Element zu berechnen. TA-Lib wird nicht mehr als nötig aussehen (wenn SMA von 5, dann wird TA-Lib eine einzelne SMA mit den letzten 5 Werten berechnen). Dies ist mit dem Parameter startIdx und endIdx möglich. Sie können einen zu berechnenden Bereich oder einen einzelnen Wert angeben. In diesem Szenario würden Sie startIdx endIdx 500, um das 501st Element zu berechnen. Warum ist eine solche Quell-Napot-Lösung potenziell gefährlich für einige Unabhängig von der Auswahl Boban. s Lösung oder TA-Lib betrachten, dass mit einer kleinen endlichen Anzahl von vergangenen Daten nicht gut funktionieren mit den meisten TA-Funktionen. Mit SMA ist es offensichtlich, dass man nur n Element benötigt, um einen Durchschnitt über n Element zu berechnen. Es ist nicht so einfach mit EMA (und vielen anderen TA-Funktionen). Der Algo hängt oft von dem vorherigen Wert ab, um den neuen Wert zu berechnen. Die Funktion ist rekursiv. Das bedeutet, dass alle bisherigen Werte Einfluss auf zukünftige Werte haben. Wenn Sie sich entscheiden, Ihren Algo zu verwenden, um nur eine kleine Anzahl von vergangenen n Wert zu verwenden, erhalten Sie nicht das gleiche Ergebnis wie jemand, der über eine große Anzahl von vergangenen Werten berechnet. Die Lösung ist ein Kompromiss zwischen Geschwindigkeit und Präzision. Ich habe das oft im Kontext von TA-Lib besprochen (ich nenne es den quartierbaren Zeitraum in der Dokumentation und dem Forum). Um es ganz einfach zu halten, ist meine allgemeine Empfehlung, wenn Sie den Unterschied zwischen einem Algo mit einer endlichen Impulsantwort (FIR) aus einem Algo mit einer unendlichen Impulsantwort (IIR) nicht machen können. Sie werden sicherer sein, über alle Daten zu berechnen, die Sie haben verfügbar. TA-Lib spezifiziert in dem Code, dessen Funktionen eine instabile Periode (IIR) haben. Bearbeitet von mfortier Freitag, 15. August 2008 4:25 Uhr Korrigieren Sie englischen Satz Freitag, 15. August 2008 4:20 AMAVERAGE Funktion Betrifft: Excel 2016 Excel 2007 Excel 2010 Excel 2007 Excel 2016 für Mac Excel für Mac 2011 Excel Online Excel für IPad Excel für iPhone Excel für Android Tabletten Excel Starter Excel Mobile Excel für Android Handys Mehr. Weniger Dieser Artikel beschreibt die Formel-Syntax und die Verwendung der AVERAGE-Funktion in Microsoft Excel. Beschreibung Gibt den Mittelwert (arithmetisches Mittel) der Argumente zurück. Wenn zum Beispiel der Bereich A1: A20 Zahlen enthält, gibt die Formel AVERAGE (A1: A20) den Mittelwert dieser Zahlen zurück. Die AVERAGE-Funktionssyntax hat die folgenden Argumente: Number1 Required. Die erste Zahl, Zelle Referenz oder Bereich, für die Sie den Durchschnitt wollen. Nummer 2. Optional. Zusätzliche Nummern, Zellreferenzen oder Bereiche, für die Sie den Durchschnitt wünschen, bis zu maximal 255. Argumente können entweder Zahlen oder Namen, Bereiche oder Zellreferenzen sein, die Zahlen enthalten. Logische Werte und Textdarstellungen von Zahlen, die Sie direkt in die Liste der Argumente eingeben, werden gezählt. Wenn ein Bereichs - oder Zellreferenzargument Text, logische Werte oder leere Zellen enthält, werden diese Werte jedoch ignoriert, jedoch sind Zellen mit dem Wert Null enthalten. Argumente, die Fehlerwerte oder Text sind, die nicht in Zahlen übersetzt werden können, verursachen Fehler. Wenn Sie logische Werte und Textdarstellungen von Ziffern in eine Referenz als Teil der Berechnung aufnehmen möchten, verwenden Sie die Funktion AVERAGEA. Wenn Sie den Durchschnitt nur der Werte berechnen möchten, die bestimmte Kriterien erfüllen, verwenden Sie die Funktion AVERAGEIF oder die Funktion AVERAGEIFS. Anmerkung: Die AVERAGE-Funktion misst die zentrale Tendenz, die die Position des Zentrums einer Zahlengruppe in einer statistischen Verteilung ist. Die drei häufigsten Maßnahmen der zentralen Tendenz sind: Durchschnitt. Welches das arithmetische Mittel ist, und wird durch Addition einer Gruppe von Zahlen berechnet und dann durch die Zählung dieser Zahlen dividiert. Zum Beispiel ist der Durchschnitt von 2, 3, 3, 5, 7 und 10 30 geteilt durch 6, was 5. Median ist. Das ist die mittlere Zahl einer Gruppe von Zahlen, die ist, die Hälfte der Zahlen haben Werte, die größer sind als der Median, und die Hälfte der Zahlen haben Werte, die kleiner sind als der Median. Zum Beispiel ist der Median von 2, 3, 3, 5, 7 und 10 4. Modus. Die die am häufigsten vorkommende Zahl in einer Gruppe von Zahlen ist. Zum Beispiel ist der Modus von 2, 3, 3, 5, 7 und 10 3. Für eine symmetrische Verteilung einer Gruppe von Zahlen sind diese drei Mittel der zentralen Tendenz alle gleich. Für eine schiefe Verteilung einer Gruppe von Zahlen können sie anders sein. Tipp: Wenn du Zellen durchschnittst, halte den Unterschied zwischen leeren Zellen und denen, die den Wert Null enthalten, im Auge zu behalten, besonders wenn du in den Excel-Optionen im Excel-Dialogfeld das Kontrollkästchen Null in Zellen mit einem Nullwert deaktiviert hast Anwendung. Wenn diese Option ausgewählt ist, werden leere Zellen nicht gezählt, aber Nullwerte sind. So suchen Sie das Kontrollkästchen Null in Zellen anzeigen, die ein Nullwertkonto haben: Klicken Sie auf der Registerkarte Datei auf Optionen. Und dann in der Kategorie "Erweitert" unter "Anzeigenoptionen" für dieses Arbeitsblatt. Kopiere die Beispieldaten in die folgende Tabelle und füge sie in Zelle A1 eines neuen Excel-Arbeitsblattes ein. Für Formeln, um Ergebnisse anzuzeigen, wählen Sie sie aus, drücken Sie F2 und drücken Sie dann Enter. Wenn Sie müssen, können Sie die Spaltenbreiten anpassen, um alle Daten zu sehen.
No comments:
Post a Comment