Sunday 23 April 2017

Fsharp Gleitender Durchschnitt

Moving Average Dieses Beispiel lehrt, wie Sie den gleitenden Durchschnitt einer Zeitreihe in Excel berechnen. Ein gleitender Durchschnitt wird verwendet, um Unregelmäßigkeiten (Spitzen und Täler) zu glätten, um Trends leicht zu erkennen. 1. Erstens, werfen wir einen Blick auf unsere Zeitreihe. 2. Klicken Sie auf der Registerkarte Daten auf Datenanalyse. Hinweis: Klicken Sie hier, um das Analyse-ToolPak-Add-In zu laden. 3. Wählen Sie Verschiebender Durchschnitt aus, und klicken Sie auf OK. 4. Klicken Sie im Feld Eingabebereich auf den Bereich B2: M2. 5. Klicken Sie in das Feld Intervall und geben Sie 6 ein. 6. Klicken Sie in das Feld Ausgabebereich und wählen Sie Zelle B3 aus. 8. Zeichnen Sie ein Diagramm dieser Werte. Erläuterung: Da wir das Intervall auf 6 setzen, ist der gleitende Durchschnitt der Durchschnitt der vorherigen 5 Datenpunkte und der aktuelle Datenpunkt. Als Ergebnis werden Spitzen und Täler geglättet. Die Grafik zeigt eine zunehmende Tendenz. Excel kann den gleitenden Durchschnitt für die ersten 5 Datenpunkte nicht berechnen, da nicht genügend frühere Datenpunkte vorhanden sind. 9. Wiederholen Sie die Schritte 2 bis 8 für Intervall 2 und Intervall 4. Fazit: Je größer das Intervall, desto mehr werden die Spitzen und Täler geglättet. Je kleiner das Intervall, desto näher sind die gleitenden Mittelwerte, um die tatsächlichen Datenpunkte. Ich arbeite immer noch auf Groking der F-Sache - versuchen, herauszufinden, wie man in F denken, anstatt nur die Übersetzung von anderen Sprachen, die ich kenne. Ive vor kurzem denkend über die Fälle, in denen Sie nicht eine 1: 1 Karte zwischen vorher und nach haben. Fälle, in denen List. map fällt. Ein Beispiel hierfür sind gleitende Mittelwerte, wobei in der Regel len-n1 Ergebnisse für eine Liste der Länge len bei Mittelung über n Elemente. Für die Gurus da draußen, ist dies eine gute Möglichkeit, es zu tun (mit der Warteschlange gequetscht von Jomo Fisher) (Vielleicht ein besserer Weg wäre, eine MovingAverageQueue durch Erben von Fifo umzusetzen) fragte Nov 17 08 um 11:12 Ich hatte zu erklären Wie es MovingAverage n (s. Seqltfloatgt), um diese in einem Utility-Modul, weg von der Call-Site, um das Typ-System zu beruhigen. Soweit ich sagen kann, funktioniert dies nur mit Floats, aufgrund einer Einschränkung von Array. average. MSDN Ansprüche kann ich ersetzen, die mit Array. averageBy, um diese auf eine int-Sequenz verwenden, aber das gibt einen anderen Fehler. Brian, können Sie reformulieren diese Antwort, um in generischen Kontexten zu arbeiten, so dass es mit seq-of-any-arithmetic-type, ohne Typpraten arbeiten ndash Warren Young Ich sollte darauf hinweisen, dass meine Notwendigkeit für Diese gleitende Mittelfunktion ist, ein kurzes Fenster (30ish) über einer Folge der ganzen Zahlen zu erhalten, die fast alle in den Millionen sind, also I don39t Gleitkomma brauchen. Auch eine einzige Stelle rechts vom Dezimalpunkt ist in meiner Anwendung nicht praktikabel. Umwandlung meiner ganzen Zahlen in FP und das Ergebnis zurück zu int nur um die F-Standard-Bibliothek zu beschwichtigen doesn39t appellieren. Ndash Warren Young Wenn Sie kümmern sich um Leistung, dann können Sie berechnen einen gleitenden Durchschnitt effizient mit so etwas (vorausgesetzt waren die Berechnung eines gleitenden Durchschnitt über ein 3-Tage-Fenster) Der harte Teil über dieses hält Auf Ihrer vorherigen laufenden Gesamt - und Anzahl N-Fenster. Ich kam mit dem folgenden Code: Diese Version ist nicht so schön aussehende wie die Haskell-Code, aber es sollte Performance-Probleme mit der Neuberechnung Ihres Fensters bei jedem Lauf zu vermeiden. Es hält eine laufende Summe und hält zuvor verwendeten Zahlen in einer Warteschlange, so sollte es sehr schnell sein. Nur für Spaß, schrieb ich einen einfachen Benchmark: Wenn Sie über Leistung und wie eleganten Code dann versuchen versuchen Mit FSUnit können wir es testen Der Trick des Algorithmus ist die erste Summe die ersten n Zahlen und dann eine laufende Summe, indem Sie den Kopf Des Fensters und Subtrahieren des Schwanzes des Fensters. Das Schiebefenster wird erreicht, indem man einen Selbstzip auf der Sequenz ausführt, aber mit dem zweiten Argument zum Zip, das durch die Fenstergröße erweitert wird. Am Ende der Pipeline teilen wir die laufende Summe mit der Fenstergröße auf. Anmerkung scan ist gerade wie Falte aber liefert jede Version des Zustandes in eine Reihenfolge. Eine noch elegantere Lösung, obwohl possibley mit Performance-Hit ist es, die Beobachtung, dass, wenn wir Null-Pad die Sequenz brauchen wir nicht brauchen, um die anfängliche Summe zu berechnen. Es könnte ein Performance-Hit aufgrund der zweiten Indirektion im Zusammenhang mit der Umhüllung der beiden Sequenzen, aber vielleicht ist es nicht signifikant, abhängig von der Größe des Fensters beantwortet 31 August um 8: 06 Ich möchte die Berechnung für Aktienkurs gleitenden Durchschnitt zu entwickeln. Aber viel komplexe Berechnung wurden später geplant. Mein erster Schritt zu wissen, wie man Moving Average effizient zu berechnen. Ich muss wissen, wie die Input-und Return-Ausgang effizient zu nehmen. Als Eingabe Datum und Preis. Ausgegebenes Datum, Preis und gleitender Durchschnitt. Wenn ich 500 Datensätze haben und ich möchte zu berechnen Moving Durchschnitt für 5 Tage, was ist der effient Weg anstatt hin und her in das Array von Datum und Preis wieder bitte sugest, was der beste Weg, um Eingang (ArrayList, Tabelle, Array Etc) und Ausgang zurück. Anmerkung: Der heutige MA von 5 Tagen wird der Durchschnitt der letzten 5 Tage einschließlich heute Preis sein. Gestern ist MA durchschnittlich der letzten 5 Tage von gestern. Ich möchte die Tage halten, um flexibel zu sein anstatt 5 könnte es 9, 14, 20 etc. sein. Wenn Sie einfache Berechnung ohne Ihre Bemühung benötigen, als Sie TA-Lib verwenden können. Aber wenn Sie wollen, dass Ihre Rechnung effizienter ist als TA-Lib, dann können Sie Ihre eigene technische Indikator erstellen. TA-Lib ist groß, aber Problem ist, dass diese Bibliothek nur statische Methoden haben. Das bedeutet, wenn Sie SMA-Array-Werte auf Basis von 500 Preisleisten berechnen müssen, dann werden Sie das gesamte Array von Balken senden und es wird Array von SMA-Werten zurückgeben. Aber wenn Sie neue 501-st-Wert erhalten, dann sollten Sie wieder das gesamte Array und TA-Lib wieder berechnen und zurückgeben SMA-Array von Werten. Stellen Sie sich jetzt vor, Sie brauchen einen solchen Indikator für den realen Preis, und für jede Preisänderung benötigen Sie einen neuen Indikatorwert. Wenn Sie einen Indikator nicht ein großes Problem haben, aber wenn Sie Hunderte Indikatoren arbeiten, könnte es ein Leistungsproblem sein. Ich war in einer solchen Situation und beginnen die Entwicklung von Echtzeit-Indikatoren, die effizient sind und zusätzliche Berechnungen für neue Preisleiste oder für geänderte Preisleiste nur. Leider habe ich nie benötigt SMA-Indikator für meine Trading-Systeme, aber ich habe solche für EMA, WMA, AD, und andere. Ein solcher Indikator AD ist in meinem Blog veröffentlicht und Sie können von dort sehen, was ist die grundlegende Struktur meiner Echtzeit-Indikator-Klasse. Ich hoffe, Sie benötigen kleine Änderungen, um SMA-Indikator zu implementieren, denn ist einer der einfachsten. Die Logik ist einfach. Zur Berechnung von SMA benötigen Sie nur die letzten Preiswerte. So Klasse Instanz haben Sammlung von Preisen, die Speicherung halten nur letzte n Anzahl der Preise als SMA definiert ist (in Ihrem Fall 5). Also, wenn Sie neue Bar haben, werden Sie älteste entfernen und neue hinzufügen und erstellen Berechnung. Donnerstag, 10. April 2008 16:04 Alle Antworten Es gibt eine Bibliothek namens TA-Lib, die alles für Sie erledigt und es ist Open Source. Es hat etwa 50 Indikatoren denke ich. Weve verwendet es in der Produktionsumgebung, und es ist sehr effizient und realible. Sie können es in C, Java, C, etc. verwenden. Wenn Sie einfache Berechnung ohne Ihren Aufwand benötigen, als Sie TA-Lib verwenden können. Aber wenn Sie wollen, dass Ihre Rechnung effizienter ist als TA-Lib, dann können Sie Ihre eigene technische Indikator erstellen. TA-Lib ist groß, aber Problem ist, dass diese Bibliothek nur statische Methoden haben. Das bedeutet, wenn Sie SMA-Array-Werte auf Basis von 500 Preisleisten berechnen müssen, dann werden Sie das gesamte Array von Balken senden und es wird Array von SMA-Werten zurückgeben. Aber wenn Sie neue 501-st-Wert erhalten, dann sollten Sie wieder das gesamte Array und TA-Lib wieder berechnen und zurückgeben SMA-Array von Werten. Stellen Sie sich jetzt vor, Sie brauchen einen solchen Indikator für den realen Preis, und für jede Preisänderung benötigen Sie einen neuen Indikatorwert. Wenn Sie einen Indikator nicht ein großes Problem haben, aber wenn Sie Hunderte Indikatoren arbeiten, könnte es ein Leistungsproblem sein. Ich war in einer solchen Situation und beginnen die Entwicklung von Echtzeit-Indikatoren, die effizient sind und zusätzliche Berechnungen für neue Preisleiste oder für geänderte Preisleiste nur. Leider habe ich nie benötigt SMA-Indikator für meine Trading-Systeme, aber ich habe solche für EMA, WMA, AD, und andere. Ein solcher Indikator AD ist in meinem Blog veröffentlicht und Sie können von dort sehen, was ist die grundlegende Struktur meiner Echtzeit-Indikator-Klasse. Ich hoffe, Sie benötigen kleine Änderungen, um SMA-Indikator zu implementieren, denn ist einer der einfachsten. Die Logik ist einfach. Zur Berechnung von SMA benötigen Sie nur die letzten Preiswerte. So Klasse Instanz haben Sammlung von Preisen, die Speicherung halten nur letzte n Anzahl der Preise als SMA definiert ist (in Ihrem Fall 5). Also, wenn Sie neue Bar haben, werden Sie älteste entfernen und neue hinzufügen und erstellen Berechnung. Ich würde den gleitenden Durchschnitt in der Datenbank über eine gespeicherte Prozedur oder in einem Cube berechnen. Haben Sie sich Analysis Services angesehen, hat es die Möglichkeit, gleitende Durchschnitte zu berechnen. Donnerstag, 10. April 2008 16:05 Ja. TA-LIB ist gut, aber vielleicht nicht geeignet für mich. Wenn ich neuen Wert oder aktualisierten Wert für den Verlauf 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. Die Ausführungszeit eines TA-Lib-Aufrufs auf einem Array von 10000 Elementen beträgt etwa 15 Millisekunden (auf einem Intel Core Duo 2,13 Ghz). Dies ist der Durchschnitt aller Funktionen. Unter den schnellsten, nimmt SMA weniger als 2,5 Millisekunden. Der langsamste HTTRENDMODE benötigt 450 Millisekunden. Mit weniger Elementen ist es schneller. SMA benötigt ca. 0,22 Millisekunden für 1000 Eingangselemente. Die Geschwindigkeitsverstärkung ist fast linear (der Aufwand für die Ausführung des Funktionsaufrufs ist vernachlässigbar). Im Rahmen Ihrer Bewerbung ist TA-Lib höchstwahrscheinlich Ihr Engpass für die Geschwindigkeitsleistung. Auch ich in der Regel nicht empfehlen, solche quotlast nquot Lösung. Lesen Sie 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 der Größe 10000 haben, die Daten nur für die ersten 500 Elemente initialisieren, ein Element hinzufügen und TA-Lib aufrufen, um die SMA nur für das neue Element zu berechnen. TA-Lib schaut nicht mehr als nötig (wenn SMA von 5, dann wird TA-Lib ein einzelnes SMA mit den letzten 5 Werten berechnen). Dies wird mit dem Parameter startIdx und endIdx ermöglicht. Sie können einen zu berechnenden Bereich oder einen einzelnen Wert angeben. In diesem Szenario würden Sie startIdx endIdx 500 machen, um das 501st-Element zu berechnen. Warum ist solch eine Quell-nquot-Lösung für einige gefährlich? Unabhängig von der Auswahl der Boban. s-Lösung oder TA-Lib bedenkt man, dass die Verwendung einer kleinen endlichen Anzahl von vergangenen Daten nicht gut funktioniert mit den meisten TA-Funktionen. Mit SMA, ist es offensichtlich, dass Sie nur n Element benötigen, 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 vom vorherigen Wert ab, um den neuen Wert zu berechnen. Die Funktion ist rekursiv. Das bedeutet, dass alle vergangenen Werte einen Einfluss auf zukünftige Werte haben. Wenn Sie sich entscheiden, Ihr algo zu verwenden, um nur eine kleine Menge von Vergangenheit n Wert 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 dies oft im Zusammenhang mit TA-Lib diskutiert (ich nenne es die quotquellierbare Periodquot in der Dokumentation und Forum). Um es einfach zu halten, meine allgemeine Empfehlung ist, wenn Sie nicht den Unterschied zwischen einem Algo mit einer endlichen Impulsantwort (FIR) aus einem Algo mit einer unendlichen Impulsantwort (IIR) machen können, sind Sie sicherer zu berechnen, über alle Daten, die Sie haben verfügbar. TA-Lib spezifizieren im Code, welche seiner Funktionen eine instabile Periode (IIR) haben. Bearbeitet von mfortier Freitag, 15. August 2008 04:25 Richtig english sentence Freitag, 15. August 2008 04:20


No comments:

Post a Comment