Simple Moving Average Algorithm Java


Proste przejście do średniej implementacji w Javie. Kilka razy chciałem obliczyć proste dane w mojej aplikacji Java, na przykład liczbę trafień na godzinę lub błędy w całym okresie czasu Podczas gdy obliczanie prostych danych nie jest trudne, to właśnie dodatkową pracę i wolę poświęcić ten czas na problemową domenę Zdziwiłem się, że nie znalazłem żadnych powszechnie akceptowanych rozwiązań dla metryki w języku Java, ale znalazłem Metrics, ale wydawało się to zbyt skomplikowane, a nie dobrze udokumentowane - wszystko, czego naprawdę chciałam, to obliczyć średnią ruchomą Pomyślałem o problemie trochę więcej i zdecydowałem, że to nie jest trudny problem Oto moje rozwiązanie. Działa to tworząc tablicę wielkości okna aktualizacji, a następnie wątek ustawia liczbę do następnego indeksu w tablicy na częstotliwość aktualizacji Licznik dla przedziału jest po prostu tablicą i - tablicą i 1, która jest ostatnią liczbą pomniejszoną najstarszym liczeniem W ciągu 10 minut najstarszy licznik i 1 wynosi dokładnie 10 minut old. Aby dodać ruch średnio dla naszego kodu najpierw będziemy potrzebować licznika, używając AtomicLong. This licznik powinien być zwiększany w oparciu o zdarzenia, na które jesteś zainteresowany, np. POST żądań usługi REST. Musimy zapewnić implementację z dostępem do licznika, a więc osiągnięte dzięki interfejsowi GetCount Poniżej przedstawię średnią ruchową z 5-minutowym oknem, które aktualizuje się co sekundę. Aby uzyskać aktualną średnią, po prostu wywołujemy metodę getAverage. Najważniejsze szczegóły dotyczące implementacji polegają na tym, jak określa się rozmiar tablicy, dzieląc okno przez częstotliwość aktualizacji Więc 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 86400 A bardziej rozsądna częstotliwość aktualizacji na 24 godziny może wynosić co 5 minut rozmiar tablicy 288. Inne rozważenie wyboru okna i częstotliwości aktualizacji jest okno musi być di widoczne 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 An IllegalArgumentException jest wyrzucana, jeśli częstotliwość aktualizacji modułu okna nie jest równa zero. implementacja wymaga jednego wątku na średnią ruchomej, co nie jest bardzo wydajne Lepszym rozwiązaniem byłoby udostępnienie wątku w wielu średnich Aktualizacja Zaktualizowałem kod, aby podzielić się wątkiem tutaj. Słabo, nie ma problemu ze stanem początkowym, którego nie mamy danych ale dla całego okna Na przykład, jeśli masz 5 minutowe okno i tylko 15 sekund danych Ta implementacja zwraca null, dopóki mamy 5 minut danych Innym podejściem jest oszacowanie średniej Załóżmy, że mamy liczyć 10 na 30 sekund, możemy oszacować średnią na 40 w ciągu 2 minut Jednakże istnieje ryzyko poważnego błędu przez ekstrapolację niepełnych danych Na przykład, jeśli mieliśmy serię 20 uderzeń w ciągu 2 sekund, to szacujemy 1200 na 2 minuty, h najprawdopodobniej jest off. I muszą śledzić ostatnie 7 dni godziny pracy w płaskiej pętli odczytu plików To jest używany do pomiaru zmęczenia pracy rosters. Right teraz mam coś, co działa, ale wydaje się raczej verbose i nie jestem pewien, czy istnieje wzorzec, który jest bardziej succinct. Currently, mam klasę Java z tablicą statyczną do przechowywania ostatnich danych x dni, a następnie, gdy czytam w pliku, I rozdrabnianie pierwszego elementu i przenieść inne 6 na tydzień walcowania razem z powrotem przez jeden Przetwarzanie tej tablicy statycznej odbywa się w jego własnej metodzie tj. pytanie. My jest to rozsę dne podejś cie do projektowania, czy jest tam coś blindingly oczywiste i proste do wykonania tego zadania Thanks guys. asked Sie 30 11 at 14 33.Thanks alot guys Mam wiadomość używam obiektu wyższego poziomu i wykorzystać odpowiednie metody lub okrągły bufor Wielkie odpowiedzi, wszystkie z nich Kiedy myślisz o tym, zawsze potrzebujesz dostępu do całej tablicy tak możesz pozbyć się tego pierwszego wpisu - czego nie byłem pewny na własną rękę I m ulgę, że I hadn t brakowało niektórych 1 wykładzina i był w zasadzie na rozsądnym, jeśli nie skuteczne i skrócone utwór To, co kocham o tej stronie wysokiej jakości, trafne odpowiedzi od ludzi, którzy znają ich sh t Pete855217 sie 30 11 at 15 05.W jaki sposób zainicjować runningTotal do null Co to jest jego typ Gdzie to jest zadeklarowane To by dobrze, jeśli umieścisz kilka próbek kodu, które przypominają rzeczywisty kod Java. Moving na, moja krytyka byłaby następujące funkcji również dużo Funkcja lub metoda powinna być spójna Bardziej odpowiednio, powinni zrobić jedną rzecz i jedną rzecz. Jeszcze gorsze, co się dzieje w pętli for, kiedy x 5 Skopiujesz uruchomionyTotal 6 do uruchomieniaTotal 5, ale masz dwie kopie ta sama wartość w pozycji 5 i 6. W swoim projekcie twoja function. moves powoduje tasowanie elementów w tablicy. celuluje wartość całkowitą. zakresów na standardowy błąd. zwraca sumę. Jest za dużo. Moja pierwsza sugestia nie polega na przenoszeniu rzeczy wokół w tablicy Zamiast tego zastosuj okrąg ar bufor i użyj go zamiast tablicy Uprości twój projekt Moja druga sugestia to rozbić rzeczy na funkcje, które są spójne. Format struktury danych okrągły bufor, który pozwala na dodanie do niego i że spadnie najstarszy wpis, gdy tylko osiąga jego zdolność. have struktura danych implementuje interator. have funkcję, która oblicza całkowitą liczbę iterator nie obchodzi, jeśli obliczysz całkowitą liczbę z tablicy, listy lub okrągłego bufer. don t nazywają to Całkowicie wezwanie sumy , co jest tym, czego używasz. To co robię. Co to jest świetne info luis, pamiętaj jednak, że ta funkcja jest małą częścią funkcjonalności tej klasy i byłoby zbyt słaby, aby dodać zbyt dużo kodu, aby było idealnie Jesteś technicznie poprawny i rozumiem, że mój kod nie robi zbyt wiele, ale w tym samym czasie czasami lepiej brać się z boku mniejszego, jaśniejszego kodu niż przejścia na perfekcję Biorąc pod uwagę moje umiejętności Java, nawet zrobienie pseudokodu opisujesz skompilowanie byłoby mnie wysadzić Budżet na to, ale dzięki za jasny opis Pete855217 Aug 31 11 w 2 23.Hmmm, to nie chodzi o perfekcję, ale o ustalonych praktykach przemysłowych, które znamy przez ostatnie trzydzieści lat Czysty kod to zawsze ten, który jest podzielony Mamy dziesięciolecia dowodów, które wskazują, że jest to ogólny przypadek pod względem efektywności pod względem kosztów, redukcji ubytków, zrozumienia itp., chyba że jest to odrzucany kod jednorazowego rodzaju rzeczy. Nigdy nie kosztuje to zrobić gdy rozpoczyna się analiza problemu w ten sposób kod 101, podziel się problem i kod następuje, ani nadmierny, ani trudny 31 sierpnia 11 w 15 55. Twoje zadanie jest zbyt proste i aproach przyjąłeś z pewnością dobry dla pracy , jeśli chcesz używać lepszego projektu, musisz pozbyć się wszystkich ruchów liczbowych, które lepiej posłużą się kolejką FIFO i dobrze wykorzystują metody push i pop, w taki sposób, aby kod nie odzwierciedlał żadnego ruchu danych, tylko dwa logiczne akcje nowe dane i usuń stare niż 7 dni. odpowiedzi na 30 sierpnia 11 w wieku 14 49. średnia ruchoma - SMA. BREAKING DOWN średnia ruchoma - SMA. Automatyczna średnia ruchoma jest konfigurowalna, ponieważ można ją obliczyć na inną liczbę okresów czasu, po prostu przez dodanie cena zamknięcia zabezpieczenia za kilka okresów, a następnie podzielenie tej sumy przez liczbę okresów, co daje średnią cenę zabezpieczenia w danym okresie Prosta średnia ruchoma łagodzi niestabilność i ułatwia wyświetlanie tendencja cenowa zabezpieczenia Jeśli prosta średnia ruchoma wskazuje, oznacza to, że cena zabezpieczenia wzrasta Jeśli wskazuje to oznacza, że ​​cena zabezpieczenia się zmniejsza Im dłuższa jest rama czasowa dla średniej ruchomej, tym gładsza prostota średnia ruchoma Krótkotrwała średnia ruchoma jest bardziej zmienna, ale jej odczyt jest bliższy danych źródłowych. Znaczenie matematyczne. Mniejsze średnie są ważnym narzędziem analitycznym służącym do identyfikacji obecnych trendów cen, a po najprostszą formą wykorzystania prostej średniej ruchomej w analizie jest użycie jej do szybkiego wykrycia, czy zabezpieczenie znajduje się w trendzie wzrostowym lub spadkowym Kolejnym popularnym, choć nieco bardziej złożonym narzędziem analitycznym, jest porównanie pary proste średnie ruchome z każdym uwzględnieniem różnych ram czasowych Jeśli średnia krótkoterminowa średnia krótkookresowa przekracza średnią długoterminową, oczekuje się spodziewanej tendencji wzrostowej Z drugiej strony średnia długoterminowa powyżej średniej krótkoterminowej wskazuje na ruch w dół trend popularne Patterns Trading. Two popularnych wzorów handlowych, które wykorzystują proste średnie ruchome obejmują krzyż śmierci i złoty krzyż A krzyż śmierci występuje, gdy 50-dniowa prosta średnia ruchoma przekracza 200-dniową średnią ruchoma To uważa się za sygnał niedźwiedzia , że dalsze straty są w magazynie Złoty Krzyż występuje wtedy, gdy krótkoterminowa średnia ruchoma przewyższa długoterminową średnią ruchoma Wzmocnione przez duże obroty handlowe, może to oznaczać dalsze zyski są w sklepie.

Comments