Ruchowa średnia funkcja w c


Czy jest możliwe do wdrożenia średniej ruchomej w C bez potrzeby okna próbek Ive stwierdził, że można zoptymalizować nieco, wybierając rozmiar okna thats mocy dwóch, aby umożliwić przesunięcie bitów, zamiast dzielić, ale nie potrzebują bufor byłby miły. Czy jest jakiś sposób na wyrażenie nowego wyniku średniej ruchomej tylko w zależności od starego wyniku i nowej próbki Zdefiniuj przykładową średnią ruchu, w oknie 4 próbek: Dodać nową próbkę e: Średnia ruchoma może być realizowana rekurencyjnie , ale dokładne obliczanie średniej ruchomej należy pamiętać o najstarszej próbce wejściowej w sumie (tj. w przykładzie). Dla średniej długości ruchu N, którą obliczysz: gdzie yn jest sygnałem wyjściowym, a xn jest sygnałem wejściowym. Równanie (1) można zapisywać rekurencyjnie tak, więc zawsze trzeba pamiętać o próbce xn-N w celu obliczenia (2). Jak wskazał Conrad Turner, zamiast tego można użyć okna wykładniczego (nieskończenie długiego), co pozwala na obliczenie wyjścia tylko z poprzedniego wyjścia i bieżącego wejścia: ale to nie jest standardowa (nieważona) średnia ruchoma, ale wykładnicza średniej ważonej średniej ruchomej, gdzie próbki w przeszłości otrzymują mniejszą masę, ale (co najmniej teoretycznie) nigdy się nie zapomni (ciężary po prostu maleją i mniejsze w przypadku próbek w przeszłości). Zaimplementowałem średnią ruchomą bez pojedynczej pamięci pozycji dla programu śledzenia GPS, który napisałem. Zacznij od 1 próbki i podzielić przez 1, aby uzyskać aktualną średnią. Następnie dodaj anody i podziel się przez 2 na obecną średnią. To trwa, aż dojdę do średniej. Za każdym razem dodaję nową próbkę do średniej i usuń tę średnią ze wszystkich. Nie jestem matematykiem, ale wydawało mi się to dobrym sposobem na to. Pomyślałem, że zamieniłby żołądek prawdziwego faceta matematyki, ale okazuje się, że jest to jeden ze sposobów na to. I to działa dobrze. Pamiętaj, że im większa długość, tym wolniej idzie za tym, co chcesz podążać. To może nie mieć znaczenia przez większość czasu, ale jeśli śledzisz satelity, jeśli jesteś wolny, szlak może być daleko od rzeczywistej pozycji i będzie wyglądał źle. Możesz mieć przerwę między siadami a końcowymi kropkami. Wybrałem długość 15 aktualizowanych 6 razy na minutę, aby uzyskać odpowiednie wygładzenie i nie za bardzo oddalać od rzeczywistej pozycji siedzącej z wygładzonymi punktami trasy. odpowiedź 16 listopada 16 w 23:03 zainicjalizować 0, count0 (za każdym razem widać nową wartość) Następnie jedno wejście (scanf), jeden add totalnewValue, jeden przyrost (licznik), jedna średnia przecięcia (całkowita liczba) To byłaby średnia ruchoma wszystkie wejścia Aby obliczyć średnią z ostatnich ostatnich 4 wejść, trzeba było wprowadzić 4 zmienne wejściowe, kopiowanie każdego wejścia do starszej zmiennej wejściowej, a następnie obliczenie nowej średniej ruchomej jako suma 4 zmiennych wejściowych, podzielonych przez 4 (przesunięcie w prawo2 dobrze, jeśli wszystkie dane wejściowe były pozytywne, aby obliczyć średnią obliczoną 15 lutego 15 w 4:06 To rzeczywiście obliczy całkowitą średnią, a nie średnią ruchoma. Jak liczyć się większy wpływ każdej nowej próbki wejściowej staje się znikomy mały ndash Hilmar Feb 3 15 at 13:53 Twoja odpowiedź 2017 Stack Exchange, Inc Wiem, że to jest osiągalne z pobudzenia jak na: Ale naprawdę chciałbym uniknąć przyśpieszenia. Mam googled i nie znalazłem żadnych odpowiednich lub czytelnych przykładów. Zasadniczo chcę śledzić w ruchu średnia z ciągłego strumienia strumienia liczb zmiennoprzecinkowych przy użyciu najnowszych 1000 numerów jako przykładu danych. Jaki jest najłatwiejszy sposób na to, eksperymentowałem z użyciem okrągłej tablicy, wykładniczej średniej ruchomej i bardziej prostej średniej ruchomej i stwierdziła, że ​​wyniki okrągłej tablicy odpowiadały moim potrzebom najlepiej. zapytał 12 czerwca 12 w 4:38 Jeśli Twoje potrzeby są proste, możesz spróbować użyć wykładniczej średniej ruchomej. Po prostu wprowadzasz zmienną akumulatora, a kod wygląda na każdą próbkę, kod aktualizuje akumulator o nową wartość. Wybierasz stałą wartość alfa, która wynosi od 0 do 1, i oblicz ją: Wystarczy, że znajdziesz wartość alfa, w której efekt danej próbki trwa tylko około 1000 próbek. Hmm, nie jestem pewien, że to jest dla ciebie odpowiednie, teraz, że to tutaj. Problem polega na tym, że 1000 jest dość długie okno dla wykładniczej średniej ruchomej Im nie wiesz, że istnieje alfa, która rozprzestrzenia się średnią w ciągu ostatnich 1000 numerów, bez underflow w obliczaniu zmiennoprzecinkowych. Ale jeśli chcesz mieć mniejsze średnie, jak 30 liczb, jest to bardzo łatwy i szybki sposób na to. odpowiedziało cze 12 12 w 4:44 1 na Twoim stanowisku. Wyższa średnia ruchoma może pozwolić na zmienną alfa. Pozwala to na obliczanie średnich baz czasu (na przykład bajtów na sekundę). Jeśli czas od ostatniej aktualizacji akumulatora przekracza 1 sekundę, to niech alpha wynosi 1.0. W przeciwnym razie możesz pozwolić alpha be (usecs od ostatniej aktualizacji1000000). ndash jxh Cze 12 12 at 6:21 Zasadniczo chcę śledzić średnią ruchu ciągłego strumienia strumienia liczb zmiennoprzecinkowych przy użyciu najnowszych 1000 numerów jako próbki danych. Należy zauważyć, że poniżej uaktualnia całkowitą wartość jako elementy dodawane, co pozwala uniknąć kosztownego przebiegu O (N) w celu obliczenia sumy potrzebnej na przeciętnie na żądanie. Razem uzyskuje się inny parametr od T do obsługi np. używając długiej długi podczas łączenia 1000 długich s, int dla char s lub double-total float. Jest to nieco błędne, że liczby czcionek mogą przechodzić przez INTMAX - jeśli zależy Ci na długich długach bez podpisu. lub użyj dodatkowego członka danych bool do nagrywania, gdy pojemnik jest najpierw napełniany, podczas cyklicznych numsamples wokół tablicy (najlepiej zamienić coś nieszkodliwego jak pos). odpowiedziało 12 czerwca 12 w 5:19 zakłada się, że operator kwotowania (przykład T) jest w rzeczywistości operatorem cudzysłowów (przykład T). ndash oPless 8 czerwca o godz. 11:52 oPless ahhh. dobrze spotykane. właściwie miałem na myśli operatora void () (przykład T), ale oczywiście można użyć dowolnej notacji, którą lubisz. Naprawdę, dzięki. ndash Tony D Cze 8 14 w 14: 27 Chcę rozwinąć obliczenie średniej ruchomej średniej. Jednak wiele późniejszych obliczeń planowano później. Mój pierwszy krok, aby wiedzieć, jak efektywnie przeliczyć ruch średnią. Muszę wiedzieć, jak skutecznie wejść i wyjść z powrotem. brano pod uwagę datę i cenę. data, cena i średnia ruchoma. Jeśli mam 500 rekordów i chcę obliczyć Moving średnio przez 5 dni, co jest effient sposób zamiast się tam iz powrotem w tablicy Data i cena ponownie proszę sugest co to jest najlepszy sposób na wejście (ArrayList, tabela, tablica itp.) i zwrócić wyjście. Uwaga: dzisiejszy MA 5 dni będzie średnio z ostatnich 5 dni, w tym z dzisiejszą ceną. Wczoraj średnia w ciągu ostatnich 5 dni od wczoraj. Chcę zachować dni, aby być elastycznymi, a nie 5 może to być 9, 14, 20 itd. Czwartek, 10 kwietnia 2008 3:21 PM Jeśli potrzebujesz prostych obliczeń bez wysiłku, niż możesz użyć TA-Lib. Jeśli chcesz, aby Twoje obliczenia były bardziej wydajne niż TA-Lib, możesz stworzyć własny wskaźnik techniczny. TA-Lib jest świetny, ale problem polega na tym, że ta biblioteka ma tylko statyczne metody. Oznacza to, że gdy musisz obliczyć wartości tablicy SMA na podstawie 500 pasków cen, wtedy wyślemy cały szereg pasków i zwróci tablicę wartości SMA. Jeśli otrzymasz nową wartość 501-stową, należy ponownie przesłać całą tablicę, a TA-Lib ponownie obliczy i zwróci tablicę wartości SMA. Teraz wyobraź sobie, że potrzebujesz takiego wskaźnika w prawdziwym karmieniu cen, a przy każdej zmianie ceny potrzebujesz nowej wartości wskaźnika. Jeśli masz jeden wskaźnik nie jest dużym problemem, ale jeśli masz setki wskaźników działających, może to być problem z wydajnością. Byłem w takiej sytuacji i zaczynamy opracowywać wskaźniki w czasie rzeczywistym, które są skuteczne i robić dodatkowe obliczenia dla nowego paska cenowego lub dla zmienionego paska cenowego. Niewątpliwie nigdy nie potrzebowałem wskaźnika SMA dla moich systemów handlowych, ale mam takie dla EMA, WMA, AD i innych. Jeden taki wskaźnik AD jest opublikowany na moim blogu i możesz zobaczyć, co jest podstawową strukturą mojej klasy wskaźników w czasie rzeczywistym. Mam nadzieję, że potrzebujesz małych zmian w celu wdrożenia wskaźnika SMA, ponieważ jest jednym z najprostszych. Logika jest prosta. Aby obliczyć SMA wszystko, czego potrzebujesz to n ostatnich cen. Tak więc instancja klasy będzie miała zbiór cen, które przechowują tylko ostatnią liczbę niderlandzkich cen, ponieważ określono SMA (w Twoim przypadku 5). Więc kiedy masz nowy pasek, usuń najstarszy, dodaj nowy i wygeneruj obliczenia. Czwartek, 10 kwietnia 2008 4:04 PM Wszystkie odpowiedzi Jest biblioteka o nazwie TA-Lib, która robi to wszystko dla Ciebie i jest open source. Myślę, że ma około 50 wskaźników. Używaliśmy go w środowisku produkcyjnym i jest bardzo wydajny i realny. Możesz użyć go w C, Java, C itd. Jeśli potrzebujesz prostych obliczeń bez wysiłku, niż możesz użyć TA-Lib. Jeśli chcesz, aby Twoje obliczenia były bardziej wydajne niż TA-Lib, możesz stworzyć własny wskaźnik techniczny. TA-Lib jest świetny, ale problem polega na tym, że ta biblioteka ma tylko statyczne metody. Oznacza to, że gdy musisz obliczyć wartości tablicy SMA na podstawie 500 pasków cen, wtedy wyślemy cały szereg pasków i zwróci tablicę wartości SMA. Jeśli otrzymasz nową wartość 501-stową, należy ponownie przesłać całą tablicę, a TA-Lib ponownie obliczy i zwróci tablicę wartości SMA. Teraz wyobraź sobie, że potrzebujesz takiego wskaźnika w prawdziwym karmieniu cen, a przy każdej zmianie ceny potrzebujesz nowej wartości wskaźnika. Jeśli masz jeden wskaźnik nie jest dużym problemem, ale jeśli masz setki wskaźników działających, może to być problem z wydajnością. Byłem w takiej sytuacji i zaczynamy opracowywać wskaźniki w czasie rzeczywistym, które są skuteczne i wykonują dodatkowe obliczenia dla nowego paska cenowego lub tylko dla zmodyfikowanego paska cenowego. Niewątpliwie nigdy nie potrzebowałem wskaźnika SMA dla moich systemów handlowych, ale mam takie dla EMA, WMA, AD i innych. Jeden taki wskaźnik AD jest opublikowany na moim blogu i możesz zobaczyć, co jest podstawową strukturą mojej klasy wskaźników w czasie rzeczywistym. Mam nadzieję, że potrzebujesz małych zmian w celu wdrożenia wskaźnika SMA, ponieważ jest jednym z najprostszych. Logika jest prosta. Aby obliczyć SMA wszystko, czego potrzebujesz to n ostatnich cen. Tak więc instancja klasy będzie miała zbiór cen, które przechowują tylko ostatnią liczbę niderlandzkich cen, ponieważ określono SMA (w Twoim przypadku 5). Więc kiedy masz nowy pasek, usuń najstarszy, dodaj nowy i wygeneruj obliczenia. Czwartek, 10 kwietnia 2008 16:04 Chcę obliczyć średnią ruchomej w bazie danych za pomocą procedury składowanej lub w kostce. Czy spojrzałeś na Analysis Services, ma możliwość obliczania średnich kroczących. Czwartek, 10 kwietnia 2008 16:05 Tak. TA-LIB jest dobry, ale może nie być dla mnie odpowiedni. Kiedy dodam nową wartość lub zaktualizowaną wartość dla historii rekordów, wykonam obliczenia w osobnej funkcji tylko dla tego nowego cytatu i przechowuję ją w bazie danych. Mam zamiar zaktualizować wycenę co godzinę. Muszę zrobić około 25 do 30 wskaźników technicznych dla 2200 zapasów. Czwartek, 10 kwietnia 2008 5:51 Czas realizacji połączenia TA-Lib na tablicy 10000 elementów zajmuje około 15 milisekund (na karcie Intel Core Duo 2.13 Ghz). Jest to średnia wszystkich funkcji. Wśród najszybszych, SMA trwa mniej niż 2,5 milisekund. Najmniej, HTTRENDMODE, zajmuje 450 milisekund. Z mniej elementów jest szybszy. SMA zajmuje około 0,22 milisekund dla 1000 elementów wejściowych. Prędkość jest prawie liniowa (napowietrzenie wykonywania wywołania funkcji jest nieistotne). W kontekście Twojego zgłoszenia TA-Lib jest mało prawdopodobne, aby był Twoim wąskim gardłem dla szybkości. Również ogólnie nie polecam takiego kwerendy nquot rozwiązanie. Poniżej szczegółowe informacje. Po pierwsze, korekta do instrukcji Boban. s Wszystkie funkcje w TA-Lib mogą również obliczyć pojedynczą ostatnią wartość przy użyciu minimum elementów kwantowych. Możesz mieć tablicę wielkości 10000, zainicjować dane tylko dla pierwszych 500 elementów, dodać jeden element i zadzwonić do TA-Lib, aby obliczyć SMA tylko dla nowego elementu. TA-Lib będzie wyglądał wstecz nie więcej niż potrzeba (jeśli wartość SMA wynosi 5, wówczas TA-Lib obliczy pojedynczy SMA przy użyciu ostatnich 5 wartości). Jest to możliwe dzięki parametrom startIdx i endIdx. Można określić zakres do obliczenia lub pojedynczą wartość. W tym scenariuszu można utworzyć startIdx endIdx 500 w celu obliczenia elementu 501st. Dlaczego tak niskosztowe rozwiązanie może być niebezpieczne dla niektórych Niezależnie od wyboru rozwiązania Boban. s czy TA-Lib należy rozważyć, że przy użyciu niewielkiej ilości skończonej liczby danych w przeszłości nie działają dobrze z większością funkcji TA. Z SMA jest oczywiste, że po prostu potrzebujesz n elementu, aby obliczyć przeciętnie przez n element. To nie jest tak proste z EMA (i wiele innych funkcji TA). Algo często zależy od poprzedniej wartości do obliczania nowej wartości. Funkcja jest rekurencyjna. Oznacza to, że wszystkie poprzednie wartości mają wpływ na przyszłe wartości. Jeśli zdecydujesz się przeliczyć algo na użycie tylko niewielkiej ilości wartości n, nie otrzymasz takiego samego wyniku, co ktoś, kto obliczy dużą liczbę poprzednich wartości. Rozwiązaniem jest kompromis pomiędzy szybkością i precyzją. Często dyskutuję o tym w kontekście TA-Lib (nazywam to kwantyfikatorem w dokumentacji i forum). Aby utrzymać to proste, moja ogólna rekomendacja polega na tym, że jeśli nie możesz dokonać różnicy między algą o skończonej odpowiedzi impulsowej (FIR) z algo o nieskończonej odpowiedzi impulsowej (IIR), bezpieczniej będzie obliczać wszystkie dane, które masz dostępny. TA-Lib określa w kodzie, który z jego funkcji ma niestabilny okres (IIR). Zmieniony przez mfortier Friday, August 15, 2008 4:25 PM Poprawne zdanie w języku angielskim Friday, August 15, 2008 4:20 AMAVERAGE function Dotyczy: Excel 2018 Excel 2017 Excel 2017 Excel 2007 Excel 2018 dla komputerów Mac Excel for Mac 2017 Excel Online Excel for iPad Excel dla iPhone Excel dla tabletów z Androidem Excel Starter Excel Mobile Excel dla telefonów z Androidem Więcej. Mniej W tym artykule opisano składnię formuły i korzystanie z funkcji AVERAGE w programie Microsoft Excel. Opis Zwraca średnią (średnią arytmetyczną) argumentów. Na przykład jeśli zakres A1: A20 zawiera liczby, formuła ŚREDNI (A1: A20) zwraca średnią z tych liczb. Składnia funkcji AVERAGE ma następujące argumenty: Number1 Required. Pierwszy numer, odwołanie do komórki lub zakres, dla którego chcesz przeciętnie. Numer 2. Opcjonalny. Dodatkowe numery, odwołania do komórek lub zakresy, dla których chcesz przeciętnie, maksymalnie 255. Argumentami mogą być liczby lub nazwy, zakresy lub odwołania do komórek, które zawierają liczby. Policzone są wartości logiczne i reprezentacje liczb wpisanych bezpośrednio do listy argumentów. Jeśli argument zakresu lub odwołania do komórki zawiera tekst, wartości logiczne lub puste komórki, wartości te są ignorowane, są to komórki z wartością zero. Argumenty, które są wartościami błędów lub tekstami, których nie można przetłumaczyć na liczby, powodują błędy. Jeśli chcesz uwzględnić wartości logiczne i reprezentacje liczb w odnośniku w ramach obliczeń, skorzystaj z funkcji AVERAGEA. Jeśli chcesz obliczyć średnią tylko wartości spełniających określone kryteria, użyj funkcji AVERAGEIF lub AVERAGEIFS. Uwaga: Funkcja AVERAGE mierzy centralną tendencję, która polega na umieszczeniu środka grupy liczb w rozkładzie statystycznym. Trzy najczęstsze środki centralnej tendencji to: Średnia. która jest średnią arytmetyczną i jest obliczana przez dodanie grupy liczb, a następnie dzielenie przez liczbę tych liczb. Na przykład średnia 2, 3, 3, 5, 7 i 10 wynosi 30 podzielonych przez 6, czyli 5. Mediana. która jest średnią liczbą grup liczb, czyli połowa liczb ma wartości wyższe niż średnia, a połowa liczb ma wartości, które są mniejsze od mediany. Na przykład, mediana 2, 3, 3, 5, 7 i 10 to 4. Tryb. która jest najczęściej występującą liczbą w grupie liczb. Na przykład tryb 2, 3, 3, 5, 7 i 10 to 3. W celu symetrycznego rozkładu grupy liczb, te trzy środki centralnej tendencji są takie same. Dla skręconej dystrybucji grupy liczb, mogą się różnić. Wskazówka: podczas przeciętnej liczby komórek należy pamiętać o różnicy między pustymi komórkami a tymi, które zawierają wartość zero, szczególnie jeśli zostało usunięte pole wyboru Pokaż zero w komórkach, które mają wartość zerową w oknie dialogowym Opcje programu Excel na pulpicie programu Excel podanie. Po wybraniu tej opcji puste komórki nie są liczone, ale wartości zerowe są. Aby zlokalizować pole wyboru Pokaż zero w komórkach z wartością zerową: Na karcie Plik kliknij polecenie Opcje. a następnie w kategorii Zaawansowane w obszarze Opcje wyświetlania dla tego arkusza. Skopiuj przykładowe dane w poniższej tabeli i wklej go do komórki A1 nowego arkusza programu Excel. Aby formuły mogły wyświetlać wyniki, zaznacz je, naciśnij klawisz F2, a następnie naciśnij klawisz Enter. Jeśli chcesz, możesz dostosować szerokość kolumn, aby zobaczyć wszystkie dane.

Comments