Proste przenoszenie średniej implementacji
Wiem, że jest to osiągalne dzięki zwiększeniu: Ale naprawdę chciałbym uniknąć zwiększania. Mam googled i nie znaleziono żadnych odpowiednich lub czytelnych przykładów. Zasadniczo chcę śledzić ruchomą średnią ciągłego strumienia strumienia liczb zmiennoprzecinkowych przy użyciu najnowszych 1000 numerów jako próbki 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. Zauważ, że poniżej uaktualnia całkowitą wartość jako elementy dodawane, co pozwala uniknąć kosztownego przebiegu O (N) w celu obliczenia sumy potrzebnej na średnią - 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 Czerwiec 8 14 w 14: 27 Zwykła średnia ruchoma - SMA BREAKING DOWN Średnia ruchoma średnia - SMA Prosta średnia ruchoma jest konfigurowalna, ponieważ można ją obliczyć na inną liczbę okresów, po prostu przez dodanie ceny zamknięcia zabezpieczenia przez wiele okresów czasu, a następnie dzieli się na liczbę okresów, co daje średnią cenę zabezpieczenia w danym okresie. Prosta średnia ruchoma wygładza niestabilność i ułatwia wyświetlanie tendencji cenowej. Jeśli prosta średnia ruchoma wskazuje, oznacza to, że cena zabezpieczeń rośnie. Jeśli wskazuje to oznacza, że cena zabezpieczenia się zmniejsza. Im dłuższa jest rama czasowa dla średniej ruchomej, tym gładsza jest zwykła średnia ruchoma. Krótkotrwała średnia ruchoma jest bardziej zmienna, ale jej odczyt jest bliżej danych źródłowych. Znaczenie analityczne Średnie kroczące są ważnym narzędziem analitycznym służącym do identyfikacji obecnych trendów cenowych i możliwości zmiany ustalonego trendu. Najprostszą formą wykorzystania prostej średniej ruchomej w analizie jest użycie jej w celu szybkiego stwierdzenia, czy zabezpieczenie znajduje się w trendzie wzrostowym czy w dół. Innym popularnym, choć nieco bardziej złożonym narzędziem analitycznym, jest porównanie pary prostych średnic ruchu, z których każdy obejmuje różne ramy czasowe. Jeśli średnia krótkoterminowa średnia krótkoterminowa przekracza średnią długoterminową, spodziewany jest trend wzrostowy. Z drugiej strony średnia długoterminowa powyżej średniej krótkoterminowej wskazuje na tendencję spadkową. Popularne wzorce handlowe Dwa popularne wzorce handlowe wykorzystujące proste średnie ruchome to krzyż śmierci i złoty krzyż. Krzyż śmierci pojawia się, gdy 50-dniowa średnia ruchoma przecina poniżej 200-dniowej średniej ruchomej. Jest to sygnał nieprzyjemny, że dalsze straty są w sprzedaży. Złoty krzyż ma miejsce, gdy krótkoterminowa średnia ruchoma przewyższa długoterminową średnią ruchliwą. Wzmocnione przez duże obroty handlowe może świadczyć o dalszych zyskach. Proste przenoszenie średniej implementacji w Javie Kilkakrotnie chciałem obliczyć proste dane w moich aplikacjach Java, na przykład liczbę trafień na godzinę lub błędy w czasie okres. Podczas obliczania prostych wskaźników nie jest trudno strasznie trudne, to tylko dodatkowa praca i Id raczej spędzają ten czas w domenie problemu. Byłem zaskoczony, że nie znalazłem żadnych powszechnie akceptowanych rozwiązań dla metryki w Javie. Znalazłem Metrics, ale wydawało się to nieco zbyt skomplikowane i nieudokumentowane - wszystko, co naprawdę chciałem, to obliczyć średnią ruchomej. Zastanawiałem się nad problemem i postanowiłem, że nie jest to trudny problem. To jest moje rozwiązanie To działa przez utworzenie tablicy rozmiaru częstotliwości aktualizacji okna, a następnie wątek ustawia licznik na następny indeks w tablicy na częstotliwości aktualizacji. Liczenie dla przedziału jest po prostu arrayi - arrayi1, który jest ostatnim liczeniem minus najstarsze liczyć. W odstępie 10 minut najstarszy licznik (i1) ma dokładnie 10 minut. Aby dodać średnią ruchomą do naszego kodu najpierw potrzebujemy licznika, używając AtomicLong. Licznik ten powinien być zwiększany w oparciu o zdarzenia, które interesują się obliczeniami (np. Żądania POST dotyczące usługi REST). Musimy zapewnić implementację z dostępem do licznika i realizowaną za pośrednictwem interfejsu GetCount. Tutaj utworzyć średnią ruchomą z 5-minutowym oknem, które aktualizuje się co sekundę. Aby uzyskać aktualną średnią, po prostu wywołujemy metodę getAverage: kluczowym szczegółem wdrożenia jest określenie rozmiaru tablicy: dzieląc okno na częstotliwość aktualizacji. Duże okno z częstotliwością częstego aktualizowania może zużywać znaczną ilość pamięci. W tym przykładzie rozmiar tablicy jest rozsądny 300. Jeśli jednak utworzyliśmy 24-godzinną średnią ruchliwą z interwałem 1 sekundy, rozmiar byłby większy niż 86400 A bardziej rozsądna częstotliwość aktualizacji w ciągu 24 godzin może wynosić co 5 minut (rozmiar tablicy 288 ). Inną kwestią dotyczącą wyboru okna i częstotliwości aktualizacji jest okno musi być podzielne przez częstotliwość. Na przykład okno 2-minutowe z 6-sekundową częstotliwością aktualizacji jest ok, ale 7-sekundowa częstotliwość aktualizacji nie jest, ponieważ nie jest podzielna przez 120. Wyjątek IllegalArgumentException jest generowany, jeśli częstotliwość aktualizacji modułu okna nie jest równa zero. Ta implementacja wymaga jednego wątku na średnią ruchomej, co nie jest bardzo wydajne. Lepszym rozwiązaniem byłoby podzielenie wątku na wiele średnich. Aktualizacja . Ive zaktualizował kod, aby podzielić się wątkiem tutaj. Wreszcie, mamy problem ze stanem początkowym: nie mamy jeszcze danych dla całego okna. Na przykład jeśli masz 5 minutowe okno i tylko 15 sekund danych. Ta implementacja zwraca null, dopóki nie mamy 5 minut danych. Innym podejściem jest oszacowanie średniej. Załóżmy, że mamy liczbę 10 na 30 sekund, wtedy możemy oszacować średnią na 40 w ciągu 2 minut. Istnieje jednak ryzyko poważnego błędu przez ekstrapolację niekompletnych danych. Na przykład, jeśli mieliśmy serię 20 trafień w ciągu 2 sekund, wed oszacuj 1200 na 2 minuty, co najprawdopodobniej jest mniejsze. W statystykach prosta średnia ruchoma jest algorytmem obliczającym nieważoną średnią z ostatnich n próbek . Parametr n jest nazywany rozmiarem okna, ponieważ algorytm może być traktowany jako okno, które przesuwa się nad punktami danych. Przy użyciu formuły rekurencyjnej algorytmu liczba operacji wymaganych na próbkę jest zmniejszona do jednego dodatku, jednego odejmowania i jednego podziału. Ponieważ formulacja jest niezależna od wielkości okna n. złożoność wykonania jest O (1). tzn. stała. Rekurencyjna formuła nieważonej średniej ruchomej jest, gdzie średnią jest średnią kroczącą, a x reprezentuje punkt danych. Kiedy więc okno przesuwa się w prawo, jeden punkt danych, ogon, zrzuca się i jeden punkt danych, głowa przesuwa się. Wdrażanie Wdrażanie prostej średniej ruchomej musi uwzględniać następujące inicjowanie algorytmów okno nie jest w pełni wypełnione wartościami, formuła rekurencyjna nie powiedzie się. Magazynowanie Wymagany jest dostęp do elementu końcowego, który w zależności od implementacji wymaga przechowywania n elementów. Moja implementacja wykorzystuje prezentowaną formułę, gdy okno jest całkowicie wypełnione wartościami i w inny sposób przechodzi do formuły, która aktualizuje średnią przez ponowne obliczenie sumy poprzednich elementów. Należy zauważyć, że może to prowadzić do niestabilności liczbowych z powodu arytmetyki zmiennoprzecinkowej. Jeśli chodzi o zużycie pamięci, implementacja wykorzystuje iteratory, aby śledzić elementy głowy i ogona. Prowadzi to do wdrożenia ze stałymi wymaganiami pamięci niezależnie od wielkości okna. Oto procedura aktualizacji, która przesuwa okno po prawej stronie. W większości kolekcji unieważnia ich enumeratory, gdy zmodyfikowana jest kolekcja bazowa. Wdrożenie opiera się jednak na właściwych wyliciach. Szczególnie w aplikacjach opartych na transmisjach strumieniowych biblioteka bazowa musi zostać zmodyfikowana, gdy pojawi się nowy element. Jednym ze sposobów radzenia sobie z tym jest utworzenie prostego okrągłego rozmiaru o stałym rozmiarze o rozmiarze n1, który nigdy nie unieważnia iteratorów i na przemian dodaj element i wywołuje Shift. Chciałbym móc dowiedzieć się, w jaki sposób faktycznie to wdrożyć, ponieważ funkcja testu jest bardzo myląca dla me8230 Czy muszę konwertować dane na tablicę, a następnie uruchomić SMA sma nową macierz SMA (20, tablica) na okres 20 SMA Jak sobie radzić Funkcja shift () Czy konieczne jest wdrożenie konstruktorów. (przepraszam za zamieszanie). Nie, don8217t potrzebuje przekonwertować dane na tablicę, dopóki Twoje dane będą implementować IEnumerable1, a typ wymieniony jest podwójny. Jeśli chodzi o prywatne wiadomości, musisz przekonwertować DataRow do czegoś, co jest wartościami podwójnymi. Twoje podejście działa. Przesuń, przesuwa okno o jedną pozycję w lewo. Dla zbioru danych mówiących 40 wartości i 20 okresu SMA masz 21 pozycji, w których mieści się okno (40 8211 20 1). Za każdym razem, gdy zadzwonisz do Shift (), okno zostanie przesunięte w lewo o jedną pozycję, a funkcja Average () zwraca SMA dla bieżącej pozycji okna. Oznacza to nieważoną średnią wszystkich wartości wewnątrz okna. Dodatkowo moja implementacja pozwala obliczyć SMA, nawet jeśli okno nie jest w pełni wypełnione na początku. Więc w istocie nadzieję, że to pomaga. Wszelkie dodatkowe pytania O PRAWO AUTORSKICH Christoph Heindl i cheind. wordpress, 2009-2017. Nieautoryzowane użycie i powielanie tego materiału bez wyraźnej pisemnej zgody autora tego autora i jego właściciela jest surowo zabronione. Mogą być wykorzystane fragmenty i linki, pod warunkiem pełnego i wyraźnego przyznania Christoph Heindl i cheind. wordpress z odpowiednim i konkretnym kierunkiem oryginalnej zawartości. Ostatnie wpisy
Comments
Post a Comment