Jak obliczany jest ADX?
Bezpośrednia odpowiedź: obliczanie ADX w jednym łańcuchu
ADX (Average Directional Index) jest budowany warstwowo na podstawie zmian cen: (1) oblicz ruch kierunkowy i true range dla każdego okresu, (2) wygładź te serie, (3) oblicz wskaźniki kierunkowe (+DI i −DI), (4) oblicz DX z ich zależności oraz (5) wygładź DX, aby otrzymać ADX.
Powszechna, standardowa definicja wykorzystuje długość okna wstecznego często oznaczaną jako n (często 14, ale metoda obsługuje inne wartości). Wartości ADX zależą od wybranego n oraz od reguły wygładzania stosowanej przez implementację.
Mechanizm: definicje i formuły krok po kroku
Aby opisać obliczenia bez zakładania danych na żywo, załóż, że masz sekwencję świec/słupków uporządkowanych według czasu. Dla każdego słupka t potrzebujesz jego high, low i close (lub przynajmniej high/low/close zgodnie z definicją poniżej).
1) Oblicz True Range (TR)
True Range oddaje wielkość ruchu, włączając luki. Dla słupka t względem t−1:
- TR(t) = max( High(t) − Low(t), |High(t) − Close(t−1)|, |Low(t) − Close(t−1)| )
Ta definicja sprawia, że TR jest większy, gdy bieżący zakres jest szeroki lub gdy cena tworzy lukę względem poprzedniego zamknięcia.
2) Oblicz ruch kierunkowy: +DM i −DM
Ruch kierunkowy oddziela ruchy w górę od ruchów w dół:
- UpMove(t) = High(t) − High(t−1)
- DownMove(t) = Low(t−1) − Low(t)
Typowa reguła jest następująca:
- +DM(t) = UpMove(t), jeśli UpMove(t) > DownMove(t) i UpMove(t) > 0, w przeciwnym razie 0
- −DM(t) = DownMove(t), jeśli DownMove(t) > UpMove(t) i DownMove(t) > 0, w przeciwnym razie 0
Ta struktura „albo/albo” zapewnia, że na każdym kroku uwzględniany jest tylko dominujący kierunek.
3) Wygładź TR, +DM i −DM
ADX nie jest obliczany z surowych TR i DM dla każdego słupka; wykorzystuje krok wygładzania. Wiele implementacji stosuje wygładzanie w stylu Wildera (popularne podejście), które jest równoważne szczególnej rekurencyjnej średniej ruchomej.
Niech SmoothedTR(t) będzie wygładzonym TR, a analogicznie Smoothed+DM(t) i Smoothed−DM(t).
Przy wygładzaniu w stylu Wildera dla okresu n rekurencja zazwyczaj wygląda następująco:
- SmoothedTR(t) = SmoothedTR(t−1) − (SmoothedTR(t−1) / n) + TR(t)
- Smoothed+DM(t) = Smoothed+DM(t−1) − (Smoothed+DM(t−1) / n) + +DM(t)
- Smoothed−DM(t) = Smoothed−DM(t−1) − (Smoothed−DM(t−1) / n) + −DM(t)
Inicjalizacja ma znaczenie: implementacje zwykle rozpoczynają wygładzoną serię po wystarczającej liczbie słupków, aby ustalić początkową sumę lub średnią z n okresów.
4) Oblicz +DI i −DI
Wskaźniki kierunkowe przekształcają wygładzony ruch kierunkowy na wartości względne do wygładzonego TR:
- +DI(t) = 100 × Smoothed+DM(t) / SmoothedTR(t)
- −DI(t) = 100 × Smoothed−DM(t) / SmoothedTR(t)
5) Oblicz DX (Directional Index)
DX opisuje, jak silnie jeden kierunek dominuje nad drugim:
- DX(t) = 100 × |+DI(t) − −DI(t)| / (+DI(t) + −DI(t))
Jeśli +DI(t) + −DI(t) wynosi zero (możliwe przy płaskim lub bezkierunkowym ruchu oraz przy pewnych warunkach danych/startowych), implementacja musi obsłużyć dzielenie przez zero.
6) Wygładź DX, aby otrzymać ADX
Na koniec ADX jest wygładzoną średnią ruchomą DX dla okresu n (ponownie, często w stylu Wildera):
- ADX(t) = wygładzona średnia DX(t) dla wybranej długości n
W praktyce pierwsza wartość ADX jest generowana po okresie rozgrzewki (często po zgromadzeniu wystarczającej liczby punktów DX). Różne platformy mogą stosować nieco inne konwencje inicjalizacji, co prowadzi do niewielkich rozbieżności.
Dowód na podstawie małego przykładu obliczeniowego (z jawnymi założeniami)
Bez danych w czasie rzeczywistym pełny przykład liczbowy byłby arbitralny. Zamiast tego poniżej znajduje się zwarty szablon obliczeniowy, który możesz zastosować do własnych słupków OHLC.
Załóż, że masz kolejne słupki i wybierasz okres n. Dla każdego słupka, zaczynając od drugiego (ponieważ wymagany jest t−1):
- Oblicz TR(t) z High(t), Low(t) i Close(t−1).
- Oblicz +DM(t) i −DM(t) z różnic między high i low.
- Zbuduj wygładzone wartości SmoothedTR(t), Smoothed+DM(t), Smoothed−DM(t) przy użyciu wybranej reguły wygładzania i poprawnej inicjalizacji.
- Oblicz +DI(t) i −DI(t).
- Oblicz DX(t).
- Wygładź DX(t), aby utworzyć ADX(t).
Istotne założenie, które należy podać przy niezależnej weryfikacji: twoje źródło danych (które dokładnie wartości OHLC), twoje wybrane n oraz twoja reguła wygładzania muszą być zgodne z implementacją, którą sprawdzasz. Nawet jeśli formuły są „standardowe”, szczegóły rozgrzewki i wygładzania mogą się różnić.
Jeśli chcesz potwierdzić, że dwa systemy obliczają ten sam ADX, wyeksportuj tę samą serię OHLC, zastosuj to samo n, użyj tych samych definicji TR/DM i zweryfikuj serie pośrednie (+DM/−DM, +DI/−DI, DX) przed porównaniem końcowego ADX.
Ograniczenia i tryby awarii, które należy uwzględnić
ADX jest często opisywany jako miara „siły trendu”, ale ta interpretacja ma ograniczenia. Główne problemy wynikają z wrażliwości na dane oraz z zachowania ruchu kierunkowego.
1) ADX zależy od wygładzania i inicjalizacji
Ponieważ ADX wykorzystuje wygładzone TR/DM i wygładzony DX, wyniki mogą się różnić, gdy:
- zmienisz n,
- zmienisz metodę wygładzania (lub konwencję inicjalizacji), lub
- twoja platforma inaczej obsługuje przypadki brzegowe (np. wczesne słupki, dzielenie przez zero).
Jest to kluczowy tryb awarii przy porównywaniu wartości między dostawcami.
2) Wysokie wartości nie gwarantują przewagi kierunkowej
ADX jest obliczany z wielkości dominacji kierunkowej, a nie z gwarantowanego kierunku. Może być stosunkowo podwyższony, gdy jeden kierunek konsekwentnie dominuje, nawet jeśli szersze otoczenie później się zmieni.
Ma to znaczenie, ponieważ późniejsza zmiana ruchu kierunkowego może sprawić, że wcześniejsze zachowanie ADX będzie mniej informacyjne.
3) Zmienne lub boczne rynki mogą generować mylące odczyty siły
Definicje ruchu kierunkowego mogą nadal tworzyć powtarzającą się dominację w małych, nieregularnych ruchach. W niektórych warunkach „bocznych, ale zmiennych” ADX może wzrosnąć, nawet jeśli nie ma trwałej, stabilnej struktury trendu.
Oznacza to, że ADX najlepiej traktować jako wskaźnik charakterystyki ruchu, a nie jako samodzielną regułę decyzyjną.
Weryfikacja: jak niezależnie sprawdzić obliczenia ADX
Aby samodzielnie zweryfikować ADX przy użyciu powyższego łańcucha formuł:
- Wybierz konkretne n i zapisz je.
- Użyj jednego spójnego zestawu danych OHLC i potwierdź, że masz High, Low, Close wyrównane według czasu.
- Oblicz TR, +DM i −DM dokładnie z tą samą logiką warunkową.
- Zastosuj tę samą regułę wygładzania i inicjalizacji, której używa twoje odniesienie.
- Oblicz +DI, −DI, DX, a następnie wygładź DX do ADX.
- Najpierw porównaj wyniki pośrednie; jeśli te się zgadzają, końcowy ADX jest bardzo prawdopodobnie spójny.