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ć:
Jeśli zwrot względny jest mały, to jest w przybliżeniu równy log-zwrotowi. Zapiszmy:
Teraz możemy rozwinąć logarytm w szereg Taylora:
jeżeli zatrzymamy się tylko na liniowym członie to otrzymamy:
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:
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:
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:
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.:
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:
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:
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ść.