Friday 3 November 2017

Vba Calculate Enkelt Moving Average


Flytende gjennomsnitt Dette eksemplet lærer deg hvordan du beregner det bevegelige gjennomsnittet av en tidsserie i Excel. Et glidende gjennomsnitt brukes til å utjevne uregelmessigheter (topper og daler) for enkelt å gjenkjenne trender. 1. Først, ta en titt på vår tidsserie. 2. På Data-fanen klikker du Dataanalyse. Merk: kan ikke finne dataanalyseknappen Klikk her for å laste inn add-in for Analysis ToolPak. 3. Velg Flytt gjennomsnitt og klikk OK. 4. Klikk i feltet Inngangsområde og velg området B2: M2. 5. Klikk i intervallboksen og skriv inn 6. 6. Klikk i feltet Utmatingsområde og velg celle B3. 8. Skriv en graf av disse verdiene. Forklaring: fordi vi angir intervallet til 6, er glidende gjennomsnitt gjennomsnittet for de forrige 5 datapunktene og det nåværende datapunktet. Som et resultat blir tinder og daler utjevnet. Grafen viser en økende trend. Excel kan ikke beregne det bevegelige gjennomsnittet for de første 5 datapunktene fordi det ikke er nok tidligere datapunkter. 9. Gjenta trinn 2 til 8 for intervall 2 og intervall 4. Konklusjon: Jo større intervallet jo flere tinder og daler utjevnes. Jo mindre intervallet, desto nærmere er de bevegelige gjennomsnittene til de faktiske datapunktene. Slik beregner du Flytte gjennomsnitt i Excel Excel Dataanalyse for dummier, 2. utgave Kommandoen Dataanalyse gir et verktøy for å beregne flytende og eksponensielt glatte gjennomsnitt i Excel. Anta, for illustrasjons skyld, at du har samlet inn daglig temperaturinformasjon. Du vil beregne tre-dagers glidende gjennomsnitt 8212 gjennomsnittet for de siste tre dagene 8212 som en del av noen enkle værprognoser. For å beregne bevegelige gjennomsnitt for dette datasettet, gjør du følgende trinn. For å beregne et bevegelige gjennomsnittsnivå, klikker du først på kommandoknappen Data tab8217s Data Analyse. Når Excel viser dialogboksen Dataanalyse, velger du elementet Flytende gjennomsnitt fra listen, og klikker deretter OK. Excel viser dialogboksen Moving Average. Identifiser dataene du vil bruke til å beregne det bevegelige gjennomsnittet. Klikk i tekstboksen Inngangsområde i dialogboksen Moving Average. Deretter identifiserer du innspillingsområdet, enten ved å skrive inn et regnearkområdeadresse eller ved å bruke musen til å velge regnearkområdet. Ditt referanseområde bør bruke absolutte celleadresser. En absolutt celleadresse går foran kolonnebrevet og radnummeret med tegn, som i A1: A10. Hvis den første cellen i innspillingsområdet inneholder en tekstetikett for å identifisere eller beskrive dataene dine, velger du avmerkingsboksen Etiketter i første rad. I tekstboksen Intervall, fortell Excel hvor mange verdier som skal inkluderes i gjennomsnittlig beregning i glidende retning. Du kan beregne et glidende gjennomsnitt ved å bruke et hvilket som helst antall verdier. Som standard bruker Excel de siste tre verdiene til å beregne glidende gjennomsnitt. For å angi at et annet antall verdier skal brukes til å beregne det bevegelige gjennomsnittet, skriv inn verdien i Intervall-tekstboksen. Fortell Excel hvor du skal plassere de bevegelige gjennomsnittsdataene. Bruk tekstboksen Utgangsområde for å identifisere arbeidsarkområdet som du vil plassere de bevegelige gjennomsnittsdataene i. I regnearkseksemplet er de bevegelige gjennomsnittsdataene plassert i regnearkområdet B2: B10. (Valgfritt) Angi om du vil ha et diagram. Hvis du vil ha et diagram som viser den bevegelige gjennomsnittlige informasjonen, markerer du avkrysningsboksen Kartutgang. (Valgfritt) Angi om du vil beregne standard feilinformasjon. Hvis du vil beregne standardfeil for dataene, merker du av for Standard feil. Excel plasserer standard feilverdier ved siden av de bevegelige gjennomsnittsverdiene. (Standardfeilinformasjonen går inn i C2: C10.) Når du er ferdig med å angi hvilken flytende gjennomsnittsinformasjon du vil beregne, og hvor du vil plassere den, klikker du OK. Excel beregner flytende gjennomsnittsinformasjon. Merk: Hvis Excel doesn8217t har nok informasjon til å beregne et glidende gjennomsnitt for en standardfeil, plasserer den feilmeldingen i cellen. Du kan se flere celler som viser denne feilmeldingen som en verdi. Her er en kode som skal være nyttig for de som bruker teknisk analyse i handel og vil teste strategier i Excel. Den beregner det enkle, lineært vektede og eksponentielle glidende gjennomsnittet. Videre vil jeg presentere og forklare trinnene for å lage skjemaet og VBA-koden. Sett inn en UserForm 8211 Navn: MAForm Legg til fire etiketter fra Verktøykasse-kontrollene 8211 Bildetekst som ovenfor over utskriftsskjerm Legg til en ComboBox for det bevegelige gjennomsnittlige typevalget. Den ble kalt comboTypeMA Legg til to RefEdit-kontroller for inngangsområdet og utgangsområdet. Legg til en tekstboks for å velge den bevegelige gjennomsnittlige perioden Legg til to knapper: Navn: knappSend inn, Vedlegg: Send inn og Navn: buttonCancel, Caption: Cancel For å generere rullegardinlisten for MA typevalg og last brukerformularen, en ny modul vil bli satt inn med underkoden. ComboBox-elementene som befolkes ved å flytte gjennomsnittstypene og brukerskjemaet vil bli lastet inn. Alternativ Eksplisitt Sub loadMAForm () Med MAFormboTypeMA. RowSource. AddItem Simple. AddItem Weighted. AddItem Eksponensiell slutt med MAForm. Show End Sub Nedenfor er koden tilordnet Submit-knappen. Privat Sub-knappSubmitClick () Dim inputRange, outputRange As Range Inngangsrangen vil inneholde prisseriene som brukes til å beregne MAs, og outputRange vil bli fylt med gjennomsnittene for glidende gjennomsnitt. Dim inputPeriod As Integer Den glidende gjennomsnittlige perioden er erklært. Dim inputAddress, outputAddress As String Inngangs - og utgangsområdet erklæres som streng. Hvis comboTypeMA. Value ltgt Exponential og comboTypeMA. Value ltgt Simple og comboTypeMA. Value ltgt Weighted True Så MsgBox Vennligst velg en bevegelig gjennomsnittlig type fra listen. RefInputRange. SetFocus Exit Sub Denne delen av prosedyren håndhever de første begrensningene angående innsendte data. Hvis den bevegelige gjennomsnittstypen ikke finnes i rullegardinlisten, går prosedyren ikke videre til neste trinn, og brukeren blir bedt om å velge den igjen. ElseIf RefInputRange. Value Så MsgBox Vennligst velg innspillingsområde. RefInputRange. SetFocus Avslutt Sub ElseIf RefOutputRange. Value Then MsgBox Vennligst velg utdataområde. RefOutputRange. SetFocus Avslutt Sub ElseIf RefInputPeriod. Value Så MsgBox Vennligst velg den bevegelige gjennomsnittlige perioden. RefInputPeriod. SetFocus Avslutt Sub ElseIf Not IsNumeric (RefInputPeriod. Value) Så MsgBox Flytende gjennomsnittlig periode må være et tall. RefInputPeriod. SetFocus Exit Sub End Hvis andre restriksjoner er opprettet. Inngangsområdet, utgangsområdet og inngangsperioden må ikke være tomt. Også den bevegelige gjennomsnittlige perioden må være et tall. inputAddress RefInputRange. Value Angi inputRange Range (inputAddress) outputAddress RefOutputRange. Value Sett outputRange Range (outputAddress) inputPeriod RefInputPeriod. Value Argumentene for inputRange og outputRange intervaller vil bli lagt innAddress og outputAddress erklært som strenger. Hvis inputRange. Columns. Count ltgt 1 Da MsgBox Input-område kan ha bare en kolonne. RefInputRange. SetFocus Exit Sub InputRange må bare inneholde en kolonne. ElseIf inputRange. Rows. Count ltgt outputRange. Rows. Count Deretter har MsgBox Output-rekkevidde et annet antall rader enn inngangsområdet. RefInputRange. SetFocus Exit Sub End Hvis inputRange og outputRange må ha et like antall rader. Dim RowCount As Integer RowCount inputRange. Rows. Count Dim cRow som integer ReDim inputarray (1 til RowCount) For cRow 1 til RowCount inputarray (cRow) inputRange. Cells (cRow, 1).Value Neste cRow inputarray er deklarert som array og it8217s elementer tilsvarer verdiene fra hver rad i inngangsområdet. Hvis inputPeriod gt RowCount Da MsgBox Antall valgte observasjoner er amp RowCount amp og perioden er amp inputPeriod amp. Inngangsområdet må ha en høyere eller lik mengde elementer enn den valgte perioden. RefInputRange. SetFocus Exit Sub End Hvis en annen begrensning er lagt til 8211 Inngangsområdet må ha en høyere eller lik antall elementer enn perioden. Hvis inputPeriod lt 0 Then MsgBox Flytende gjennomsnittlig periode må være høyere enn 0. RefInputPeriod. SetFocus Exit Sub End Hvis den glidende gjennomsnittlige perioden må være høyere enn null. ReDim outputarray (inputPeriod To RowCount) Som variant Også array dimensjonene av outputarray er bestemt. Den nedre grensen til arrayet er inputPeriod-verdien, og den øvre grensen er verdien av RowCount (antall elementer i inputRange). Under delen av prosedyren utregnet det enkle glidende gjennomsnittet, hvis valget for comboTypeMA er enkelt. SMA ----------------------------------------- Hvis comboTypeMA. Value Simple Da Dim i , j Som helhet Dim temp Som dobbelt For jeg inputPeriod To RowCount temp 0 For j (i - (inputPeriod - 1)) Til jeg temp temp inputarray (j) Neste j outputarray (i) temp inputPeriod outputRange. Cells (i, 1).Value outputarray (i) Neste jeg outputRange. Cells (0, 1).Value SMA (amp inputPeriod amp) I utgangspunktet beregner prosedyren det bevegelige gjennomsnittet av de siste x tallene (x er lik inngangsperioden), med utgangspunkt i elementet i inputarrayet er lik inngangenPeriod. Nedenfor er et forenklet eksempel, som viser hvert trinn i prosedyren. I dette eksemplet er det fire tall (no01, no02, no03 og no04) fra rad 1 til rad 4 og den bevegelige gjennomsnittlige perioden er 3. Etter hvert nytt glidende gjennomsnitt beregnes, vil hver celle i outputRange ta verdien fra outputarray. Og etter hvert beregnes de bevegelige gjennomsnittene, i cellen over outputRange vil en tittel bli satt inn som inneholder den bevegelige gjennomsnittstypen og perioden. Denne neste delen beregner eksponentielt glidende gjennomsnitt. EMA ------------------------------------------ ElseIf comboTypeMA. Value Exponential Then Dim alfa Som dobbel alfa 2 (inputPeriod 1) For j 1 Til inputPeriod temp temp inputarray (j) Neste j outputarray (inputPeriod) temp inputPeriod Først bestemmes verdien av alfa. Fordi i beregningen er verdien av EMA basert på den tidligere EMA, vil den første være det enkle glidende gjennomsnittet. For jeg inputPeriod 1 To RowCount outputarray (i) outputarray (i - 1) alfa (inputarray (i) - outputarray (i - 1)) Neste jeg Starter med andre glidende gjennomsnitt, blir de beregnet ut fra formelen ovenfor: forrige EMA pluss alfa multiplisert med forskjellen mellom det nåværende nummeret fra inputarrayet og den tidligere EMA-verdien. For jeg inputPeriod To RowCount outputRange. Cells (i, 1).Value outputarray (i) Neste jeg outputRange. Cells (0, 1).Value EMA (amp inputPeriod amp) På samme måte som koden for SMA, vil outputarray bli befolket og cellen over outputarray vil representere typen og perioden for det bevegelige gjennomsnittet. Nedenfor er koden for beregning av det veide glidende gjennomsnittet. WMA ------------------------------------------ ElseIf comboTypeMA. Value Weighted Then Dim temp2 Som helhet For jeg inputPeriod To RowCount temp 0 temp2 0 For j (i - (inputPeriod - 1)) Til jeg temp temp inputarray (j) (j - i inputPeriod) temp2 temp2 (j - i inputPeriod) Neste j outputarray ) temp temp2 outputRange. Cells (i, 1).Value outputarray (i) Neste jeg outputRange. Cells (0, 1).Value WMA (amp inputPeriod amp) End Hvis nedenstående tabell inneholder trinnene for å beregne hver variabel som brukes til WMA-beregning. På samme måte som i det forrige eksempelet, er det for tall i inputRange. og inngangsperioden er 3. Nedenfor er den endelige koden til prosedyren, som laster ut brukerskjemaet. Loss MAForm End Sub Denne prosedyren er for Cancel-knappen. Det vil bli lagt til i samme modul. Privat Sub-knappCancelClick () Løs MAForm End SubMoving Gjennomsnittlig Beregning Flytende Gjennomsnittlig Beregning Flytende Gjennomsnittlig Beregning Jeg prøver å beregne et glidende gjennomsnitt for en serie data. Jeg vil generere det bevegelige gjennomsnittet for hvert punkt i dataene for å vise i en graf. Uansett, nedenfor er et eksempel fra MS Support. Jeg har fulgt til brevet, men min gir ikke et bevegelige gjennomsnitt. Den gjentar det samme datapunktet igjen og igjen (det første datapunktet). Så jeg tror ikke funksjonen er å finne startdatoen i MyRST. Seek-linjen, og returnerer derfor bare det første datapunktet. Endelig (kanskje gjør dette veldig enkelt) Jeg er forvirret om hvordan indeksene fungerer. Jeg trodde du kunne bare ha en primærnøkkel, men tilsynelatende kan du opprette flere feltbegrensninger. Jeg har forsøkt å gjøre dette med følgende datadefinisjonsforespørsel: ALTER TABLE Table1 ADD CONSTRAINT NoDupes UNIQUE (ValutaType, TransactionDate) Beklager lengden på dette innlegget. Jeg setter pris på hjelpen din. Følgende utvalgsfunksjon beregner bevegelige gjennomsnitt basert på et bord med en primærnøkkel med flere felt. Den ukentlige verdien av utenlandsk valuta brukes til dette eksemplet. For å opprette prøvefunksjonen, følg disse trinnene: Opprett følgende tabell og lagre den som Tabell1: Tabell: Tabell1 --------------------------- -------------- Feltnavn: ValutaType Primærnøkkeldatatype: Tekstfeltstørrelse: 25 Feltnavn: Transaksjonsdato Primærnøkkeldatatype: DateTimeformat: Kort dato Feltnavn: Ranger Datatype: Valuta Decimal Steder: 4 Se tabellen i databladvisning og skriv inn følgende verdier: CurrencyType TransactionDate Rate ------------------------------- ------------- Yen 8693 0.0079 Yen 81393 0.0082 Yen 82093 0.0085 Yen 82793 0.0088 Yen 9393 0.0091 Mark 8693 0.5600 Mark 81393 0.5700 Mark 82093 0.5800 Mark 82793 0.5900 Mark 9393 0.6000 Åpne en ny modul og skriv inn Følgende funksjoner: Funksjon MAvgs (Perioder som helhet, StartDate, TypeName) Dim MyDB Som DATABASE, MyRST Som RecordSet, MySum As Double Dim I, x Sett MyDB CurrentDb () Set MyRST MyDB. OpenRecordset (Tabell1) På Feil Fortsett Neste MyRST. Index PrimaryKey x Perioder - 1 ReDim Store (x) MySum 0 For i 0 Til x MyRST. MoveFirst MyRST. Seek, TypeName, StartDate Disse to variablene skal være i samme rekkefølge som de primære nøkkelfeltene i tabellen. Lagre (i) MyRSTRate Hvis I lt x Så StartDate StartDate - 7 De 7 her antar ukentlig data 1 for daglige data. Hvis StartDate lt 8693 Da blir MAvgs Null: Exit Function 8693 erstattet med den tidligste datoen i dataene i tabellen. MySum Store (i) MySum Next I MAvgs MySum Perioder MyRST. Close End Function Opprett følgende spørring basert på Table1-tabellen: Query: Query1 --------------------- ---------------------------------- Felt: ValutaType Felt: Transaksjonsdatafelt: Feltfelt: Expr1: MAvgs (3 , TransactionDate, CurrencyType) MERK: Denne spørringen vil generere et tre ukers glidende gjennomsnitt av prisdataene. For å beregne et lengre eller kortere glidende gjennomsnitt, endre tallet 3 i querys Expr1-kolonnen til verdien du vil beregne. Kjør spørringen. Vær oppmerksom på at du ser følgende tre ukers glidende gjennomsnitt for hver valuta. En null-verdi indikerer at det ikke var nok tidligere verdier til å beregne det gjennomsnittet for uker. Valuta Type TransaksjonsDate-rate Expr1 Mark 080693 0.5600 Mark 081393 0.5700 Mark 082093 0.5800 0.57 Mark 082793 0.5900 0.58 Mark 090693 0.6000 0.59 Yen 080693 0.0079 Yen 081393 0.0082 Yen 082093 0.0085 0.0082 Yen 082793 0.0088 0.0085 Yen 090393 0.0091 0.0088 RE: Moving Average Calculation dhookom (Programmerer) 28 Jun 10 21:15 Hvor gammel er den koden Den bruker ikke eksplisitt DAO og nevner ikke at dette ikke vil fungere sammen med koblede tabeller. Dim MyDB som DAO. Database, MyRST som DAO. Recordset. Jeg ville bruke en subquery i stedet for et platesett. Det kan se ut som: SELECT CurrencyType, TransactionDate, Rate, (velg gjennomsnitt (rente) fra tabell1 B hvor A. valutaType B. valutaType og A. TransactionDate mellom B. TransactionDate - 14 og B. TransactionDate) fra tabell1 A RE: Moving Gjennomsnittlig beregning Det er virkelig perfekt. Jeg setter virkelig pris på hjelpen din. Koden du oppgav, beregner fremdeles 14 dagers glidende gjennomsnitt (plasserer glidende gjennomsnitt i posten for dag 1 i gjennomsnittet, der jeg ønsket at det skulle være et bakoverrettet gjennomsnitt, plassert i post 14). Jeg endret bare litt til følgende, og det ser ut til å fungere SELECT A. CurrencyType, A. TransactionDate, A. Rate, (SELECT Avg (Rate) FRA Tabell 1 B WHERE A. CurrencyType B. CurrencyType OG B. TransactionDate MELLOM A. TransactionDate - 14 OG A. TransactionDate) AS Expr1 FRA Tabell 1 AS A Du kan se, alt jeg gjorde var utveksling A for B i hvor klausulen. Dette er en veldig stor hjelp til meg, og jeg setter stor pris på det. Jeg har ikke sett koding som dette før, og ærlig talt forstår jeg ikke virkelig det. Jeg vet ikke hvordan SQL forstår hva B og A er. Jeg antar at de lager en slags alternativ referanse til tabell1. Hvis du kan gi noen veiledning, vil jeg virkelig sette pris på det. Også, kanskje noen referanse til materiale som jeg kunne se på Jeg er alltid veldig spent på å lære noe nytt om VBASQL, og jeg setter stor pris på din hjelp RE: Flytte gjennomsnittlig beregning PHV (MIS) 29 Jun 10 12:22 forstår hva B og A er de alias es RE: Flytte gjennomsnittlig beregning Takk, PHV. Det er bedre å forstå allerede RE: Moving Average Calculation joshery420 (TechnicalUser) 6 Jul 10 15:06 Wow, har aldri sett på SQL-visning før. Ypperlig hjelpsomme. Jeg prøver å få denne koden til å fungere i mitt eget datasett og jeg holder fast på et bestemt problem. pd2004, ikke sikker på om den nye subquery-koden fungerte på samme måte som den gamle VBA-koden eller ikke, men med dataene mine vises det fortsatt rullende gjennomsnitt, selv om det ikke er nok dager til å lage en lengde på gjennomsnittet. f. eks Hvis jeg utfører et 7-dagers rullende gjennomsnitt, viser dag 1 de samme dataene i 7DayAvg-kolonnen som det gjør i den daglige datakolonnen. Dag 2 vil vise gjennomsnittet av Dager 1 og 2, osv. Har noen av dere vite hvordan du skal fikse dette ved en tilfeldighet Også, takk for den gode kodetipset PHV. RE: Flytte gjennomsnittlig beregning joshery420 (TechnicalUser) 6 Jul 10 15:08 Woops, mente å takke dhookom for kodetoppen, ikke PHV. Men hei, takk til dere begge. XD RE: Flytte gjennomsnittlig beregning Jeg vil etterlate de beste løsningene til fagpersonene her, men du kan se i mitt opprinnelige innlegg hvordan Microsoft Help-eksemplet forsøker å håndtere det. Her er koden: Hvis StartDate lt 8693 Da blir MAvgs Null: Exit Function 8693 erstattet med den tidligste datoen i dataene i tabellen. De utelukker bare funksjonen dersom datoen ikke passer til kriteriene. Jeg vet ikke om du kunne inkorporere noe sånt i aliaskoden som ble levert av dhookem. Jeg liker ikke deres måte å håndtere dette på, og jeg mistenker at dhookem vil gi en mye mer elegant løsning. For mitt formål er problemet du beskriver, ikke noe problem, men jeg vil være interessert i å se noen løsninger. RE: Flytte gjennomsnittlig beregning dhookom (Programmerer) 6 Jul 10 17:05 Du kan prøve å bruke IIf () for å teste for en telling av antall poster. Forsiktig: Ikke testet notisblokkkoden følger: SELECT A. CurrencyType, A. TransactionDate, A. Rate, IIF ((SELECT Count (Rate) FRA Tabell 1 C HVOR A. CurrencyType C. CurrencyType OG C. TransactionDate MELLOM A. TransactionDate - 14 AND A. TransactionDate) 7, (SELECT Avg (Rate) FRA Tabell 1 B WHERE A. CurrencyType B. CurrencyType OG B. TransactionDate MELLOM A. TransactionDate - 14 AND A. TransactionDate), Null) AS Expr1 FRA Tabell 1 AS A RE: Moving Average Calculation

No comments:

Post a Comment