Wednesday, October 19, 2016

Eksponensiële Bewegende Gemiddelde Filter Algoritme

Ek het in wese 'n verskeidenheid van waardes soos volg: Bogenoemde skikking word oorvereenvoudig, Im invordering 1 waarde per millisekonde in my werklike kode en ek nodig het om die uitset op 'n algoritme wat ek geskryf het na die naaste piek voor 'n tydstip vind verwerk. My logika nie, omdat my voorbeeld hierbo, 0,36 is die ware hoogtepunt, maar my algoritme sal agter te kyk en te sien die heel laaste aantal 0,25 as die hoogtepunt, as Theres 'n afname tot 0,24 voor dit. Die doel is om hierdie waardes te neem en 'n algoritme toe te pas om hulle verwek wat hulle sal glad 'n bietjie, sodat ek meer lineêre waardes. (Dit wil sê: id graag my resultate te bochtig wees, nie jaggedy) Ive vertel is om 'n eksponensiële bewegende gemiddelde filter van toepassing op my waardes. Hoe kan ek hierdie Sy doen baie moeilik vir my om wiskundige vergelykings gelees, ek gaan baie beter met kode. Hoe kan ek verwerk waardes in my skikking, die toepassing van 'n eksponensiële bewegende gemiddelde berekening om hulle selfs uit gevra 8 Februarie 12 aan 20:27 Om 'n eksponensiële bewegende gemiddelde bereken. wat jy nodig het om 'n staat om te hou en jou 'n stem parameter nodig het. Dit vereis 'n bietjie klas (met die aanvaarding jy met behulp van Java 5 of later): instansieer met die verval parameter wat jy wil (kan stem te neem moet wees tussen 0 en 1) en gebruik dan die gemiddelde () te filtreer. Lees 'n artikel op 'n mathmatical herhaling, al wat jy regtig nodig het om te weet wanneer om dit in kode is dat wiskundiges graag indekse in skikkings en rye met onderskrifte te skryf. (Theyve 'n paar ander notasies sowel, wat help nie die geval is.) Maar die EMO is eenvoudig as wat jy net nodig het om 'n ou waarde geen ingewikkelde toestand skikkings nodig om te onthou. beantwoord 8 Februarie 12 aan 20:42 TKKocheran: Pretty much. Isn39t dit lekker as dinge eenvoudig (As begin met 'n nuwe reeks, kry 'n nuwe Averager.) Kan wees Let daarop dat die eerste paar terme in die gemiddelde volgorde om 'n bietjie sal spring as gevolg van grens-effekte, maar jy kry diegene met ander bewegende gemiddeldes ook. Maar 'n goeie voordeel is dat jy die bewegende gemiddelde logika in die Averager en eksperimenteer kan draai sonder die res van jou program te veel te versteur. â € Donal Fellows 9 Februarie 12 by 00:06 Ek het 'n harde tyd te verstaan ​​jou vrae, maar ek sal probeer om in elk geval te beantwoord. 1) As jou algoritme gevind 0,25 in plaas van 0,36, dan is dit verkeerd. Dit is verkeerd, want dit neem 'n monotoniese vermeerdering of vermindering (wat altyd opgaan of altyd gaan af). Tensy jy al jou data gemiddeld jou datapunte --- soos jy dit aan te bied --- is nie-lineêre. As jy regtig wil om die maksimum waarde tussen twee punte in die tyd te vind, dan sny jou verskeidenheid van tmin om Tmax en vind die maksimum van daardie subarray. 2) Nou, die konsep van bewegende gemiddeldes is baie eenvoudig: dink dat ek die volgende lys: 1.4, 1.5, 1.4, 1.5, 1.5. Ek kan dit glad deur die neem van die gemiddelde van twee getalle: 1.45, 1.45, 1.45, 1.5. Let daarop dat die eerste getal is die gemiddeld van 1.5 en 1.4 (tweede en eerste nommers) die tweede (nuwe lys) is die gemiddeld van 1.4 en 1.5 (derde en tweede ou lys) die derde (nuwe lys) die gemiddelde van 1,5 en 1,4 (vierde en derde), en so aan. Ek kon dit drie of vier, of N gemaak. Let op hoe die data is baie gladder. 'N Goeie manier om bewegende gemiddeldes te sien by die werk is om te gaan na Google Finansies, kies 'n voorraad (probeer Tesla Motors mooi vlugtige (TSLA)) en klik op technicals aan die onderkant van die grafiek. Kies bewegende gemiddelde met 'n gegewe tydperk, en Eksponensiële bewegende gemiddelde om hul verskille te vergelyk. Eksponensiële bewegende gemiddelde is net nog 'n uitbreiding van hierdie, maar gewigte die ouer data minder as die nuwe data dit is 'n manier om vooroordeel die smoothing na die agterkant. Lees asseblief die Wikipedia-inskrywing. So, dit is meer 'n opmerking as 'n antwoord, maar die bietjie kommentaar boks was net te klein. Sterkte. As jy probleme het met die wiskunde, kan jy gaan met 'n eenvoudige bewegende gemiddelde plaas van eksponensiële. So die uitset jy sou wees die laaste x terme gedeel deur x. Ongetoets pseudokode: Let daarop dat jy sal nodig hê om te hanteer die begin en einde dele van die data sedert duidelik jy kan nie gemiddeld die afgelope 5 terme wanneer jy op jou 2de data punt. Daar is ook meer doeltreffende maniere berekening hierdie bewegende gemiddelde (som som - oudste nuutste), maar dit is om die konsep van kry whats oor gebeur. beantwoord 8 Februarie 12 aan 20: 41Exponential bewegende gemiddelde - EMO laai die speler. Afbreek van Eksponensiële bewegende gemiddelde - EMO Die 12- en 26-dag EMA is die gewildste kort termyn gemiddeldes, en hulle word gebruik om aanwysers soos die bewegende gemiddelde konvergensie divergensie (MACD) en die persentasie prys ossillator (PPO) te skep. In die algemeen, is die 50- en 200-dag EMA as seine van 'n lang termyn tendense. Handelaars wat tegniese ontleding diens vind bewegende gemiddeldes baie nuttig en insiggewend wanneer dit korrek toegepas word, maar skep chaos wanneer onbehoorlik gebruik of verkeerd verstaan. Al die bewegende gemiddeldes wat algemeen gebruik word in tegniese ontleding is, volgens hulle aard, sloerende aanwysers. Gevolglik moet die afleidings wat op die toepassing van 'n bewegende gemiddelde op 'n bepaalde mark grafiek wees om 'n mark skuif bevestig of om sy krag te toon. Heel dikwels is, teen die tyd dat 'n bewegende gemiddelde aanwyser lyn het 'n verandering aan 'n beduidende stap in die mark weerspieël gemaak het die optimale punt van toegang tot die mark reeds geslaag. 'N EMO nie dien om hierdie dilemma te verlig tot 'n mate. Omdat die EMO berekening plaas meer gewig op die jongste data, dit drukkies die prys aksie 'n bietjie stywer en reageer dus vinniger. Dit is wenslik wanneer 'n EMO word gebruik om 'n handels inskrywing sein herlei. Interpretasie van die EMO Soos alle bewegende gemiddelde aanwysers, hulle is baie meer geskik vir trending markte. Wanneer die mark is in 'n sterk en volgehoue ​​uptrend. die EMO aanwyser lyn sal ook 'n uptrend en andersom vir 'n down tendens toon. A waaksaam handelaar sal nie net aandag te gee aan die rigting van die EMO lyn, maar ook die verhouding van die tempo van verandering van die een bar na die volgende. Byvoorbeeld, as die prys aksie van 'n sterk uptrend begin plat en reverse, van die EMAS tempo van verandering van die een bar na die volgende sal begin om te verminder tot tyd en wyl die aanwyser lyn plat en die tempo van verandering is nul. As gevolg van die sloerende uitwerking, deur hierdie punt, of selfs 'n paar bars voor, die prys aksie moet reeds omgekeer. Dit volg dus dat die waarneming van 'n konsekwente verminderde in die tempo van verandering van die EMO kon self gebruik word as 'n aanduiding dat die dilemma wat veroorsaak word deur die sloerende uitwerking van bewegende gemiddeldes verder kon teen te werk. Algemene gebruike van die EMO EMA word algemeen gebruik word in samewerking met ander aanwysers aan beduidende mark beweeg bevestig en om hul geldigheid te meet. Vir handelaars wat intraday en vinnig bewegende markte handel te dryf, die EMO is meer van toepassing. Dikwels handelaars gebruik EMA om 'n handels vooroordeel bepaal. Byvoorbeeld, as 'n EMO op 'n daaglikse grafiek toon 'n sterk opwaartse neiging, kan 'n intraday handelaars strategie wees om net handel van die lang kant op 'n intraday chart. An Eksponensiële bewegende gemiddelde IIR Filter Filter van gemete veranderlikes ingesluit mikrobeheerder gebaseer kringe is nodig om die gemiddelde waarde van die seine op te spoor en om hul veranderlikheid te verminder. As die seine verskil in hul gemiddelde waarde met verloop van tyd, die filter moet 'n manier om ou mates weggooi terwyl die integrasie van nuwe monsters. Die eksponensiële bewegende gemiddelde oneindige impule reaksie (IIR) filter is goed verstaan ​​vir baie dekades en word op groot skaal in statistiese analise. Dit bied 'n bestryk eenvoudige middel van die bepaling van die gemiddelde waarde van 'n veranderlike wanneer die onderliggende model van die veranderlike is onbekend. As v N is die veranderlike wat gefiltreer, dan 'n nde beramer vir die gemiddelde waarde is: waar a gewig koëffisiënt waarvan die waarde bepaal die bedrag van gladstryking. Hoe nader 'n is om 0, hoe groter is die hoeveelheid glad. In sommige gevalle is die algoritme in hierdie vorm produseer intermediêre resultate wat groot kan word. Om dit te implementeer met behulp van 'n eindige presisie heelgetal rekenkunde, is dit gegiet in 'n effens ander vorm waarin intermediêre resultate word begrens deur 'n bekende waarde. Die gewig koëffisiënt is voorgestel as 'n 1-1 / h. waar c 'n krag van 2. Die krag k kan verhoog word tot die bedrag van smoothing verhoog, terwyl beperking tot 'n krag van 2 sal toelaat vermenigvuldig en deel te word uitgevoer met behulp van 'n baie vinnige links en regs skuif bedrywighede in 'n mikroverwerker. Die hoeveelheid CV av (N) is nagespoor tot presisie handhaaf: As byvoorbeeld die monsters is 8 bit hoeveelhede (soos gebruik in baie van die beskryf vir die SMPS kringe hier beskryf algoritmes), en k is gekies om 8, dan is die hoeveelheid CV av (n) kan voorgestel word as 'n 16 bit waarde sonder verlies van inligting (juis: 8k stukkies, sien hieronder). Sodra dit vasgestel is, is die hoeveelheid v av (N) wat verkry word deur 'n eenvoudige regs skuif deur k plekke. Op hierdie stadium is daar 'n verlies van inligting van minder as 1 lsb omvang wat (egter daarop dat daar korrelasies in hierdie verlore inligting wat sistematiese foute kan veroorsaak mag wees) kan geabsorbeer word in die onsekerhede van v N. Die veronderstelling dat die veranderlikes V I statisties onafhanklike, analise van variansie toon dat dit verminder met 'n faktor 1 / (2c). Vir stap veranderinge in v N die tydkonstante is c berekening tussenposes. Dop van die gemiddelde waarde word minder akkuraat as die tydkonstante verhoog om te vergelyk met die laagste frekwensie in die onderliggende sein model geword. Boonste limiet vir die gemiddelde waarde Die filter begin met v av (0) 0. Alle afmetings v N is tussen 0 en minstens B (waar B is gewoonlik 256 in ons voorbeelde). So werk terug na die begin van die reeks (wat in die praktyk is altyd eindig) wat net B. So het die maksimum waarde van die versterkte gemiddelde CV av (N) is cB wat binne 'n 16 bit nommer in die voorbeeld hierbo. Gewig in die geval waar die monsters het verskillende statistiese belang, dit is, 'n paar het 'n groter fout waarskynlikheid as ander, gewigte aangewend kan word om 'n meer algemene vorm van die filter te skep. Hierdie gewigte sal gekies word om 'n omgekeerde verhouding tot die foutwaarskynlikheid het. As w N is die gewigte wat toegepas moet word, kan die volgende filter gebruik word: Die tweede vergelyking produseer 'n IIR raming van die gemiddelde van die gewigte wat gebruik word in die eerste vergelyking. Dit kan bewys dat 'n onbevooroordeelde raming van die gemiddelde van v N produseer met 'n vergeet faktor van (1-a). Soos voorheen die gewysigde gemiddeldes CW av (N) en CW av (N) v av (N) wat op die linkerkant sal gevolg word, en die verlangde hoeveelhede onttrek deur 'n eenvoudige division. Im nie certainn van die korrekte oplossing al sedert optel die gemiddelde van elke monster sou 'n billike bedrag van afronding fout te stel. Hmm. Ek wonder of verskil tussen Dobby die breukdeel van die hele gedeelte sal help. Verdeel die hele deel van elke getal met die telling. Hou drie hardloop somme: 1) Die gemiddelde van die hele dele, 2) Die res van elke afdeling, en 3) Die breukdeel van elke nommer. Elke keer as die hele deel van 'n aantal verdeeld is, word die hele deel gevolg by die gemiddelde hardloop som en die res word bygevoeg om die res loop som. Wanneer die res loop som verkry 'n waarde groter as of gelyk aan die telling, sy gedeel deur die telling met die hele deel gevolg by die gemiddelde hardloop som en die res by die res loop som. Ook by elke berekening, die breukdeel word by die fraksionele hardloop som. Wanneer die gemiddelde klaar is, is die res loop som gedeel deur die telling en die gevolg is bygevoeg om die gemiddelde hardloop bedrag as 'n drywende nommer. Byvoorbeeld: Nou wat om te doen met die fraksionele hardloop som. Die gevaar van oorloop is baie minder geneig hier, al is steeds moontlik, so 'n manier om dit te hanteer sou wees om die fraksionele hardloop som deur die telling te verdeel aan die einde en voeg dit by ons gevolg: 'n alternatief sou wees om die fraksionele loop kyk som op elke berekening om te sien of dit is groter as of gelyk aan tel. Wanneer dit gebeur, net doen dieselfde ding wat ons doen met die res loop som. Uitstekende Jomit Vaghela 6-Maart-07 20:00 ek hou van wat jy gesê het klein werk vinnig draai in 'n groot werk. Dink van optimalisering terwyl kodering is 'n goeie praktyk. Groot moeite en verduideliking, Is dit moontlik om 'n bewegende gemiddelde in C te implementeer sonder die behoefte aan 'n venster van monsters Ive het bevind dat ek 'n bietjie kan optimaliseer, deur die keuse van 'n venster grootte dis 'n krag van twee voorsiening te maak vir bietjie-verskuiwing in plaas van verdeel, maar nie dat daar 'n buffer sal lekker wees. Is daar 'n manier om 'n nuwe bewegende gemiddelde resultaat slegs as 'n funksie van die ou gevolg en die nuwe monster te druk definieer 'n voorbeeld bewegende gemiddelde, oor 'n venster van 4 monsters te wees: Voeg nuwe monster e: 'n bewegende gemiddelde kan rekursief geïmplementeer , maar vir 'n presiese berekening van die bewegende gemiddelde jy die oudste insette monster in die som (dws die 'n in jou voorbeeld) onthou. Vir 'n lengte N bewegende gemiddelde wat jy bereken: waar yn is die uitsetsein en xn is die insetsein. Aand. (1) kan rekursief geskryf word as sodat jy altyd moet die monster xn-N onthou om te bereken (2). Soos uitgewys deur Conrad Turner, kan jy 'n (oneindig lank) eksponensiële venster plaas, wat dit moontlik maak om die uitset net uit die verlede uitset en die huidige insette te bereken gebruik, maar dit is nie 'n standaard (ongeweegde) bewegende gemiddelde, maar 'n eksponensieel geweegde bewegende gemiddelde, waar monsters verder in die verlede kry 'n kleiner gewig, maar (ten minste in teorie) wat jy nooit iets vergeet nie (die gewigte kry net kleiner en kleiner vir monsters ver in die verlede). inisialiseer totale 0, count0 (elke keer sien 'n nuwe waarde toe een insette (scanf), een totalnewValue, een inkrement (telling), een kloof gemiddelde (totale / telling voeg) Dit sou 'n bewegende gemiddelde oor alle insette Om die gemiddelde bereken word oor net die laaste 4 insette, sal vereis 4 inputvariables, miskien kopiëring elke insette om 'n ouer inputvariable, dan berekening van die nuwe bewegende gemiddelde. as som van die 4 inputvariables, gedeel deur 4 (regs skuif 2 sal goed wees as al die insette was positiewe na die gemiddelde berekening te maak


No comments:

Post a Comment