Monday 11 September 2017

Visual Grundlegende Gleitende Durchschnittliche Funktion


Benutzerdefinierte durchschnittliche Funktion Unten sehen wir ein Programm in Excel VBA, das eine benutzerdefinierte Funktion erstellt, die den Durchschnitt eines zufällig ausgewählten Bereichs berechnet, ohne einen oder mehrere Werte, die Ausreißer sind und nicht gemittelt werden sollten. Benutzerdefinierte Funktionen müssen in einem Modul platziert werden. 1. Öffnen Sie den Visual Basic-Editor, und klicken Sie auf Einfügen, Modul. 2. Fügen Sie die folgende Codezeile hinzu: Funktion CUSTOMAVERAGE (rng Als Bereich, niedriger als Integer. Upper Als Integer) Der Name unserer Funktion ist CUSTOMAVERAGE. Der Teil zwischen den Klammern bedeutet, dass wir Excel VBA einen Bereich und zwei Integer-Variablen als Eingabe geben. Wir nennen unseren Bereich rng, eine Integer-Variable, die wir niedriger nennen, und eine Integer-Variable, die wir oben aufrufen, aber Sie können beliebige Namen verwenden. 3. Als nächstes deklarieren wir ein Range-Objekt und zwei Variablen vom Typ Integer. Wir rufen die Range-Objektzelle auf. Eine Integer-Variable nennen wir total und eine Integer-Variable, die wir count zählen. Dim-Zelle As Range, total As Integer. Count As Integer 4. Wir wollen jede Zelle in einem beliebig ausgewählten Bereich überprüfen (dieser Bereich kann beliebig groß sein). In Excel VBA können Sie dazu die For Each Next-Schleife verwenden. Fügen Sie die folgenden Codezeilen hinzu: Für jede Zelle In rng Hinweis: rng und Zelle sind zufällig hier ausgewählt, können Sie beliebige Namen verwenden. Denken Sie daran, diese Namen in den Rest des Codes verweisen. 5. Als nächstes prüfen wir für jeden Wert in diesem Bereich, ob er zwischen den beiden Werten (untere und obere) fällt. Wenn true, erhöhen wir die Gesamtzahl um den Wert der Zelle und wir erhöhen die Anzahl mit 1. Fügen Sie der Loop die folgenden Codezeilen hinzu. Wenn cell. Value gt niedriger und cell. Value lt upper Dann Gesamtzahl der cell. Value-Zähler 1 End If 6. Um das Ergebnis dieser Funktion (den gewünschten Durchschnitt) zurückzugeben, fügen Sie die folgende Codezeile außerhalb der Schleife hinzu. CUSTOMAVERAGE Gesamtzahl 7. Vergessen Sie nicht, die Funktion zu beenden. Fügen Sie die Zeile: 8. Nun können Sie diese Funktion wie jede andere Excel-Funktion verwenden, um den Mittelwert der Zahlen zu berechnen, die zwischen zwei Werten fallen. Als eine Prüfung können Sie alle Werte löschen, die kleiner als 10 und höher als 30 sind, und die Standard-Durchschnittsfunktion in Excel verwenden, um zu sehen, ob Excel denselben Durchschnitt berechnet wie unsere benutzerdefinierte durchschnittliche Funktion. Unsere benutzerdefinierte durchschnittliche Funktion funktioniert Hinweis: Diese Funktion ist nur in dieser Arbeitsmappe verfügbar. Ich versuche, einen Durchschnitt mit Visual Basic 2010 zu berechnen und diesen Durchschnitt in einem Meldungsfenster anzuzeigen. Während Debugging (Auskommentieren Code und versuchen, verschiedene Variablen, die an das Meldungsfeld als String gesendet) bekam ich das Meldungsfenster zu erscheinen, aber ohne Daten zurückgegeben. Wie ich den Code jetzt habe, bekomme ich keine Fehler, aber ich kann nicht sogar das Meldungsfeld zu erscheinen. Grundsätzlich das Programm hat der Benutzer eine Reihe von Bücher, die sie gelesen haben, die dann verwendet wird, um eine Punkt-Summe basierend auf der Menge der gelesenen Bücher zu berechnen. Die Übung bittet, einen Durchschnitt aller gelesenen Bücher zu halten. Gefragt Feb 26 14 um 1: 37 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 berechnen wollen 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 ist 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 Handelssysteme, 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 Handelssysteme, 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 Mittelwerte 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 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. 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, werden Sie sicherer zu berechnen, über alle Daten, die Sie haben erhältlich. 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