Jak obliczany jest Fisher Transform?
Czym jest Fisher Transform (i dlaczego wzór wygląda inaczej)
Fisher Transform to transformacja matematyczna zaprojektowana w celu przekształcenia szeregu czasowego (często szeregu cenowego) w formę, która zachowuje się bardziej jak nieograniczony oscylator. Nazywany jest „transformacją”, ponieważ odwzorowuje wartości za pomocą funkcji nieliniowych, a nie dlatego, że dokonuje statystycznego przewidywania.
W praktyce kluczowa idea jest następująca:
- zredukuj szereg wejściowy do wartości ograniczonej za pomocą bieżącego zakresu maksimum/minimum,
- zastosuj nieliniowe odwzorowanie w stylu Fishera (związane z logarytmicznym ilorazem),
- zaktualizuj odwzorowaną wartość rekurencyjnie, aby wskaźnik reagował płynnie, a nie czysto „punkt po punkcie”.
Ponieważ odwzorowanie jest nieliniowe, a zakres jest obliczany w oknie, dokładna skala wyniku i czułość silnie zależą od wybranych ustawień oraz od danych, które wprowadzasz do obliczeń.
Podstawowe obliczenie: wzór, parametry i dane wejściowe
Powszechnie stosowane obliczenie Fisher Transform ma następującą ogólną strukturę. Dokładne szczegóły implementacji różnią się w zależności od źródła, ale poniższa mechanika obejmuje zasadnicze elementy.
Parametry i dane wejściowe
Potrzebujesz:
- Szereg wejściowy: zwykle pochodna wartość ceny (na przykład cena medianowa), podawana dla każdego kroku czasowego.
- Długość okna wstecznego (N): liczba świec używanych do obliczenia bieżącego minimum i maksimum.
- Rekurencja/iteracja: odwzorowanie Fishera używa rekurencyjnej aktualizacji, która odwołuje się do wcześniej obliczonych wartości.
Krok 1: oblicz bieżącą wartość znormalizowaną
Dla każdego kroku czasowego t (zaczynając dopiero po zgromadzeniu wystarczającej ilości danych dla okna wstecznego), oblicz bieżące minimum i maksimum szeregu wejściowego w ciągu ostatnich N kroków:
- Najniższy(t) = minimum wejścia w oknie
- Najwyższy(t) = maksimum wejścia w oknie
Następnie oblicz znormalizowaną pozycję w zakresie, często w postaci:
- x(t) = 2 × ((\frac{Input(t) - Najniższy(t)}{Najwyższy(t) - Najniższy(t)})) − 1
To odwzorowuje bieżące wejście na wartość ograniczoną (koncepcyjnie między −1 a +1) na podstawie jego położenia w bieżącym zakresie min/max.
Założenie dla przykładów obliczeniowych: musisz zdefiniować, czym jest „Input(t)”, i konsekwentnie używać tego samego N oraz tej samej definicji okna (z uwzględnieniem/wyłączeniem bieżącej świecy) podczas odtwarzania wartości.
Krok 2: zastosuj nieliniowe odwzorowanie w stylu Fishera
Oblicz wartość pośrednią, która odwzorowuje ograniczoną wartość znormalizowaną w domenę podobną do Fishera za pomocą transformacji logarytmicznego ilorazu. Typowy wzór to:
- f(t) = 0,5 × ln((\frac{1 + x(t)}{1 - x(t)}))
Aby uniknąć osobliwości (dzielenia przez zero lub logarytmu zera), gdy x(t) zbliża się do ±1, implementacje zwykle zawierają zabezpieczenie, takie jak ograniczenie x(t) do nieco mniejszego przedziału (na przykład zapobieganie dokładnym wartościom −1 i +1).
Krok 3: aktualizacja rekurencyjna (wygładzanie przez wartości wcześniejsze)
Wiele wzorów Fisher Transform aktualizuje odwzorowaną wartość za pomocą poprzedniego wyniku. Typowa struktura rekurencyjna to:
- fish(t) = fish(t−1) + f(t)
a czasami wprowadzana jest dodatkowa zmienna wygładzająca lub pośrednia „poprzednia” zmienna. Dokładna forma rekurencyjna określa reaktywność wskaźnika.
Krok 4: opcjonalne zaokrąglanie lub skalowanie
Niektóre implementacje skalują lub zaokrąglają końcowy szereg dla czytelności. Są to wybory dotyczące wyświetlania, a nie podstawowa koncepcja matematyczna.
Zarys przykładu obliczeniowego, który możesz zweryfikować niezależnie
Ponieważ nie zakłada się tutaj żadnych danych rynkowych w czasie rzeczywistym, najbardziej niezawodnym sposobem nauki obliczeń jest odtworzenie ich na małym, hipotetycznym zbiorze danych.
Konfiguracja przykładu (najpierw zdefiniuj założenia)
- Wybierz N = 5.
- Wybierz Input(t) dla każdego kroku czasowego (na przykład szereg cen medianowych), który podasz jako wartości liczbowe.
- Zdecyduj, jak obsłużysz „pierwsze N” punktów (zwykle zaczynasz generować wyniki dopiero po ukończeniu okna).
- Zdecyduj, jak ograniczysz x(t), gdy zakres jest zbyt mały.
Oblicz wartości pośrednie krok po kroku
Dla każdego kroku czasowego, w którym istnieje okno:
- Znajdź Najniższy(t) i Najwyższy(t) z ostatnich N wartości wejściowych.
- Oblicz x(t) za pomocą (2 × ((Input−Najniższy)/(Najwyższy−Najniższy)) − 1).
- Zabezpiecz x(t), aby nie osiągał dokładnie ±1.
- Oblicz f(t) = 0,5 × ln((1 + x)/(1 − x)).
- Zaktualizuj fish(t) za pomocą wybranej rekurencji, takiej jak fish(t) = fish(t−1) + f(t) (z fish(t−1) zainicjalizowanym zgodnie z wybraną konwencją).
Jak sprawdzić, czy zaimplementowałeś to poprawnie
Gdy zaimplementujesz te same kroki z tymi samymi założeniami, powinieneś dopasować:
- bieżące wartości min/max,
- pośrednią sekwencję x(t),
- odwzorowanie Fishera f(t),
- oraz rekurencyjną sekwencję fish(t).
Jeśli którakolwiek sekwencja pośrednia się różni, końcowy wynik również będzie się różnić. Dlatego weryfikacja powinna skupiać się na odtwarzaniu obliczeń pośrednich, a nie tylko końcowej linii.
Ograniczenia i tryby awarii (co może zepsuć obliczenie)
Chociaż Fisher Transform jest zdefiniowanym wzorem, jego obliczony wynik może się znacznie różnić w zależności od tego, jak zaimplementujesz szczegóły i jak zachowują się Twoje dane.
1) Małe lub płaskie zakresy w oknie wstecznym
Jeśli Najwyższy(t) − Najniższy(t) staje się bardzo małe, normalizacja ((Input−Najniższy)/(Najwyższy−Najniższy)) staje się niestabilna. Może to spowodować, że x(t) gwałtownie skoczy w kierunku ±1, co następnie wypycha odwzorowanie logarytmiczne w kierunku wartości ekstremalnych.
Istotna implikacja: musisz zdefiniować zabezpieczenie dla zakresów bliskich zeru (na przykład pominięcie aktualizacji lub ograniczenie obliczonego ilorazu).
2) Osobliwości w transformacji logarytmicznego ilorazu
Odwzorowanie (ln((1+x)/(1−x))) jest niezdefiniowane dokładnie przy x = 1 lub x = −1. Rzeczywiste dane i zaokrąglenia mogą nadal dawać wartości bardzo bliskie tym granicom.
Istotna implikacja: implementacje zwykle ograniczają x(t) nieco wewnątrz przedziału (−1, +1), aby uniknąć nieskończonych wartości.
3) Inicjalizacja rekurencyjna i niespójne konwencje
Ponieważ obliczenie często wykorzystuje wcześniejsze wyniki, wybór początkowego fish(0) (lub pierwszej obliczonej wartości fish) wpływa na kolejne wartości.
Istotna implikacja: dwie implementacje używające tego samego wzoru, ale różnych konwencji inicjalizacji, mogą się różnić.
4) Definicja wejścia zmienia wszystko
Jeśli „Input(t)” jest inną miarą ceny (zamknięcie vs. mediana vs. cena ważona), bieżące wartości min/max się zmieniają, więc x(t), a tym samym wynik Fisher, ulegają zmianie.
Istotna implikacja: musisz traktować definicję szeregu wejściowego jako część obliczenia, a nie jako zewnętrzny szczegół.
5) Problemy z jakością danych
Brakujące świece, nieregularne znaczniki czasu i ponownie próbkowane dane mogą zmienić bieżące okna min/max. Nawet bez żadnego „przewidywania rynku”, ta mechanika obliczeniowa może zniekształcić linię wskaźnika.