Moving Average Vba


So berechnen Sie gleitende Mittelwerte in Excel Excel-Datenanalyse für Dummies, 2. Ausgabe Der Datenanalyse-Befehl bietet ein Werkzeug für die Berechnung der verschobenen und exponentiell geglätteten Durchschnitte in Excel. Nehmen Sie an, um zu veranschaulichen, dass Sie tägliche Temperaturinformationen gesammelt haben. Sie wollen den dreitägigen gleitenden Durchschnitt 8212 den Durchschnitt der letzten drei Tage 8212 als Teil einer einfachen Wettervorhersage berechnen. Gehen Sie folgendermaßen vor, um die gleitenden Mittelwerte für diesen Datensatz zu berechnen. Um einen gleitenden Durchschnitt zu berechnen, klicken Sie zuerst auf die Schaltfläche Data tab8217s Data Analysis. Wenn Excel das Dialogfeld Datenanalyse anzeigt, wählen Sie aus der Liste den Eintrag Moving Average aus, und klicken Sie dann auf OK. Excel zeigt das Dialogfeld "Gleitender Durchschnitt" an. Identifizieren Sie die Daten, die Sie für die Berechnung des gleitenden Durchschnitts verwenden möchten. Klicken Sie im Dialogfeld "Gleitender Durchschnitt" in das Eingabebereichsfeld. Identifizieren Sie dann den Eingabebereich, indem Sie entweder eine Arbeitsbereichsadresse eingeben oder mit der Maus den Arbeitsbereich auswählen. Ihre Bereichsreferenz sollte absolute Zellenadressen verwenden. Eine absolute Zellenadresse steht vor dem Spaltennamen und der Zeilennummer mit Vorzeichen, wie in A1: A10. Wenn die erste Zelle in Ihrem Eingabebereich eine Textbeschriftung enthält, um Ihre Daten zu identifizieren oder zu beschreiben, aktivieren Sie das Kontrollkästchen Labels in First Row. Erklären Sie im Textfeld Interval, wie viele Werte in die gleitende Durchschnittsberechnung einbezogen werden sollen. Sie können einen gleitenden Durchschnitt mit einer beliebigen Anzahl von Werten berechnen. Standardmäßig verwendet Excel die letzten drei Werte, um den gleitenden Durchschnitt zu berechnen. Um festzulegen, dass eine andere Anzahl von Werten zur Berechnung des gleitenden Durchschnitts verwendet werden soll, geben Sie diesen Wert in das Textfeld Intervall ein. Sagen Sie Excel, wo die gleitenden Durchschnittsdaten platziert werden sollen. Verwenden Sie das Textfeld Ausgabebereich, um den Arbeitsblattbereich zu identifizieren, in dem Sie die gleitenden Durchschnittsdaten platzieren möchten. In dem Arbeitsblattbeispiel wurden die gleitenden Durchschnittsdaten in den Arbeitsblattbereich B2: B10 platziert. (Optional) Geben Sie an, ob ein Diagramm gewünscht wird. Wenn Sie ein Diagramm möchten, das die gleitenden Durchschnittsinformationen darstellt, aktivieren Sie das Kontrollkästchen "Diagrammausgabe". (Optional) Geben Sie an, ob Standardfehlerinformationen berechnet werden sollen. Wenn Sie Standardfehler für die Daten berechnen möchten, aktivieren Sie das Kontrollkästchen Standardfehler. Excel legt Standardfehlerwerte neben den gleitenden Mittelwerten fest. (Die Standardfehlerinformationen gehen zu C2: C10.) Nachdem Sie die Angabe, welche gleitenden durchschnittlichen Informationen Sie berechnen lassen möchten und wo Sie sie platzieren möchten, klicken Sie auf OK. Excel berechnet gleitende Durchschnittsinformationen. Hinweis: Wenn Excel doesn8217t über genügend Informationen verfügt, um einen gleitenden Durchschnitt für einen Standardfehler zu berechnen, legt er die Fehlermeldung in die Zelle. Sie können mehrere Zellen, die diese Fehlermeldung als einen Wert zu sehen. Ich möchte einen gleitenden Durchschnitt der letzten, sagen, 20, Zahlen einer Spalte zu berechnen. Ein Problem ist, dass einige Zellen der Spalte leer sein können, sie sollten ignoriert werden. Beispiel: Ein gleitender Durchschnitt der letzten drei wäre (155167201) 3. Ive versucht, dies zu implementieren mit Mittelwert, Offset, Index, aber ich weiß einfach nicht, wie. Im ein wenig vertraut mit Makros, so würde eine solche Lösung gut funktionieren: MovingAverage (A13) Vielen Dank für alle Tipps oder Lösungen Geben Sie dies mit Controlshiftenter, um es eine Matrix-Formel. Hier finden Sie die letzten drei Werte. Wenn Sie mehr oder weniger wollen, ändern Sie die beiden Instanzen von 3 in der Formel, was auch immer Sie wollen. Dieses Teil gibt die 4. höchste Zeilennummer aller Zellen zurück, die einen Wert haben, oder 5 in Ihrem Beispiel, da die Zeilen 6, 8 und 9 die 1. bis 3. höchsten Zeilen mit einem Wert sind. Dieser Teil gibt 9 TRUEs oder FALSEs zurück, basierend darauf, ob die Zeilennummer größer als die 4. größte ist. Diese multipliziert die Werte in A1: A9 mit diesen 9 WAHREN oder FALSE. TRUEs werden in 1 und FALSEs auf null konvertiert. Dies lässt eine SUM-Funktion wie folgt Da alle Werte über 155 nicht das Zeilennummerkriterium erfüllen, wird das Get mit Null multipliziert. Ich habe ein kurzes Skript in VBA geschrieben. Hopefull es tut, was Sie wollen. Hier sind Sie: 1) Ich habe Limit auf 360 Zellen gesetzt. Das bedeutet, dass das Skript nicht mehr als 360 Zellen sucht. Wenn Sie sie ändern möchten, ändern Sie den Anfangswert des Zählers. 2) Das Skript gibt nicht gerundeten Durchschnitt zurück. Ändern Sie die letzte Zeile in MovingAverage Round (CDbl (tmp i), 2) 3) Die Verwendung ist genau wie Sie wollten, so geben Sie einfach MovingAverage (a13) in die Zelle. Alle Kommentare sind willkommen. Hier ist ein Code, der hilfreich sein sollte für diejenigen, die technische Analyse im Handel und wollen Strategien in Excel zu testen. Sie berechnet den einfachen, linear gewichteten und exponentiellen gleitenden Durchschnitt. Weiter werde ich die Schritte zur Erstellung des Formulars und des VBA-Codes vorstellen und erläutern. Einfügen einer UserForm 8211 Name: MAForm Fügen Sie vier Labels aus den Toolbox-Steuerelementen hinzu 8211 Beschriftungen wie im obigen Druckbildschirm Fügen Sie eine ComboBox für die gleitende durchschnittliche Typauswahl hinzu. Es heißt comboTypeMA Fügen Sie zwei RefEdit-Steuerelemente für den Eingabebereich und den Ausgabebereich hinzu. Fügen Sie eine TextBox hinzu, um den gleitenden Durchschnitt zu markieren. Fügen Sie zwei Schaltflächen hinzu: Name: buttonSenden, Beschriftung: Submit und Name: buttonCancel, Caption: Cancel Um die Dropdown-Liste für die MA-Typ-Auswahl zu generieren und das User-Formular zu laden, ein neues Modul Wird mit dem unten stehenden Code eingefügt. Die ComboBox-Elemente, die mit gleitenden Durchschnittswerten und dem Benutzerformular gefüllt werden, werden geladen. Option Explicit Sub loadMAForm () Mit MAFormboTypeMA. RowSource. AddItem Einfach. AddItem Gewichtet. AddItem Exponentielles Ende Mit MAForm. Show End Sub Unten ist der Code, der der Schaltfläche Submit zugeschrieben wird. Private Sub buttonSubmitClick () Dim inputRange, outputRange Als Bereich Der inputRange enthält die Preisreihen, die für die Berechnung der MAs verwendet werden, und der outputRange wird mit den gleitenden Durchschnittswerten gefüllt. Dim inputPeriod As Integer Der gleitende Durchschnittszeitraum wird deklariert. Dim inputAddress, outputAddress As String Die als String deklarierten Eingabe - und Ausgabebereiche. Wenn comboTypeMA. Value ltgt Exponential und comboTypeMA. Value ltgt Einfach und comboTypeMA. Value ltgt Weighted True Dann MsgBox Wählen Sie einen gleitenden Durchschnittstyp aus der Liste aus. RefInputRange. SetFocus Exit Sub Dieser Teil der Prozedur erzwingt die ersten Einschränkungen bezüglich der übermittelten Daten. Wenn der gleitende Durchschnittstyp nicht in der Dropdown-Liste enthalten ist, wird der Vorgang nicht zum nächsten Schritt fortgesetzt, und der Benutzer wird aufgefordert, ihn erneut auszuwählen. ElseIf RefInputRange. Value Then MsgBox Bitte wählen Sie den Eingabebereich. RefInputRange. SetFocus Exit Sub ElseIf RefOutputRange. Value Dann MsgBox Bitte wählen Sie den Ausgabebereich. RefOutputRange. SetFocus Exit Sub ElseIf RefInputPeriod. Value Then MsgBox Bitte wählen Sie die gleitende durchschnittliche Periode. RefInputPeriod. SetFocus Exit Sub ElseIf Nicht IsNumeric (RefInputPeriod. Value) Dann MsgBox Moving durchschnittliche Periode muss eine Zahl sein. RefInputPeriod. SetFocus Exit Sub End If Weitere Einschränkungen werden erstellt. Eingabebereich, Ausgabebereich und Eingabeperiode dürfen nicht leer sein. Auch die gleitende durchschnittliche Periode muss eine Zahl sein. InputAddress RefInputRange. Value inputRange Range (inputAddress) outputAddress RefOutputRange. Value Set outputRange Range (outputAddress) inputPeriod RefInputPeriod. Value Die Argumente für inputRange und outputRange werden inputAddress und outputAddress als Strings deklariert. If inputRange. Columns. Count ltgt 1 Dann kann der MsgBox-Eingabebereich nur eine Spalte haben. RefInputRange. SetFocus Exit Sub Der inputRange darf nur eine Spalte enthalten. ElseIf inputRange. Rows. Count ltgt outputRange. Rows. Count Dann hat der MsgBox-Ausgabebereich eine andere Anzahl von Zeilen als der Eingabebereich. RefInputRange. SetFocus Exit Sub End If Die inputRange und outputRange müssen eine gleiche Anzahl von Zeilen haben. Dim RowCount Als Integer RowCount inputRange. Rows. Count DimRow als Integer ReDim-Inputarray (1 To RowCount) Für cRow 1 In RowCount inputarray (cRow) inputRange. Cells (cRow, 1).Value Next cRow inputarray wird als Array - und it8217s-Elemente deklariert Entsprechen den Werten aus jeder Zeile des Eingangsbereichs. Wenn inputPeriod gt RowCount Then MsgBox Anzahl der ausgewählten Beobachtungen ist amp RowCount amp und die Periode ist amp inputPeriod amp. Der Eingangsbereich muss eine höhere oder gleiche Anzahl von Elementen haben als der ausgewählte Zeitraum. RefInputRange. SetFocus Exit Sub End Wenn eine weitere Einschränkung hinzugefügt wird 8211 Der Eingabebereich muss eine höhere oder gleiche Menge an Elementen als die Periode haben. Wenn inputPeriod lt 0 dann MsgBox Moving durchschnittliche Periode größer als 0 sein muss. RefInputPeriod. SetFocus Exit Sub End If Die gleitende durchschnittliche Periode muss größer als Null sein. ReDim outputarray (inputPeriod To RowCount) Als Variant werden auch die Array-Dimensionen von outputarray bestimmt. Die untere Schranke des Arrays ist der Wert inputPeriod und die obere Schranke der Wert von RowCount (die Anzahl der Elemente im inputRange). Im folgenden Teil der Prozedur wurde der einfache gleitende Durchschnitt berechnet, wenn die Auswahl für comboTypeMA einfach ist. SMA ----------------------------------------- Wenn comboTypeMA. Value Simple Then Dim i , J Als Integer Dim temp als double Für i inputPeriod zu RowCount temp 0 Für j (i - (inputPeriod - 1)) Zu i temp temp inputarray (j) Next j outputarray (i) temp inputPeriod outputRange. Cells (i, 1).Value outputarray (i) Next outputRange. Cells (0, 1).Value SMA (amp inputPeriod amp) Grundsätzlich berechnet das Verfahren den gleitenden Durchschnitt der letzten x Zahlen (x entspricht der inputPeriod), beginnend mit dem Element von Das Inputarray gleich der inputPeriod. Unten ist ein vereinfachtes Beispiel, das jeden Schritt des Verfahrens zeigt. In diesem Beispiel gibt es vier Ziffern (no01, no02, no03 und no04) von Zeile 1 bis Zeile 4 und die gleitende durchschnittliche Periode ist 3. Nach jedem neuen gleitenden Durchschnitt berechnet jede Zelle des outputRange den Wert aus dem Wert Ausgabearray. Und nachdem alle gleitenden Mittelwerte berechnet werden, wird in der Zelle über outputRange ein Titel eingefügt, der den gleitenden Durchschnittstyp und die Periode enthält. Dieser nächste Teil wird den exponentiellen gleitenden Durchschnitt berechnen. EMA ------------------------------------------ ElseIf comboTypeMA. Value Exponential Dann Dim Alpha As Doppeltes alpha 2 (inputPeriod 1) Für j 1 Zu inputPeriod temp temp inputarray (j) Nächstes j outputarray (inputPeriod) temp inputPeriod Zunächst wird der Wert von alpha bestimmt. Da bei der Berechnung der Wert der EMA auf der vorherigen EMA basiert, wird der erste der einfache gleitende Durchschnitt sein. (I - 1) alpha (inputarray (i) - outputarray (i - 1)) Next i Beginnend mit dem zweiten gleitenden Durchschnitt werden sie auf der Grundlage der obigen Formel berechnet: Vorherige EMA plus alpha multipliziert mit der Differenz zwischen der aktuellen Zahl aus dem Eingangsarray und dem vorherigen EMA-Wert. (I, 1).Value outputarray (i) Next i outputRange. Cells (0, 1).Value EMA (amp inputPeriod amp) Genau wie der Code für SMA wird das Outputarray gefüllt und Die Zelle über Outputarray repräsentiert den Typ und die Periode des gleitenden Durchschnitts. Unten ist der Code für die Berechnung der gewichteten gleitenden Durchschnitt. WMA ------------------------------------------ ElseIf comboTypeMA. Value Weighted Then Dim Temp2 Als Integer Für i inputPeriod Zu RowCount temp 0 temp2 0 Für j (i - (inputPeriod - 1)) Zu i temp Inputarray (j) (j - i InputPeriod) temp2 temp2 (j - i inputPeriod) (I, 1).Value outputarray (i) Weiter i outputRange. Cells (0, 1).Value WMA (amp inputPeriod amp) End If Die folgende Tabelle enthält die Schritte für die Berechnung der einzelnen Variablen für die WMA-Berechnung. Genau wie im vorherigen Beispiel, in diesem gibt es für Zahlen im inputRange. Und die Eingabeperiode ist 3. Unten ist der endgültige Code der Prozedur, die das Benutzerformular entlädt. Unload MAForm End Sub Die folgende Prozedur ist für die Schaltfläche Abbrechen. Es wird in demselben Modul hinzugefügt. Private Sub buttonCancelClick () Unload MAForm End Sub

Comments