Tuesday 31 October 2017

Flytting Gjennomsnitt Beregningsalgoritme


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, jo nærmere de bevegelige gjennomsnittene er de faktiske datapunktene. Gjennomsnittlig gjennomsnitt: Hva er de Blant de mest populære tekniske indikatorene, er glidende gjennomsnitt brukt til å måle retningen for den nåværende trenden. Hver type bevegelige gjennomsnitt (vanligvis skrevet i denne opplæringen som MA) er et matematisk resultat som beregnes ved å beregne et antall tidligere datapunkter. Når det er bestemt, blir det resulterende gjennomsnittet plottet på et diagram for å tillate handelsmenn å se på glatt data, i stedet for å fokusere på de daglige prisfluktuasjonene som er iboende i alle finansmarkeder. Den enkleste formen for et bevegelige gjennomsnitt, riktig kjent som et enkelt glidende gjennomsnitt (SMA), beregnes ved å ta det aritmetiske gjennomsnittet av et gitt sett av verdier. For eksempel, for å beregne et grunnleggende 10-dagers glidende gjennomsnitt vil du legge til sluttkursene fra de siste 10 dagene, og deretter dele resultatet med 10. I figur 1 er summen av prisene for de siste 10 dagene (110) dividert med antall dager (10) for å komme fram til 10-dagers gjennomsnittet. Hvis en forhandler ønsker å se et 50-dagers gjennomsnitt i stedet, vil samme type beregning bli gjort, men det vil inkludere prisene i løpet av de siste 50 dagene. Det resulterende gjennomsnittet under (11) tar hensyn til de siste 10 datapunktene for å gi handelsmenn en ide om hvordan en eiendel er priset i forhold til de siste 10 dagene. Kanskje du lurer på hvorfor tekniske handelsfolk kaller dette verktøyet et bevegelige gjennomsnitt og ikke bare en vanlig gjennomsnitt. Svaret er at når nye verdier blir tilgjengelige, må de eldste datapunktene slippes fra settet og nye datapunkter må komme inn for å erstatte dem. Dermed går datasettet kontinuerlig til å regne for nye data etter hvert som det blir tilgjengelig. Denne beregningsmetoden sikrer at bare den nåværende informasjonen blir regnskapsført. I figur 2 flyttes den røde boksen (som representerer de siste 10 datapunktene) til høyre, og den siste verdien av 15 blir tapt fra beregningen når den nye verdien av 5 er lagt til settet. Fordi den relativt små verdien av 5 erstatter den høye verdien på 15, ville du forvente å se gjennomsnittet av datasettets reduksjon, som det gjør, i dette tilfellet fra 11 til 10. Hva ser Moving Averages Like Når verdiene til MA har blitt beregnet, de er plottet på et diagram og deretter koblet til for å skape en bevegelig gjennomsnittslinje. Disse svingete linjene er vanlige på diagrammer av tekniske handelsfolk, men hvordan de brukes kan variere drastisk (mer om dette senere). Som du kan se i figur 3, er det mulig å legge til mer enn ett glidende gjennomsnitt i et diagram ved å justere antall tidsperioder som brukes i beregningen. Disse svingete linjene kan virke distraherende eller forvirrende i begynnelsen, men du vil bli vant til dem når tiden går videre. Den røde linjen er bare gjennomsnittsprisen de siste 50 dagene, mens den blå linjen er gjennomsnittsprisen de siste 100 dagene. Nå som du forstår hva et glidende gjennomsnitt er, og hvordan det ser ut, kan du godt presentere en annen type glidende gjennomsnitt og undersøke hvordan det er forskjellig fra det tidligere nevnte enkle glidende gjennomsnittet. Det enkle glidende gjennomsnittet er ekstremt populært blant handelsfolk, men som alle tekniske indikatorer har det kritikere. Mange individer hevder at bruken av SMA er begrenset fordi hvert punkt i dataserien vektes det samme, uavhengig av hvor det forekommer i sekvensen. Kritikere hevder at de nyeste dataene er mer signifikante enn de eldre dataene, og bør ha større innflytelse på sluttresultatet. Som svar på denne kritikken begynte handelsmenn å gi mer vekt på nyere data, som siden har ført til oppfinnelsen av ulike typer nye gjennomsnitt, hvorav den mest populære er det eksponentielle glidende gjennomsnittet (EMA). (For videre lesing, se Grunnleggende om vektede bevegelige gjennomsnitt og hva som er forskjellen mellom en SMA og en EMA) Eksponentiell flytende gjennomsnitt Det eksponentielle glidende gjennomsnittet er en type bevegelige gjennomsnitt som gir mer vekt til de siste prisene i et forsøk på å gjøre det mer responsivt til ny informasjon. Å lære den noe kompliserte ligningen for å beregne en EMA kan være unødvendig for mange forhandlere, siden nesten alle kartleggingspakker gjør beregningene for deg. Men for deg matematiske geeks der ute, her er EMA-ligningen: Når du bruker formelen til å beregne det første punktet til EMA, kan det hende du merker at det ikke er noen verdi tilgjengelig for bruk som den forrige EMA. Dette lille problemet kan løses ved å starte beregningen med et enkelt glidende gjennomsnitt og fortsette videre med den ovennevnte formelen derfra. Vi har gitt deg et eksempelkart som inneholder virkelige eksempler på hvordan du kan beregne både et enkelt glidende gjennomsnitt og et eksponentielt glidende gjennomsnitt. Forskjellen mellom EMA og SMA Nå som du har en bedre forståelse av hvordan SMA og EMA beregnes, kan vi se på hvordan disse gjennomsnittene er forskjellige. Ved å se på beregningen av EMA, vil du legge merke til at det legges større vekt på de siste datapunktene, noe som gjør det til en type vektet gjennomsnitt. I figur 5 er antall tidsperioder som brukes i hvert gjennomsnitt identisk (15), men EMA reagerer raskere på de endrede prisene. Legg merke til hvordan EMA har en høyere verdi når prisen stiger, og faller raskere enn SMA når prisen senker. Denne responsen er den viktigste grunnen til at mange handelsmenn foretrekker å bruke EMA over SMA. Hva betyr de forskjellige dagene Gjennomsnittlig flytteverdi er en helt tilpassbar indikator, noe som betyr at brukeren fritt kan velge hvilken tidsramme de vil ha når man lager gjennomsnittet. De vanligste tidsperioder som brukes i bevegelige gjennomsnitt er 15, 20, 30, 50, 100 og 200 dager. Jo kortere tidsrammen som brukes til å skape gjennomsnittet, jo mer følsomt blir det for prisendringer. Jo lengre tidsrom, jo ​​mindre følsomt, eller mer utjevnet, vil gjennomsnittet være. Det er ingen riktig tidsramme som skal brukes når du oppretter dine bevegelige gjennomsnitt. Den beste måten å finne ut hvilken som passer best for deg, er å eksperimentere med en rekke forskjellige tidsperioder til du finner en som passer til din strategi. Flytte gjennomsnitt: Hvordan bruke dem Jeg vil implementere en iterativ algoritme, som beregner vektet gjennomsnitt. Den spesifikke vektloven spiller ingen rolle, men den bør være nær 1 for de nyeste verdiene og nær 0 til den eldste. Algoritmen skal være iterativ. dvs. det bør ikke huske alle tidligere verdier. Den skal bare kjenne en nyeste verdi og eventuelle aggregerende opplysninger om fortid, som tidligere verdier av gjennomsnittet, summer, teller etc. For eksempel kan følgende algoritme være: Det vil gi eksponentiell avtagende vekt, noe som kanskje ikke er bra. Er det mulig å få trinn som minker vekten eller noe Kravene til veierett er følgende: 1) Vekten minker inn i fortiden 2) Jeg har noen gjennomsnittlig eller karakteristisk varighet, slik at verdier eldre denne varigheten betyr mye mindre enn nyere 3) Jeg bør kunne angi denne varigheten jeg trenger følgende. Anta at vi er verdier, hvor v1 er den første. Anta også at wi er vekter. Men w0 er den siste. Så etter at første verdi kom, fikk jeg første gjennomsnitt Etter at den andre verdien v2 kom, burde jeg ha gjennomsnittet. Med neste verdi skulle jeg ha Merk, at vektprofilen beveger seg med meg mens jeg beveger seg langs verdien. Dvs. hver verdi har ikke sin egen vekt hele tiden. Målet mitt er å ha denne vekten lavere mens du går forbi. gt Men min oppgave er å ha gjennomsnittlig omberegnet hver gang ny verdi kommer til å ha gamle verdier reweighted. OP Din oppgave er nesten alltid umulig, selv med svært enkle veier. Du ber om, med O (1) minne, gi gjennomsnitt med en endringsvekteskjema. For eksempel, når nye verdier blir sendt inn, for noen nesten vilkårlige endringer i vekter-sekvensen. Dette er umulig på grunn av injeksjonsevne. Når du slår sammen tallene sammen, mister du en enorm mengde informasjon. For eksempel, selv om du hadde vektvektoren. du kunne ikke gjenopprette den opprinnelige verdien vektoren, eller omvendt. Det er bare to tilfeller jeg kan tenke på hvor du kunne komme unna med dette: Konstante vekter som 2,2,2. 2: Dette tilsvarer en gjennomsnittlig algoritme på nettet, som du ikke vil, fordi de gamle verdiene ikke blir reweighted. Relativviktene til tidligere svar endres ikke. For eksempel kan du gjøre vekter på 8,4,2,1. og legg til i et nytt element med vilkårlig vekt som. 1. men du må øke alle tidligere med samme multiplikative faktor, som 16,8,4,21. På hvert trinn legger du til en ny vilkårlig vekt og en ny vilkårlig rescaling av fortiden, slik at du har 2 frihetsgrader (kun 1 hvis du trenger å beholde dotproduktet normalisert). Vektvektorer du får vil se ut: Således kan en vektingsplan som du ser slik ut, fungere (med mindre du trenger å holde saken normalisert med summen av vekter, da må du da dele det nye gjennomsnittet med det nye sum, som du kan beregne ved å bare holde O (1) minne). Bare multipliser det forrige gjennomsnittet av de nye s (som vil implisitt distribuere over prikkproduktet i vekter), og takk på den nye wnewValue. svarte 29. mars kl 21:27 Her antar du at vektene skal summe til 1. Så lenge du kan generere en relativ vekt uten at den endres i fremtiden, kan du ende opp med en løsning som etterligner denne oppførselen. Det vil si at du har definert dine vekter som en sekvens og definert inngangen som sekvens. Vurder skjemaet: sum (s0i0 s1i1 s2i2. Snin) sum (s0 s1 s2. Sn). Vær oppmerksom på at det er trivielt mulig å beregne dette trinnvis med et par aggregerings tellere: Selvfølgelig, beregneWeightFromCounter () i dette tilfellet bør ikke generere vekter som summerer til ett - trikset her er det vi gjennomsnittlig ved å dividere med summen av vekter slik at i slutten synes vekter nesten å summe til en. Det virkelige trikset er hvordan du beregnerWeightFromCounter (). Du kan rett og slett returnere telleren selv, for eksempel vær oppmerksom på at det siste vektede tallet ikke ville være nær summen av tellerne nødvendigvis, slik at du kanskje ikke ender opp med de nøyaktige egenskapene du vil ha. (Det er vanskelig å si siden du har forlatt et ganske åpent problem.) Besvart 28. mar 12 kl 21:45 Problemet er at vekter endrer seg med hver ny verdi. I ditt tilfelle er de ikke. ndash Suzan Cioc Mar 29 12 kl 14:43 De faktiske brukte vektene endrer seg med hver ny verdi - kvotenesquot blir delt med et suksessivt større tall, og derved styrker at de faktiske brukte vektene alltid belaster til 1. ndash Kaganar Mar 29 12 klokken 14:45 Dette er for lang tid å legge inn i en kommentar, men det kan være nyttig å vite. Anta at du har: w0vn. wnv0 (vel ring dette w0..nvn..0 for kort) Så er neste trinn: w0vn1. wn1v0 (og dette er w0..n1vn1..0 for kort) Dette betyr at vi trenger en måte å beregne w1..n1vn..0 fra w0..nvn..0. Det er sikkert mulig at vn..0 er 0. 0, z, 0. 0 hvor z er på noe sted x. Hvis vi ikke har ekstra lagringsplass, så er f (zw (x)) zw (x 1) hvor w (x) er vekten for plassering x. Omarrangere ligningen, w (x 1) f (zw (x)) z. Vel, w (x 1) bedre være konstant for en konstant x, så f (zw (x)) z er bedre konstant. Derfor må f la z propagere - det vil si f (zw (x)) zf (w (x)). Men her igjen har vi et problem. Merk at hvis z (som kan være et hvilket som helst tall) kan forplante seg gjennom f. så kan w (x) sikkert. Så f (zw (x)) w (x) f (z). Dermed f (w (x)) w (x) f (z). Men for en konstant x. w (x) er konstant, og dermed er f (w (x)) bedre også konstant. w (x) er konstant, så f (z) er bedre konstant slik at w (x) f (z) er konstant. Dermed er f (w (x)) w (x) c hvor c er en konstant. Så, f (x) cx hvor c er en konstant når x er en vektverdi. Det vil si, hver vekt er et flertall av det forrige. Vektene tar således formen w (x) mbx. Merk at dette forutsetter at kun informasjonen f har den siste aggregerte verdien. Merk at du på et tidspunkt vil bli redusert til denne saken med mindre du er villig til å lagre en ikke-konstant mengde data som representerer innspillet. Du kan ikke representere en uendelig lengdevektor med ekte tall med et reelt tall, men du kan omtrentlige dem på en eller annen måte i en konstant, endelig mengde lagringsplass. Men dette ville bare være en tilnærming. Selv om jeg ikke har fastslått det, er det min konklusjon at det du vil ha, er umulig å gjøre med en høy grad av presisjon, men du kan muligens bruke log (n) plass (som også kan være O (1) for mange praktiske bruksområder) for å skape en tilnærmet kvalitet. Du kan kanskje bruke enda mindre. svarte mar 29 12 kl 23:01 Jeg prøvde å praktisk talt kode noe (i Java). Som det er sagt, er målet ditt ikke oppnåelig. Du kan bare telle gjennomsnittet fra noen antall sist huskete verdier. Hvis du ikke trenger å være nøyaktig, kan du omtrentlige de eldre verdiene. Jeg prøvde å gjøre det ved å huske de siste 5 verdiene, bare nøyaktig og eldre verdier. SOMmed med 5 verdier, husker de siste 5 SUMene. Da er kompleksiteten O (2n) for å huske de siste nnn-verdiene. Dette er en veldig grov tilnærming. Du kan endre de siste valgene og lasAggregatedSums array størrelsene som du vil. Se dette ascii-art-bildet, og prøv å vise en graf over de siste verdiene, som viser at de første kolonnene (eldre data) blir husket som samlet verdi (ikke individuelt), og bare de tidligste 5 verdiene blir husket individuelt. Utfordring 1. Mitt eksempel teller ikke vekter, men jeg tror det burde ikke være et problem for deg å legge til vekter for de sisteAggregatedSumene på riktig måte - det eneste problemet er at hvis du vil ha lavere vekter for eldre verdier, ville det være vanskeligere fordi arrayet roterer, så Det er ikke greit å vite hvilken vekt for hvilket medlem som er medlem. Kanskje du kan endre algoritmen for alltid å skifte verdier i matrisen i stedet for å rotere. Da legger vektene ikke være et problem. Utfordring 2. Arrayene initialiseres med 0 verdier, og disse verdiene teller til gjennomsnittet fra begynnelsen, selv når vi ikke har fått nok verdier. Hvis du kjører algoritmen i lang tid, vil du sannsynligvis ikke bry deg om at den lærer for en tid i begynnelsen. Hvis du gjør det, kan du legge inn en endring -) besvart jan 21 14 kl 15:59 Ditt svar 2017 Stack Exchange, Inc

No comments:

Post a Comment