Exponentiell glidande medelvärde c # kod


Jag har i huvudsak 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 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. svarat 8 februari 12 kl 20:41 Exponential Moving Average - EMA BREAKING DOWN Exponential Moving Average - 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. Om en EMA på ett dagligt diagram visar en stark uppåtgående trend kan en intraday-traderstrategi vara att endast handla från långsidan på en intradagskarta. Om den här koden är avgörande, kan det vara meningsfullt att undvika höft tilldelningar för ljus s. Jag tror att det mest rimliga sättet att göra det skulle göra ljuset till en struktur. Även om mutable värde typer är onda. så jag skulle också refactor Candle vara oföränderlig. Detta innebär också att implementeringen av newestCandle skulle behöva bytas, förmodligen till ett par dubbla fält (eller alternativt en separat variabel och återställbar klass). Jag ser ingen annan potentiell prestationsproblem i din kod. Men när det gäller prestanda, bör du alltid lita på profilering, inte din (eller någons) intuition. Också, jag gillar inte några namn på dina metoder. Specifikt: ValueUpdated. Metodnamn borde vanligtvis vara i formen göra något, inte något hände. Så jag tror att ett bättre namn skulle vara UpdateValue. Lägg till. Ändra. Det här är de två grundläggande funktionerna i din MovingAverage och jag tror att de namnen inte uttrycker meningen väl. Jag skulle kalla dem något som MoveAndSetCurrent och SetCurrent. respektive. Även om en sådan namngivning indikerar att de grundläggande operationerna snarare skulle vara Flytta och Ställa in.

Comments

Popular posts from this blog

Calforex priser vancouver

Forex cci expertrådgivare

Forex trading beskattning uk