4. Specyfika danych rynkowych

Oprogramowanie Sage a w szczególności zawarte w nim biblioteki numpy oraz scipy oraz wbudowane możliwości wizualizacji i interakcji dają możliwość stworzenia „od podstaw” prototypu własnej aplikacji to szerokiego spektrum analiz danych i statystyk.

4.1. Zwroty względne, bezwzględne i log-zwroty

Rozważmy ewolucję ceny pewnego aktywa w czasie. Wartości notowań aktywa są pewnym procesem losowym. W analizie jego zmienności ważnym pojęciem jest „zwrot”, który jest matematycznie rzecz biorąc przyrostem procesu na pewnym okresie czasu. Załóżmy, że mamy pewien dyskretny ciąg chwil czasu \(t_i\) w których aktywo ma cenę \(S_i\). W finansach spotykamy trzy ważne pojęcia:

  • zwrot absolutny w chwili \(t_i\): \(S_i-S_{i-1}\)

  • zwrot względny w chwili \(t_i\): \(\displaystyle\frac{S_i-S_{i-1}}{S_{i-1}}\)

  • log-zwrot w chwili \(t_i\): \(\log S_i -\log S_{i-1}\)

Analiza szeregów czasowych notowań historycznych najczęściej operuje właśnie tymi wielkościami. Posiadają one kilka istotnych własności. Po pierwsze, korzystając z własności logarytmu naturalnego możemy napisać:

\[\log S_i -\log S_{i-1} = \log \frac{S_i}{S_{i-1}}.\]

Jeśli zwrot względny jest mały, to jest w przybliżeniu równy log-zwrotowi. Zapiszmy:

\[\begin{split}\log \frac{S_i}{S_{i-1}} = \log \frac{S_{i-1}+S_i-S_{i-1}}{S_{i-1}} \\ = \log \left(1+\frac{S_i-S_{i-1}}{S_{i-1}}\right).\end{split}\]

Teraz możemy rozwinąć logarytm w szereg Taylora:

(1)\[\log (1+x) = x-\frac{x^2}{x} + \mathop{O}(x^3),\]

jeżeli zatrzymamy się tylko na liniowym członie to otrzymamy:

\[\log \frac{S_i}{S_{i-1}} \simeq \frac{S_i-S_{i-1}}{S_{i-1}}\]

Klasycznym modelem matematycznym, który stosuje się do opisu zachowania się zmian ceny jest geometryczny ruch Browna. W takim przypadku zakłada się, że zwrot względny spełnia:

\[\frac{S_i-S_{i-1}}{S_{i-1}} = \mu + \sigma N_i(0,1),\]

gdzie \(\mu\) to deterministyczne tempo wzrostu logarytmu ceny związane ze stopą procentową a \(\sigma^2\) to wariancja zmian logarytmu ceny. \(N_i(0,1)\) oznacza niezależne gaussowskie zmienne losowe o średniej zero i wariancji jeden. Przejście do granicy \((t_i-t_{i-1})\to 0\) wymaga zastosowania stochastycznych równań różniczkowych i taki proces ciągły jest dany wzorem:

(2)\[dS = \mu S dt + \sigma S dW,\]

gdzie \(dW\) to różniczka procesu Wienera. Można pokazać, że zakładając ewolucje według równania stochastycznego (2) otrzymujemy proces w którym warunkowy rozkład ceny w czasie \(t\) przy założeniu ceny \(S_0\) w chwili \(t=0\), jest log-normalny:

(3)\[P_S(S,t|S_0,0)= \frac{1}{\sqrt{2\pi\sigma^2 t } S } e^{-\displaystyle\frac{(\log(\frac{S}{S_0})-(\mu-\frac{\sigma^2}{2}) t)^2}{2\sigma^2t}}.\]

Informacja

Sprawdź jaka jest kanoniczna postać rozkładu log-normalnego np. w Wikipedii. Zauważ, że w naszej notacji zarówno średnia jak i wariancja rosną liniowo z czasem. Jak to zinterpretować?

Rozkład log-normalny jest zupełnie odmienny od rozkładu normalnego, jednak dla małych zmian ceny można by się spodziewać pewnych podobieństw. Rozważmy sytuację, w której mamy wartość początkową ceny pewnego aktywa równą \(S_0\) i rozważamy najbliższą przyszłość. Co to znaczy? W tej sytuacji będzie to taki horyzont czasowy na którym cena akcji niewiele się zmieni w stosunku do ceny początkowej tzn.:

\[\frac{S}{S_0} \simeq 1\]

W praktyce, taki krótki horyzont czasowy może typowo oznaczać zmianę kursów pomiędzy notowaniami dziennymi. Przekonamy się teraz, że rozkład ceny na któtkich czasach jest „prawie” gaussowski. Do równania (3) wstawmy w mianowniku \(S_0\) zamiast \(S\) a w eksponencie zastąpmy logarytm rozwinięciem \(\log \frac{S}{S_0}\simeq \frac{S-S_0}{S_0}\). Otrzymamy wówczas rozkład normany w postaci:

(4)\[P_S(S,t|S_0,0)= \frac{1}{\sqrt{2\pi\sigma^2 t } S_0 } e^{-\displaystyle\frac{\frac{S-S_0}{S_0}-(\mu-\frac{\sigma^2}{2}) t)^2}{2\sigma^2t}}.\]

Poeskperymentuj z komputerem

Zbadaj czym różnią się dwa rozkłady - normalny (4) i log-normalny (3) dla małych i dużych czasów.

  • Zwiększ czas i zaobserwuj jak zmienia się rozkład. Czy w każdym z przypadków może pojawić się cena aktywa mniejsza od zera?

  • Zmień w kodzie inne parametry: wartość początkową, wariancję na jednostkę czasu i szybkość wzrostu ceny.

4.2. Przykład analizy danych rynkowych

Wczytamy dane i obliczymy zwroty względne i logarytmiczne.

Uwaga

Dane zazwyczaj są w pliku, jednak w tym przypadku w skrypcie nie mamy możliwości załączenia pliku. Dlatego będziemy analizować dane, które są dostępne jako odnośnik URL i które możemy otworzyć z pomocą biblioteki urllib.

Dane z notowań historycznych najczęściej występują w formacie zwanym csv - czyli wartości oddzielone przecinkiem. Można je wczytać do arkusza kalkulacyjnego, ale też bezpośrednio otworzyć za pomocą pakietu numpy.

Poeksperymentuj sam

Ile jest danych? Wypisz na ekranie pierwsze 100 wartości.

Policzmy teraz zwroty względne i logarytmiczne i narysujmy wykres log-zwrotów i zwrotów względnych. Aby odróżnić te dwa zestawy danych będziemy rysować kropkami i:

Jak widać praktycznie wielkości te się pokrywają. Możemy też łatwo sporządzić histogram wartości tychże zwrotów co jeszcze bardziej uwydatnia tą własność:

Poeksperymentuj z komputerem

Zbadaj jak wyglądałby histogram dla różnych wartości parametry nbins. Czy bardzo duże i bardzo małe wartości mają sens? Jaki jest użyteczny zakres tego parametru?

4.2.1. Stacjonarność danych

Zauważmy że w modelu geometrycznego ruchu Browna, parametry \(r,\sigma^2\) nie zależą jawnie od czasu. Może się to wydawać mylące bo wariancja i średnia rozkładu warunkowego na cenę aktywa (3) jest funkcją czasu. Jednak to wynika z faktu, że cena aktywa jest opisana zmienną losową spełniającą równanie stochastyczne (2). Jej rozkład warunkowy jest jednak zależny od czasu. Sytuacja jest taka sama jak dla np. położenia punktu materialnego w ruchu jednostajnym prostoliniowym. W takim ruchu położenie zależy od czasu pomimo, że wszystkie współczynniki w równaniu Newtona są stałe. W naszym przypadku mamy interpretację dla parametrów \(r,\sigma^2\) - są mianowicie to średnia i wariancja na jednostkę czasu. Zauważmy też, że jest to prawdą tylko w granicy małych czasów.

Sprawdźmy jak dobrze jest spełniony warunek stacjonarności \(r,\sigma^2\)!

Widzimy, że jest kiepsko spełniona! Widać to już całkiem nieźle z wykresu log-zwrotów, który to ma okresy większej i mniejszej zmienności.

Poeksperymentuj z komputerem

Narysuj wykres wariancji danych estymowanej po okresie \(k\) notowań.

  • Co się stanie gdy zwiększymy ten okres?

  • Porównaj ten wykres z zależnością dziennych zwrotów od czasu.

4.2.2. Autokorelacja

Log-zwroty są ze sobą nieskorelowane. Gdyby było inaczej to predykcja ceny była by zbyt prosta i teoretycznie prowadziła by do możliwości arbitrażu. Sprawdźmy, że tak jest rzeczywiście:

4.2.3. Grube ogony, kurtoza i skośność

Analizując histogram log-zwrotów możemy odnieść wrażenie, że jest on nieco bardziej wypikowany w okolicy zera i ma trochę „grubszy ogon” tzn. większe wartości daleko od zera. Zobaczmy sami:

Poeksperymentuj z komputerem

Uruchom poniższy kod. Oblicza on histogram log-zwrotów oraz porównuje go z rozkładem Gaussa o tych samych parametrach: średniej i wariancji.

Popularnymi wielkościami, które charakteryzują jak dany rozkład odbiega od rozkładu normalnego są kurtoza i skośność. Jak wiemy w rozkładzie normalnym wszystkie momenty rzędu wyższego niż dwa można wyrazić jako funkcje momentów pierwszego i drugiego. Dlatego można zbudować wyrażenia:

\[\begin{split}\hat K = \frac{\mu_4}{\sigma^4} - 3 \\ \hat S = \frac{\mu_3}{\sigma^3},\end{split}\]

gdzie \(\mu_i = \mathop{E}\big[(X-\mu)^i\big]\).

Poeksperymentuj z komputerem

Estymatory kurtozy i skośności są zaimplementowane w pakiecie scipy i można je zaimportować przez: from scipy.stats import kurtosis,skew.

  • Do poprzedniego kodu dodaj obliczanie kurtozy i skośności danego rozkładu

  • Zmień okno z [400:1200] na inne, mniejsze większe i w innym miejscu.

  • Jakie wartości kurtozy i skośności można zaobserwować?

4.3. Problem - analiza innych danych

Zdobądź ze źródeł internetowych pliki z innymi indeksami giełdowymi. Napisz własny analizator, który będzie potrafił na podstawie pliku z danymi:

  • narysować zależność czasową

  • wybrać okno do analizy i je zaznaczyć na wykresie

  • obliczyć log-zwroty

  • narysować histogram wybranego okna

  • obliczyć współczynniki takie jak kurtoza, wariancja, średnia, skośność.