Wygładzanie Jurika obejmuje 3 etapy:
1. etap - wstępne wygładzanie przez adaptacyjny EMA: MA1 = (1-alpha)*Price + alpha*MA1[1];
2. etap - kolejne wstępne wygładzanie przez filtr Kalmana: Det0 = (Price - MA1)*(1-beta) + beta*Det0[1]; MA2 = MA1 + PR*Det0;
3. etap - końcowe wygładzanie przez unikalny adaptacyjny filtr Jurika: Det1 = (MA2 - JMA[1]) * (1-alpha)^2 + alpha^2 * Det1[1]; JMA = JMA[1] + Det1;
gdzie: - Price - seria cen - alpha - czynnik dynamiczny (opisany poniżej) - beta - współczynnik okresowy = 0.45*(Length-1)/(0.45*(Length-1)+2) - PR - współczynnik fazy: PR = Phase/100 + 1.5 (jeśli Phase < -100 to PR=0.5, jeśli Phase > 100 to PR=2.5).
Rysunek 1. Przykładowy wykres ze wszystkimi etapami wygładzania Jurika. Możesz zobaczyć wyniki (Rysunek 1) każdego etapu za pomocą dołączonego wskaźnika JurikFilter_v2, zmieniając FilterMode: 0 - etap końcowy (JMA) 1 - 1. etap 2 - 2. etap 3 - tylko końcowe (bez wstępnego) wygładzanie.
Czynnik dynamiczny to czynnik okresowy (beta) podniesiony do potęgi (pow):
alpha = beta ^ Pow,
gdzie: - pow = rVolty ^ pow1 - rVolty - względna zmienność ceny - pow1 - potęga względnej zmienności według wzoru: pow1 = len1 - 2 (jeśli pow1 < 0.5 to pow1 = 0.5),
gdzie len1 - dodatkowy czynnik okresowy: len1 = Log(SquareRoot(len))/Log(2.0) + 2 (jeśli len1 < 0 to len1 = 0).
Tak więc widać, że czynnik dynamiczny opiera się na względnej zmienności ceny, zapewniając wymaganą adaptacyjność dla tego rodzaju filtra cenowego.
Wzór na względną zmienność ceny to rVolty = Volty/AvgVolty (jeśli rVolty > len1^(1/pow1) to rVolty = len1^(1/pow1), jeśli rVolty < 1 to rVolty = 1),
gdzie:
- Volty - zmienność ceny oparta na obliczeniach tzw. Pasm Jurika (VisualMode = 1).
- AvgVolty - średnia zmienność, dla której Jurik używa dość skomplikowanego algorytmu obliczeniowego: AvgVolty = Average(vSum,AvgLen),
gdzie:
- vSum - przyrostowa suma (Volty - Volty[10])/10;
- AvgLen - okres średniej (Jurik używa 65).
W mojej wersji filtra Jurika używam prostej średniej zamiast złożonego uśredniania Jurika
Co więcej, z dołączonym wskaźnikiem JurikVolty_v1 (Rysunek 2) możesz zobaczyć wartości Volty (VisualMode=0), vSum (VisualMode=1) oraz AvgVolty (czerwona linia przerywana).
Wzór na zmienność ceny to Volty = maksimum z Abs(del1) i Abs(del2), jeśli Abs(del1) = Abs(del2) to Volty = 0,
gdzie: - del1 - odległość między ceną a górnym pasmem del1 = Price - UpperBand - del2 - odległość między ceną a dolnym pasmem del2 = Price - LowerBand Pasma Jurika różnią się od znanych pasm cenowych takich jak Bollinger, Keltner, Donchian, Fractal i inne: jeśli del1 > 0 to UpperBand = Price w przeciwnym razie UpperBand = Price - Kv*del1 jeśli del2 < 0 to LowerBand = Price w przeciwnym razie LowerBand = Price - Kv*del2,
gdzie: - Kv - współczynnik zmienności Kv = bet ^ SquareRoot(pow2). Łatwo zauważyć, że te pasma mogą stanowić podstawę wskaźnika podążającego za trendem, takiego jak Parabolic Wildera. Tak więc widać, że praktycznie nie ma niejasnych miejsc w algorytmie Jurik Moving Average (JMA)
5 | 0 % | |
4 | 100 % | |
3 | 0 % | |
2 | 0 % | |
1 | 0 % |