Kod c średnia ruchoma wykładnicza


Wiem, że jest to osiągalne z doładowaniem na poziomie: Ale naprawdę chciałbym uniknąć stosowania boostu. Mam google i nie znalazłem żadnych odpowiednich lub czytelnych przykładów. Zasadniczo chcę śledzić średnią ruchomą bieżącego strumienia strumienia liczb zmiennoprzecinkowych z wykorzystaniem najnowszych 1000 liczb jako próbki danych. Jaki jest najłatwiejszy sposób, aby to osiągnąć? Eksperymentowałem z użyciem okrągłej tablicy, wykładniczej średniej kroczącej i bardziej prostej średniej ruchomej, i odkryłem, że wyniki z okrągłej macie najlepiej pasują do moich potrzeb. Zapytany 12 czerwca 12 o 4:38 Jeśli twoje potrzeby są proste, możesz po prostu spróbować użyć wykładniczej średniej kroczącej. Mówiąc prościej, tworzysz zmienną akumulatora, a ponieważ twój kod wygląda na każdą próbkę, kod aktualizuje akumulator o nową wartość. Wybierasz stałą alfa, która jest pomiędzy 0 a 1, i obliczasz to: Musisz tylko znaleźć wartość alfa, gdzie efekt danej próbki trwa tylko około 1000 próbek. Hmm, nie jestem właściwie pewien, czy ci to pasuje, teraz, kiedy go tu umieściłem. Problem polega na tym, że 1000 to dość długie okno dla wykładniczej średniej kroczącej Nie jestem pewien, czy istnieje alfa, które rozłożyłoby średnią z ostatnich 1000 liczb, bez dolnego limitu w obliczeniach zmiennoprzecinkowych. Ale jeśli chcesz mieć mniejszą średnią, na przykład około 30 numerów, jest to bardzo łatwy i szybki sposób na zrobienie tego. odpowiedź 12 czerwca 12 o 4:44 1 na twój post. Wykładnicza średnia ruchoma może pozwolić na zmienną alfa. Dzięki temu można go wykorzystać do obliczenia średniej podstawy czasu (na przykład bajtów na sekundę). Jeśli czas od ostatniej aktualizacji akumulatora jest dłuższy niż 1 sekunda, zezwalasz alfa na 1.0. W przeciwnym razie możesz pozwolić na alfa (usecs od ostatniej aktualizacji1000000). ndash jxh 12 czerwca 12 o 6:21 Zasadniczo chcę śledzić średnią ruchomą ciągłego strumienia strumienia liczb zmiennoprzecinkowych z wykorzystaniem najnowszych 1000 liczb jako próbki danych. Zauważ, że poniższe aktualizacje aktualizują sumę jako elementy dodane z powrotem, unikając kosztownego przejścia przez O (N) w celu obliczenia sumy - potrzebnej dla średniej - na żądanie. Total otrzymuje inny parametr od T do obsługi np. użycie długiej długości, gdy suma wynosi 1000 długich s, int dla char s lub double do total float s. Jest to trochę wadliwe, ponieważ liczba poprawek może przekroczyć INTMAX - jeśli chcesz, możesz użyć długiej długości bez znaku. lub użyj dodatkowego elementu danych typu bool, aby zarejestrować, kiedy pojemnik jest pierwszy wypełniony, podczas gdy liczba próbkowania w cyklu wokół tablicy (najlepiej wtedy przemianowana na coś nieszkodliwego jak pos). odpowiedź 12 czerwca 12 o 5:19 zakłada się, że operator quotvoid (T sample) quot jest w rzeczywistości quotvoid operatorltlt (T sample) quot. ndash oPless cze 8 14 o 11:52 o Bez ahhh. dobrze zauważył. faktycznie miałem na celu unieważnienie operatora () (próbka T), ale oczywiście można użyć dowolnej notacji, którą lubisz. Naprawię, dzięki. ndash Tony D cze 8 14 o 14: 27. Wybiegowa średnia ruchoma - EMA ZMNIEJSZAJĄCA się Średnia wykładnicza - EMA 12- i 26-dniowe EMA są najpopularniejszymi krótkoterminowymi wartościami średnimi i są używane do tworzenia wskaźników, takich jak średnia ruchoma konwergencja rozbieżność (MACD) i procentowy oscylator ceny (PPO). Ogólnie rzecz biorąc, EMA o długości 50 i 200 dni są wykorzystywane jako sygnały długoterminowych trendów. Handlowcy, którzy stosują analizę techniczną, uważają, że średnie ruchome są bardzo użyteczne i wnikliwe, gdy są prawidłowo stosowane, ale tworzą spustoszenie, gdy są niewłaściwie używane lub są źle interpretowane. Wszystkie średnie ruchome powszechnie stosowane w analizie technicznej są ze swej natury wskaźnikami opóźniającymi. W związku z tym wnioski wyciągnięte z zastosowania średniej ruchomej do określonego wykresu rynkowego powinny potwierdzać ruch rynkowy lub wskazać jego siłę. Bardzo często, zanim linia średniej ruchomej wskazała zmianę, która odzwierciedla znaczący ruch na rynku, optymalny punkt wejścia na rynek już minął. EMA służy do złagodzenia tego dylematu w pewnym stopniu. Ponieważ obliczenia EMA kładą większy nacisk na najnowsze dane, to przyśpieszają akcję cenową, dzięki czemu reagują szybciej. Jest to pożądane, gdy EMA jest wykorzystywana do wyprowadzenia sygnału wejścia handlowego. Interpretacja EMA Podobnie jak wszystkie wskaźniki średniej ruchomej, są one znacznie lepiej dostosowane do trendów na rynkach. Kiedy rynek jest w silnym i utrzymującym się trendzie wzrostowym. linia wskaźnika EMA będzie również wykazywać trend wzrostowy i odwrotnie w przypadku trendu spadkowego. Czujny inwestor nie tylko zwróci uwagę na kierunek linii EMA, ale także na relację szybkości zmiany z jednego paska do drugiego. Na przykład, gdy akcja cenowa silnego trendu wzrostowego zaczyna się spłaszczać i odwracać, szybkość zmian EMA z jednego paska do następnego zacznie zmniejszać się do momentu, gdy linia wskaźnika spłaszczy się, a tempo zmiany wynosi zero. Z powodu efektu opóźnienia, w tym momencie, a nawet kilku taktów wcześniej, akcja cenowa powinna już się odwrócić. Wynika z tego, że obserwowanie konsekwentnego zmniejszania tempa zmian EMA mogłoby samo w sobie służyć jako wskaźnik, który mógłby dalej przeciwdziałać dylematowi wynikającemu z opóźnionego efektu ruchomych średnich. Wspólne zastosowania EMA EMA są powszechnie stosowane w połączeniu z innymi wskaźnikami, aby potwierdzić istotne ruchy na rynku i ocenić ich ważność. W przypadku handlowców, którzy handlują rynkami bieżącymi i szybko rozwijającymi się, EMA ma większe zastosowanie. Dość często inwestorzy używają EMA w celu określenia obciążenia handlowego. Na przykład, jeśli EMA na wykresie dziennym wykazuje silną tendencję wzrostową, strategia handlowa w ciągu dnia może polegać na wymianie tylko długiej strony na wykresie intraday. Jest to możliwe do wprowadzenia średniej ruchomej w C bez potrzeby użycia okna. próbek Ive stwierdziłem, że mogę zoptymalizować nieco, wybierając rozmiar okna, który ma potęgę dwóch, aby umożliwić przesunięcie bitowe zamiast dzielenia, ale niewymaganie bufora byłoby miłe. Czy istnieje sposób wyrażenia nowego wyniku średniej kroczącej tylko jako funkcję starego wyniku i nowej próbki Zdefiniuj przykładową średnią ruchomą w oknie 4 próbek: Dodaj nową próbkę e: Średnia ruchoma może zostać zaimplementowana rekurencyjnie , ale do dokładnego obliczenia średniej ruchomej trzeba zapamiętać najstarszą próbkę wejściową w sumie (tj. a w twoim przykładzie). Dla długości N średniej ruchomej obliczamy: gdzie yn jest sygnałem wyjściowym, a xn jest sygnałem wejściowym. Eq. (1) może być napisany rekurencyjnie jako Więc zawsze musisz zapamiętać próbkę xn-N w celu obliczenia (2). Jak wskazał Conrad Turner, można zamiast tego użyć (nieskończenie długiego) okna wykładniczego, które pozwala obliczyć wyjście tylko z poprzedniego wyjścia i bieżącego wejścia: ale nie jest to standardowa (nieważona) średnia ruchoma, ale wykładniczo ważona średnia ruchoma, gdzie próbki w przeszłości mają mniejszą masę, ale (przynajmniej teoretycznie) nigdy niczego nie zapominasz (ciężary stają się mniejsze i mniejsze dla próbek daleko w przeszłości). Zaimplementowałem średnią ruchomą bez pamięci pojedynczych elementów dla programu do śledzenia GPS, który napisałem. Zaczynam od 1 próbki i dzielę przez 1, aby uzyskać aktualną średnią. Następnie dodaję próbkę anothe i dzielę przez 2 do aktualnej avg. To trwa, dopóki nie osiągnę długości średniej. Za każdym razem dodawam nową próbkę, otrzymuję średnią i usuwam tę średnią z całości. Nie jestem matematykiem, ale wydawało mi się, że to dobry sposób. Pomyślałem, że to zmieni żołądek prawdziwego matematyka, ale okazuje się, że jest to jeden z akceptowanych sposobów robienia tego. I działa dobrze. Pamiętaj tylko, że im większa długość, tym wolniej podążasz za tym, co chcesz obserwować. To może nie mieć większego znaczenia, ale jeśli podążacie za satelitami, jeśli będziecie wolni, trasa może być daleko od rzeczywistej pozycji i będzie wyglądać źle. Możesz mieć przerwę między sob i końcowymi kropkami. Wybrałem długość 15 aktualizacji 6 razy na minutę, aby uzyskać odpowiednie wygładzenie i nie za bardzo oddalić się od faktycznej pozycji siedzącej z wygładzonymi kropkami. odpowiedziała 16 listopada 16 o 23:03 zainicjalizuj całość 0, count0 (za każdym razem, gdy zobaczysz nową wartość Następnie jedno wejście (scanf), jedno dodaj totalnewValue, jeden przyrost (count), jedna średnia dzieląca (totalcount) Byłaby to średnia ruchoma ponad wszystkie wejścia Aby obliczyć średnią tylko z ostatnich 4 wejść, wymagałyby 4 zmiennych wejściowych, być może skopiowania każdego wejścia do starszej zmiennej wejściowej, a następnie obliczenia nowej średniej ruchomej jako sumy 4 zmiennych wejściowych, podzielonej przez 4 (prawe przesunięcie 2 byłoby dobrze, jeśli wszystkie dane wejściowe były dodatnie, aby uzyskać średnią obliczoną odpowiedź 3 lutego 15 o 4:06 To faktycznie obliczyć całkowitą średnią, a NIE średnią ruchomą. Jak liczba staje się większa wpływ nowej próbki wejściowej staje się znikały małe ndash Hilmar lutego 3 15 at 13:53 Your Answer 2017 Stack Exchange, Inc

Comments

Popular Posts