Glidande Medelvärde Pseudo Kod


Jag har i huvudsak en mängd värden som denna. Den ovanstående matrisen är översimplifierad, jag m samlar 1 värde per millisekund i min riktiga kod och jag måste bearbeta utmatningen på en algoritm som jag skrev för att hitta den närmaste toppen före en tidpunkt Logiken misslyckas eftersom i mitt exempel ovan är 0 36 den riktiga toppen, men min algoritm skulle se bakåt och se det sista numret 0 25 som toppen eftersom det sänker till 0 24 före det. Målet är att ta dessa värden Och tillämpa en algoritm för dem som släpper ut dem lite så att jag har mer linjära värden, dvs jag tycker att mina resultat är kurva, inte jaggedy. Jag har fått höra att använda ett exponentiellt glidande medelfilter till mina värden. Hur kan jag Gör det här Det är verkligen svårt för mig att läsa matematiska ekvationer. Jag hanterar mycket bättre med code. How bearbetar jag värden i min array och tillämpar en exponentiell glidande genomsnittlig beräkning för att till och med utföra dem. asked 8 februari 12 på 20 27.Till beräkna Ett exponentiellt glidande medelvärde behöver du behålla en del tillstånd runt och Du behöver en inställningsparameter Detta kräver en liten klass om du antar att du använder Java 5 eller senare. Inställning med den sönderfallsparametern du vill kan ta tuning ska vara mellan 0 och 1 och använd sedan genomsnittet för att filtrera. När du läser en sida på några matematiska Återkommande, allt du verkligen behöver veta när du gör det till kod är att matematiker gillar att skriva index i arrayer och sekvenser med prenumerationer. De har några andra noteringar också, vilket hjälper inte Emellertid är EMA ganska enkel eftersom du bara behöver Att komma ihåg ett gammalt värde inga komplicerade tillståndsuppställningar krävs. Svarade den 8 februari 12 på 20 42. TKKocheran Ganska mycket Är det inte trevligt när saker kan vara enkla Om du börjar med en ny sekvens får du en ny medelvärderare Observera att de första villkoren i Den genomsnittliga sekvensen hoppar runt lite på grund av gränseffekter, men du får de med andra glidande medelvärder. En bra fördel är dock att du kan linda den glidande genomsnittliga logiken in i medelvärdet och experimentera utan att störa t Han vilar på ditt program för mycket Donal Fellows 9 februari 12 på 0 06. Jag har svårt att förstå dina frågor, men jag kommer att försöka svara ändå.1 Om din algoritm hittat 0 25 istället för 0 36 så är det fel Det är fel eftersom det förutsätter en monotonisk ökning eller minskning som alltid går upp eller alltid går ner, Om du inte vill ha det maximala med alla dina data, är dina datapunkter --- som du presenterar dem --- olinjära. Värdet mellan två punkter i tid, skära sedan din matris från tmin till tmax och hitta max av den subarray.2 Nu är konceptet för glidande medelvärden mycket enkelt att föreställa mig att jag har följande lista 1 4, 1 5, 1 4, 1 5, 1 5 Jag kan släpa ut det genom att ta medeltalet av två nummer 1 45, 1 45, 1 45, 1 5 Observera att det första numret är genomsnittet av 1 5 och 1 4 sekund och första siffrorna är den andra nya listan Är genomsnittet av 1 4 och 1 5 tredje och andra gamla listan den tredje nya listan i genomsnitt 1 5 och 1 4 fjärde och tredje, och så vidare kunde jag Har gjort det period tre eller fyra eller n Observera hur dataen är mycket jämnare Ett bra sätt att se glidande medelvärden på jobbet är att gå till Google Finance, välj ett lager försök Tesla Motors ganska flyktiga TSLA och klicka på technicals längst ner på Diagrammet Välj Flyttande medelvärde med en given period och Exponentiell glidande medelvärde för att jämföra deras skillnader. Exponentialt glidande medelvärde är bara en ytterligare utarbetande av detta, men vikter äldre data mindre än de nya data så är det ett sätt att förspänna utjämningen mot baksidan Vänligen läs Wikipedia-posten. Så det här är mer en kommentar än ett svar, men den lilla kommentarrutan var bara för liten lycka till. Om du har problem med matte kan du gå med ett enkelt glidande medel istället för exponentiella Så Utgången du får skulle vara de sista x-termerna dividerad med x Otestad pseudokod. Notera att du måste hantera start - och slutdelarna av data eftersom det tydligt är att du inte kan räkna med de senaste 5 termerna när du befinner dig på din andra datapunkt , Den Re är effektivare sätt att beräkna denna rörliga genomsnittliga summan summan - äldsta nyaste, men det här är att få konceptet av vad som händer across. answered 8 februari 12 på 20 41. Jag försöker beräkna det rörliga genomsnittet av en signal Signalen Värdet en dubbel uppdateras i slumpmässiga tider Jag letar efter ett effektivt sätt att beräkna det s tidsvägd medelvärde över ett tidsfönster, i realtid skulle jag kunna göra det själv, men det är mer utmanande än jag trodde. De flesta resurserna Jag har hittat över internet beräknar glidande medelvärde av periodisk signal, men min uppdateras slumpmässigt. Det vet någon bra resurser för det. Tricket är följande Du får uppdateringar i slumpmässiga tider via void uppdatering int tid, float value Men du Måste också spåra när en uppdatering faller utanför tidsfönstret, så du ställer in ett larm som kallas vid tidpunkt N som tar bort den tidigare uppdateringen från att någonsin betraktas igen i beräkningen. Om det händer i realtid kan du begära driften systemet För att ringa till en metod som inte har någon uppgift att ringa upp vid tiden. Om det här är en simulering kan du inte få hjälp från operativsystemet och du behöver göra det manuellt. I en simulering skulle du ringa metoder med tiden som levererades Som ett argument som inte korrelerar med realtid Men ett rimligt antagande är att samtalen garanteras vara sådan att tidsargumenten ökar. I det här fallet behöver du behålla en sorterad lista över alarmtidvärden och för varje uppdatering och Läs ring du kontrollera om tidsargumentet är större än huvudet på larmlistan Medan den är större, släcker den larmrelaterade behandlingen den äldsta uppdateringen, tar bort huvudet och kontrollerar igen tills alla larm före den angivna tiden behandlas sedan Gör uppdateringen call. I har hittills antagit det är uppenbart vad du skulle göra för den faktiska beräkningen, men jag kommer att utarbeta bara om jag antar att du har en metod float läs int tid som du använder för att läsa värdena Målet är För att göra detta samtal så effektivt som möjligt Så du beräknar inte det glidande genomsnittet varje gång läsmetoden heter. I stället förkräver du värdet som den senaste uppdateringen eller det senaste larmet, och tweak det här värdet med ett par flytpunkter till Redogöra för tidens gång sedan den senaste uppdateringen, dvs ett konstant antal operationer, förutom att kanske bearbeta en lista över uppladdade alarm. Helt klart är detta klart - det här borde vara en ganska enkel algoritm och ganska effektiv. Ytterligare optimering av ett av de återstående problemen Är om ett stort antal uppdateringar händer inom tidsfönstret, så är det en lång tid som det inte finns läs eller uppdateringar, och sedan kommer en läsning eller uppdatering att komma fram. I det här fallet kommer den ovan nämnda algoritmen att vara ineffektiv när man stegvis uppdaterar Värde för varje uppdatering som faller av Detta är inte nödvändigt eftersom vi bara bryr oss om den senaste uppdateringen bortom tidsfönstret, så om det finns ett sätt att effektivt släppa bort alla äldre upda Tes, det skulle hjälpa. För att göra det kan vi ändra algoritmen för att göra en binär sökning av uppdateringar för att hitta den senaste uppdateringen före tidsfönstret Om det finns relativt få uppdateringar som behöver släppas kan man stegvis uppdatera värdet För varje uppladdad uppdatering Men om det finns många uppdateringar som behöver släppas kan man ompröva värdet från grunden efter att ha släppt bort de gamla uppdateringarna. Tillägg på inkrementell beräkning Jag borde klargöra vad jag menar med inkrementell beräkning ovan i meningen tweak detta värde Med ett par flytande punkter för att beräkna tidsförloppet sedan den senaste uppdateringen Initial icke-inkrementell beräkning. Det härderas över relevanta uppdateringar i enlighet med ökande time. movingaverage summa uppdaterad timesincelastupdate windowlength. Now om exakt en uppdatering faller utanför fönstret men Inga nya uppdateringar anländer, justera summan som. Notera att det är priorupdate som har sin tidstämpel modifierad till början av sista fönstret och om just en uppdatering kommer in i fönstret men inga nya uppdateringar faller av, justera summan as. As det ska vara uppenbart är det här en grov skiss men förhoppningsvis visar det hur du Kan behålla medelvärdet så att det är O 1-operationer per uppdatering på avskrivningsbasis. Notera ytterligare optimering i föregående stycke. Observera även stabilitetsproblem hänvisade till i ett äldre svar, vilket innebär att floating pointfel kan ackumuleras över ett stort antal sådana inkrementella Operationer så att det finns en avvikelse från resultatet av den fullständiga beräkningen som är signifikant för applikationen. Om en approximation är OK och det är en minsta tid mellan proverna, kan du prova superprovtagning. Har en matris som representerar jämnt fördelade tidsintervall som Är kortare än minimumet och vid varje tidsperiod lagrar det senaste provet som erhölls. Ju kortare intervallet desto närmre genomsnittet kommer att vara den verkliga värdet E Perioden ska inte vara större än hälften av miniminivån eller det finns en chans att sakna ett prov. ansvarat dec 15 11 på 18 12. Tack för svaret En förbättring som skulle behövas för att faktiskt cache värdet av det totala genomsnittet så Vi går inte hela tiden Det kan också vara en liten punkt, men det skulle inte vara mer effektivt att använda en deque eller en lista för att lagra värdet, eftersom vi antar att uppdateringen kommer i rätt ordning. Infoga skulle vara snabbare Än på kartan Arthur dec 16 11 på 8 55. Ja, du kan cache värdet av summen. Drakta värdena för de prov du raderar, lägg till värdena på de prover du lägger in. Dessutom, ja, ett deque par Exempel, Datum kan vara Effektivare Jag valde kartan för läsbarhet och det enkla att påkalla kartan övre delen Som alltid skriver du rätt kod först, sedan profilera och mäta stegvisa förändringar Rob Dec 16 11 på 15 00. Notera Tydligen är det här inte sättet att närma sig detta Lämna den här För referens om vad som är fel med detta tillvägagångssätt Kontrollera kommentarerna. UP DATED - baserat på Oli s kommentar inte säker på instabiliteten som han pratar om though. Use en sorterad karta över ankomsttider mot värden. När du anländer till ett värde lägg till ankomsttiden till den sorterade kartan tillsammans med det s värde och uppdatera rörelsen Average. warning det här är pseudokod. Det är inte helt fleshed ut men du får tanken. Att notera Som jag sa ovanstående är pseudokod Du måste välja en lämplig karta Don t ta bort paren som du iterate genom som du Kommer att ogiltiggöra iteratorn och måste starta igen Se Oli s kommentar nedan also. answered Dec 15 11 på 12 22.This worksn t fungerar det tar inte hänsyn till vilken andel av fönstrets längd som varje värde finns för. Denna metod Av att lägga till och sedan subtrahera är bara stabil för heltalstyper, inte flyter Oliver Charlesworth dec 15 11 på 12 29. OliCharlesworth - ledsen jag missade några viktiga punkter i beskrivningen dubbel och tidsvägd kommer jag att uppdatera Tack Dennis Dec 15 11 på 12 33 . Tidsvägningen är ni Ett annat problem Men det är inte vad jag pratar om. Jag hänvisade till det faktum att när ett nytt värde först når tidsfönstret är dess bidrag till genomsnittet minimalt. Bidraget fortsätter att öka tills ett nytt värde går in i Oliver Charlesworth 15 dec 11 vid 12 35. Exponential Moving Average - EMA. BREAKNING NED Exponentiell rörlig genomsnitts - EMA. De 12 och 26-dagars EMA-erna är de mest populära kortsiktiga medelvärdena, och de används för att skapa indikatorer som den rörliga genomsnittliga konvergensdiversensen MACD Och den procentuella prisoscillatorn PPO Generellt används de 50- och 200-dagars EMA-signalerna som signaler för långsiktiga trender. Trader som använder teknisk analys finner glidande medelvärden som är mycket användbara och insiktsfulla när de tillämpas korrekt men skapar kaos när de används felaktigt eller är Felförtolkad Alla de glidande medelvärdena som vanligen används i teknisk analys är av sin natur släpande indikatorer. Följaktligen slutsatserna från att tillämpa ett glidande medelvärde på en viss marknad Diagrammet bör vara att bekräfta ett marknadsförflytt eller att indikera dess styrka. Mycket vid den tidpunkt då en rörlig genomsnittlig indikatorlinje har ändrats för att återspegla ett betydande drag på marknaden har den optimala marknaden för marknadsinträde redan passerat. En EMA tjänar För att lindra detta dilemma i viss utsträckning Eftersom EMA-beräkningen lägger mer vikt på de senaste uppgifterna kramar prisåtgärden lite snävare och reagerar därför snabbare. Det är önskvärt när en EMA används för att härleda en handelsinmatningssignal. Interpretera EMA. Liksom alla glidande medelindikatorer är de mycket bättre anpassade till trender i marknaderna När marknaden har en stark och hållbar uppgång kommer EMA-indikatorlinjen också att visa en uptrend och vice versa för en nedåtriktad trend. En vaksam näringsidkare kommer inte bara att uppmärksamma EMA-linjens riktning, men också förhållandet mellan förändringshastigheten från en stapel till nästa. När prisåtgärden för en stark uppåtriktning börjar flata och vända, är EMA: s hastighet cha Nge från en stapel till nästa kommer att minska till dess att indikatorlinjen plattas och förändringshastigheten är noll. På grund av den släpande effekten, vid denna punkt eller till och med några få barer innan, bör prisåtgärden ha redan Reverserade Det följer således att observera en konsekvent minskning i förändringshastigheten hos EMA kan själv användas som en indikator som ytterligare kan motverka det dilemma som orsakas av den försvagande effekten av att flytta genomsnittliga användningar av EMA. EMA är vanligen använda i samband med Andra indikatorer för att bekräfta betydande marknadsrörelser och att mäta deras giltighet För näringsidkare som handlar intradag och snabba marknader är EMA mer tillämpligt. Oftast använder handlare EMA för att bestämma en handelsförskjutning. Till exempel om en EMA på ett dagligt diagram visar en Stark uppåtriktad trend, en strategi för intraday trader kan vara att endast handla från långsidan på en intradagskarta.

Comments

Popular Posts