Thursday 16 November 2017

Einfach Bewegter Durchschnitt Vba Code


Moving Average Dieses Beispiel lehrt Sie, wie Sie den gleitenden Durchschnitt einer Zeitreihe in Excel berechnen können. Ein gleitender Durchschnitt wird verwendet, um Unregelmäßigkeiten (Gipfel und Täler) zu glätten, um Trends leicht zu erkennen. 1. Zuerst schauen wir uns unsere Zeitreihen an. 2. Klicken Sie auf der Registerkarte Daten auf Datenanalyse. Hinweis: Kann die Schaltfläche Datenanalyse nicht finden Hier klicken, um das Analysis ToolPak-Add-In zu laden. 3. Wählen Sie Moving Average und klicken Sie auf OK. 4. Klicken Sie in das Feld Eingabebereich und wählen Sie 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. 8. Zeichnen Sie einen Graphen dieser Werte. Erläuterung: Da wir das Intervall auf 6 setzen, ist der gleitende Durchschnitt der Durchschnitt der bisherigen 5 Datenpunkte und der aktuelle Datenpunkt. Dadurch werden Gipfel und Täler geglättet. Die Grafik zeigt einen zunehmenden Trend. Excel kann den gleitenden Durchschnitt für die ersten 5 Datenpunkte nicht berechnen, da es nicht genügend vorherige Datenpunkte gibt. 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 Gipfel und Täler geglättet. Je kleiner das Intervall ist, desto näher sind die gleitenden Mittelwerte zu den tatsächlichen Datenpunkten. Rolling Average Table Nachfolgend sehen wir uns ein Programm in Excel VBA an, das eine rollende durchschnittliche Tabelle erstellt. Setzen Sie eine Befehlsschaltfläche auf Ihr Arbeitsblatt und fügen Sie die folgende Codezeile hinzu: Bereich (quotB3quot).Value WorksheetFunction. RandBetween (0, 100) Diese Codezeile gibt eine Zufallszahl zwischen 0 und 100 in Zelle B3 ein. Wir wollen, dass Excel VBA den neuen Aktienwert einnimmt und ihn an die erste Position der rollenden Durchschnittstabelle stellt. Alle anderen Werte sollten sich um einen Platz bewegen und der letzte Wert sollte gelöscht werden. Erstellen Sie ein Worksheet Change Event. Code, der dem Worksheet Change Event hinzugefügt wird, wird von Excel VBA ausgeführt, wenn Sie eine Zelle auf einem Arbeitsblatt ändern. 2. Doppelklicken Sie im Projekt-Explorer auf Sheet1 (Sheet1). 3. Wählen Sie Arbeitsblatt aus der linken Dropdown-Liste aus. Wählen Sie aus der rechten Dropdown-Liste Ändern. Fügen Sie dem Worksheet Change Event folgende Codezeilen hinzu: 4. Deklarieren Sie eine Variable namens newvalue vom Typ Integer und zwei Bereiche (firstfourvalues ​​und lastfourvalues). Dim Neuwert als Integer. Firstfourvalues ​​As Range, lastfourvalues ​​Als Range 5. Das Worksheet Change Event hört alle Änderungen auf Sheet1. Wir wollen nur Excel VBA etwas tun, wenn sich etwas in Zelle B3 ändert. Um dies zu erreichen, füge die folgende Codezeile hinzu: Wenn Target. Address quotB3quot Then 6. Wir initialisieren Neuwert mit dem Wert der Zelle B3, firstfourvalues ​​mit Range (quotD3: D6quot) und lastfourvalues ​​mit Range (quotD4: D7quot). Newvalue Range (quotB3quot).Value Set firstfourvalues ​​Bereich (quotD3: D6quot) Set lastfourvalues ​​Bereich (quotD4: D7quot) 7. Jetzt kommt der einfache Trick. Wir wollen die rollende durchschnittliche Tabelle aktualisieren. Sie erreichen dies, indem Sie die letzten vier Werte durch die ersten vier Werte der Tabelle ersetzen und den neuen Aktienwert an die erste Position stellen. Lastfourvalues. Value firstfourvalues. Value Range (quotD3quot).Value newvalue 8. Vergessen Sie nicht, die if-Anweisung zu schließen. 9. Geben Sie schließlich die Formel AVERAGE (D3: D7) in die Zelle D8 ein. 10. Testen Sie das Programm, indem Sie auf den Befehl button. Here ist ein Code, der hilfreich sein sollte für diejenigen, die technische Analyse im Handel und wollen Strategien in Excel zu testen. Es berechnet den einfachen, linear gewichteten und exponentiellen gleitenden Durchschnitt. Außerdem werde ich die Schritte zur Erstellung des Formulars und des VBA-Codes vorstellen und erklären. Einfügen einer UserForm 8211 Name: MAForm Hinzufügen von vier Labels aus den Toolbox-Steuerelementen 8211 Beschriftungen wie oben gedruckter Bildschirm Hinzufügen einer ComboBox für die gleitende durchschnittliche Typauswahl. Es wurde als comboTypeMA bezeichnet. Füge zwei RefEdit-Steuerelemente für den Eingabebereich und den Ausgabebereich hinzu. Hinzufügen einer TextBox zum Auswählen der gleitenden durchschnittlichen Periode Hinzufügen von zwei Schaltflächen: Name: buttonSubmit, Beschriftung: Submit and Name: buttonCancel, Beschriftung: Abbrechen Um die Dropdown-Liste für MA-Typ-Auswahl zu generieren und das User-Formular zu laden, wird ein neues Modul Wird mit dem untenstehenden Code eingefügt. Die ComboBox-Elemente, die durch bewegte Mittelwerte und das Benutzerformular belegt werden, werden geladen. Option Explicit Sub loadMAForm () Mit MAFormboTypeMA. RowSource. AddItem Einfache. AddItem Weighted. AddItem Exponentialende Mit MAForm. Show End Sub Unten ist der Code, der der Schaltfläche Submit zugeschrieben wird. Private Sub buttonSubmitClick () Dim inputRange, outputRange As Range Der inputRange enthält die Preisreihe, die für die Berechnung der MAs verwendet wird, und der outputRange wird mit den gleitenden Mittelwerten gefüllt. Dim inputPeriod as Integer Die gleitende durchschnittliche Periode ist deklariert. Dim inputAddress, outputAddress As String Die als String deklarierten Ein - und Ausgabebereiche. Wenn comboTypeMA. Value ltgt Exponential Und comboTypeMA. Value ltgt Simple Und comboTypeMA. Value ltgt Weighted True Dann MsgBox Bitte wählen Sie einen gleitenden Durchschnitt Typ aus der Liste. RefInputRange. SetFocus Exit Sub Dieser Teil des Verfahrens erzwingt die ersten Einschränkungen bezüglich der übermittelten Daten. Wenn der gleitende Mitteltyp nicht in der Dropdown-Liste enthalten ist, geht die Prozedur nicht zum nächsten Schritt über, und der Benutzer wird aufgefordert, ihn erneut auszuwählen. ElseIf RefInputRange. Value Dann 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 Dann MsgBox Bitte wählen Sie die gleitende durchschnittliche Periode. RefInputPeriod. SetFocus Exit Sub ElseIf Nicht IsNumeric (RefInputPeriod. Value) Dann MsgBox Moving Average Periode muss eine Nummer sein. RefInputPeriod. SetFocus Exit Sub End Wenn andere Einschränkungen erstellt werden. Der Eingangsbereich, der Ausgangsbereich und die Eingabeperiode dürfen nicht leer sein. Auch die gleitende durchschnittliche Periode muss eine Zahl sein. InputAddress RefInputRange. Value Set inputRange Range (inputAddress) outputAddress RefOutputRange. Value Set outputRange Range (outputAddress) inputPeriod RefInputPeriod. Value Die Argumente für inputRange und outputRange Bereiche werden eingegebenAddress und outputAddress als Strings deklariert. Wenn inputRange. Columns. Count ltgt 1 Dann MsgBox Input Bereich kann nur eine Spalte haben. RefInputRange. SetFocus Exit Sub Der inputRange muss nur eine Spalte enthalten. ElseIf inputRange. Rows. Count ltgt outputRange. Rows. Count Dann MsgBox Output Bereich hat eine andere Anzahl von Zeilen als der Eingangsbereich. RefInputRange. SetFocus Exit Sub End Wenn der inputRange und outputRange eine gleiche Anzahl von Zeilen haben müssen. Dim RowCount als Integer RowCount inputRange. Rows. Count Dim cRow Als Integer ReDim inputarray (1 To RowCount) Für cRow 1 Zu 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. If inputPeriod gt RowCount Dann 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 Menge an 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 Average Periode muss höher als 0 sein. RefInputPeriod. SetFocus Exit Sub End Wenn die gleitende durchschnittliche Periode höher als Null sein muss. ReDim outputarray (inputPeriod To RowCount) Als Variant Auch die Array-Dimensionen von outputarray werden ermittelt. Die untere Schranke des Arrays ist der inputPeriod-Wert und die obere Grenze ist der Wert von RowCount (die Anzahl der Elemente im inputRange). Unterhalb des Verfahrens wurde der einfache gleitende Durchschnitt berechnet, wenn die Auswahl für comboTypeMA einfach ist. SMA ----------------------------------------- Wenn comboTypeMA. Value Simple Dann 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) Weiter j outputarray (i) temp inputPeriod outputRange. Cells (i, 1).Value outputarray (i) Next i outputRange. Cells (0, 1).Value SMA (amp inputPeriod amp) Grundsätzlich berechnet die Prozedur den gleitenden Durchschnitt der letzten x Zahlen (x entspricht der inputPeriod), beginnend mit dem Element von Das inputarray entspricht der inputPeriod. Unten ist ein vereinfachtes Beispiel, das jeden Schritt des Verfahrens zeigt. In diesem Beispiel gibt es vier Zahlen (no01, no02, no03 und no04) von Zeile 1 bis Zeile 4 und die gleitende durchschnittliche Periode ist 3. Nachdem jeder neue gleitende Durchschnitt berechnet wird, nimmt jede Zelle des outputRange den Wert aus dem Outputarray Und nachdem alle gleitenden Mittelwerte berechnet wurden, wird in der Zelle über outputRange ein Titel eingefügt, der die gleitende durchschnittliche Art und Periode enthält. Der nächste Teil wird den exponentiellen gleitenden Durchschnitt berechnen. EMA ------------------------------------------ ElseIf comboTypeMA. Value Exponential Dann Dim Alpha As Double alpha 2 (inputPeriod 1) Für j 1 Zur EingabePeriod temp temp inputarray (j) Weiter j outputarray (inputPeriod) temp inputPeriod Zuerst wird der Wert von alpha ermittelt. Denn in der Berechnung basiert der Wert der EMA auf der vorherigen EMA, der erste wird der einfache gleitende Durchschnitt sein. (I - 1) alpha (inputarray (i) - outputarray (i - 1)) Weiter i Mit dem zweiten gleitenden Durchschnitt werden sie auf der Grundlage der obigen Formel berechnet: die. Deutsch: www. tab. fzk. de/de/projekt/zusammenf...ng/ab117.htm Vorherige EMA plus alpha multipliziert mit der Differenz zwischen der aktuellen Nummer aus dem inputarray und dem vorherigen EMA-Wert. Für i inputPeriod Zu RowCount outputRange. Cells (i, 1).Value outputarray (i) Weiter 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 des gewichteten gleitenden Durchschnitts. 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 temp inputarray (j) (j - i inputPeriod) temp2 temp2 (j - i inputPeriod) Weiter j outputarray (i ) Temp temp2 outputRange. Cells (i, 1).Value outputarray (i) Next i outputRange. Cells (0, 1).Value WMA (amp inputPeriod amp) End If Die folgende Tabelle enthält die Schritte zum Berechnen jeder Variablen, die für die verwendet wird WMA-Berechnung. Genau wie im vorherigen Beispiel, in diesem gibt es für Zahlen in der inputRange. Und die Eingabeperiode ist 3. Unten ist der letzte Code der Prozedur, der das Benutzerformular entlädt. Entladen MAForm End Sub Die untenstehende Prozedur ist für die Schaltfläche Abbrechen. Es wird im selben Modul hinzugefügt. Private Sub buttonCancelClick () Entlade MAForm End Sub

No comments:

Post a Comment