Thursday 2 March 2017

Moving Average Code Vba

Ich möchte einen gleitenden Durchschnitt der letzten, sagen 20, Zahlen einer Spalte zu berechnen. Ein Problem ist, dass einige der Zellen der Spalte leer sein können, sollten sie ignoriert werden. Beispiel: Ein gleitender Durchschnitt der letzten drei wäre (155167201) 3. Ive versucht, dies mit Mittelwert, Offset, Index zu implementieren, aber ich weiß einfach nicht, wie. Im ein bisschen vertraut mit Makros, so eine solche Lösung würde gut funktionieren: MovingAverage (A13) Vielen Dank für alle Tipps oder Lösungen gefragt Mar 12 11 um 15:36 Geben Sie dies mit controlshiftenter, um es eine Array-Formel zu machen. 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. Dieser Teil gibt die 4. höchste Zeilennummer aller Zellen mit einem Wert oder 5 in deinem Beispiel zurück, 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, je nachdem, ob die Zeilennummer größer als die 4. größte ist. Dies multipliziert die Werte in A1: A9 mit diesen 9 TRUEs oder FALSEs. TRUEs werden in 1 und FALSEs auf Null umgewandelt. Dies verlässt eine SUM-Funktion wie folgt Da alle Werte über 155 nicht das Zeilennummerkriterium erfüllen, wird das mit Null multipliziert. Ich habe ein kurzes Skript in VBA geschrieben. Hoffentlich tut es was du willst. Hier sind Sie: 1) Ich habe Limit auf 360 Zellen gesetzt. Es bedeutet, dass das Skript nicht mehr als 360 Zellen sucht. Wenn Sie es ändern möchten, ändern Sie den Anfangswert des Zählers. 2) Das Skript gibt keinen abgerundeten Durchschnitt zurück. Ändern Sie die letzte Zeile in MovingAverage Round (CDbl (tmp i), 2) 3) Die Verwendung ist genau wie Sie wollten, also geben Sie einfach MovingAverage (a13) in die Zelle ein. Alle Kommentare sind willkommen. Rolling Durchschnittliche Tabelle Unten sehen wir ein Programm in Excel VBA, die 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, wobei 2 (1 n) Der Index t wird verwendet, um die Zeit z. B. zu bezeichnen. T-1 bezieht sich auf den Zeitraum vor t und n, der vom Benutzer angegeben werden soll, bezieht sich auf die Mittelungsperiode der EMA. Zum Beispiel hat das EMA-Äquivalent eines 3 Perioden einfachen gleitenden Durchschnittes n von 3. Je größer der Wert von n ist, desto kleiner wird. Dies führt zu einem größeren (1-) und das mehr von EMA t-1 wird in EMA t beibehalten. Der erste Wert von EMA in einer Zeitreihe kann als ein einfacher gleitender Durchschnitt von n Tage8217 der Preise angenommen werden. Einige Benutzer können es auch vorziehen, den ersten Wert der EMA ab dem zweiten Zeitraum zu starten, wo EMA auf Periode 2 x Periode 2 Preis (1 8211) x Zeitraum 1 Preis. Die Benutzer sollten verstehen, dass der exponentielle gleitende Durchschnitt tatsächlich eine unendliche Serienerweiterung ist, wo die früheren Preise ein zunehmend geringeres Gewicht auf EMA t haben. Betrachten Sie folgendes: Dies führt dazu, dass die EMA rektiver und weniger flüchtig ist als ihr einfaches gleitendes Mitteläquivalent. Eine ausführlichere Diskussion darüber finden Sie in meinem Artikel über Filter in Finanz-und technische Analyse. Methode A verwendet Funktionen, während Methode B Unterprozeduren verwendet, um CMF zu berechnen. Methode B ist schneller und flexibler. Fügen Sie diesen Code in Ihr ThisWorkBook Code-Fenster in VBA ein. Klicken Sie mit der rechten Maustaste auf dieses WorkBook im Projekt-Explorer und klicken Sie auf Code anzeigen. Private Sub WorkbookOpen () Der Rest gehört zu jedem Modul Tagt Excel, um diese in der Liste der Funktionen, fügen Sie Beschreibungen zu ihnen und erstellen Sie eine neue Kategorie namens Technical Indicators. Application. MacroOptions macro: EMA, Beschreibung: Gibt den Exponential Moving Average zurück. Amp Chr (10) amp Chr (10) amp Wählen Sie die letzten Perioden EMA oder letzten Perioden Preis, wenn aktuelle Periode ist die erste. Amp Chr (10) amp Chr (10) amp Gefolgt von aktuellen Preis und n. Amp Chr (10) amp Chr (10) amp Chr (10) amp Der Zerfallsfaktor des exponentiellen gleitenden Durchschnitts wird als alpha2 (n1) berechnet, Public Function EMA (EMAY, Preis, n) EMA Alpha Preis (1 - Alpha) EMAYesterday Sobald Sie mit dem oben genannten fertig sind, können Sie den exponentiellen gleitenden Durchschnitt berechnen, indem Sie in jede Zelle EMA (Last Period EMA, Current Price, n) eingeben. Geben Sie den letzten Periodenpreis als letzter Zeitraum EMA ein, wenn Sie die erste EMA Ihres Datensatzes berechnen. Um Methode B auszuführen, musst du das Runthis-Sub von der Seite auf AccumulationDistribution Line in dein Modul kopieren. Du musst auch EMA aus dem Runthis sub ausführen. Fügen Sie die folgende Zeile zu dem Sub Runthis Platzieren Sie es rechts vor End Sub Und deaktivieren Sie alle anderen Makros, die Runthis aufrufen wird Diese Sub wird mit der Berechnung von EMA ab t2 beginnen Sub EMA (close1 As Range, Ausgabe als Range, n wie lange) close0 close1 ( 1, 1).Address (False, False) close1a close1 (2, 1).Address (False, False) Ausgang1 Ausgang (1, 1).Address (False, False) Ausgang (2, 1).Value 2 (1 Amp n amp) amp close1a amp (1-2 (1 amp n amp)) amp output1 output (2, 1).Value 2 (1 amp n amp) amp close1a amp (1-2 (1 amp n amp)) amp Close0 Wie das, was du gerade gelesen hast, Digg es oder Tipd es. Das Ziel von Finance4Traders ist es, den Händlern dabei zu helfen, sie zu begleiten, indem sie ihnen eine neutrale Forschung und Ideen bringen. Seit Ende 2005 entwickle ich Handelsstrategien auf persönlicher Basis. Nicht alle diese Modelle sind für mich geeignet, aber andere Investoren oder Händler könnten sie nützlich finden. Immerhin haben die Menschen unterschiedliche Investitionsziele und Gewohnheiten. So wird Finance4Traders eine praktische Plattform, um meine Arbeit zu verbreiten. (Lesen Sie mehr über Finance4Traders) Bitte nutzen Sie diese Website in geeigneter und rücksichtsvoller Weise. Dies bedeutet, dass Sie Finance4Traders zitieren sollten, indem Sie zumindest einen Link zurück zu dieser Website bereitstellen, wenn Sie irgendwelche unserer Inhalte verwenden. Darüber hinaus ist es Ihnen nicht gestattet, unsere Inhalte rechtswidrig zu nutzen. Sie sollten auch verstehen, dass unsere Inhalte ohne Gewährleistung zur Verfügung gestellt werden und Sie sollten selbstverständlich unsere Inhalte überprüfen, bevor Sie sich auf sie verlassen. Verweisen Sie auf die Website-Content-Politik und Datenschutzrichtlinie beim Besuch dieser Website. 0 Kommentare: Kommentar schreiben Eine Handelsstrategie ist einer Unternehmensstrategie sehr ähnlich. Kritisch das Studium Ihrer Ressourcen wird Ihnen helfen, effektivere Entscheidungen zu treffen. (Weiterlesen) 8226 Technische Indikatoren verstehen Technische Indikatoren sind mehr als nur Gleichungen. Gut entwickelte Indikatoren, wenn sie wissenschaftlich angewendet werden, sind eigentlich Werkzeuge, um Händler dabei zu helfen, kritische Informationen aus Finanzdaten zu extrahieren. (Read on) 8226 Warum ich es vorziehe, Excel Excel zu verwenden, präsentiert Ihnen die Daten visuell. Dies macht es Ihnen viel einfacher, Ihre Arbeit zu verstehen und Zeit zu sparen. (Weiter lesen)


No comments:

Post a Comment