Friday, 24 November 2017

Viktat glidande medelvärde arduino


Viktiga rörliga medelvärden: Grunderna Under åren har tekniker hittat två problem med det enkla glidande medlet. Det första problemet ligger i tidsramen för glidande medelvärdet (MA). De flesta tekniska analytiker tror att prisåtgärder. det öppnande eller stängande aktiekurset räcker inte för att bero på att man korrekt förutsäger köp - eller försäljningssignaler för MAs-crossover-åtgärden. För att lösa detta problem, tilldelar analytiker nu mer vikt till de senaste prisuppgifterna med hjälp av det exponentiellt jämnaste glidande genomsnittet (EMA). (Läs mer om att utforska exponentiellt vägda rörliga medelvärdet.) Ett exempel Till exempel, med en 10-dagars MA, skulle en analytiker ta slutkursen på den 10: e dagen och multiplicera detta nummer med 10, den nionde dagen med nio, den åttonde dag med åtta och så vidare till den första av MA. Så snart summan har bestämts, fördelar analytikern sedan numret genom tillsatsen av multiplikatorerna. Om du lägger till multiplikatorerna i 10-dagars MA-exemplet är numret 55. Denna indikator kallas det linjärt vägda glidande medlet. (För relaterad läsning, kolla in Enkla rörliga genomsnittsvärden. Utveckla tendenser.) Många tekniker är fasta troende i det exponentiellt jämnaste glidande genomsnittet (EMA). Denna indikator har förklarats på så många sätt att det både förvirrar studenter och investerare. Kanske kommer den bästa förklaringen från John J. Murphys tekniska analys av finansmarknaderna (publicerad av New York Institute of Finance, 1999). Det exponentiellt jämnaste glidande genomsnittet adresserar båda problemen i samband med det enkla glidande medlet. För det första tilldelas det exponentiellt glatt genomsnittet en större vikt till de senaste data. Därför är det ett viktat glidande medelvärde. Men medan det tilldelas mindre betydelse för tidigare prisuppgifter, ingår det i beräkningen av alla data i instrumentets livstid. Dessutom kan användaren justera viktningen för att ge större eller mindre vikt till det senaste dagspriset, vilket läggs till i procent av värdet för tidigare dagar. Summan av båda procentvärdena lägger till 100. Till exempel kan det sista dagspriset tilldelas en vikt av 10 (.10), som läggs till föregående dagsvikt på 90 (.90). Detta ger den sista dagen 10 av den totala vikten. Detta skulle motsvara ett 20-dagars medelvärde genom att ge sista dagens pris ett mindre värde av 5 (.05). Figur 1: Exponentially Sloothed Moving Average Ovanstående diagram visar Nasdaq Composite Index från den första veckan i augusti 2000 till 1 juni 2001. Som du tydligt kan se, EMA, som i detta fall använder slutkursdata över en nio dagars period, har bestämda försäljningssignaler den 8 september (markerad med en svart nedåtpil). Det här var den dag då indexet gick ner under 4 000-nivån. Den andra svarta pilen visar ett annat nedben som teknikerna faktiskt förväntade sig. Nasdaq kunde inte generera tillräckligt med volym och intresse från detaljhandeln för att bryta 3 000 mark. Därefter dyker ner igen till botten ut vid 1619.58 den 4 april. Upptrenden av 12 april markeras med en pil. Här stängde indexet 1961.46, och tekniker började se att institutionella fondförvaltare började hämta några fynd som Cisco, Microsoft och några av de energirelaterade frågorna. (Läs våra relaterade artiklar: Flytta genomsnittliga kuvert: Raffinera ett populärt handelsverktyg och flytta genomsnittsavvisningar.) Detta är en samling rutiner för att utföra matematisk analys av antal arrays. Aktuellt funktionsstöd: Alla funktioner är fullt överbelastade för att stödja följande datatyper: Med undantag för stddev () returnerar de alla samma datatyp som matrisen. En rad int-värden returnerar en enda int. stddev () returnerar alltid en flottör. Alla funktioner utom rullandeAverage () tar två argument. Den första är arrayen som ska fungera på. Den andra är antalet poster i arrayen. rollingAverage () tar ett tredje argument - den nya posten som ska läggas till i arrayen. Rullande medelvärde Format: genomsnittlig rullandeAverage (historikradie, slicecount, value) Lägger till värdet för arrayhistorikraden som ändrar alla värden på ett ställe. Medelmedelvärdet returneras sedan. Format: medelvärde (array, slicecount) Beräknar medelvärdet av värdena i array. slicecount är antalet poster i arrayen. Format: medelläge (array, slicecount) Finn det vanligaste numret i arrayen. Format: max maximum (array, slicecount) Finns det största värdet i arrayen. Format: min minimum (array, slicecount) Finns det minsta värdet i arrayen. Standardavvikelseformat: avvikelse stddev (array, slicecount) Standardavvikelsen är kvadratroten av medelvärdet av summan av kvadraterna för skillnaden mellan varje datapunkt och medelvärdet för matrisen. Det här är den enda funktionen som inte returnerar samma datatyp som matrisen. Standardavvikelsen returneras alltid som en flotta. En av huvudapplikationerna för Arduino-kortet är läsning och loggning av sensordata. Till exempel övervakar man trycket varje sekund på dagen. Eftersom höga samplingsfrekvenser ofta genererar spikar i graferna vill man också ha ett genomsnitt av mätningarna. Eftersom mätningarna inte är statiska i tid, så behöver vi ofta ett löpande medelvärde. Detta är medeltiden för en viss period och mycket värdefull när man gör trendanalys. Enklast form av ett löpande medel kan göras med kod som bygger på föregående löpande medelvärde: Om man inte vill använda flytande punktmatematik - eftersom detta tar upp minne och minskar hastigheten - kan man göra detsamma helt i heltalsdomenet. Uppdelningen med 256 i provkoden är en skift-höger 8, vilken är snabbare än att säga division med t. ex. 100. Detta gäller för varje kraft av 2 som delare och en enda måste ta hand om summan av vikterna motsvarar kraften på 2. Och det är självklart att man bör ta hand om det finns inget mellanliggande överskott (överväga att använda osignerade långa) Om du behöver Ett mer exakt löpande medelvärde, i konkreto från de senaste 10 mätningarna, behöver du en array (eller länkad lista) för att hålla dem. Denna array fungerar som en cirkulär buffert och med varje ny mätning avlägsnas den äldsta. Det löpande genomsnittet beräknas som summan av alla element dividerat med antalet element i arrayen. Koden för löpande medelvärde kommer att vara något så här: Nackdelen med den här koden är att matrisen för att hålla alla värden kan bli ganska stor. Om du har en mätning per sekund och du vill ha ett löpande medel per minut behöver du en uppsättning av 60 en genomsnittlig timme skulle behöva en uppsättning av 3600. Det kunde inte göras så här på en Arduino eftersom den bara har 2K RAM. Men genom att bygga ett 2-stegs medelvärde kan det närmar sig ganska bra (ansvarsfriskrivning: inte för alla mätningar). I psuedo-kod: Eftersom en ny intern statisk matris behövs för varje runningAverage-funktion, skriker detta att implementeras som en klass. RunningAverage library Biblioteket runningAverage gör en klass av funktionen ovan så att den kan användas flera gånger i en skiss. Den avvecklar funktionen add () och avg () för att vara lite mer flexibel, t. ex. man kan ringa genomsnittet flera gånger utan att lägga till en sak. Observera att varje instans av klassen lägger till sitt eget array för att hålla mätningar, och att detta lägger till minnesanvändningen. Klassens gränssnitt hålls så liten som möjligt. Obs! Med version 0.2 görs namnen på metoderna mer beskrivande. En liten skiss visar hur den kan användas. En slumpgenerator används för att efterlikna en sensor. I setup () myRA raderas så kan vi börja lägga till nya data. I loop () först genereras ett slumptal och omvandlas till en float som läggs till i minRA. Sedan skrivs runningAverage till serieporten. Man kan också visa den på vissa LCD-skärmar eller skicka över Ethernet etc. När 300 objekt läggs till rensas MyRA för att börja om igen. För att använda biblioteket, skapa en mapp i dina SKETCHBOOKPATHlibaries med namnet RunningAverage och sätt. h och. cpp där. Gör eventuellt en exempels underkatalog för att placera provappen. 2011-01-30: inledande version 2011-02-28: Fixed missing destructor i. h-fil 2011-02-28: borttagen default constructor 2012--. trimValue () Yuval Naveh lagt till trimValue (hittades på webben) 2012-11-21: refactored 2012-12-30: added fillValue () refactored för publicering 2014-07-03: extra minneskyddskod - om intern array inte kan tilldelas storlek blir 0. Det här är att lösa problemet som beskrivs här - forum. arduino. ccindex. phptopic50473.msg1790086msg1790086 - Testa utförligt. Mall klass RunningAverage. h RunningAverage. cpp

No comments:

Post a Comment