środa, 9 marca 2022

GARCH zamiast wstęgi Bollingera

A więc prognoza ropy za pomocą AT nie sprawdziła się. Wygrała ekonomia - blokada podaży rosyjskiej ropy wywołała eksplozję cenową ropy na całym świecie. Można mówić o odwróconym czarnym łabędziu, którego też brałem pod uwagę dwa tygodnie temu. Gdy Rosja rozpoczęła inwazję na Ukrainę, cena oscylowała wokół 100$, teraz jest to 125, tygodniowo wstęga Bollingera mocno przekroczona, RSI(14) także



W krótkim okresie na statystyce nie można nigdy polegać, ale w długim już tak. Dlatego nie ma wątpliwości, że nastąpi powrót. Zazwyczaj pada teraz pytanie: kiedy? Ale to złe pytanie, bo wiadomo, że to nastąpi prędzej niż później. Ważniejsze, jak mocny będzie powrót? Bo zamiast oczekiwanego powrotu do średniej, możemy dostać prawie poziomy kierunek w kolejnych tygodniach. Gdyby tak było, to znaczyłoby, że wariancja stóp zwrotu spadła niemal do zera.

Zamiast Bollingera, którego zresztą nie jestem zwolennikiem, znacznie lepiej używać modelu klasy ARCH. Oprócz nieporównywalnej mocy statystycznej, pozwala on także prognozować odchylenia w kolejnym okresie.

Najprostszym sposobem, nie wymagającym żadnej wiedzy programistycznej, jest używanie Gretla. Program ten, jak na darmowy, całkiem nieźle się rozwija, obecna wersja pochodzi z lutego 2022. Przy instalacji możemy zaznaczyć język polski, choć musimy się nastawić przeskakiwanie z polskiego na angielski, bo program tutaj ma pewne braki.

Wstępne ustawienia: Tygodniowe notowania cen (na zamknięcia) ropy pochodzą z https://stooq.pl/q/d/?s=cl.f . Dane od 07.01.2018 do 6.03.2022. W gretlu otwieramy plik z danymi, np. .csv. Problem zazwyczaj dotyczy ustawienia dat, które trzeba ręcznie ustawić, bo program często nie potrafi czytać prawidłowo dat. Jeśli pyta o typ danych, wybieramy szeregi czasowe. Kiedy dane są gotowe, zaznaczamy zmienną - cenę ropy. Wybieramy Dodawanie zmiennych -> procentowe zmiany dla wybranych zmiennych -> wpisujemy nazwę dla stopy zwrotu, np. 'ropa_zwrot'. 

Model GARCH: Wybieramy Model -> Modele jednowymiarowych szeregów czasowych -> GARCH variants. Upewniamy się, że zmienna zależna to ropa_zwrot. Resztę ustawień na razie zostawiamy. Dajemy OK. Dostałem model


Wszystkie współczynniki istotne stat., czyli jesteśmy na dobrej drodze. Jednak to początek. W otrzymanym oknie klikamy na ikonę wykresu, wybieramy Density:


Jedna uwaga: dlaczego podpisano residuals (reszty), a nie returns (stopy zwrotu)? Zauważmy, że rozkład teoretyczny i empiryczny mają średnią zero. Różnica między resztami / błędami a stopami zwrotu jest taka, że te pierwsze mają średnią zawsze równą zero, a te drugie niekoniecznie. Ich wariancje są już sobie równe (dowód - ostatni wzór tutaj). Zazwyczaj tam gdzie są modele klasy ARCH, określenie residuals / errors, czytamy to jako zmienna (tu stopa zwrotu) pomniejszona o swoją średnią. Trzeba jednak dodać, że w tym modelu pojawiają się też standaryzowane reszty - wtedy dodatkowo taka reszta dzielona jest przez odchylenie standardowe, aby sprowadzić do porównywalności ze standardowym rozkładem normalnym. To jest właśnie ten przypadek (opis brzmi std residuals vs std normal). 

Rozkład empiryczny jest leptokurtyczny, czyli stopy zwrotu nie mają rozkładu normalnego. Dla pewności można zrobić test normalności. Zmienna -> Testy normalności:

................................................................

Test na normalność rozkładu ropa_zwrot:

 Test Doornika-Hansena = 121,681, z wartością p 3,77906e-027

 Test Shapiro-Wilka = 0,901681, z wartością p 9,5057e-011

 Test Lillieforsa = 0,0966947, z wartością p ~= 0

 Test Jarque'a-Bera = 277,187, z wartością p 6,45201e-061

................................................................

Wszędzie p < 0,01 , co daje pewność, że to nie jest rozkład Gaussa.

Trzeba zmienić w opcjach GARCH variants -> Rozkład -> zmieniamy na t (czyli t-Studenta).  

 


Parametry są istotne stat - efekt ARCH i GARCH ewidentnie występuje.

Sprawdzamy znów Density:


Wygląda to dużo lepiej - rozkład t pozwala imitować efekty leptokurtozy.

Ok, mamy model, to możemy teraz zobaczyć graficznie, jak zmienia się warunkowe odchylenie standardowe w porównaniu z resztami. Klikamy ikonę wykresu -> Time series:


To co tu dostaliśmy, to nie są wartości otoczone przedziałem ufności - ten zresztą ma zakres ok. 2 odchyleń standardowych. A tutaj mamy jedno odchylenie - warunkowe. Interesujące jest, że niemal zawsze dane mieszczą się w tym zakresie. Z 2-3 razy było duże wychylenie poza ten obszar (rok 2020), ale tak wielkiego jak teraz jeszcze nie było.

Powiedzmy, że chcemy porównać dodatkowo warunkowe odchylenie z niewarunkowym - na jednym wykresie. Tego już tak łatwo nie dostaniemy. Wg opisu wykresu mamy tu reszty - już niestandaryzowane - otoczone niestandaryzowanymi odchyleniami warunkowymi. Klikamy na oknie modelu "Zapisz bundle jako" -> wybieramy uhat (series), zapisujemy zmienną, a następnie to samo dla h (series). W głównym oknie gretl dostaliśmy dwie nowe zmienne w postaci niestandaryzowanych reszt (uhat) oraz warunkowej wariancji (h). Teraz klikamy Dodawanie zmiennych -> Definiowanie nowej zmiennej. Wpisujemy csd_plus = h^0.5. Następnie Dodawanie zmiennych -> Definiowanie nowej zmiennej -> wpisujemy csd_minus = -h^0.5. Otrzymaliśmy warunkowe odchylenia std na plus i minus. I w końcu Dodawanie zmiennych -> Definiowanie nowej zmiennej -> wpisujemy: 

series usd_plus = sd(uhat). 

Analogicznie Dodawanie zmiennych -> Definiowanie nowej zmiennej:

series usd_minus = -sd(uhat). 

Uzyskaliśmy niewarunkowe odchylenia std (na plus i minus).

Wybieramy Widok -> Wykres szeregów czasowych. Zaznaczamy 5 zmiennych: uhat, csd_plus, csd_minus, usd_plus i usd_minus. Dostaniemy wykres:


Co warto zauważyć, niewarunkowe odchylenie std jest stosunkowo wysoko umiejscowione - jest to efekt roku 2020, który zaburzył ogólne statystyki. Jest to dobry przykład dowodzący, że błędnym podejściem jest klasyczne opieranie się na zwykłym odchyleniu standardowym. 

Niemniej w ostatnim tygodniu tempo cen przekroczyło znacznie powyżej 3 odchyleń std.  Zdarzenie tego rodzaju w ciągu 2 lat jest mało prawdopodobne. To znaczy, że musi teraz nastąpić powrót do średniej.

W sumie powstają 2 wnioski:
(1) nie powinniśmy się sugerować statycznym odchyleniem std, tylko warunkowym, dynamicznym;
(2) nie tylko ceny, ale też wariancje warunkowe są nieprzewidywalne. Można pobawić się w prognozy, ale lepiej posłużyć się GARCH do oceny powrotu ceny do średniej. Czyli otrzymujemy ulepszoną wersję wstęgi Bollingera. 

poniedziałek, 28 lutego 2022

Napad Rosji na Ukrainę nie powinien być szokiem dla inwestorów

Krótki komentarz do wpisu z 26 lutego bloggera Podtwórca:

Życie jest przewrotne. Do samego końca żyłem iluzją, że Rosja nie zacznie pełnoskalowej inwazji na Ukrainę. Że jakoś to będzie: uznają "niepodległość" Donbasu, obstawią armią i będą jak w Gruzji używać "republiki" do destabilizowania sąsiada. Jeszcze w środę wieczorem napisałem, że na giełdzie wchodzimy w fazę kapitulacji, więc teoretycznie powinienem spodziewać się czegoś grubszego. A jednak rano na wieść o agresji zamurowało mnie, jak większość świata


Rzeczywiście większość świata była zszokowana, jedna z polskich chyba dziennikarek stwierdziła, że nie wierzy w to, że ktoś przewidywał, że dojdzie do takiej agresji. Jest to zdumiewająca pewność siebie - dokładnie ta sama, która nie pozwalała na myśl, że Rosjanie zaatakują. Przecież dzień w dzień byliśmy bombardowani wręcz komunikatami z USA, że za chwilę może dojść do tej inwazji. Mało tego, jeszcze w grudniu 2021 prezydent Ukrainy ostrzegał, że Rosja zaatakuje w styczniu lub lutym jego kraj. Dwa dni przed atakiem USA wprost zapowiedziały, że w ciągu następnych kilku dni Rosja przejmie - wg swoich planów - Kijów  i wprowadzi siłą swoje rządy. Wszystko było przewidywane prze wiele tygodni! Po czymś takim RACJONALNY człowiek powinien chociaż przygotować się mentalnie, nastawić się, że może naprawdę dojść w końcu do zbrojnej napaści. Nie oznaczało to bycia pewnym - bo nikt oprócz Rosjan nie był. Ale twierdzenie, że nikt nie przewidywał, a nawet doznanie szoku jest po prostu zwykłym lekceważeniem rzeczywistości i ignorancją na niepokojące informacje.

Może właśnie dlatego, że nie byłem zszokowany, napisałem w dniu rozpoczęcia inwazji 2 wpisy czysto giełdowe: Ropa blisko szczytu? oraz ... a WIG blisko dołka? (niektórym mogły one nawet wydać się nie na miejscu w takim dniu, no trudno). 

Dlatego lepiej nie przyznawać się, że jest / było się zszokowanym czy nawet zaskoczonym. NIE MA TU ŻADNEGO ZASKOCZENIA. Wystarczy przeanalizować na sucho informacje pojawiające się przed wojną. 

Jedynie co dobre, to to, że dostaliśmy w sumie kolejny dowód, że ludzie nie są racjonalni, nie potrafią prawidłowo oceniać sytuacji - i ci bardziej racjonalni mogą to wykorzystywać, oczywiście także na rynkach. Powtarzam jednak, że nie chodzi o to by być nadmiernie pewnym siebie, bo nikt nie miał 100% pewności, że to się stanie. Chodzi tylko o branie tego pod uwagę, tak by uniknąć właśnie szoku, w którym obecnie pogrążony jest cały świat. I oczywiście nie można mylić szoku ze zmartwieniem, poczuciem grozy, niepokoju czy strachu, bo to zupełnie coś innego (to uczucie jest akurat racjonalne na pewnym poziomie, również je odczuwam).

Nie wiem czy tylko mnie, ale owa napaść, która nastąpiła pod koniec pandemii przypomina 1 wojnę św., która jednak miała miejsce przed grypą hiszpanką. To skojarzenie rzecz jasna budzi niepokój, bo zapowiada 3 wojnę św., ale z drugiej strony nie można przesadzać z analogiami. To co napawa optymizmem w tej kwestii to fakt, że świat - szczególnie Europa - się obudził. Właściwie polityka międzynarodowa zmienia się na naszych oczach o 180 stopni, jeśli chodzi o nastawienie do Rosji. Oprócz nakładanych na ten kraj sankcji przygotowania wojskowe na wypadek 3 wojny samo w sobie będą ochroną przed nią. 

Ogromny błąd Rosji polega na tym, że zaatakowała znienacka i bardzo agresywnie, w tym ludność cywilną. W 2014 r. działała o wiele bardziej sprytnie i niemal kawałkami salami anektowała kolejne terytoria. Metodą gotowanej żaby usypiała czujność Europy i przyzwyczajała do swoich zbrodni. Ten więc "szokujący" atak doprowadzi Rosję do katastrofy ekonomicznej. Nie wiadomo czy kraje sąsiedzkie, np. skonfliktowana z nią Czeczenia, nie będzie chciała tego wykorzystać i przejąć część ros. terytoriów. Nie wiadomo czy Kazachstan nie dokona jakichś rozliczeń z sąsiadem. Jeśli miałoby dojść do 3 wojny św., to myślę, że nie takiej jaką sobie wyobrażamy. Byłoby to zbyt oczywiste. 

Wątpię też, by Putin chciał ryzykować wojną nuklearną. Jest prawdopodobne, że będzie straszył nią, ale już teraz wie, że jakikolwiek realny taki ruch doprowadzi do całkowitej anihilacji jego kraju.