2012-04-16 15 views
5

Na początku to pytanie może brzmieć naprawdę głupio, ale nie jest to kwestia fundamentalna. Być może może się wydawać, że nie da się go rozwiązać dokładnie za pomocą dowolnego algorytmu, ale udawałem, że tak jest.Jak znaleźć szczyty i dna w szeregach czasowych?

Więc pytanie. Mam wykres, na przykład złoto. Muszę dowiedzieć się, gdzie są wierzchołki i dna w czasie osiowym. Problem polega na tym, że muszę się dowiedzieć, gdzie zaczynają się poważne wzrosty i poważne spadki. Problem polega na tym, że istnieje wiele drobnych nieadekwatnych tendencji wzrostowych i spadków.

Oto obraz dla lepszego zrozumienia - czerwone plamki, które chcę znaleźć (NIE DOKŁADNIE, ale w pewien sposób w ten sposób).

enter image description here

Więc prawdopodobnie trzeba odfiltrować małych turnups i turndowns, ale nie mam pojęcia jak to zrobić. Będę zadowolony z wszelkich pomysłów. Nie potrzebuję algorytmu w java itp., Wystarczyłoby to w słowach.

+0

Mam nadzieję, że dostosowujesz te dane do inflacji ... 100 USD w 1980 roku było dziś warte ponad 100 USD. (Przy założeniu 2% rocznej inflacji, coś w rodzaju ** dwa razy ** tyle!) –

Odpowiedz

8
  1. Można przeprowadzić operację wygładzania lub filtrowanie dolnoprzepustowe pierwszy i znaleźć lokalizacje lokalnych minimów/maksimów z wygładzonej danych. Następnie pobierz wartości minimów i maksimów z oryginalnych danych.

  2. Można użyć normalnego filtra maksymalnego/minimalnego, który znajdziewszystkie punkty zwrotne, a następnie przefiltruje listę punktów zwrotnych według progów.

  3. Myślę, że to, co naprawdę chcesz zrobić, to usunąć "długoterminową zmienność" z sygnału i spojrzeć tylko na "zmienność krótkoterminową". Można to zrobić za pomocą dekompozycji empirycznej . Patrz rozdział 2.3.2 my thesis. (Alernately, Google się za "Mode rozkładu empirycznego", "EDM" lub "Hilbert-Huang Transform".)

Oto EMD w akcji:

enter image description here

Zwróć uwagę na rosnącą ogólność, ponieważ algorytm EMD wyodrębnia elementy sygnału, zaczynając od "najbardziej szczegółowego" i kończąc na "najbardziej ogólnym trendzie". (Zauważ, że widać dziewięć komponentów - tylko kilka jest pokazanych).

+0

Nawiasem mówiąc, o wiele łatwiej jest pisać ten rodzaj kodu przetwarzania sygnałów w języku przeznaczonym do matematyki numerycznej (MATLAB, NumPy, Octave wszystkie przychodzą na myśl.) –

+0

świetna odpowiedź, dzięki – John

+0

4.) Możesz użyć filtra opartego na zmienności w następujący sposób: http://www2.math.su.se/matstat/reports/serieb/2009/rep7/report.pdf - Rozdział 2.3 @ Li-aungJak fajna teza! faktycznie próbuję przewidzieć bąbelki za pomocą didier sornettes lppl – KIC

0

Zwykle zaczynasz od średniej ruchomej, czyli uśredniając N ostatnich punktów, gdzie stopień wygładzenia jest w przybliżeniu proporcjonalny do N (tj. jak średnio więcej punktów, twój wynik staje się bardziej płynny).

Następnie możesz wziąć różnice między punktami uśrednionymi i następnymi. Gdzie różnica zmienia znak, masz minimum lub maksimum (gdzie idzie od pozytywu do negatywu, masz maksimum, od negatywu do pozytywu, minimum).

0

Mogę nie do końca zrozumieć, ale dlaczego nie możesz po prostu wziąć najniższego punktu w określonym przedziale czasu? Większość dostawców danych zapewnia wysoką/niską wartość w danym dniu, czy nie można go zapisać, a następnie uzyskać najniższą wartość dla zakresu czasowego x?

Poszerzając zakres swojego badania, usuń małe wzloty/upadki. Zazwyczaj to robię.Innym sposobem jest użycie średnich z ostatnich X dni, aby wygładzić wyniki (średnie ruchome), ale wtedy stracisz dokładność (stopień zależy od zasięgu ... w porównaniu z 2-3 dniową średnią kroczącą niż nie jest to zła średnia z 2 lat).

EDYCJA: Przepraszam, brakuje mi zrozumienia, próbujesz znaleźć zasięg. Cóż, jeśli masz dane, to dlaczego nie znaleźć najniższego punktu (ów), a następnie przejść do następnego dnia i dowiedzieć się zmiany%, następnie następnego itd. I zastąpić dzień, kiedy znajdziesz wyższy zakres. Będziesz musiał dodać trochę więcej logiki później (np.% Z tego poziomu lub coś podobnego), w przeciwnym razie będziesz raportować, zazwyczaj bierze ipo czas i wziąć wszystko, co wysokie i powiedzieć, że jeden okres.

+0

Nie mogę wziąć najniższego punktu dla określonego przedziału czasowego, ponieważ chcę znaleźć ten przedział czasu. Szukam początku progowych wzrostów i spadków. – John

+0

@John: Zdecydowanie popatrz na rozkład empiryczny. Rozkłada sygnały według "skali czasowej" - zmiany długoterminowe, zmiany średnioterminowe, zmiany krótkoterminowe itp. –

Powiązane problemy