Sunday 17 December 2017

Ważona średnia ruchoma implementacja


Zasadniczo mam szereg wartości takich jak ta: powyższa tablica jest uproszczona, gromadzę 1 wartość na milisekundę w moim prawdziwym kodzie i muszę przetworzyć wynik na algorytmie, który napisałem, aby znaleźć najbliższy punkt szczytowy przed punktem w czasie. Moja logika kończy się niepowodzeniem, ponieważ w moim przykładzie powyżej 0,36 jest rzeczywistym szczytem, ​​ale mój algorytm będzie wyglądał wstecz i zobaczy ostatnią liczbę 0.25 jako szczyt, ponieważ przed nią jest spadek do 0.24. Celem jest przyjęcie tych wartości i zastosowanie do nich algorytmu, który wygładzi je nieco, tak żebym miał więcej wartości liniowych. (tj: Id jak moje wyniki być kręty, nie jaggedy) Powiedziano mi, aby zastosować wykładniczy filtr średniej ruchomej do moich wartości. Jak mogę to zrobić? Bardzo trudno jest mi czytać równania matematyczne, z kodem radzę sobie znacznie lepiej. Jak przetwarzać wartości w mojej tablicy, stosując wykładnicze obliczenia średniej ruchomej, aby je wyrównać zapytano 8 lutego 12 o 20:27 Obliczanie wykładniczej średniej kroczącej. musisz zachować pewien stan i potrzebujesz parametru strojenia. To wymaga małej klasy (zakładając, że korzystasz z Java 5 lub nowszej wersji): Utwórz instancję z żądanym parametrem zaniku (możesz ustawić strojenie od 0 do 1), a następnie użyj funkcji average () do filtrowania. Czytając stronę o nawrocie matematycznym, wszystko, co naprawdę trzeba wiedzieć, kiedy zamienia się ją w kod, jest takie, że matematycy lubią pisać indeksy w tablicach i sekwencjach z indeksami dolnymi. (Znamy również kilka innych zapisów, co nie pomaga.) Jednak EMA jest dość prosta, ponieważ wystarczy zapamiętać jedną starą wartość, nie wymagającą skomplikowanych tablic stanów. odpowiedział 08 lutego 12 o 20:42 TKKocheran: Dość dużo. Czy to nie jest miłe, gdy rzeczy mogą być proste (jeśli zaczynasz z nową sekwencją, zdobądź nową średnią). Zauważ, że kilka pierwszych haseł w uśrednionej sekwencji będzie przeskakiwało trochę ze względu na efekty graniczne, ale dostajesz te z innymi ruchomymi średnimi także. Jednak dobrą zaletą jest to, że można zawinąć logikę średniej ruchomej do uśredniającego i eksperymentować, nie zakłócając zbytnio reszty programu. ndash Donal Fellows 09 lutego 12 o 0:06 Mam trudności ze zrozumieniem twoich pytań, ale i tak postaram się odpowiedzieć. 1) Jeśli twój algorytm znalazł 0.25 zamiast 0.36, to jest źle. Jest źle, ponieważ zakłada monotoniczny wzrost lub spadek (który zawsze rośnie lub zawsze spada). O ile nie wytypujesz WSZYSTKICH twoich danych, twoje punkty danych --- podczas ich prezentacji --- są nieliniowe. Jeśli naprawdę chcesz znaleźć maksymalną wartość między dwoma punktami w czasie, podziel tablicę od tmin do tmax i znajdź maksimum tego podbarwa. 2) Teraz pojęcie średnich kroczących jest bardzo proste: wyobraź sobie, że mam następującą listę: 1.4, 1.5, 1.4, 1.5, 1.5. Mogę go wygładzić, biorąc średnią z dwóch liczb: 1.45, 1.45, 1.45, 1.5. Zauważ, że pierwsza liczba to średnia z 1,5 i 1,4 (druga i pierwsza liczba), druga (nowa lista) to średnia z 1,4 i 1,5 (trzecia i druga stara lista), a trzecia (nowa lista) to średnio 1,5 i 1,4 (czwarty i trzeci) i tak dalej. Mogłem zrobić okres trzy lub cztery, lub n. Zwróć uwagę, że dane są znacznie płynniejsze. Dobrym sposobem, aby zobaczyć średnie ruchome w pracy, jest przejście do Google Finance, wybór akcji (wypróbuj Tesla Motors pretty volatile (TSLA)) i kliknij dział techniczny na dole wykresu. Wybierz średnią ruchomą z danym okresem i wykładniczą średnią kroczącą, aby porównać różnice. Wykładnicza średnia krocząca jest tylko kolejnym rozwinięciem tego, ale waży starsze dane mniej niż nowe dane, jest to sposób na odchylenie wygładzania w kierunku tyłu. Proszę przeczytać wpis w Wikipedii. Jest to raczej komentarz niż odpowiedź, ale małe pole komentarza było niewielkie. Powodzenia. Jeśli masz problemy z matematyką, możesz użyć prostej średniej ruchomej zamiast wykładniczej. Wynik wyjściowy będzie więc ostatnim x terminami podzielonymi przez x. Nieprawdziwy kod pseudokodowy: pamiętaj, że będziesz musiał obsługiwać początkowe i końcowe części danych, ponieważ wyraźnie nie możesz uśrednić ostatnich 5 warunków, gdy jesteś na drugim punkcie danych. Ponadto istnieją skuteczniejsze sposoby obliczania tej średniej ruchomej (suma suma - najstarsze najnowsze), ale ma to na celu uzyskanie koncepcji na temat tego, co się dzieje. odpowiedziało 8 lutego 12 o 20:41 Jaka jest różnica między średnią kroczącą a średnią ważoną A 5-okresowa średnia krocząca, na podstawie powyższych cen, byłaby obliczana przy użyciu następującej formuły: Na podstawie powyższego równania średnia cena w okresie wymienione powyżej było 90,66. Używanie średnich kroczących jest skuteczną metodą eliminowania silnych wahań cen. Ograniczeniem jest to, że punkty danych ze starszych danych nie są ważone inaczej niż punkty danych w pobliżu początku zestawu danych. Tu zaczynają grać ważone średnie ruchome. Średnie ważone przypisują większą wagę do bardziej aktualnych punktów danych, ponieważ są bardziej istotne niż dane z odległej przeszłości. Suma ważenia powinna wynosić maksymalnie 1 (lub 100). W przypadku prostej średniej kroczącej wagi są równomiernie rozłożone, dlatego nie są pokazane w powyższej tabeli. Cena zamknięcia AAPLExponential Moving Average (EMA) Klasyczna formuła EMA to: W przeciwieństwie do Simple Moving Average. gdzie waga wszystkich poprzednich taktów jest równa, Wykładnicza średnia ruchoma sprawia, że ​​ostatni słupek jest ważniejszy. Waga każdego starszego paska zmniejsza się wykładniczo. Poniżej znajduje się tabela wag dla N 10 (1 to aktualna cena, 2 poprzednia itd.): Formuła wagi to miejsce, w którym i jest odległość do najnowszego paska. 0 oznacza ostatni, 1 poprzedni pasek i tak dalej. Pierwsza wartość Formuła odwołuje się do poprzedniej wartości i nie ma standardowej umowy, która jest pierwszą (najstarszą) wartością. Różne zastosowania EMA: Pierwsza cena (MT4, Marketscope) lub Prosta średnia ruchoma w pierwszych N cenach (Stockcharts). Zamiast prostej średniej ruchomej Wykładnicza średnia ruchoma może być używana dokładnie jako prosta średnia ruchoma. szczególnie w sytuacji, gdy bezwładności prostej średniej ruchomej nie można zignorować. Wystarczy porównać EMA (10) i MVA (10) zastosowane po tych samych cenach: Ograniczenia Wykładnicza średnia ruchoma opiera się na wszystkich poprzednich wartościach, więc wynik wskaźnika dla konkretnego paska zależy od tego, ile danych historycznych jest branych pod uwagę. Tak więc w sytuacji, gdy ładowanych jest więcej danych historycznych, wartość wskaźnika może różnić się od wcześniej obliczonej. Wskaźniki Ten artykuł w Other Languagesnet. sourceforge. openforecast. models Class WeightedMovingAverageModel Ważony średniookresowy model prognozy oparty jest na sztucznie skonstruowanych szeregach czasowych, w których wartość dla danego okresu jest zamieniana na średnią ważoną tej wartości i wartości dla pewna liczba poprzednich okresów. Jak można się domyślić z tego opisu, model ten najlepiej nadaje się do danych szeregów czasowych, tj. Danych, które zmieniają się w czasie. Ponieważ wartość prognostyczna dla dowolnego okresu jest średnią ważoną z poprzednich okresów, wówczas prognoza zawsze będzie pozostawać w tyle za wzrostami lub spadkami obserwowanych (zależnych) wartości. Na przykład, jeśli seria danych ma zauważalny trend wzrostowy, wówczas ważona średnia ruchomej prognozy ogólnie zapewnia niedocenianie wartości zmiennej zależnej. Ważony model średniej ruchomej, podobnie jak model średniej ruchomej, ma przewagę nad innymi modelami prognostycznymi, ponieważ wyrównuje wartości szczytowe i doliny w zestawie obserwacji. Jednakże, podobnie jak model średniej ruchomej, ma on również kilka wad. W szczególności ten model nie daje rzeczywistego równania. Dlatego nie jest to wszystko użyteczne jako narzędzie do prognozowania średniego zasięgu. Można go niezawodnie wykorzystać tylko do prognozowania kilku okresów w przyszłości. Od: 0.4 Autor: Steven R. Gould Dziedziny odziedziczone z klasy net. sourceforge. openforecast. models. AbstractForecastingModel WeightedMovingAverageModel () Konstruuje nowy ważony ruchomy średni model prognostyczny. WeightedMovingAverageModel (podwójne wagi) Konstruuje nowy ważony ruchomy model prognostyczny, stosując określone wagi. forecast (double timeValue) Zwraca prognozowaną wartość zmiennej zależnej dla danej wartości niezależnej zmiennej czasowej. getForecastType () Zwraca jedną lub dwie nazwy słów tego typu modelu prognostycznego. getNumberOfPeriods () Zwraca bieżącą liczbę okresów używanych w tym modelu. getNumberOfPredictors () Zwraca liczbę predyktorów używanych przez model bazowy. setWeights (double weight) Ustawia wagi używane przez ten ważony średniej kroczącej model prognostyczny do podanych wag. toString () To powinno zostać przesłonięte, aby zapewnić tekstowy opis bieżącego modelu prognostycznego, w tym, o ile to możliwe, wszelkich użytych parametrów pochodnych. Metody odziedziczone z klasy net. sourceforge. openforecast. models. AbstractTimeBasedModel WeightedMovingAverageModel Konstruuje nowy ważony ruchomy model prognostyczny, używając określonych wag. Aby utworzyć poprawny model, należy wywołać init i przekazać zestaw danych zawierający serię punktów danych ze zmienną czasową zainicjowaną w celu identyfikacji zmiennej niezależnej. Rozmiar tablicy wag jest używany do określenia liczby obserwacji, które mają być użyte do obliczenia ważonej średniej ruchomej. Dodatkowo, ostatniemu okresowi zostanie nadana masa zdefiniowana przez pierwszy element tablicy, tj. Wagi0. Rozmiar tablicy wag jest również wykorzystywany do określenia ilości przyszłych okresów, które mogą być skutecznie prognozowane. Przy 50-dniowej średniej ważonej średniej ruchomej nie możemy rozsądnie - z żadnym stopniem dokładności - przewidzieć więcej niż 50 dni po ostatnim okresie, dla którego dostępne są dane. Nawet prognozowanie pod koniec tego przedziału prawdopodobnie będzie niewiarygodne. Uwaga dotycząca wag Ogólnie, wagi przekazane do tego konstruktora powinny sumować się do 1,0. Jednak dla wygody, jeżeli suma wag nie sumuje się do 1,0, to ta implementacja skaluje wszystkie wagi proporcjonalnie, tak że sumują się do 1,0. Parametry: wagi - tablica wag do przypisania do obserwacji historycznych podczas obliczania ważonej średniej kroczącej. WeightedMovingAverageModel Konstruuje nowy ważony ruchomy średni model prognostyczny, używając nazwanej zmiennej jako zmiennej niezależnej i określonych wag. Parametry: independentVariable - nazwa niezależnej zmiennej do użycia w tym modelu. Wagi - tablica wag do przypisania do obserwacji historycznych podczas obliczania ważonej średniej kroczącej. WeightedMovingAverageModel Konstruuje nowy ważony średni ruchomy model prognostyczny. Ten konstruktor jest przeznaczony do użycia tylko przez podklasy (dlatego jest chroniony). Każda podklasa korzystająca z tego konstruktora musi następnie wywołać metodę (protected) setWeights, aby zainicjować wagi, które będą używane przez ten model. WeightedMovingAverageModel Konstruuje nowy, ważony, ruchomy model prognostyczny wykorzystujący daną zmienną niezależną. Parametry: independentVariable - nazwa niezależnej zmiennej do użycia w tym modelu. setWeights Ustawia wagi używane przez ten ważony średniej kroczącej model prognostyczny do podanych wag. Ta metoda ma być używana tylko przez podklasy (dlatego jest chroniona) i tylko w połączeniu z (chronionym) jednoargumentowym konstruktorem. Każda podklasa korzystająca z jednoargumentowego konstruktora musi następnie wywołać setWeights przed wywołaniem metody AbstractTimeBasedModel. init (net. sourceforge. openforecast. DataSet) w celu zainicjowania modelu. Uwaga na temat ciężarów Zasadniczo wagi przekazane do tej metody powinny sumować się do 1,0. Jednak dla wygody, jeżeli suma wag nie sumuje się do 1,0, to ta implementacja skaluje wszystkie wagi proporcjonalnie, tak że sumują się do 1,0. Parametry: wagi - tablica wag do przypisania do obserwacji historycznych podczas obliczania ważonej średniej kroczącej. Zwraca prognozowaną wartość zmiennej zależnej dla danej wartości niezależnej zmiennej czasowej. Podklasy muszą implementować tę metodę w taki sposób, aby były zgodne z modelem prognostycznym, który implementują. Podklasy mogą korzystać z metod getForecastValue i getObservedValue w celu uzyskania odpowiednio wcześniejszych prognoz i obserwacji. Określone przez: prognoza w klasie AbstractTimeBasedModel Parametry: timeValue - wartość zmiennej czasowej, dla której wymagana jest wartość prognozy. Zwraca: prognozowaną wartość zmiennej zależnej dla danego czasu. Zgłasza: IllegalArgumentException - jeśli nie ma wystarczających danych historycznych - obserwacje przekazane do init - w celu wygenerowania prognozy dla danej wartości czasu. getNumberOfPredictors Zwraca liczbę predyktorów używanych przez model bazowy. Zwraca: liczbę predyktorów używanych przez model bazowy. getNumberOfPeriods Zwraca bieżącą liczbę okresów używanych w tym modelu. Określone przez: getNumberOfPeriods w klasie AbstractTimeBasedModel Returns: bieżąca liczba okresów używanych w tym modelu. getForecastType Zwraca jedną lub dwie nazwy słowne tego typu modelu prognostycznego. Tak krótko. Dłuższy opis powinien zostać wdrożony w metodzie toString. Należy to przesłonić, aby zapewnić tekstowy opis bieżącego modelu prognostycznego, w tym, o ile to możliwe, wszelkich użytych parametrów pochodnych. Określone przez: toString w interfejsie ForecastingModel Overrides: toString w klasie AbstractTimeBasedModel Returns: ciąg znaków reprezentujący bieżący model prognozy i jego parametry.

No comments:

Post a Comment