Tuesday 10 October 2017

Veid Bevegelig Gjennomsnitt Algoritme


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, det vil ikke huske alle Tidligere verdier Det skal kun 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 ikke kan være bra. Er det er mulig å få trinn som faller ned i vekt eller noe. Kraven til veiing er følgende.1 Vekten senker inn i siste 2 Jeg har noen gjennomsnittlig eller karakteristisk varighet, slik at verdier eldre denne varigheten betyr mye mindre enn nyere 3 Jeg burde kunne å sette denne varigheten. Jeg trenger følgende. Antag at vi er verdier, hvor v1 er den første. Også antar at wi er vekter. Men w0 er LAST. Så etter at førstverdien kom, har jeg første gjennomsnitt. Etter den andre v Alue v2 kom, jeg burde ha gjennomsnittet. Med neste verdi jeg burde ha. Merk, den vektprofilen beveger seg med meg, mens jeg beveger seg langs verdi sekvens. Jeg har hver verdi ikke den egen vekt hele tiden Min mål er å ha denne vekten lavere mens du går forbi. Men min oppgave er å ha gjennomsnittlig omregnet hver gang ny verdi kommer med gamle verdier reweighted OP. Your oppgave er nesten alltid umulig, selv med svært enkle vekting ordninger. Du spør til, med O 1-minne, gi gjennomsnitt med en endringsvekteskjema For eksempel, når nye verdier blir sendt inn, for noen nesten vilkårlige skiftende vekter-sekvens Dette er umulig på grunn av injeksjonsevne Når du slår sammen tallene sammen, mister du en massiv mengde informasjon For eksempel, selv om du hadde vektvektoren, kunne du ikke gjenopprette den opprinnelige verdienvektoren 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 er ekvivalent t o en gjennomsnittlig algoritme på nettet som du ikke vil ha fordi de gamle verdiene ikke blir reweighted. The relative vekter av tidligere svar endres ikke. For eksempel kan du gjøre vekter på 8,4,2,1 og legge til en ny element med vilkårlig vekt som 1, men du må øke alle tidligere med samme multiplikative faktor, som 16,8,4,2 1 Således legger du i hvert trinn et nytt tilfeldig vekt og en ny vilkårlig rescaling av fortiden, slik at du bare har 2 frihetsgrader 1 hvis du trenger å holde dotproduktet normalisert Vektvektorer du får vil se ut. Som alle vektingssystemer du kan lage ser ut som det vil fungere med mindre du trenger å holde saken normalisert ved summen av vekter, da må du da dele det nye gjennomsnittet med den nye summen, som du kan beregne ved å beholde bare 0 1-minne. Merell multipliserer forrige gjennomsnitt av de nye s som implisitt distribuerer over punktproduktet til vekter, og takk på den nye w newValue. answered 29. mars 12 på 21 27. Her antar jeg at du vil at vektene skal summeres 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 er, antar du definerte vektene dine som en sekvens og definerte inngangen som sekvens. Konsider skjema summen s0 i0 s1 i1 s2 i2 sn i sum s0 s1 s2 sn Merk at det er trivielt mulig å beregne dette trinnvis med et par aggregerings tellere. Selvfølgelig, calculateWeightFromCounter i dette tilfellet bør ikke generere vekter som summen til en - trikset her er det vi gjennomsnittlig ved å dividere med summen av vekter, slik at til slutt blir vekterne nesten til sammen til ett. Det virkelige trikset er hvordan du gjør calculateWeightFromCounter Du kan ganske enkelt 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. Det er vanskelig å si siden, Som nevnt, har du det forlot et ganske åpent problem. ansvaret 28. mars kl. 21 på 45. Problemet er at vekter endrer seg med hver ny verdi. I ditt tilfelle er de ikke Suzan Cioc Mar 29 12 på 14 43. De faktiske brukte vektene endres med hver ny verdi - Vektene deles med et suksessivt større tall, og derved pådriver at de faktiske brukte vektene alltid beløper til 1 Kaganar 29. mars klokken 14 45. Dette er for lang å legge inn i en kommentar, men det kan være nyttig å vite. Anta at du har w0 vn wn v0 vi vil kalle dette w 0 nvn 0 for short. Then neste trinn er w0 vn1 wn1 v0 og dette er w 0 n1 v n1 0 for short. This betyr at vi trenger en måte å beregne w 1 n1 vn 0 fra w 0 nvn 0. Det er sikkert mulig at vn 0 er 0 0, z, 0 0 hvor z er på noe sted x. If vi ikke har ekstra lagringsplass, så fzwxzwx 1 hvor wx er vekten for plassering x. Resere ligningen, wx 1 fzwxz Vel, wx 1 bedre være konstant for en konstant x, så fzwxz bedre være konstant Derfor må f la z propagere - det vil si, fzwxzfw 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 wx sikkert. Så fzwxwxfz Således fwxwxfz Men for en konstant xwx er konstant, og dermed fwx bedre være konstant, for wx er konstant , så fz bedre være konstant slik at wxfz er konstant Således fwxwxc hvor c er en konstant. Så, fxcx hvor c er en konstant når x er en vektverdi. Det er, hver vekt er et flertall av det forrige. skjemaet wxmb x. Merk at dette antar at den eneste informasjonen f har den siste aggregerte verdien. Merk at du på et tidspunkt vil bli redusert til dette tilfellet med mindre du er villig til å lagre en ikke-konstant mengde data som representerer innspillet ditt. Du kan ikke representere en uendelig lengdevektor med ekte tall med et reelt tall, men du kan omtrentliggjøre dem på en eller annen måte i en konstant, endelig mengde lagring. Dette ville bare være en tilnærming. Selv om jeg ikke har strengt bevist det, er det min konklusjon på det du vil, er umulig å gjøre med en høy grad av presisjon, men du kan kanskje bruke log n plass som også kan være O 1 for mange praktiske applikasjoner for å oppnå en god tilnærming. Du kan muligens bruke enda mindre. svaret 29. mars kl. 23 01. Jeg prøvde å kode noe i Java. Som sagt, er målet ditt ikke mulig. Du kan bare telle gjennomsnittet fra noen antall siste huskerte verdier. Hvis du ikke trenger å være nøyaktig, kan du omtrentlig de eldre verdiene jeg prøvde å gjøre ved å huske de siste 5 verdiene, bare nøyaktig og eldre verdier. SUMmed med 5 verdier, husk de siste 5 SUMene. Da er kompleksiteten O 2n for å huske siste nnn-verdier. Dette er en veldig grov tilnærming. Du kan endre de siste valgene og lasAggregatedSums array størrelser som du vil Se dette ascii-art-bildet som prøver å vise en graf over de siste verdiene, og viser at de eldre dataene i de første kolonnene blir husket som samlet verdi, ikke individuelt, og bare de tidligste 5 verdiene er remembere d individuelt. Utfordring 1 Mitt eksempel teller ikke vekter, men jeg tror det burde ikke være 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 arraymedlem 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 plage at den lærer for en tid i begynnelsen. Hvis du gjør det, kan du legge inn en modifikasjon. ansvaret 21 jan 14 kl 15 59. Ditt svar.2017 Stack Exchange, Inc. Vikket bevegelige gjennomsnitt Det grunnleggende. Gjennom årene har teknikere funnet to problemer med det enkle glidende gjennomsnittet Det første problemet ligger i tidsrammen for det bevegelige gjennomsnittet. MA De fleste tekniske analytikere mener at prisaksjonen åpning eller avsluttende aksjekurs ikke er nok til å avhenge av riktig forutsi kjøp eller salg av signaler fra MAs crossover-handlingen. For å løse dette problem, tilordner analytikere nå mer vekt til de nyeste prisdataene ved å bruke den eksponensielt glattede glidende gjennomsnittlige EMA Lær mer i å utforske eksponentielt veid flyttende gjennomsnitt. Et eksempel For eksempel, ved hjelp av en 10-dagers MA, ville en analytiker ta sluttprisen av den tiende dagen og multipliserer dette tallet med 10, den niende dagen med ni, den åttende dagen med åtte og så videre til den første av MA Når totalen er blitt bestemt, vil analytikeren da dele nummeret ved å legge til multiplikatorer Hvis du legger til multiplikatorene i 10-dagers MA-eksemplet, er tallet 55 Denne indikatoren kalles det lineært vektede glidende gjennomsnittet. For relatert lesing, sjekk ut Enkle bevegelige gjennomsnitt, gjør trendene ut. y teknikere er fast troende på den eksponensielt glattede glidende gjennomsnittlige EMA Denne indikatoren har blitt forklart på så mange måter at det forveksler både studenter og investorer. Kanskje den beste forklaringen kommer fra John J Murphy s tekniske analyse av de finansielle markedene, utgitt av den nye York Institute of Finance, 1999. Det eksponensielt glattede glidende gjennomsnittet adresserer begge problemene forbundet med det enkle glidende gjennomsnittet. Først gir det eksponensielt glatte gjennomsnittet en større vekt til nyere data. Derfor er det et veidende glidende gjennomsnitt. Men mens det tildeles mindre betydning for tidligere prisdata, inkluderer det i beregningen alle dataene i instrumentets levetid. I tillegg er brukeren i stand til å justere vektingen for å gi større eller mindre vekt til den siste dagens pris, som er lagt til til en prosentandel av forrige dag s verdi Summen av begge prosentverdiene legger opp til 100. For eksempel kan prisen for siste dag være en ssigned en vekt på 10 10, som legges til den forrige dagens vekt på 90 90 Dette gir den siste dagen 10 av totalvekten Dette vil være tilsvarer et 20-dagers gjennomsnitt ved å gi den siste dagens pris en mindre verdi av 5 05.Figur 1 Eksponentielt slipt Moving Average. Ovenstående diagram viser Nasdaq Composite Index fra den første uken i august 2000 til 1. juni 2001. Som du tydeligvis kan se, er EMA, som i dette tilfellet bruker sluttkursdataene over en ni-dagers periode, har bestemte selgesignaler den 8. september markert med en svart nedpil. Dette var dagen da indeksen brøt under 4000-nivået. Den andre svarte pilen viser et annet nedre ben som teknikerne faktisk forventer. Nasdaq kunne ikke generere nok volum og interesse fra detaljhandlerne til å bryte 3 000-merket. Deretter dukker du ned igjen til bunnen ut på 1619 58 på 4. april. Oppgangen av 12. april er markert med en pil. Her er indeksen stengt på 1961 46, og teknikere begynte å se institusjonelle fondet administrere r begynner å plukke opp noen gode kjøp som Cisco, Microsoft og noen av energirelaterte problemstillinger. Les våre relaterte artikler. Flytte gjennomsnittlige konvolutter Raffinere et populært handelsverktøy og flytte Gjennomsnittlig Bounce. En undersøkelse gjort av United States Bureau of Labor Statistics for å måle ledige stillinger Det samler inn data fra arbeidsgivere. Det maksimale beløpet som USA kan låne. Gjeldstaket ble opprettet under Second Liberty Bond Act. Renten som et innskuddsinstitusjon gir midler til, som opprettholdes ved Federal Reserve til en annen depotinstitusjon. 1 Et statistisk mål for spredningen av avkastning for en gitt sikkerhets - eller markedsindeks. Volatilitet kan enten måles. En amerikansk kongresss vedtak ble vedtatt i 1933 som bankloven, som forbyde kommersielle banker å delta i investeringen. jobb utenfor gårder, private husholdninger og nonprofit sektor. Det amerikanske arbeidsstyret. Jeg trenger å holde styr på de siste 7 dagene k timer i en flat filavlesningsløype Det brukes til å måle utmattingen av arbeidsrooster. Riktig nå har jeg noe som fungerer, men det virker ganske ordentlig og jeg er ikke sikker på om det er et mønster som er mer kortfattet. I øyeblikket har jeg en Java-klasse med en statisk matrise for å holde de siste x-dagene data, da jeg leser gjennom filen, hugger jeg av det første elementet og flytter de andre 6 i en ukes rullende sum tilbake av en. Behandlingen av denne statiske matrisen er ferdig i sin egen metode ie. My spørsmålet er dette en rimelig design tilnærming eller er det noe blindingly åpenbart og enkelt å gjøre denne oppgaven Takk guys. asked Aug 30 11 på 14 33.Thanks mange folkens jeg har fått meldingen bruke en høyere - nivåobjekt og utnytte de relevante metodene eller en sirkulær buffer. Store svar, alle av dem Når du tenker på det, trenger du alltid tilgang til hele oppsettet slik at du kan kvitte deg med den første oppføringen - som jeg ikke var sikker på på min Jeg er lettet over at jeg ikke hadde savnet noen liner og var basicall y på en rimelig, om ikke effektiv og tverrlig spor Dette er hva jeg elsker om dette nettstedet av høy kvalitet, relevante svar fra folk som kjenner deres sh t Pete855217 Aug 30 11 på 15 05. Hvorfor starter du runningTotal til null Hva er dens type Hvor det er erklært Det ville gjøre det bra hvis du legger noen kodeprøver som ligner på faktisk Java-kode. På grunn av vil min kritikk være følgende, funksjonen din gjør for mye. En funksjon eller metode bør være sammenhengende. Mer hensiktsmessig, bør de gjøre det en ting og en ting only. Worse fortsatt, hva skjer i din forløp når x 5 Du kopierer runningTotal 6 til runningTotal 5, men da har du to kopier av samme verdi i posisjon 5 og 6. I ditt design, har funksjonen din shuffles elementene i array. calculates total. prints ting til standard error. returns total. tt gjør for mye. Mitt første forslag er ikke å flytte ting rundt i matrisen i stedet implementere en sirkulær buffer og bruk den i stedet for array Det vil forenkle designet mitt Det andre forslaget er å bryte ned tingene i sammenhengende funksjoner. Har en datastruktur en sirkulær buffer som lar deg legge til det, og det faller den eldste oppføringen når den når sin kapasitet. Har datastrukturen implementere en interator. have en funksjon som beregner summen på iteratoren du ikke bryr deg om du beregner summen av en matrise, liste eller sirkulær bufer. don t ring det totalt Ring det summen, som er hva du beregner. Det er det jeg gjør. Det er flott info luis, men husk at denne funksjonen er en liten del av klassens funksjonalitet, og det ville være overkill å legge til for mye kode for å gjøre det perfekt. Du er teknisk riktig, og jeg forstår at koden min gjør for mye, men på Samtidig er det bedre å feile på siden av mindre, klarere kode enn å gå for perfekt. Gitt min Java-ferdigheter, selv om du gjør pseudokoden du beskriver kompilere, ville jeg få meg til å blåse budsjettet på dette, men takk for den klare beskrivelsen Pete855217 Aug 31 1 1 på 2 23.Hmmm, det handler ikke om perfeksjon, men om etablerte industripraksis som vi har kjent de siste 3 årene. Rent kode er alltid en som er delt. Vi har flere tiår med bevis som tyder på at dette er veien å gå i generell sak når det gjelder kostnadseffektivitet, feilreduksjon, forståelse, osv. med mindre det er kaste-koden for en engangs-type ting. Det er aldri dyrt å gjøre dette når man starter en problemanalyse på denne måten. Koding 101, pause ned problemet og koden følger, verken overkill eller vanskelig Aug 31 11 på 15 55. Din oppgave er for enkel og det du har vedtatt, er sikkert bra for jobben. Men hvis du vil bruke et bedre design, må du få bli kvitt all den nummerbevegelsen du bedre bruker en FIFO-kø, og bruk god push - og pop-metoder slik at koden ikke reflekterer databevegelser, bare de to logiske handlingene til nye data og fjern data eldre enn 7 dager. Ansatt 30. august 11 ved 14 49.

No comments:

Post a Comment