Exponential glidande medelvärde filter algoritmen
Exponentiellt rörligt medelvärde - EMA BREAKING DOWN 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 konvergensdivergensen (MACD) och den procentuella prisoscillatorn (PPO). I allmänhet används 50- och 200-dagars EMA som signaler för långsiktiga trender. Handlare som anställer teknisk analys hittar 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 felaktigt tolkas. Alla glidande medelvärden som vanligtvis används i teknisk analys är av sin natur slående indikatorer. Följaktligen bör slutsatserna från att tillämpa ett glidande medelvärde till ett visst marknadsdiagram vara att bekräfta en marknadsrörelse eller att indikera dess styrka. Mycket ofta, då en rörlig genomsnittlig indikatorlinje har förändrats för att återspegla ett betydande drag på marknaden har den optimala marknaden för marknadsinträde redan passerat. En EMA tjänar till att lindra detta dilemma till viss del. 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. Detta är önskvärt när en EMA används för att härleda en handelsinmatningssignal. Tolkning av EMA Liksom alla glidande medelindikatorer är de mycket bättre lämpade för trending marknader. När marknaden är i en stark och hållbar uptrend. EMA-indikatorlinjen visar också en uptrend och vice versa för en nedåtgående trend. En vaksam näringsidkare kommer inte bara att uppmärksamma EMA-linjens riktning utan också förhållandet mellan förändringshastigheten från en stapel till en annan. När prisåtgärden för en stark uppåtriktning börjar prata och vända, kommer EMA: s förändringshastighet från en stapel till nästa att minska till dess att indikatorlinjen plattas och förändringshastigheten är noll. På grund av den försvagande effekten, vid denna punkt, eller till och med några få barer innan, bör prisåtgärden redan ha reverserat. 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 släpande effekten av rörliga medelvärden. Vanliga användningar av EMA-EMA används ofta i kombination 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ämplig. Ofta 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åtgående trend, kan en intraday-traderstrategi vara att bara handla från långsidan på en intradagskarta. Jag kodar någonting för tillfället där jag tar en massa värden över tiden från en hårdvarukompass. Kompassen är mycket exakt och uppdateras mycket ofta, med det resultat att om det jiggles något slutar jag med det udda värdet som är vildt inkonsekvent med sina grannar. Jag vill släta ut dessa värden. Efter att ha läst lite läser det ut att det jag vill ha är ett högpassfilter, ett lågpassfilter eller ett glidande medelvärde. Flyttande medelvärde jag kan komma ner med, behåll bara en historia av de senaste 5 värdena eller vad som helst, och använd medelvärdet av dessa värden nedströms i min kod där jag en gång bara använde det senaste värdet. Det borde jag, släpa ut dem jigglar snyggt, men det slår mig att det är förmodligen ganska ineffektivt, och det här är förmodligen ett av de kända problemen med riktiga programmerare, till vilka det är en riktigt snygg kladdmatlösning. Jag är emellertid en av de fruktansvärda självlärda programmörerna utan en form av formell utbildning i vad som helst vagt relaterat till CompSci eller Math. Att läsa om lite tyder på att det här kan vara ett högt eller lågt passfilter, men jag kan inte hitta någonting som förklarar vad som är begripligt för ett hack som jag, hur effekten av dessa algoritmer skulle vara på en rad värden, än mindre hur matematiken Arbetar. Svaret som ges här. till exempel, svarar tekniskt på min fråga, men endast i förståelse för dem som förmodligen redan vet hur man löser problemet. Det skulle vara en väldigt härlig och smart person som vem skulle kunna förklara vilken typ av problem det här är och hur lösningarna fungerar, vilket är begripligt för en kandidatexamen. frågade 21 sep 10 kl 13:01 Om ditt rörliga medelvärde måste vara långt för att uppnå önskad utjämning och du inte behöver någon särskild form av kärna, så är du bättre om du använder ett exponentiellt förfallande glidande medelvärde: var du välj liten för att vara en lämplig konstant (t. ex. om du väljer liten 1- 1N, kommer den att ha samma mängd medelvärde som ett fönster av storlek N, men fördelat annorlunda över äldre punkter). Hur som helst, eftersom nästa värde av det rörliga genomsnittet bara beror på föregående och dina data behöver du inte behålla en kö eller något annat. Och du kan tänka på det här som att göra något, ja, jag har en ny punkt, men jag litar verkligen inte på det, så jag ska hålla 80 av min gamla uppskattning av mätningen och lita bara på den nya datapunkten 20. Thats Tämligen detsamma som att säga, Tja, jag litar bara på den här nya punkten 20, och jag använder 4 andra punkter som jag litar på samma belopp, förutom att istället för att uttryckligen ta de 4 andra punkterna, antar du att den genomsnittliga tiden du gjorde förra gången var förnuftigt så att du kan använda ditt tidigare arbete. svarat 21 sep 10 kl 14:27 Hej, jag vet att det här är 5 år sent, men tack för ett fantastiskt svar. I39m arbetar på ett spel där ljudet ändras baserat på din hastighet, men på grund av att du kör spelet på en slow-ass-dator, skulle hastigheten fluktuera vildt, vilket var bra för styrning, men mycket irriterande när det gäller ljud. Det här var en väldigt enkel och billig lösning på någonting som jag trodde skulle vara ett väldigt komplext problem. ndash Adam Mar 16 15 kl 20:20 Om du försöker ta bort det enstaka udda värdet är ett lågpassfilter det bästa av de tre alternativen du har identifierat. Lågpassfilter tillåter låghastighetsförändringar som de som orsakas av att man roterar en kompass för hand, medan man förkastar höghastighetsförändringar, t. ex. de som orsakas av stötar på vägen. Ett rörligt medelvärde kommer förmodligen inte vara tillräckligt, eftersom effekterna av ett enda blip i dina data kommer att påverka flera efterföljande värden beroende på storleken på ditt glidande medelfönster. Om de udda värdena lätt kan detekteras kan du till och med vara bättre med en glitch-avlägsnande algoritm som helt ignorerar dem: Här är ett gickdiagram som illustrerar: Den första grafen är ingångssignalen, med en obehaglig glitch. Det andra diagrammet visar effekten av ett rörligt medelvärde på 10 prov. Slutgrafen är en kombination av 10-provvärdet och den enkla glitchdetekteringsalgoritmen som visas ovan. När glitchen detekteras används 10-provsgenomsnittet istället för det faktiska värdet. Flyttande medelvärde jag kan komma ner med. men det verkar som om det är ganska ineffektivt. Theres verkligen ingen anledning att ett rörligt medelvärde borde vara ineffektivt. Du behåller antalet datapunkter du vill ha i en viss buffert (som en cirkelkö). På varje ny datapunkt popar du det äldsta värdet och subtraherar det från en summa och trycker på det nyaste och lägger det till summan. Så varje ny datapunkt innebär egentligen bara en poppush, ett tillägg och en subtraktion. Ditt rörliga medelvärde är alltid denna förskjutande sum dividerad med antalet värden i din buffert. Det blir lite svårare om du tar emot data samtidigt från flera trådar, men eftersom dina data kommer från en hårdvarubutik som verkar mycket tveksamt för mig. Åh och också: hemska självlärda programmerare förenar) Det rörliga genomsnittet verkade ineffektivt för mig eftersom du måste lagra en buffert med värden - bättre att bara göra lite Clever Maths med ditt inmatningsvärde och nuvarande arbetsvärde Jag tror att det är hur exponentiell glidande medelvärde Arbetar. En optimering som jag sett för den här typen av glidande medelvärde innebär att du använder en fastlängdskönsförstärkare en pekare till var du befinner dig i den köen och bara sveper pekaren runt (med eller om). Voila Ingen dyr manchet. Kraft till amatörerna, bror ndash Henry Cooke Sep 22 10 på 0:54 Henry: För ett rakare rörligt medel behöver du bufferten helt enkelt så att du vet vilket värde som dyker upp när nästa värde blir skjutit. Med det sagt, den kvoterade längdskönsförstärkaren en pointerquot du beskriver är exakt vad jag menade med kvotcirkulär kö. Det var därför jag sa att det inte är ineffektivt. Vad trodde du att jag menade Och om ditt svar är kvot array som ändrar sina värden tillbaka på varje indexerad removalquot (som std :: vektor i C). Ja, då är jag så skadad att jag inte ens vill prata med dig längre) ndash Dan Tao Sep 22 10 på 1:58 Henry: Jag vet inte om AS3, men en Java-programmerare har samlingar som CircularQueue vid hisher bortskaffande (I39m inte en Java-utvecklare så jag är säker på att det finns bättre exempel där ute, det är bara det jag hittade från en snabb Google-sökning), som precis implementerar funktionaliteten vi talar om. Jag är ganska säker på att majoriteten på mellannivå och lågnivå språk med standardbibliotek har något liknande (t ex i QueueltTgt). Hur som helst, jag var filosofi själv, så. allt är förlåtet. ndash Dan Tao 22 sep 10 kl 12:44 Ett exponentiellt förfallande glidande medelvärde kan beräknas för hand med endast trenden om du använder rätt värden. Se fourmilab. chhackdiete4 för en idé om hur man gör det snabbt med en penna och papper om du letar efter exponentiellt slätat glidande medelvärde med 10 utjämning. Men eftersom du har en dator, vill du förmodligen göra binärväxling i motsats till decimalväxling) På så sätt är allt du behöver en variabel för ditt nuvarande värde och en för medeltalet. Nästa medelvärde kan då beräknas utifrån det. svarade 21 sep 10 kl 14:39 theres en teknik kallad en intervall grind som fungerar bra med låg förekomst falska prover. förutsatt att användningen av en av de ovan nämnda filterteknikerna (glidande medelvärde, exponentiella), när du har tillräcklig historia (en tidskonstant), kan du testa det nya inkommande dataprovet för rimlighet innan det läggs till i beräkningen. viss kunskap om den maximala rimliga hastighetsgraden av signalen krävs. Råprovet jämförs med det senaste släta värdet, och om det absoluta värdet av den skillnaden är större än det tillåtna intervallet, kastas detta prov (eller ersätts med lite heuristiska, t. ex. en förutsägelse baserad på lutningsskillnad eller trenden prediktionsvärde från dubbel exponentiell utjämning) svarat 30 april 16 kl 6: 56 Jag har väsentligen en mängd värden så här: Ovanstående array är översimplifierad, jag samlar 1 värde per millisekund i min riktiga kod och jag behöver bearbeta utmatningen på en algoritm Jag skrev för att hitta den närmaste toppen före en tidpunkt. Min logik 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 är en minskning till 0,24 före den. 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 jaggediga) Jag har blivit tillsagd att tillämpa ett exponentiellt glidande medelfilter till mina värden. Hur kan jag göra det här Det är verkligen svårt för mig att läsa matematiska ekvationer, jag hanterar mycket bättre med kod. Hur bearbetar jag värden i min array, tillämpar en exponentiell glidande medelberäkning för att jämföra dem ut frågade 8 feb 12 kl 20:27 för att beräkna ett exponentiellt glidande medelvärde. du behöver behålla en del tillstånd och du behöver en inställningsparameter. Detta kräver en liten klass (förutsatt att du använder Java 5 eller senare): Instantiate with decay parameteren du vill ha (det kan ta tuning ska vara mellan 0 och 1) och sedan använda genomsnittet () för att filtrera. När du läser en sida om någon matematisk återkommande, behöver allt du verkligen vet när du gör det till kod, att matematiker gillar att skriva index i arrays och sekvenser med prenumerationer. (Theyve några andra noteringar också, vilket inte hjälper.) EMA är dock ganska enkel eftersom du bara behöver komma ihåg ett gammalt värde, inga komplicerade tillståndsskivor krävs. svarat 8 feb 12 kl 20:42 TKKocheran: Ganska mycket. Det är inte bra när saker kan vara enkla (Om du börjar med en ny sekvens, få en ny medelvärde.) Observera att de första villkoren i den genomsnittliga sekvensen kommer att hoppa runt lite på grund av gränseffekter, men du får de med andra glidande medelvärden för. En bra fördel är dock att du kan förflytta den glidande genomsnittliga logiken till medelvärdena och experimentera utan att störa resten av ditt program för mycket. ndash Donal Fellows Feb 9 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, då är det fel. Det är fel eftersom det förutsätter en monotonisk ökning eller minskning (det går alltid upp eller går alltid ner). Om du inte genomsnittar ALLA dina data, dina datapunkter --- som du presenterar dem --- är olinjära. Om du verkligen vill hitta det maximala värdet mellan två punkter i tid, skivar du din matris från tmin till tmax och hittar maximal av den subarrayen. 2) Nu är begreppet glidande medelvärden mycket enkelt: tänk att jag har följande lista: 1,4, 1,5, 1,4, 1,5, 1,5. Jag kan släta ut det genom att ta medeltalet av två nummer: 1,45, 1,45, 1,45, 1,5. Observera att det första numret är medeltalet 1,5 och 1,4 (andra och första siffror) 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. Jag kunde ha gjort det period tre eller fyra, eller n. Lägg märke till hur dataen är mycket mjukare. 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 i diagrammet. Välj Flytta genomsnittet med en given period och Exponentiell glidande medelvärde för att jämföra deras skillnader. Exponentiellt glidande medelvärde är bara en annan 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 rörligt medel istället för exponentiellt. Så den produkt du får är de sista x-termerna dividerad med x. Obestämd pseudokod: Observera att du måste hantera start - och slutdelarna av data eftersom det klart är att du inte kan räkna med de senaste 5 termerna när du är på din andra datapunkt. Det finns också mer effektiva sätt att beräkna detta glidande medelvärde (summa summan - äldsta nyaste), men det här är att få konceptet av vad som händer över. besvarade feb 8 12 kl 20:41
Comments
Post a Comment