Jag har väsentligen en mängd värden som denna: Ovanstående array är förenklad, jag samlar 1 värde per millisekund i min riktiga kod och jag behöver bearbeta utmatningen på en algoritm som 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 genomsnittlig berä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 the 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 arrayer 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 genomsnittet 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å tal: 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 siffrorna) 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 viktar de ä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 inte är klart att du inte kan räkna med de senaste 5 termerna när du befinner dig på din andra datapunkt. Det finns också effektivare 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 klockan 20: 41 Jag har ett kontinuerligt värde för vilket Id gillar att beräkna ett exponentiellt glidande medelvärde. Normalt använder Id bara standardformeln för detta: där Sn är det nya genomsnittet, är alfa alfa, Y är provet och S n-1 är föregående medelvärde. Tyvärr, på grund av olika problem har jag inte en konsekvent provtid. Jag kanske vet att jag kan prova högst, säg en gång per millisekund, men på grund av faktorer som jag inte kan kontrollera, kan jag inte ta ett prov i flera millisekunder åt gången. Ett troligt vanligare fall är dock att jag enkelt provar lite tidigt eller sent: i stället för provtagning vid 0, 1 och 2 ms. Jag provar vid 0, 0,9 och 2,1 ms. Jag förutser att, oberoende av förseningar, min samplingsfrekvens kommer att ligga långt, långt över Nyquistgränsen, och jag behöver därför inte oroa mig för aliasing. Jag tror att jag kan hantera detta på ett mer eller mindre rimligt sätt genom att variera alfabetet på lämpligt sätt, baserat på hur länge tiden har gått sedan det sista provet. En del av min resonemang att detta kommer att fungera är att EMA interpolerar linjärt mellan föregående datapunkt och den nuvarande. Om vi överväger att beräkna en EMA av följande lista av prover med intervall t: 0,1,2,3,4. Vi borde få samma resultat om vi använder intervall 2t, där ingångarna blir 0,2,4, höger Om EMA hade antagit att vid t 2 hade värdet varit 2 sedan t 0. Det skulle vara detsamma som intervallet t beräkningen beräknas på 0,2,2,4,4, vilket det inte gör. Eller har det någon mening? Kan någon berätta för mig hur man kan variera alfabetet på lämpligt sätt. Vänligen visa ditt arbete. Dvs. Visa mig matematiken som visar att din metod verkligen gör rätt sak. Frågade 21 juni 09 kl 13:05 Du borde inte få samma EMA för olika inmatningar. Tänk på EMA som ett filter, provtagning vid 2t motsvarar nedprovtagning, och filtret kommer att ge en annan utgång. Detta klart för mig sedan 0,2,4 innehåller högre frekvenskomponenter än 0,1,2,3,4. Om inte frågan är, hur ändrar jag filtret på flyg så att det ger samma effekt. Kanske saknar jag något ndash freespace 21 jun 09 kl 15:52 Men inmatningen är inte annorlunda, det är bara samplet mindre ofta. 0,2,4 i intervaller 2t är som 0, 2, 4 med intervall t, där indikerar att provet ignoreras ndash Curt Sampson 21 jun 09 kl 23:45 Detta svar baseras på min goda förståelse av lågpass Filter (exponentiell glidande medelvärde är egentligen bara ett enkelpoligt lågpassfilter), men min dumma förståelse för vad du letar efter. Jag tror att följande är vad du vill: Först kan du förenkla din ekvation lite (ser mer komplicerat men det är lättare i kod). Jag kommer att använda Y för output och X för input (istället för S för output och Y för input, som du har gjort). För det andra är värdet av alfa här lika med 1-e - Deltattau där Deltat är tiden mellan proverna och tau är tidskonstanten för lågpassfiltret. Jag säger lika med citat eftersom det fungerar bra när Deltattau är liten jämfört med 1, och alpha 1-e-Delta asymp Deltattau. (Men inte för liten: Du kommer att köra i kvantiserande problem, och om du inte tillgriper några exotiska tekniker behöver du vanligtvis en extra N bitars upplösning i din tillståndsvariabel S, där N-log 2 (alfa).) För större värden av Deltattau Filtreringseffekten börjar försvinna tills du kommer till den punkt där alfa är nära 1 och du ger i princip bara inmatningen till utgången. Detta ska fungera ordentligt med varierande värden för Deltat (variationen av Deltat är inte så viktig så länge som alfa är liten, annars kommer du att springa på några ganska konstiga Nyquist-frågor aliasing etc.), och om du arbetar på en processor där multiplikation Är billigare än division, eller problem med fast punkt är viktiga, precalculate omega 1tau, och överväga att försöka approximera formeln för alfa. Om du verkligen vill veta hur man härleder formeln alpha 1-e-Delta, se sedan dess differentialekvationskälla: vilken, när X är en enhetstegfunktion, har lösningen Y 1 - e - ttau. För små värden av Deltat kan derivatet approximeras av DeltaYDeltat, vilket ger Y tau DeltaYDeltat X DeltaY (XY) (Deltattau) alfa (XY) och extrapoleringen av alfa 1-e-Delta-beteckningen kommer från att försöka matcha beteendet med Enhetstegfunktionsfall. Vill du snälla utarbeta quottrying för att matcha uppförandekvotdelen Jag förstår din kontinuerliga tidslösning Y 1 - exp (-t47) och dess generalisering till en skalad stegfunktion med magnitud x och initialtillstånd y (0). Men jag ser inte hur man sammanför dessa idéer för att uppnå ditt resultat. Ndash Rhys Ulerich 4 maj 13 kl 22:34 Detta är inte ett komplett svar, men kan vara början på en. Dess så långt som jag fick med det på en timme eller så om att leka Im posta det som ett exempel på vad jag letar efter, och kanske en inspiration till andra som arbetar med problemet. Jag börjar med S 0. Vilket är medelvärdet från föregående medel S -1 och provet Y 0 tagen vid t 0. (T 1 - t 0) är mitt provintervall och alfa är inställd på vad som är lämpligt för det provintervallet och den period över vilken jag önskar att genomsnittsvärdet. Jag funderade på vad som händer om jag saknar provet på t 1 och istället måste göra med provet Y 2 vid t 2. Tja, vi kan börja med att expandera ekvationen för att se vad som skulle ha hänt om vi hade haft Y 1: Jag märker att serien verkar sträcka sig oändligt på det här sättet, eftersom vi kan ersätta S n i högra sidan på obestämd tid: Ok , Så det är inte riktigt ett polynom (dumt jag), men om vi multiplicerar den ursprungliga termen av en så ser vi ett mönster: Hm: det är en exponentiell serie. Quelle överraskning Föreställ dig att komma ut ur ekvationen för ett exponentiellt rörligt medelvärde. Jag har ändå det här x 0 x 1 x 2 x 3. Sak går och jag är säker på att jag luktar e eller en naturlig logaritm som sparkar runt här, men jag kan inte komma ihåg var jag gick nästa gång jag sprang ur tiden. Någon svar på denna fråga eller något bevis på att ett sådant svar är korrekt beror högt på de uppgifter du mäter. Om dina prov togs vid t 0 0ms. T 1 0,9 ms och t 2 2,1 ms. Men ditt val av alfa är baserat på 1-ms-intervaller, och därför vill du ha en lokalt anpassad alfa n. Ett bevis på att valet är korrekt är att man vet att provvärdena är t1ms och t2ms. Detta leder till frågan: Kan du interpolera dina data resonabelt för att ha sanna gissningar om vilka mellanliggande värden som kan ha varit Eller kan du till och med interpolera genomsnittet själv Om ingen av dessa är möjliga, så långt som jag ser det, den logiska Valet av ett mellanvärde Y (t) är det senast beräknade genomsnittet. Dvs Y (t) asymp Sn där n är maximal så att t n ltt. Detta val har en enkel konsekvens: Lämna alfa ensam, oavsett vad tidsskillnaden var. Om däremot det är möjligt att interpolera dina värden, så kommer detta att ge dig genomgångar med konstantintervallprover. Slutligen, om det är möjligt att interpolera medlet självt, skulle det göra frågan meningslös. Svarade 21 juni 09 kl 15:08 balpha 9830 27.2k 9679 10 9679 87 9679 117 Jag tror att jag kan interpolera mina data: med tanke på att I39m samplar det med skilda intervaller, gör jag det redan med en vanlig EMA. Antag att jag behöver En quotproofquot som visar att den fungerar såväl som en standard EMA, som också har kommer att ge ett felaktigt resultat om värdena inte förändras relativt jämnt mellan provperioderna. Ndash Curt Sampson 21 Jun 09 kl 15:21 Men det är vad jag säger: Om du anser EMA en interpolering av dina värden, är du klar om du lämnar alfabetet som det är (eftersom du sätter in det senaste genomsnittet eftersom Y ändrar inte genomsnittsvärdet) . Om du säger att du behöver något som citerar såväl som en standard EMAquot - vad är fel med originalet Om du inte har mer information om de data du mäter kommer eventuella lokala justeringar av alpha vara bäst godtyckliga. Ndash balpha 9830 21 jun 09 kl 15:31 Jag skulle lämna alfavärdet ensam, och fyll i de saknade uppgifterna. Eftersom du inte vet vad som händer under tiden du inte kan prova kan du fylla i dessa prov med 0s, eller hålla det föregående värdet stabilt och använda dessa värden för EMA. Eller någon bakåtinterpolering när du har ett nytt prov, fyll i de saknade värdena och recomputera EMA. Vad jag försöker få på är att du har en inmatning xn som har hål. Det finns inget sätt att komma runt om det faktum att du saknar data. Så du kan använda en nollorderlagring, eller ställa in den på noll eller någon form av interpolering mellan xn och xnM. Där M är antalet saknade prover och n börjar klyftan. Eventuellt även använda värden före n. Svarade 21 Jun 09 kl 13:35 Från att ha en timmes eller så mucking om lite med matematiken för detta tror jag att det helt enkelt varierar alfabetet faktiskt ger mig rätt interpolering mellan de två punkterna som du pratar om, men i en Mycket enklare sätt. Vidare tror jag att det varierande alfabetiskt också kommer att hantera prov som tas mellan standardprovtagningsintervallen. Med andra ord söker jag efter vad du beskriver, men försöker använda matte för att räkna ut det enkla sättet att göra det. Ndash Curt Sampson 21 jun 09 kl 14:07 Jag tror inte att det finns ett sådant odjur som quotproper interpolationquot. Du vet helt enkelt inte vad som hände i tiden du inte provtagit. Bra och dålig interpolering innebär viss kunskap om vad du saknade, eftersom du måste mäta mot det för att bedöma om en interpolering är bra eller dålig. Även om det sagt kan du placera begränsningar, det vill säga med maximal acceleration, hastighet etc. Jag tror att om du vet hur man modellerar de saknade dataen, då skulle du bara modellera de saknade dataen och sedan tillämpa EMA-algoritmen utan förändring, snarare Än att ändra alfa. Bara min 2c :) ndash freespace 21 juni 09 kl 14:17 Det här är precis vad jag fick på min redigering till frågan för 15 minuter sedan: cDu du bara vet inte vad som hände i tiden du inte provtagning, men men det är sant Även om du provar vid varje bestämt intervall. Således min Nyquist kontemplation: så länge du vet vågformen ändrar inte riktningar mer än varje par prover, borde det faktiska provintervallet inte betyda, och borde kunna variera. EMA-ekvationen verkar mig exakt att beräkna som om vågformen ändrats linjärt från det sista provvärdet till det aktuella. Ndash Curt Sampson 21 Jun 09 kl 14:26 Jag tror inte det är helt sant. Nyquist39s teorem kräver att minst 2 prover per period ska kunna identifiera signalen unikt. Om du inte gör det får du aliasing. Det skulle vara detsamma som provtagning som fs1 för en tid, sedan fs2, sedan tillbaka till fs1, och du får alias i data när du provar med fs2 om fs2 ligger under Nyquist-gränsen. Jag måste också bekänna att jag inte förstår vad du menar med att kvotformen ändras linjärt från sista provet till nuvarande onequot. Kan du tacka Skål, Steve. Ndash freespace 21 jun 09 kl 14:36 Detta liknar ett öppet problem på min todo lista. Jag har ett schema utarbetat i viss utsträckning men har inte matematisk arbete för att återställa detta förslag ännu. Uppdatera amp sammandrag: Vill du hålla utjämningsfaktorn (alfa) oberoende av kompensationsfaktorn (som jag refererar till som beta här). Jasons utmärkta svar redan accepterat här fungerar bra för mig. Om du också kan mäta tiden sedan det senaste provet togs (i avrundade multiplar av din konstanta provtagningstid - så 7,8 ms sedan senaste provet var 8 enheter), som kan användas för att applicera utjämningen flera gånger. Använd formeln 8 gånger i det här fallet. Du har effektivt gjort en utjämning partisk mot det nuvarande värdet. För att få en bättre utjämning behöver vi tweakera alfanumeriska samtidigt som du använder formeln 8 gånger i föregående fall. Vad kommer denna utjämna approximation miss Det har redan missat 7 prover i exemplet ovan Detta approximerades i steg 1 med en planerad omfördelning av nuvärdet ytterligare 7 gånger Om vi definierar en approximationsfaktor beta som kommer att appliceras tillsammans med alfa (Som alfabet istället för bara alfa) antar vi att de 7 missade proverna ändrade sig smidigt mellan de föregående och nuvarande samplingsvärdena. Svarade 21 juni 09 klockan 13:35 Jag tänkte på det här, men det var lite att mucka med matematiken fick mig till den punkt där jag tror det, istället för att tillämpa formeln åtta gånger med provvärdet, kan jag göra en beräkning Av en ny alfa som tillåter mig att använda formeln en gång och ge mig samma resultat. Vidare skulle detta automatiskt ta itu med frågan om prover som kompenseras från exakta provtider. Ndash Curt Sampson 21 jun 09 kl 13:47 Den enkla ansökan är bra. Vad jag inte är säker på ännu är hur bra approximationen av de 7 saknade värdena är. Om den kontinuerliga rörelsen gör värdet jitter mycket över 8 millisekunder, kan approximationerna vara ganska borta från verkligheten. Men, om du är provtagning vid 1ms (högsta upplösning med undantag av de fördröjda proverna) har du redan funnit jitteren inom 1ms inte relevant. Fungerar denna resonemang för dig (jag försöker fortfarande övertyga mig själv). Ndash nik 21 juni 09 kl 14:08 Höger. Det är faktorn beta från min beskrivning. En beta-faktor skulle beräknas baserat på skillnadsintervallet och nuvarande och tidigare prover. Den nya alfabet kommer att vara (alfabetisk) men den kommer endast att användas för det provet. Medan du verkar vara 39moving39 alfabet i formeln, tenderar jag mig mot konstant alfa (utjämningsfaktor) och en självberäknad beta (en inställningsfaktor) som kompenserar för prover som saknas just nu. Ndash nik 21 juni 09 kl 15:23 Vad är den exponentiala rörliga genomsnittliga (EMA) - formeln och hur beräknas EMA Det exponentiella glidande genomsnittet (EMA) är ett viktat glidande medelvärde (WMA) som ger större vikt eller betydelse till det senaste priset Data än det enkla glidande medelvärdet (SMA) gör. EMA svarar snabbare på de senaste prisförändringarna än SMA. Formeln för beräkning av EMA innebär bara att man använder en multiplikator och börjar med SMA. Kalkylen för SMA är väldigt enkel. SMA för ett visst antal tidsperioder är helt enkelt summan av slutkurserna för det antal tidsperioder dividerat med samma antal. Så till exempel är en 10-dagars SMA bara summan av slutkurserna de senaste 10 dagarna, dividerat med 10. De tre stegen för att beräkna EMA är: Beräkna SMA. Beräkna multiplikatorn för viktning av EMA. Beräkna den aktuella EMA. Den matematiska formeln, i detta fall för att beräkna en 10-årig EMA, ser så här ut: SMA: 10 period sum10 Beräkning av viktningsmultiplikatorn: (2 (vald tidsperiod 1)) (2 (10 1)) 0.1818 (18.18) Beräkning EMA: (Slutpris-EMA (föregående dag)) x multiplikator EMA (föregående dag) Viktningen som ges till det senaste priset är större för en kortare EMA än för en längre period EMA. Till exempel tillämpas en 18.18 multiplikator på den senaste prisdata för en 10 EMA, medan för en 20 EMA används endast en 9,52 multiplikatorviktning. Det finns också små variationer av EMA som anlände till genom att använda det öppna, höga, låga eller medianpriset istället för att använda slutkursen. Använd det exponentiella glidande genomsnittet (EMA) för att skapa en dynamisk valutahandelstrategi. Lär dig hur EMAs kan utnyttjas mycket. Läs svar Lär dig de viktiga potentiella fördelarna med att använda ett exponentiellt rörligt medelvärde vid handel, istället för en enkel rörelse. Läs svar Lär dig om enkla rörliga medelvärden och exponentiella glidmedel, vad dessa tekniska indikatorer mäter och skillnaden. Läs svar Lär dig formeln för den rörliga genomsnittliga konvergensdivergensmomentindikatorn och ta reda på hur du beräknar MACD. Läs svar Lär dig om olika typer av glidande medelvärden, samt att flytta genomsnittliga övergångar och förstå hur de används. Läs svar Upptäck de primära skillnaderna mellan exponentiella och enkla glidande medelindikatorer och vilka nackdelar EMA kan. Läs svar Artikel 50 är en klausul i EU-fördraget som beskriver de åtgärder som ett medlemsland måste vidta för att lämna Europeiska unionen. Storbritannien. Beta är ett mått på volatiliteten, eller systematisk risk, av en säkerhet eller en portfölj i jämförelse med marknaden som helhet. En typ av skatt som tas ut på kapitalvinster som uppkommit av individer och företag. Realisationsvinster är vinsten som en investerare. En beställning att köpa en säkerhet till eller under ett angivet pris. En köpgränsorder tillåter näringsidkare och investerare att specificera. En IRS-regel (Internal Revenue Service Rule) som tillåter utbetalningar från ett IRA-konto i samband med straff. Regeln kräver att. DESKRIPTION Denna modul beräknar ett exponentiellt rörligt medelvärde med följande formel där alfa är ett tal mellan 0 och 1. Det betyder att ett nytt värde påverkar genomsnittet med en viss vikt (1-alfa). Den vikten expanderar sedan exponentiellt när andra värden läggs till. Hur man väljer alfa Värdet av alfa bestämmer hur snabbt ett visst värde vingar men det faller aldrig helt ut. Antag att du kan definiera en gräns, säger efter 10 iterationer, bör vikten av ett visst värde vara 1 eller 0,01. Då skapar Math :: EMA-gtnew (kevalvalue.) Ett nytt Math :: EMA-objekt. Parametrarna överförs som nyckelvärdespar. För närvarande är dessa nycklar erkända: initialiserar alfa. Alpha måste ligga i intervallet från 0 till 1. initierar genomsnittsvärdet. Om en uninitialiserad ema används används det första värdet som läggs till initialiserar det. Obj-gtalpha sätta eller hämta den aktuella alfobjektionen eller hämta den aktuella genomsnittsobjektivet (iterationer, slutvikt) beräknar alfa från de överförda värdena. Efter iterationer bör nya värden ett visst värde ha en vikt av slutvikten i medelvärdet. Torsten Foumlrtsch, lttorsten. foertschgmxgt COPYRIGHTT OCH LICENS Upphovsrätt (C) 2008 av Torsten Foertsch Det här biblioteket är gratis programvara, du kan omfördela den och ändra den på samma villkor som Perl själv, antingen Perl version 5.10.0 eller, efter eget val, eventuella Senare version av Perl 5 du kanske har tillgång till. Modul Installationsinstruktioner För att installera Math :: EMA, kopiera och klistra in endera av kommandona till din terminal. Mer information om modulinstallation finns i installationsguiden för detaljerad CPAN-modul.
No comments:
Post a Comment