Monday 30 October 2017

Enkel Bevegelse Gjennomsnittet Algoritme Java


En enkel, flytende gjennomsnittsimplementering i Java. Ved flere anledninger har jeg ønsket å beregne enkle beregninger i mine Java-programmer, for eksempel antall treff i timen eller feil i løpet av en tidsperiode. Mens beregning enkle beregninger ikke er veldig vanskelig, er det bare ekstra arbeid, og jeg vil helst bruke den tiden på problemdomenet. Jeg ble overrasket over å ikke finne noen allment aksepterte løsninger for beregninger i Java. Jeg fant Metrics, men det virket litt for komplisert og ikke godt dokumentert. Alt jeg virkelig ønsket var å beregne et glidende gjennomsnitt Jeg tenkte på problemet litt mer og bestemte meg for at det ikke var et vanskelig problem. Her er min løsning. Dette virker ved å skape en rekke vindu oppdateringsfrekvensstørrelse, og en tråd setter tellingen til neste indeks i arrayet på oppdateringsfrekvensen Tellingen for intervallet er ganske enkelt array i - array i 1, som er den siste tellingen minus den eldste tellingen. For et 10 minutters intervall er den eldste tellingen i 1 akkurat 10 minutter gammel. For å legge til en bevegelse gjennomsnittlig til koden vår først trenger vi en teller ved hjelp av AtomicLong. Denne telleren skal økes basert på hendelsene du er interessert i databehandling, for eksempel POST-forespørsler om en REST-tjeneste. Vi må gi implementeringen tilgang til disken, og det er oppnådd gjennom GetCount-grensesnittet Her vil jeg opprette et glidende gjennomsnitt med et 5 minutters vindu som oppdateres hvert sekund. Og for å få det nåværende gjennomsnittet kalles vi bare getAverage-metoden. En nøkkelimplementeringsdetalj er hvordan arraystørrelsen bestemmes ved å dele vinduet av oppdateringsfrekvensen Så et stort vindu med en hyppig oppdateringsfrekvens kan forbruke en betydelig mengde minne I dette eksemplet er størrelsen på array rimelig 300. Men hvis vi opprettet et 24-timers glidende gjennomsnitt med et sekunds intervall, vil størrelsen være 86400 A mer fornuftig oppdateringsfrekvens for en 24-timers periode kan være hver 5 minutters arraystørrelse på 288. En annen vurdering av valg av vindu og oppdateringsfrekvens er at vinduet må være di synlig av frekvensen For eksempel er et 2-minutters vindu med en 6 sekunders oppdateringsfrekvens ok, men en 7 sekunders oppdateringsfrekvens er ikke, siden den ikke er delbar med 120 En ulovligArgumentException kastes hvis vinduets moduloppdateringsfrekvens ikke er null. Dette implementering krever en tråd per bevegelige gjennomsnitt som ikke er veldig effektiv. En bedre løsning ville være å dele en tråd over mange gjennomsnitt. Oppdatering Jeg har oppdatert koden for å dele en tråd her. Sist, det er et innledende tilstandsproblem vi har ikke data for hele vinduet For eksempel hvis du har et 5 minutters vindu og bare 15 sekunder med data Denne implementeringen returnerer null til vi har 5 minutter data En annen tilnærming er å anslå gjennomsnittet. Antag at vi har en telling på 10 i 30 sekunder, da Vi kan anslå gjennomsnittet som 40 i 2 minutter. Det er imidlertid risiko for betydelig feil ved ekstrapolering av ufullstendige data. For eksempel, hvis vi hadde en utbrudd på 20 treff på 2 sekunder, anslår vi 1200 per 2 minutter, hvem h er med all sannsynlighet langt unna. Jeg trenger å holde styr på de siste 7 dagene arbeidstid i en flat filleseløkke. Det brukes til å måle utmattingen av arbeidsroster. Rett 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 et statisk array for å holde de siste x-dagene data, da jeg leser gjennom filen, hugger jeg av det første elementet og flytter andre 6 for en uke rullende total tilbake av en Behandlingen av denne statiske matrisen er gjort i sin egen metode ie. Mitt spørsmål 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. Takk mange folk, jeg har fått beskjeden til å bruke et høyere 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å egen hånd er jeg lettet over at jeg ikke hadde savnet noen liner og egentlig var på en rimelig, om ikke effektiv og tverskinnende spor. Dette er hva jeg elsker om dette nettstedet av høy kvalitet, relevante svar fra folk som kjenner deres kjære. Pete855217 Aug 30 11 på 15 05. Hvorfor initialiserer du runningTotal til null Hva er dens type Hvor det er erklært Det ville fungere bra hvis du legger noen kodeprøver som ligner faktisk Java-kode. På grunn av vil min kritikk være følgende som din funksjon gjør også mye En funksjon, eller metode, bør være sammenhengende Mer hensiktsmessig, bør de bare gjøre en ting og en ting. Fortsett, 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 blander funksjonen din. Mengder elementene i ditt array. calculates total. prints ting til standard error. returns total. It gjør for mye. Mitt første forslag er ikke å flytte ting rundt i matrisen i stedet, implementer en sirkulasjon ar buffer og bruk den i stedet for arrayet Det vil forenkle designet mitt andre forslag 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 det er har sin kapasitet. har datastrukturen implementert en interator. har en funksjon som beregner summen på iteratoren, bryr du deg ikke om du beregner summen av en matrise, liste eller sirkulær bufer. don t ring det totalt Ring det summen , som er hva du gjør. 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 samtidig er det bedre å feile på siden av mindre klarere kode enn å gå for perfeksjon. Gitt min Java-ferdigheter, selv om pseudokoden du beskriver kompilerer ville ha jeg blåser meg budsjett på dette, men takk for den klare beskrivelsen Pete855217 31 aug 11 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 tiår med bevis som indikerer dette, er måten å gå i det generelle tilfellet 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, bryter ned problemet og koden følger, verken overkill eller vanskelig 31 aug 11 på 15 55. Din oppgave er for enkel og det du har vedtatt, er sikkert bra for jobben. , hvis du vil bruke en bedre design, må du kvitte deg med 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 av nye data og fjern data olde r enn 7 days. answered aug 30 11 på 14 49. Simpel flyttende gjennomsnittlig - SMA. BREAKING DOWN Enkelt flytende gjennomsnitt - SMA. A enkelt glidende gjennomsnitt er tilpassbart ved at det kan beregnes for et annet antall tidsperioder, ganske enkelt ved å legge til sluttkursen for sikkerheten for en rekke tidsperioder og deretter dividere denne summen med antall tidsperioder, noe som gir gjennomsnittsprisen på sikkerheten over tidsperioden. Et enkelt glidende gjennomsnitt svekker ut volatiliteten og gjør det enklere å se Prisutviklingen av en sikkerhet Hvis det enkle glidende gjennomsnittet peker opp, betyr dette at sikkerhetsprisen øker. Hvis det peker ned, betyr det at sikkerhetsprisen faller. Jo lengre tidsramme for glidende gjennomsnitt, jo glattere er den enkle glidende gjennomsnitt Et kortere glidende gjennomsnitt er mer volatilt, men lesingen er nærmere kildedataene. Analytisk betydning. Gjennomsnittlig gjennomsnitt er et viktig analytisk verktøy som brukes til å identifisere dagens prisutvikling og po potensiell for en endring i en etablert trend Den enkleste formen for å bruke et enkelt bevegelig gjennomsnitts i analyse, bruker det til å raskt identifisere om en sikkerhet er i opptrend eller nedtrengning. Et annet populært, om enn litt mer komplekst analyseverktøy, er å sammenligne et par enkle bevegelige gjennomsnitt med hver dekning av forskjellige tidsrammer Hvis et kortere, rent, glidende gjennomsnitt er over et langsiktig gjennomsnitt, forventes en opptrend. På den annen side signalerer et langsiktig gjennomsnitt over et kortere sikt gjennomsnitt en nedadgående bevegelse i trend. Popular Trading Patterns. Two populære handelsmønstre som bruker enkle glidende gjennomsnitt inkluderer dødskrysset og et gyldent kors Et dødskors oppstår når 50-dagers enkle glidende gjennomsnitt krysser under 200-dagers glidende gjennomsnitt. Dette betraktes som et bearish signal , at ytterligere tap er i butikken Gullkorset oppstår når et kortsiktig glidende gjennombrudd går over et langsiktig glidende gjennomsnitt. Forsterket av høye handelsvolumer, kan dette signalere ytterligere gevinster er i butikken.

No comments:

Post a Comment