Matematyka finansowa w pakiecie MATLAB

Wielkość: px
Rozpocząć pokaz od strony:

Download "Matematyka finansowa w pakiecie MATLAB"

Transkrypt

1 Bartosz Ziemkiewicz Joanna Karłowska-Pik Matematyka finansowa w pakiecie MATLAB Materiały dydaktyczne dla studentów matematyki (specjalność: matematyka w ekonomii i finansach) Wydział Matematyki i Informatyki Uniwersytet Mikołaja Kopernika Toruń 2010 Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego

2

3 Spis treści Wstęp 5 1. Wprowadzenie do Matlaba Co to jest Matlab? Interfejs Matlaba Okno poleceń Okno historii poleceń Okno przestrzeni roboczej Okno aktualnego katalogu Proste obliczenia w Matlabie Macierze w Matlabie Tworzenie macierzy Operacje na macierzach Tworzenie wykresów Wykresy dwuwymiarowe Wykresy trójwymiarowe funkcje mesh i surf Programowanie w Matlabie skrypty i funkcje Publikowanie raportów Ćwiczenia Zadania Wizualizacja danych giełdowych Giełda i akcje wprowadzenie Data i czas w Matlabie Rachunek czasu w matematyce finansowej Wczytywanie danych z plików zewnętrznych Wizualizacja danych Szeregi czasowe Ćwiczenia Zadania Podstawowe obliczenia finansowe w Matlabie Najważniejsze modele kapitalizacji Strumień pieniądza w czasie Mierniki oceny inwestycji finansowych Spłata kredytu

4 4 Spis treści 3.5. Ćwiczenia Zadania Obligacje Wprowadzenie Cena sprawiedliwa i arbitraż Wycena obligacji Matlab a obligacje Ćwiczenia Instrumenty pochodne Podstawowe pojęcia Kontrakty forward Kontrakty futures Opcje Wycena opcji model jednookresowy, dwustanowy Wycena opcji w dwumianowym modelu Coxa-Rossa-Rubinsteina Drzewa dwumianowe w Matlabie Rynek z czasem ciągłym. Model Blacka-Scholesa Aproksymacja modelu ciągłego modelami dwumianowymi Wykorzystanie metod Monte Carlo do wyceny opcji Ćwiczenia Zadania Bibliografia 133 Indeks 134

5 Wstęp Skrypt Matematyka finansowa w pakiecie Matlab powstał na potrzeby kursu letniego przeprowadzonego w dniach 5 9 lipca 2010 roku na Wydziale Matematyki i Informatyki UMK w Toruniu. Kurs ten składał się z 40 godzin zajęć, w tym 10 godzin wykładu, 20 godzin ćwiczeń i 10 godzin samodzielnej pracy studentów w laboratorium. Uczestnikami kursu byli studenci drugiego roku studiów zamawianych na kierunku matematyka, specjalność matematyka w ekonomii i finansach. Celem kursu było zapoznanie studentów z możliwościami pakietu Matlab, a w szczególności jego bibliotek Financial Toolbox i Financial Derivatives Toolbox w zakresie matematyki finansowej. W skład tych bibliotek wchodzi ponad 500 funkcji, których dokumentacja liczy około 2000 stron. Omówienie ich wszystkich podczas tak krótkiego kursu było oczywiście niemożliwe, musieliśmy więc dokonać wyboru. Staraliśmy się przede wszystkim, aby omawiany zakres materiału był jak najbardziej dopasowany do programu studiów na WMiI UMK oraz do stanu wiedzy uczestników kursu. Wiedząc na przykład, że studenci uczestniczyli w wykładzie Wstęp do matematyki finansów i ubezpieczeń, w rozdziale 3. mogliśmy sobie pozwolić na podanie tylko podstawowych definicji. Z kolei w rozdziale 5. zmuszeni byliśmy podać dość dużą dawkę teorii, gdyż wykład poświęcony problematyce wyceny instrumentów pochodnych znajduje się dopiero w programie trzeciego roku studiów. Ponieważ studenci przeszli dotychczas tylko podstawowy kurs rachunku prawdopodobieństwa, przy omawianiu wyceny opcji zrezygnowaliśmy z podejścia martyngałowego, a model Blacka-Scholesa opisaliśmy w sposób dosyć uproszczony. Integralną częścią skryptu są zestawy ćwiczeń i zadań umieszczone na końcu każdego rozdziału. Rolą ćwiczeń było zapoznanie studentów z pojęciami teoretycznymi oraz możliwościami pakietu Matlab w kontekście konkretnych problemów praktycznych. Zadania były rozwiązywane przez studentów samodzielnie i pozwalały na sprawdzenie poziomu opanowania nowych umiejętności. Wszystkie ćwiczenia i zadania powinny być rozwiązywane z użyciem pakietu Matlab. Skrypt składa się z pięciu rozdziałów. Rozdział 1. to wprowadzenie do programu Matlab. Opisaliśmy tu zagadnienia niezbędne do zrozumienia dalszej części skryptu. W szczególności znajdują się tu: opis interfejsu Matlaba, omówienie funkcji umożliwiających pracę z macierzami oraz różne metody tworzenia dwu- i trójwymiarowych wykresów. W dalszej części omówiliśmy podstawowe zasady pisania skryptów i funkcji, a także zagadnienia związane z generowaniem raportów. Rozdziału tego nie należy w żadnym wypadku traktować jako kompletnego kursu obsługi Matlaba. Czytelników, którzy chcieliby zapoznać się z pełnią możliwości tego programu zachęcamy do lektury książek [5] oraz [8]. W rozdziale 2. zajmujemy się problemem wizualizacji danych giełdowych takich jak ceny akcji, czy wartości indeksów giełdowych. Rozdział ten ma charakter bardzo praktyczny. Omawiamy metody tworzenia specjalnych wykresów finansowych, poruszamy też 5

6 6 Wstęp zagadnienia związane z szeregami czasowymi. Ponieważ dane giełdowe zazwyczaj występują w osobnych plikach tekstowych, w pierwszej części tego rozdziału omawiamy narzędzia przeznaczone do importu danych zewnętrznych do Matlaba. Opisujemy też bardzo istotne w matematyce finansowej zagadnienia związane z obsługą daty i czasu. Rozdział ten powstał głównie w oparciu o książkę [5] oraz dokumentację biblioteki Financial Toolbox [9]. Rozdział 3. poświęcony został problemom związanym z wartością pieniądza w czasie. Składa się on z kilku podrozdziałów opisujących kolejno: podstawowe modele akumulacji kapitału, przyszłą i obecną wartość strumienia pieniądza, najważniejsze mierniki oceny inwestycji finansowych oraz zagadnienia związane z ratalną spłatą kredytów. W każdym z tych podrozdziałów najpierw podajemy podstawowe wiadomości teoretyczne (w oparciu o książki [4] i [6]), a następnie omawiamy związane z nimi funkcje Matlaba. Rozdział 4. stanowi naturalną kontynuację poprzedniego. Jego tematem są obligacje, które możemy traktować jako pewne szczególne strumienie pieniądza. W rozdziale tym opisane zostały sposoby wyceny obligacji oraz obliczania jej stopy zwrotu. Omówiliśmy też ważniejsze funkcje biblioteki Financial Toolbox przeznaczone do obliczeń związanych z obligacjami. Przy pisaniu tego rozdziału korzystaliśmy z książek [1] i [9]. Ostatni, najdłuższy rozdział skryptu, poświęcony został jednemu z najważniejszych zagadnień matematyki finansowej wycenie instrumentów pochodnych. Na początku opisaliśmy krótko kontrakty forward i futures, w dalszej części skupiliśmy się na opcjach. Omówiliśmy trzy modele rynku: najprostszy model jednookresowy, dwumianowy model Coxa-Rossa-Rubinsteina (CRR) oraz ciągły model Blacka-Scholesa. Pokazaliśmy, jak wyceniać opcje w tych modelach, korzystając z funkcji biblioteki Financial Derivatives Toolbox. W szczególności pokazaliśmy, jak korzystać z narzędzi do tworzenia i przeglądania drzewek dwumianowych oraz uzasadniliśmy praktycznie, że model CRR jest dobrą aproksymacją modelu Blacka-Scholesa. Ostatnia część rozdziału poświęcona jest metodom Monte Carlo i ich zastosowaniom do wyceny opcji. Autorem teoretycznej części skryptu jest Bartosz Ziemkiewicz. Ćwiczenia oraz zadania zostały przygotowane przez Joannę Karłowską-Pik. Jest ona również odpowiedzialna za redakcję naukową, językową i techniczną całości skryptu. Mamy nadzieję, że lektura naszego skryptu przybliży Państwu podstawowe pojęcia matematyki finansowej oraz zachęci do korzystania z pakietu Matlab.

7 Rozdział 1. Wprowadzenie do Matlaba 1.1. Co to jest Matlab? Matlab jest programem komputerowym będącym interaktywnym środowiskiem do wykonywania obliczeń naukowych i inżynierskich oraz do tworzenia symulacji komputerowych. Powstał pod koniec lat siedemdziesiątych XX wieku na uniwersytecie stanu Nowy Meksyk. Jego twórcą był pracujący na tej uczelni Cleve Moler, który napisał ten program, aby ułatwić swoim studentom korzystanie z profesjonalnych bibliotek służących do numerycznych obliczeń macierzowych. Stąd pochodzi nazwa programu MATrix LABoratory. W 1983 roku Moler oraz inżynier John Little założyli firmę MathWorks, która zajęła się rozwojem programu Matlab. Nowe wersje Matlaba pojawiają się dwa razy do roku, aktualna wersja to R2010a. 1 Jest to oprogramowanie komercyjne, niestety dosyć drogie. Istnieją darmowe odpowiedniki Matlaba na przykład Octacve i Scilab. Są one (szczególnie Octave) zgodne z Matlabem, większość poleceń ma taką samą składnię. Nie są niestety rozbudowane tak bardzo jak oryginał, brakuje w nich wielu specjalistycznych funkcji. Dzisiejszy Matlab pozwala na znacznie więcej niż wykonywanie obliczeń na macierzach. Jest to profesjonalne środowisko do wykonywania obliczeń naukowych i inżynierskich. Zawiera bardzo bogatą bibliotekę funkcji matematycznych, od elementarnych funkcji trygonometrycznych po specjalistyczne funkcje Bessela i Legendre a. Matlab to także, a może nawet przede wszystkim, język programowania wysokiego poziomu pozwalający na szybkie tworzenie własnych funkcji i programów. Ważną cechą Matlaba są jego duże możliwości graficzne. W prosty sposób możemy tworzyć dwu- i trójwymiarowe wykresy i animacje. Mamy również możliwość tworzenia graficznych interfejsów użytkownika ułatwiających korzystanie z naszych programów. Programy napisane w Matlabie można łączyć z programami napisanymi w zwykłych językach programowania, takich jak C czy Fortran, co pozwala na budowanie aplikacji wykorzystujących najlepsze cechy różnych języków. Toolboxy to zestawy (bliblioteki) dodatkowych funkcji do rozwiązywania specjalistycznych problemów z określonych dziedzin. Są one odrębnymi (i niestety dodatkowo płatnymi) produktami, nabywca programu sam może zdecydować, które są mu potrzebne. Wydział Matematyki i Informatyki UMK posiada aktualnie kilkanaście takich bibliotek, służących między innymi do przetwarzania obrazów i sygnałów, rozwiązywania równań 1 Na Wydziale Matematyki i Informatyki UMK korzystamy obecnie z wersji R2009a. 7

8 8 Rozdział 1. Wprowadzenie do Matlaba Rysunek 1.1: Logo Matlaba różniczkowych cząstkowych, statystycznej analizy danych oraz do zagadnień związanych z sieciami neuronowymi. Głównym zadaniem tego skryptu jest przedstawienie możliwości Matlaba w zakresie matematyki finansowej i omówienie najważniejszych funkcji pakietów Financial Toolbox i Financial Derivatives Toolbox Interfejs Matlaba Po uruchomieniu Matlaba na ekranie pojawia się główne okno tego programu (rysunek 1.2). W oknie tym znajduje się główne menu programu, pasek narzędzi oraz pulpit (desktop). Na pulpicie umieszczone są okna zawierające narzędzia służące do zarządzania plikami, zmiennymi i aplikacjami związanymi z Matlabem. W standardowym (domyślnym) widoku, który możemy zmienić i dostosować do własnych potrzeb, na pulpicie znajdują się 4 okna Okno poleceń Centralną część pulpitu Matlaba zajmuje okno poleceń (ang. Command Window). Kiedy w oknie tym wyświetlany jest znak zachęty > >, oznacza to, że Matlab czeka na wprowadzenie polecenia. Polecenia wprowadzamy najczęściej pojedynczo z klawiatury i zatwierdzamy klawiszem Enter. Matlab wykona obliczenia i wyświetli wynik lub komunikat o błędzie. Jeżeli chcemy wprowadzić od razu kilka poleceń musimy oddzielić je od siebie średnikiem. Po naciśnięciu klawisza Enter zostaną wykonane wszystkie polecenia, a na ekranie pojawi się wynik ostatniego z nich. Wszystkie wprowadzane polecenia są zapamiętywane. Możemy je ponownie wybrać za pomocą klawiszy kursora (strzałka w górę i strzałka w dół). Okno poleceń możemy wyczyścić wybierając z menu Edit opcję Clear Command Window. W menu File znajduje się polecenie Preferences, umożliwiające

9 Rozdział 1. Wprowadzenie do Matlaba 9 Rysunek 1.2: Główne okno Matlaba ustawienie niektórych parametrów okna poleceń. Możemy tu na przykład zmienić wielkość i kolor używanego fontu Okno historii poleceń Jak już wspominaliśmy, Matlab zapamiętuje wszystkie wprowadzone przez nas polecenia. W oknie historii poleceń (ang. Command History) możemy przeglądać nie tylko polecenia z aktualnej sesji, ale również te, które wprowadziliśmy wiele tygodni wcześniej. Polecenia te są ułożone w kolejności w jakiej je wprowadzaliśmy. Poszczególne sesje są oddzielone od siebie wierszem komentarza, w którym znajduje się data i godzina rozpoczęcia sesji. Po dwukrotnym kliknięciu polecenia zostanie ono skopiowane do okna poleceń i uruchomione. Historię poleceń możemy wyczyścić, wybierając z menu Edit opcję Clear Command History Okno przestrzeni roboczej Wszystkie zmienne, jakie zdefiniujemy w czasie aktualnej sesji, przechowywane są w tzw. przestrzeni roboczej (ang. Workspace). W oknie tym możemy znaleźć podstawowe informacje o każdej zmiennej (nazwę, typ, aktualną wartość itp.). (Informacje te możemy również uzyskać w oknie poleceń za pomocą komend who i whos). Korzystając z tego okna, możemy również definiować nowe zmienne, kasować istniejące, bądź modyfikować ich wartości. (Najczęściej jednak do wykonywania tych czynności wykorzystujemy okno poleceń). Przestrzeń roboczą możemy wyczyścić za pomocą polecenia Clear Workspace z menu Edit.

10 10 Rozdział 1. Wprowadzenie do Matlaba Okno aktualnego katalogu Przy pracy z Matlabem bardzo ważne jest pojęcie aktualnego katalogu (ang. Current Directory). Jeżeli wprowadzimy w oknie poleceń nazwę funkcji, to właśnie w tym katalogu Matlab będzie najpierw próbował ją znaleźć. 2 Jeżeli podczas pracy z Matlabem zamierzamy definiować własne funkcje, powinniśmy zapisywać je w aktualnym katalogu Matlaba. 3 Aktualny katalog możemy oczywiście wybrać sami, na pasku narzędzi znajduje się pole tekstowe, w którym wprowadzamy odpowiednią ścieżkę dostępu. Zawartość aktualnego katalogu wyświetli nam się w oknie aktualnego katalogu. Oprócz tych standardowo widocznych okien Matlab wykorzystuje również inne, które pojawiają się podczas wykonywania konkretnych czynności. Do takich okien należą: okno pomocy (ang. Help) otwierane za pomocą klawisza F1, które pozwala przeglądać bardzo rozbudowane pliki pomocy, okna grafiki (ang. Figure), w których prezentowane są różnego rodzaju wykresy i inne wyniki poleceń Matlaba mające postać graficzną, okno edytora plików (ang. Editor) zawierające prosty edytor tekstów, w którym możemy tworzyć własne skrypty i funkcje, okno profilera pozwalające testować własne funkcje i poprawiać ich wydajność. Niektóre z tych okien omówimy dokładniej w dalszej części skryptu Proste obliczenia w Matlabie Matlab jest pakietem obliczeń numerycznych, co oznacza, że wszystkie obliczenia wykonywane są na liczbach, a nie na symbolach. W przeciwieństwie do pakietów algebry komputerowej, takich jak Maple, Matlab nie potrafi stwierdzić, że pochodną funkcji sinus jest cosinus ani że rozwiązaniem równania ax + b = 0 jest x = b/a. 4 Możemy natomiast wyznaczyć przybliżoną wartość pochodnej w danym punkcie oraz przybliżone rozwiązanie równania o danych współczynnikach. Podstawowy typ liczbowy używany w Matlabie to znany z wielu języków programowania typ double. Pozwala on wykonywać obliczenia na liczbach rzeczywistych z zakresu od do z dokładnością do 16 miejsc po przecinku. 5 Zanim zaczniemy pracę w Matlabie warto włączyć tzw. dziennik (ang. diary). Dzięki temu wszystkie wprowadzone przez nas polecenia Matlaba oraz większość wyników (bez wykresów) będą zapisywane w pliku tekstowym. Aby włączyć dziennik wprowadzamy w oknie poleceń komendę 2 Dotyczy to funkcji i skryptów definiowanych przez użytkownika, a nie wbudowanych funkcji takich jak sin czy exp. 3 Możemy zapisywać je również w innym katalogu, który znajduje się na tzw. ścieżce przeszukiwania (ang. search path). Ścieżkę tę możemy przeglądać i modyfikować za pomocą polecenia Set Path znajdującego się w menu File. 4 Tego typu obliczenia są możliwe po zainstalowaniu dodatkowego pakietu Symbolic Math Toolbox. 5 Nie jest to do końca precyzyjna informacja. Dokładny opis typu double wymagałby dłuższego wykładu.

11 Rozdział 1. Wprowadzenie do Matlaba 11 > > diary( nazwa_pliku ) Wówczas w aktualnym katalogu Matlaba zostanie utworzony plik tekstowy o tej nazwie. Jeżeli taki plik już istnieje, nowe polecenia będą do niego dodawane. W dowolnym momencie możemy też zapisać aktualny stan sesji (tzn. całą przestrzeń roboczą) do tzw. Mat-pliku. Są to pliki binarne, ich nazwa pochodzi od rozszerzenia.mat. Do zapisania stanu sesji służy polecenie save nazwa.mat. Zapisane dane wczytujemy do Matlaba poleceniem load nazwa.mat. Matlab może być traktowany jak bardzo rozbudowany kalkulator. Aby wykonać działanie, wprowadzamy je w naturalny sposób do okna poleceń i naciskamy klawisz Enter. Matlab potrafi wykonywać działania we właściwej kolejności, możemy używać nawiasów i wielu standardowych funkcji matematycznych. Przykład 1.1. > > > > * 5 17 > > (2 + 3) * 5 25 > > sin(pi/2) 1 > > exp(1) Listę dostępnych standardowych funkcji matematycznych możemy wyświetlić poleceniem > > help elfun Bardziej szczegółowe informacje o konkretnej funkcji uzyskamy za pomocą polecenia > > help nazwa_funkcji Na przykład polecenie > > help cos wyświetli informacje o funkcji cosinus. Bardzo często chcemy zapamiętać wyniki obliczeń, aby wykorzystać je później w innych obliczeniach. W tym celu wykorzystujemy zmienne. W Matlabie nie musimy deklarować zmiennej ani określać jej typu. Po prostu wybieramy nazwę zmiennej (musi to być ciąg znaków zaczynający się od litery) i przypisujemy jej wartość za pomocą operatora =. Przykład 1.2. > > a = a = 4

12 12 Rozdział 1. Wprowadzenie do Matlaba > > b = -5 b = -5 > > c = a + b c = -1 Jeżeli nie podstawimy wyniku obliczeń pod żadną zmienną, zostanie on zapamiętany w domyślnej zmiennej ans. Uwaga: zmienna ans przechowuje tylko wynik ostatniego obliczenia, każda nowa operacja powoduje zmianę jej wartości. Przykład 1.3. > > > > ans > > ans 6 Aby sprawdzić aktualną wartość zmiennej, wystarczy wpisać jej nazwę w oknie poleceń. Możemy również skorzystać z okna przestrzeni roboczej. Znajduje się tam lista aktualnie zdefiniowanych zmiennych. Po dwukrotnym kliknięciu na wybraną nazwę otwiera się okno edytora zmiennych, w którym można sprawdzić oraz zmienić wartość zmiennej. Jeżeli chcemy usunąć zmienną z przestrzeni roboczej, klikamy na nią prawym klawiszem myszy i z menu podręcznego wybieramy polecenie Delete. Możemy również usunąć wszystkie zdefiniowane do tej pory zmienne. W tym celu z menu Edit w głównym oknie Matlaba wybieramy polecenie Clear Workspace. Domyślnie wyniki obliczeń wyświetlają się na ekranie. Jeżeli chcemy tylko wykonać polecenie i nie wyświetlać jego wyniku, należy je zakończyć znakiem ; (średnik). Najczęściej wykorzystuje się to przy tworzeniu macierzy o dużych rozmiarach oraz w skryptach i funkcjach, aby zapobiec wyświetlaniu na ekran wszystkich pośrednich wyników obliczeń. Matlab pozwala w prosty sposób wykonywać obliczenia na liczbach zespolonych. Jednostkę urojoną oznaczamy literą i lub j. Dlatego nie zaleca się używania tych liter do oznaczania własnych zmiennych. Przykład 1.4. Niech > > u = 2 + 3i u = i > > v = i v = i Wówczas

13 Rozdział 1. Wprowadzenie do Matlaba 13 > > u + v i > > u * v i > > vˆ2-1 > > abs(u) W oknie poleceń możemy definiować proste funkcje. Służy do tego polecenie inline. Składnia tworzenia funkcji jest bardzo prosta f = inline( wzor funkcji ). Przykład 1.5. > > f = inline( x + 5 ) f = Inline function f(x) = x + 5 > > g = inline( 2 * x + y ) g = Inline function g(x,y) = 2*x + y > > f(3) 8 > > g(1,5) 7 Jeżeli Matlab nie rozpozna poprawnie nazw zmiennych, trzeba mu je podać w sposób jawny, np. h = inline( sin(c)+r2, c, r2 ). Bardziej skomplikowane funkcje lepiej zdefiniować w osobnym pliku tekstowym. To zagadnienie omówimy w rozdziale 1.6. Za pomocą polecenia format możemy zmienić sposób wyświetlania wyników. Domyślnie stosowany jest format short, wyniki wyświetlane są z dokładnością do 4 miejsc po przecinku. Przykład 1.6. > > sqrt(2) > > format long > > sqrt(2)

14 14 Rozdział 1. Wprowadzenie do Matlaba > > format short > > sqrt(2) Opis innych opcji polecenia format znajduje się w pomocy Matlaba. Uwaga: polecenie zmienia tylko sposób wyświetlania wyniku, nie wpływa natomiast w żaden sposób na dokładność obliczeń Macierze w Matlabie Podstawową strukturą danych używaną w Matlabie jest macierz (tablica dwuwymiarowa). Jej szczególnymi przypadkami są skalary, które możemy traktować jako macierze wymiaru 1 1 oraz wektory (macierze wymiaru 1 n lub n 1) Tworzenie macierzy Macierz możemy utworzyć różnymi metodami. Najprostszą z nich jest podanie jej wszystkich elementów. Musimy przy tym pamiętać o kilku prostych zasadach: elementy poszczególnych wierszy oddzielamy od siebie spacjami lub przecinkami, w każdym wierszu musimy umieścić taką samą liczbę elementów, wiersz kończymy średnikiem, całą listę elementów otaczamy nawiasami kwadratowymi. Po wprowadzeniu w oknie poleceń > > A = [1 7 8 ; ; ] Matlab wyświetli macierz A = Macierz ta jest widoczna w oknie przestrzeni roboczej. Klikając dwa razy jej nazwę, otwieramy edytor zmiennych, przypominający nieco arkusz kalkulacyjny. Za jego pomocą możemy przeglądać i zmieniać elementy macierzy. Druga metodą tworzenia macierzy jest wygenerowanie jej za pomocą wbudowanej funkcji Matlaba. Do dyspozycji mamy funkcje: zeros generuje macierz złożona z samych zer, ones generuje macierz złożoną z samych jedynek, eye generuje macierz identycznościową,

15 Rozdział 1. Wprowadzenie do Matlaba 15 rand generuje macierz, której elementy są losowane zgodnie z rozkładem jednostajnym na odcinku [0, 1], randn generuje macierz, której elementy są losowane zgodnie ze standardowym rozkładem normalnym. Każda z tych funkcji przyjmuje dwa argumenty wejściowe, są to wymiary macierzy. Przykład 1.7. > > B = zeros(3,2) B = > > C = eye(2,2) C = > > D = eye(2,3) D = > > E = rand(1,3) E = Jeżeli chcemy utworzyć macierz kwadratową, wystarczy podać jeden argument. > > F = ones(3) F = Macierz może być również wynikiem działania funkcji napisanej przez nas, tym zagadnieniem zajmiemy się w dalszej części tego rozdziału. Ostatnią metodą tworzenia macierzy jest załadowanie jej z pliku tekstowego za pomocą polecenia load bądź kreatora importu. To zagadnienie szerzej omówimy w rozdziale Operacje na macierzach Matlab pozwala wykonywać na macierzach operacje znane nam z algebry liniowej. Macierze możemy dodawać, odejmować, mnożyć przez skalar i przez siebie. Używamy do tego naturalnych operatorów +,,. Przykład 1.8. Zdefiniujmy macierze A, B i C następująco: > > A = [1 2 5 ; 0 8 1] A = > > B = [2 3 4 ; 7 2 5]

16 16 Rozdział 1. Wprowadzenie do Matlaba B = > > C = [1 2 ; 5 3 ; 4 1] C = Wykonajmy działania A + B, B - A, 2 * C, B * C. > > A + B > > B - A > > 2 * C > > B * C Oczywiście, aby wykonywać takie działania wymiary macierzy muszą spełniać pewne naturalne warunki, w przeciwnym wypadku zobaczymy komunikat o błędzie. Matlab udostępnia dwie funkcje pozwalające sprawdzać wymiary macierzy, są to size i length. Funkcja size jako argument przyjmuje dowolną macierz A, a zwraca dwuelementową tablicę postaci [liczba_wierszy(a) liczba_kolumn(a)]. Jeżeli wywołamy ją z dodatkowym parametrem 1, to uzyskamy tylko liczbę wierszy, a jeżeli z parametrem 2, to tylko liczbę kolumn. Funkcja length działa tylko dla wektorów (macierzy 1 n lub n 1). Zwraca liczbę elementów wektora. Przykład 1.9. Niech > > A = [1 2 5 ; 0 8 1] A = > > B = [ ] B = Wówczas > > size(a) 2 3 > > size(a,1)

17 Rozdział 1. Wprowadzenie do Matlaba 17 2 > > size(a,2) 3 > > length(b) 4 Kolejne często wykonywane operacje to transponowanie i odwracanie macierzy. Pierwszą z nich wykonujemy za pomocą operatora (apostrof), drugą za pomocą funkcji inv. Przykład Niech > > A = [1 2 5 ; 0 8 1] A = > > B = [3 6 ; 7 9] B = Wówczas > > A > > C = inv(b) C = > > B * C Ten ostatni wynik wygląda nieco dziwnie i wymaga komentarza. Zmieńmy jednak najpierw format wyświetlania na long. > > format long > > B * C Nie jest to na pewno macierz jednostkowa, którą spodziewaliśmy się otrzymać. Wynika to ze specyfiki algorytmów numerycznych używanych przez Matlaba. Zazwyczaj nie wyznaczają one dokładnego wyniku, ale generują ciąg jego przybliżeń, który powinien być do niego zbieżny. Algorytmy te zatrzymują się po osiągnięciu określonej dokładności. Z taką

18 18 Rozdział 1. Wprowadzenie do Matlaba sytuacją będziemy się w przyszłości często spotykać. Dlatego nie powinniśmy przejmować się tym, że zamiast oczekiwanej jedynki dostajemy , a zamiast zera np e-016. Możemy również obliczyć rząd macierzy funkcja rank, wyznacznik det, ślad trace, współczynniki wielomianu charakterystycznego poly oraz wartości i wektory własne eig. Inną przydatną funkcją jest sum. Jeżeli jej argumentem jest wektor, to zwraca ona liczbę będącą sumą jego elementów. Jeżeli argumentem jest macierz, to funkcja zwraca wektor, którego elementy są sumami kolejnych kolumn macierzy. Listę wszystkich dostępnych funkcji tego typu możemy uzyskać za pomocą poleceń > > help matfun > > help elmat Oprócz operacji mnożenia macierzy znanej nam z algebry liniowej, Matlab pozwala wykonać tzw. mnożenie element po elemencie. Dla dwóch macierzy o tych samych rozmiarach wynikiem takiego mnożenia jest macierz tego samego rozmiaru, której elementami są iloczyny odpowiednich elementów macierzy wejściowych. Aby wykonać takie działanie, używamy operatora.* (znaku mnożenia poprzedzonego kropką). Jest to ogólna zasada w Matlabie, kropka przed znakiem działania oznacza, że ma być ono wykonywane element po elemencie. Inne często używane operatory tego typu to./ (kropka, znak dzielenia) oraz.ˆ (kropka, znak potęgi). Przykład Niech > > A = [1 2 5 ; 0 8 1] A = > > B = [2 3 1 ; 2-3 4] B = Wówczas > > C = A.*B C = > > D = A.ˆ2 D = Większość wbudowanych funkcji Matlaba może mieć argument będący macierzą. Jeżeli na przykład wywołamy funkcję sqrt na macierzy A, to w wyniku otrzymamy macierz, której elementami będą pierwiastki elementów macierzy A. Przykład Niech > > A = [1 2 ; 4 9] A =

19 Rozdział 1. Wprowadzenie do Matlaba 19 > > sqrt(a) Kolejna grupa poleceń pozwala wykonywać operacje na poszczególnych elementach macierzy. Do elementu leżącego w k-tym wierszu i l-tej kolumnie macierzy A odwołujemy się poprzez A(k,l). Przykład Niech > > A = [1 2 5 ; 0 8 1] A = Wówczas > > A(1,3) 5 Możemy też zmieniać poszczególne elementy macierzy. > > A(2,1) = 10 A = Aby uzyskać dostęp do większej części macierzy, wykorzystujemy operator zakresu : (dwukropek). Jego ogólna postać to wartość_początkowa : krok : wartość_końcowa. Parametr krok możemy pominąć, Matlab przyjmie wówczas jego domyślną wartość 1. I tak np. 1 : 2 : 5 odnosi się do elementów 1., 3. i 5., 2 : 6 odnosi się do elementów 2., 3., 4., 5., 6., 10 : -1 : 7 odnosi się do elementów 10., 9., 8. i 7. Przykład Niech > > A = [ ; ; ] A = Jeżeli chcemy odwołać się do elementów macierzy A znajdujących się w pierwszych dwóch wierszach oraz w kolumnach od 2. do 4., piszemy po prostu > > A(1:2,2:4) Jeżeli interesują nas wszystkie elementy należące do 3. wiersza, piszemy > > A(3,:)

20 20 Rozdział 1. Wprowadzenie do Matlaba a jeżeli potrzebne nam są tylko parzyste kolumny macierzy > > A(:,2:2:4) Macierze możemy ze sobą łączyć. Wykorzystujemy w tym celu operator konkatenacji [] (parę nawiasów kwadratowych). Przykład Niech > > A = [1 2 5 ; 0 8 1] A = > > B = [7 ; 3] B = 7 3 Wówczas > > C = [A B] C = Dzięki operatorom konkatenacji i zakresu możemy w prosty sposób tworzyć złożone tablice. Przykład Utworzymy tablicę zawierającą w kolejnych kolumnach parzyste liczby naturalne (od 2 do 100), ich kwadraty oraz sześciany. Najpierw za pomocą operatora zakresu tworzymy pierwszą kolumnę zawierającą parzyste liczby naturalne. Apostrof oznacza, że elementy mają być umieszczone w kolumnie, a nie w wierszu. > > x = [2:2:100] Następnie za pomocą operatora konkatenacji oraz operatorów działań element po elemencie tworzymy żądaną tablicę. > > y = [x x.ˆ2 x.ˆ3] Czasem zachodzi konieczność usunięcia kilku wierszy lub kolumn macierzy. W tym celu za pomocą operatora zakresu odwołujemy się do odpowiedniego fragmentu macierzy i używamy operatora []. Przykład Niech > > A = [1 2 5 ; 0 8 1] A =

21 Rozdział 1. Wprowadzenie do Matlaba 21 Usuniemy drugą kolumnę macierzy. > > A(:,2) = [] > > A A = Tworzenie wykresów Wykresy dwuwymiarowe Do rysowania wykresów (dwuwymiarowych) służy funkcja plot. Jej najczęściej używana forma to plot(x,y), gdzie x i y są wektorami tej samej długości n. Na wykresie punkty (x(k),y(k)), gdzie k = 1,..., n, zostaną połączone linią łamaną. Przykład Po wywołaniu poleceń > > x = [ ] > > y = [ ] > > plot(x,y) otrzymamy wykres przedstawiony na rysunku 1.3. Funkcję plot możemy również wykorzystać do rysowania wykresów funkcji y = f(x). Aby wykres był gładki, musimy podawać współrzędne wektora x leżące blisko siebie. Przykład Załóżmy, że chcemy narysować wykres funkcji sinus na przedziale [0, 2π]. Określamy najpierw za pomocą operatora zakresu (dwukropka) wektor x (dziedzinę funkcji). > > x = 0 : pi/100 : 2*pi Następnie wyznaczamy wartości funkcji sinus dla elementów dziedziny funkcji (wektora x). > > y = sin(x) W końcu rysujemy wykres funkcji. > > plot(x,y) Do wykresu możemy dodać tytuł i etykiety osi. > > title( Wykres funkcji sinus ) > > xlabel( x=[0,2\pi] ) > > ylabel( sin(x) ) Rysunek 1.4 przedstawia otrzymany wykres. Odstępy między elementami dziedziny należy dobrać doświadczalnie. Jeżeli będą zbyt duże, to wykres będzie nieco kanciasty. Przykład Dla > > x = 0 : pi/3 : 2*pi > > y = sin(x) otrzymamy wykres taki, jak na rysunku 1.5. Na jednym rysunku możemy narysować wykresy kilku funkcji. Każdemu wykresowi musi odpowiadać para argumentów x i y funkcji plot. Matlab automatycznie wybierze dla wykresów różne kolory.

22 22 Rozdział 1. Wprowadzenie do Matlaba Rysunek 1.3: Wykres liniowy Rysunek 1.4: Wykres funkcji sinus

23 Rozdział 1. Wprowadzenie do Matlaba 23 Rysunek 1.5: Wykres funkcji sinus (ze źle dobranym krokiem) Przykład Narysujemy wykresy funkcji sinus i cosinus w przedziale [0, 2π]. > > x = 0 : pi/100 : 2*pi > > y = sin(x) > > z = cos(x) > > plot(x,y,x,z) W celu łatwiejszej identyfikacji wykresów możemy dodać legendę: > > legend( sin(x), cos(x) ) Otrzymamy wówczas wykres taki, jak na rysunku 1.6. Matlab pozwala również na umieszczanie nowych wykresów na już istniejących rysunkach. W tym celu wywołujemy polecenie > > hold on Od tej pory wszystkie kolejne wykresy będą umieszczane na jednym rysunku. Po wywołaniu polecenia > > hold off Matlab wróci do domyślnego zachowania, tzn. każdy kolejny wykres będzie powodował utratę poprzedniego. Domyślnie wszystkie wykresy są rysowane w oknie zatytułowanym Figure 1. Możemy tworzyć nowe okna za pomocą polecenia figure. Ostatnie utworzone okno staje się oknem domyślnym i to w nim Matlab będzie umieszczał wykresy. Aby przełączać się między istniejącymi oknami, wywołujemy polecenie figure(n), gdzie n jest numerem okna. Przykład Poniższe polecenia spowodują narysowanie wykresu funkcji x 2 w oknie

24 24 Rozdział 1. Wprowadzenie do Matlaba Rysunek 1.6: Wykresy funkcji sinus i cosinus Figure 1 i wykresu funkcji x 3 w oknie Figure 2. > > x = 0 : 0.1 : 2 > > y = x.ˆ2 > > plot(x,y) > > figure > > z = x.ˆ3 > > plot(x,z) Możemy zmieniać domyślny kolor linii. Do zmiany koloru służą parametry: c cyjan (jasnoniebieski), m magenta (purpurowy), y żółty, r czerwony, g zielony, b niebieski, w biały, k czarny. Jeżeli x, y, z są zdefiniowane tak, jak w przykładzie 1.21, to wywołanie > > plot(x,y, r,x,z, k ) da nam wykres taki, jak na rysunku 1.7, przy czym linia funkcji sinus będzie czerwona, a funkcji cosinus czarna. Możemy zmieniać również styl linii. Do zmiany stylu służą parametry: - linia ciągła, -- linia przerywana, : linia kropkowana, -. linia przerywanokropkowana, none brak linii. Jeżeli x,y,z są zdefiniowane tak, jak w poprzednim przykładzie, to wywołanie > > plot(x,y, :,x,z, ) da nam wykres taki, jak na rysunku 1.8. Wykres nie musi mieć formy liniowej. Możemy tylko zaznaczyć punkty określone przez

25 Rozdział 1. Wprowadzenie do Matlaba 25 Rysunek 1.7: Wykresy funkcji sinus i cosinus Rysunek 1.8: Wykresy funkcji sinus i cosinus

26 26 Rozdział 1. Wprowadzenie do Matlaba Rysunek 1.9: Punkty (x i, y i ) wektory x i y. Niech np. x=[ ], y=[ ]. Wówczas po wywołaniu funkcji > > plot(x,y, + ) otrzymamy wykres taki, jak na rysunku Zamiast + możemy użyć innych znaczników: o, *, x, s (kwadrat), d (romb), ˆ (trójkąt), v (trójkąt), > (trójkąt), < (trójkąt), p (gwiazdka pięcioramienna), h (słoneczko). Opisane powyżej parametry zmieniające kolory oraz style linii i znaczników możemy ze sobą łączyć. Jeżeli chcemy, aby wykres był narysowany czerwoną linią ciągłą, a znaczniki miały kwadratowy kształt, musimy wywołać komendę plot(x,y, r-s ) (r kolor czerwony, - linia ciągła, s kwadratowe znaczniki). Dla x i y z poprzedniego przykładu otrzymamy wykres taki, jak na rysunku Do tej pory zajmowaliśmy się tylko wykresami liniowymi. Spróbujmy teraz utworzyć wykres słupkowy. Służą do tego funkcje bar(x) (słupki pionowe) i barh(x) (słupki poziome), gdzie X jest wektorem lub macierzą. Jeżeli X jest wektorem, to dla każdego jego elementu rysowany jest jeden słupek o wysokości odpowiadającej wartości tego elementu. Polecenie bar([ ]) narysuje wykres taki, jak na rysunku Sprawdzenie, co się stanie, gdy X będzie macierzą oraz zapoznanie się z innymi możliwościami tych funkcji pozostawiamy czytelnikowi jako ćwiczenie. 6 Aby wykres wyglądał dokładnie tak, jak na rysunku, musimy jeszcze wywołać polecenie axis([ ]). Ustawi ono zakres osi X na przedział [0, 5], a osi Y na [0, 7]. Domyślnie Matlab dopasowuje zakresy osi do wyświetlanego wykresu. W naszym przypadku spowoduje to, że 3 z 4 punktów znajdą się na krawędziach wykresu i będą słabo widoczne.

27 Rozdział 1. Wprowadzenie do Matlaba 27 Rysunek 1.10: Punkty (x i, y i ) połączone łamaną Rysunek 1.11: Wykres słupkowy

28 28 Rozdział 1. Wprowadzenie do Matlaba Rysunek 1.12: Wykres kołowy Innym często wykorzystywanym typem wykresu jest wykres kołowy. Tworzymy go za pomocą funkcji pie(x), gdzie X jest wektorem z danymi. Polecenie pie([ ]) narysuje wykres taki, jak na rysunku Wybierając z menu Tools polecenie Edit Plot, a następnie klikając dwa razy w obszarze wykresu, włączamy edytor właściwości, za pomocą którego możemy w wygodny sposób dostosować wykres do naszych potrzeb zmienić używane kolory, fonty, grubość linii, jednostki na osiach itp. Inny sposób włączenia edytora to wybranie z menu Edit polecenia Figure properties lub Axes properties. Każdy wykres możemy zapisać w domyślnym formacie Matlaba.fig lub w jednym z popularnych formatów graficznych:.bmp,.jpg,.png,.pdf,.tif,.eps. W tym celu w oknie z wykresem wybieramy z menu File polecenie Save, a następnie w oknie dialogowym podajemy nazwę pliku i wybieramy jego format Wykresy trójwymiarowe funkcje mesh i surf Tworzenie wykresów funkcji dwóch zmiennych z = f(x, y) jest nieco bardziej skomplikowane. W przypadku funkcji jednej zmiennej dziedzinę funkcji określamy najczęściej za pomocą operatora :. Na przykład, jeżeli dziedziną jest przedział [0, 1], za pomocą polecenia x = 0 : 0.01 : 1 otrzymujemy wektor 101 liczb rozmieszczonych równomiernie na tym przedziale. W przypadku funkcji dwóch zmiennych potrzebujemy nie wektora liczb, a macierzy punktów rozmieszczonych równomiernie na kwadracie lub prostokącie. Macierz taką najłatwiej otrzymać za pomocą polecenia meshgrid.

29 Rozdział 1. Wprowadzenie do Matlaba 29 Załóżmy, że chcemy narysować wykres funkcji f(x, y) = sin( x 2 + y 2 ) x2 + y określonej na prostokącie [ 7, 7] [ 8, 8]. Wywołanie polecenia > > [X,Y] = meshgrid(-7:0.2:7, -8:0.2:8) spowoduje utworzenie dwóch macierzy X i Y. Punkty X(i, j), Y (i, j) są rozmieszczone równomiernie na prostokącie [ 7, 7] [ 8, 8]. Wartość 0.2 występującą w argumencie polecenia możemy oczywiście zmienić, jeżeli siatka punktów będzie zbyt rzadka, co wpływa negatywnie na jakość wykresu. Następnie obliczamy wartości funkcji f w wyznaczonych w poprzednim kroku punktach > > Z = sin(sqrt(x.ˆ2 + Y.ˆ2))./ (sqrt(x.ˆ2 + Y.ˆ2) + 1) i rysujemy wykres za pomocą polecenia > > mesh(x,y,z) lub > > surf(x,y,z) Pierwsze z nich utworzy wykres siatkowy, składający się z linii łączących wyznaczone punkty (patrz rysunek 1.13), drugie wykres powierzchniowy (patrz rysunek 1.14). Oba polecenia posiadają wiele dodatkowych opcji pozwalających na dostosowanie wyglądu wykresu do własnych potrzeb. Szczegółowe informacje na ten temat można znaleźć w dokumentacji Matlaba Programowanie w Matlabie skrypty i funkcje Dość często zdarza się, że musimy wielokrotnie wywoływać taki sam (bądź bardzo zbliżony) ciąg poleceń Matlaba. Każdorazowe wprowadzanie ich w oknie poleceń, nawet jeżeli wykorzystujemy do tego historię poleceń, nie jest zbyt wygodnym rozwiązaniem. Znacznie lepiej jest wykorzystać do tego skrypty. Skrypt to zwykły plik tekstowy zawierający ciąg poleceń Matlaba. Pliki te mają rozszerzenie.m dlatego nazywamy je zazwyczaj m-plikami. Po utworzeniu skryptu i zapisaniu go na dysku, wpisanie w oknie poleceń nazwy skryptu spowoduje wywołanie kolejno wszystkich poleceń umieszczonych w skrypcie. Polecenia te mają dostęp do wszystkich zmiennych zdefiniowanych w głównym oknie Matlaba, wyniki działania tych poleceń są również wyświetlane w głównym oknie (bądź w oknach typu Figure, jeżeli są to polecenia rysujące wykresy). Aby utworzyć skrypt wybieramy z menu File polecenie New. Rozwinie się wówczas podmenu, z którego wybieramy polecenie Blank M-File. Po uruchomieniu tego polecenia pojawi się okno Edytora plików z otwartym pustym dokumentem. Jest to dosyć proste narzędzie zawierające jedynie podstawowe funkcje do edycji tekstu. Przykład Utworzymy skrypt rysujący wykres funkcji sinus na przedziale [0, 2π]. W oknie edytora wpisujemy trzy polecenia x = 0 : pi/100 : 2*pi; y = sin(x); plot(x,y)

30 30 Rozdział 1. Wprowadzenie do Matlaba Rysunek 1.13: Wykres funkcji z = f(x, y) utworzony za pomocą polecenia mesh Rysunek 1.14: Wykres funkcji z = f(x, y) utworzony za pomocą polecenia surf

31 Rozdział 1. Wprowadzenie do Matlaba 31 Przypomnijmy, że zakończenie polecenia średnikiem powoduje, że wynik jego działania nie pojawi się na ekranie. Zazwyczaj nie trzeba wyświetlać wszystkich pośrednich wyników działania skryptu. Aby zapisać skrypt, wybieramy z menu File edytora polecenie Save. Musimy podać nazwę pliku (np. wykressinusa) i katalog, w którym chcemy go zapisać. Domyślnie Matlab proponuje zapis w katalogu, którego ścieżka znajduje się w głównym oknie Matlaba w polu Current Directory. Po zapisaniu skryptu przechodzimy do głównego okna programu i w oknie poleceń wpisujemy > > wykressinusa Spowoduje to utworzenie nowego wykresu funkcji sinus. Często nie chcemy wykonywać dokładnie tego samego ciągu czynności, lecz w kolejnych wywołaniach zmieniać pewne ich parametry. Na przykład chcemy rysować wykresy funkcji y = sin(ax) dla różnych wartości parametru a. Możemy oczywiście utworzyć kilka skryptów różniących się tylko wartością a lub ręcznie zmieniać te wartości przed każdym wywołaniem. Istnieje jednak znacznie wygodniejsze rozwiązanie napisanie własnej funkcji. Funkcje to również pliki tekstowe (z rozszerzeniem.m) zawierające ciągi poleceń Matlaba. Od skryptów różni je to, że mogą przyjmować argumenty wejściowe i zwracać argumenty wyjściowe. Operują na zmiennych lokalnych, nie mają bezpośredniego dostępu do zmiennych zdefiniowanych w oknie poleceń Matlaba. Aby utworzyć funkcję, wybieramy z menu File polecenie New. Rozwinie się wówczas podmenu, z którego wybieramy polecenie Function M-File. Po uruchomieniu tego polecenia pojawi się okno Edytora plików z nowym plikiem zawierającym szkielet nagłówka funkcji. function [ output_args ] = Untitled1( input_args ) %UNTITLED1 Summary of this function goes here % Detailed explanation goes here end Najważniejsza jest pierwsza linijka. Słowo function oznacza, że w pliku tym znajduje się funkcja, a nie zwykły skrypt. Untitled1 to tymczasowa nazwa funkcji, należy ją zastąpić własną nazwą. Za nazwą funkcji w nawiasie okrągłym należy podać argumenty wejściowe funkcji (oddzielamy je od siebie przecinkiem). Po lewej stronie znaku równości w nawiasie kwadratowym umieszczamy argumenty zwracane przez funkcję. Jeżeli funkcja zwraca tylko jeden argument, możemy opuścić nawiasy kwadratowe. Funkcja może również nie zwracać żadnych argumentów (np. rysować tylko wykres) wtedy nawias kwadratowy i znak równości możemy pominąć. Następne dwie linijki zaczynają się od znaku %. Jest to komentarz, możemy umieścić tu opis naszej funkcji. Dalej umieszczamy ciało funkcji, czyli kolejne polecenia, które będą wykonywane po jej wywołaniu. Funkcję kończy słowo end. Przykład Utworzymy funkcję rysującą wykres funkcji y = sin(ax) na przedziale [0, 2π]. W oknie edytora wpisujemy function sinus(a) x = 0 : pi/100 : 2*pi; y = sin(a*x); plot(x,y); end

32 32 Rozdział 1. Wprowadzenie do Matlaba Rysunek 1.15: Okno edytora plików ze szkieletem funkcji Zapisujemy funkcję poleceniem Save z menu File. Uwaga: nazwa pliku musi być taka sama jak nazwa funkcji, tzn funkcja sinus musi być zapisana w pliku o nazwie sinus.m. Przechodzimy do głównego okna Matlaba. Wywołanie polecenia sinus(3) spowoduje narysowanie wykresu funkcji y = sin(3x), polecenie sinus(0.125) narysowanie wykresu funkcji y = sin(0,125x) itd. Przykład Napiszemy funkcję zwracająca największą i najmniejszą liczbę z danego wektora. Skorzystamy z wbudowanych funkcji min i max. function [M,m] = maxmin(x) M = max(x); m = min(x); end Zapisujemy ją w pliku maxmin.m. W oknie poleceń Matlaba tworzymy dowolny wektor i wywołujemy na nim naszą funkcję. > > w = [ ] > > [a,b] = maxmin(w) Na ekranie powinien pojawić się wynik a = 9 b = 0 Do tej pory instrukcje wykonywane były w takiej kolejności, w jakiej pojawiały się w skrypcie czy funkcji. Często chcemy zmienić tę kolejność i spowodować, aby niektóre

33 Rozdział 1. Wprowadzenie do Matlaba 33 instrukcje wykonywały się wielokrotnie, a inne wykonywały się tylko dla pewnych wartości parametrów wejściowych. Możemy to osiągnąć za pomocą tzw. instrukcji sterujących. Najczęściej wykorzystywane są pętle i instrukcje warunkowe. Najprostsza postać instrukcji warunkowej to if wyrażenie_logiczne instrukcja_1 instrukcja_2 end. instrukcja_n Matlab oblicza wartość wyrażenia_logicznego. Jeżeli jest ona różna od 0, to wykonywane są wszystkie instrukcje znajdujące się pomiędzy słowami if i end. W przeciwnym wypadku, tzn. jeżeli wartość wyrażenia_logicznego wynosi 0 (wyrażenie fałszywe), instrukcje te są pomijane i wykonywana jest pierwsza instrukcja znajdująca się po słowie end. Przykład Pierwiastek zostanie obliczony tylko w przypadku, gdy a jest nieujemne. if a >= 0 w = sqrt(a); end W instrukcji warunkowej może pojawić się tzw. blok else. if wyrażenie_logiczne blok_instrukcji_1 else blok_instrukcji_2 end Matlab oblicza wartość wyrażenia_logicznego. Jeżeli jest ona różna od 0, wykonywane są wszystkie instrukcje znajdujące się w bloku 1. W przeciwnym wypadku (tzn. jeżeli wartość wyrażenia_logicznego wynosi 0) wykonywane są wszystkie instrukcje znajdujące się w bloku 2. Następnie (w obu przypadkach) wykonywana jest pierwsza instrukcja znajdująca się po słowie end. Przykład Jeżeli a jest różne od zera, pod w podstawiamy odwrotność a, w przeciwnym wypadku podstawiamy 0. if a = 0 w = 1/a; else w = 0; end W instrukcji warunkowej mogą pojawiać się również tzw. bloki elseif.

34 34 Rozdział 1. Wprowadzenie do Matlaba if wyrażenie_logiczne_1 blok_instrukcji_1 elseif wyrażenie_logiczne_2 blok_instrukcji_2. elseif wyrażenie_logiczne_n blok_instrukcji_n else blok_instrukcji end Matlab sprawdza po kolei wartości wyrażeń logicznych. Jeżeli znajdzie wyrażenie prawdziwe, to wykonuje odpowiedni blok instrukcji i przechodzi do wykonywania instrukcji znajdujących się po słowie end. Jeżeli wszystkie wyrażenia logiczne są fałszywe, to wykonywane są instrukcje z bloku else. Uwaga: jeżeli kilka wyrażeń logicznych jest prawdziwych, to wykonywane są tylko instrukcje z bloku znajdującego się po pierwszym prawdziwym wyrażeniu. Przykład if a == b M = a; elseif a > b M = b; else M = a + b; end Uwaga: tak jak w większości języków programowania operator == jest operatorem porównania, a = operatorem przypisania. Pętla for służy do wykonywania grupy instrukcji ustaloną liczbę razy. Jej ogólna postać to: for licznik = start:koniec instrukcja_1 instrukcja_2 end. instrukcja_n Przykład Obliczmy kwadraty liczb od 1 do 100 i umieśćmy je w tablicy A for k = 1:100 A(k) = kˆ2; end Uwaga: w Matlabie bardzo często zamiast pętli for wykorzystuje się metodę wektorową (i zazwyczaj jest to metoda szybsza). Poprzednie zadanie można wykonać tak: x = 1:100 A = x.^2

35 Rozdział 1. Wprowadzenie do Matlaba 35 albo nawet tak A = (1:100).^2 Pętla while również służy do wielokrotnego wykonywania tej samej grupy instrukcji. W odróżnieniu od pętli for nie musimy tu określać z góry liczby powtórzeń. Instrukcje są wykonywane dopóki prawdziwe jest pewne wyrażenie logiczne. Przykład while wyrażenie_logiczne instrukcja_1 instrukcja_2 end. instrukcja_n e = 1; while e > e = e/2; end 1.7. Publikowanie raportów Matlab wyposażony jest w publikator raportów pozwalający zamieniać skrypty Matlaba w atrakcyjnie wyglądające dokumenty formatów HTML, MS Word, MS PowerPoint czy L A TEX. Korzystanie z tego narzędzia jest wyjątkowo proste. Załóżmy, że napisaliśmy skrypt rysujący wykres funkcji sinus. x = 0:0.1:2*pi; y = sin(x); plot(x,y) Aby opublikować ten skrypt w postaci dokumentu HTML, wystarczy z menu File edytora plików wybrać polecenie Publish skrypt.m, gdzie skrypt.m to nazwa naszego skryptu. Po chwili w aktualnym katalogu utworzony zostanie podkatalog o nazwie html, a w nim plik skrypt.html oraz plik graficzny zawierający wykres funkcji sinus. Utworzona strona www automatycznie otworzy się w wewnętrznej przeglądarce Matlaba, możemy ją też otwierać i przeglądać w standardowych przeglądarkach takich jak Firefox czy Internet Explorer. Utworzona strona zawiera wszystkie polecenia Matlaba z naszego skryptu oraz ich wyniki. Aby uatrakcyjnić wygląd dokumentu i zwiększyć jego czytelność, możemy podzielić go na części zwane komórkami (ang. cells). Nową komórkę rozpoczynamy znakiem podwójnego procenta %%. Tekst w wierszu zaczynającym się tym znakiem pełni rolę tytułu komórki. Możemy również dodać zwykły komentarz tekstowy, wówczas wiersz zaczynamy znakiem %. Należy pamiętać o tym, żeby po znaku % lub %% wstawić przynajmniej jedną spację. Zmodyfikujmy więc nasz skrypt i opublikujmy go.

36 36 Rozdział 1. Wprowadzenie do Matlaba %% Rysowanie wykresu funkcji sinus %% Tworzymy wektor punktów % Wykorzystujemy do tego operator zakresu : x = 0 : 0.1 : 2 * pi %% Obliczamy wartości funkcji sinus w tych punktach y = sin(x) %% Rysujemy wykres funkcji plot(x,y) %% % Zmieniamy kolor wykresu na czerwony plot(x,y, r ) Teraz strona wygląda znacznie czytelniej. Ma tytuł i spis treści, a poszczególne polecenia są od siebie wyraźnie oddzielone. Jeżeli chcemy wygenerować raport w innym formacie niż HTML, wybieramy z menu File polecenie Publish Configuration for skrypt.m. Otworzy się podmenu, z którego wybieramy polecenie Edit Publish Configuration for skrypt.m. Pojawi się wówczas okno, w którym możemy zmieniać różne parametry raportu. W szczególności, klikając w pole Output file format, możemy zmienić format generowanego raportu Ćwiczenia Ćw Rozważmy macierze ( ) A = i B = ( ). a) Odczytaj A 22 i B 13. b) Wyznacz macierze A + B, A B, A + 2, 3A 2B. c) Jaka jest różnica pomiędzy operacjami A*B i A.*B? Którą z nich można zrealizować? Wyznacz wynik tej operacji. d) Wyznacz macierze Aˆ2 i A.ˆ2. e) Wyznacz macierze A B T i A T B. f) Wypisz cały pierwszy wiersz macierzy A. g) Wypisz całą drugą kolumnę macierzy B. h) Wypisz pierwszą i trzecią kolumnę macierzy A (nie usuwając drugiej). i) J.w., ale tak, by najpierw była kolumna trzecia, a potem pierwsza. j) Oblicz sumę elementów każdej kolumny macierzy A. k) Oblicz sumę elementów każdego wiersza macierzy A. l) Usuń drugą kolumnę macierzy A oraz trzecią kolumnę macierzy B. m) Oblicz wyznacznik macierzy A.

37 Rozdział 1. Wprowadzenie do Matlaba 37 n) Wyznacz macierz odwrotną do A. o) Sprawdź, czy A A 1 = Id oraz A 1 A = Id. Ćw Utwórz 10-elementowy wektor, którego wszystkie elementy będą równe 5. Uwaga: nie wolno wprowadzić liczby 5 więcej niż raz. Ćw Utwórz wektor składający się ze wszystkich liczb parzystych od 2 do 20, a następnie przekształć go tak, aby składał się z tych samych elementów, ale ustawionych w odwrotnej kolejności. Ćw Wygeneruj wektor 20-elementowy, którego elementy są liczbami losowymi z rozkładu jednostajnego na odcinku (0, 1). Posortuj elementy tego wektora najpierw rosnąco, a później malejąco. Wypisz elementy najmniejszy i największy. Ćw Wygeneruj wektor 20-elementowy, losując jego elementy zgodnie ze standardowym rozkładem normalnym. Oblicz sumę elementów dodatnich oraz sumę elementów ujemnych. Ćw Utwórz macierz, której wiersze mają postać [k, k sin k] dla k {0,..., 10}. Wykorzystując tę macierz, oblicz wartość wyrażenia 7 sin sin 5. Ćw Stwórz macierz, której wiersze mają postać dla k {1, 3, 5, 7, 9}. D[k] = [k, 2k, 3k] Ćw Narysuj wykres funkcji y = 3x 5 + 3x 2 + x 3 dla x [ 3, 3]. Dodaj tytuł oraz podaj zakres dziedziny. Ćw Narysuj wykresy funkcji y = x 2, y = x 3, y = x sin x w jednym układzie współrzędnych, wybierając jako dziedzinę przedział [ 1, 1]. Dla każdego wykresu wybierz inny kolor oraz styl linii. Do wykresu dołącz legendę. Ćw Narysuj wykres funkcji x z = cos x cos ye 2 +y 2 4 dla x, y [ 5, 5] dwukrotnie, w osobnych oknach, używając raz polecenia mesh, a raz surf. Ćw Wykorzystując dane z poniższej tabelki wykonaj wykres

38 38 Rozdział 1. Wprowadzenie do Matlaba a) słupkowy, b) kołowy prezentujący liczbę ludności (w mln) na poszczególnych kontynentach (dane z roku 2008). Europa 732 Azja 4054 Ameryka Pn. 337 Ameryka Łac. 577 Afryka 973 Oceania 34 Dane na podstawie Ćw Wykonaj wykres liniowy, prezentujący zmianę liczby ludności świata na przestrzeni ostatnich 55 lat. Dane (w mln) znajdują się w tabeli poniżej. rok ludność Dane na podstawie Ćw Napisz funkcję f, która dla argumentu x oblicza wartość f(x) według wzoru x 2 6 dla x > 3, f(x) = x dla 1 x 3, x 2 2 dla x < 1. Następnie napisz skrypt wykres_funkcji1, który będzie rysował wykres funkcji f na przedziale [ 3, 5]. Ćw (Na podst. [5, str ]) Napisz skrypt rysujący okrąg o środku (0, 0) i promieniu 1. Użyj współrzędnych biegunowych. Środek okręgu zaznacz znakiem x. Następnie zmodyfikuj ten skrypt, dodając w pierwszej linii zapytanie o promień okręgu r: r=input( Podaj promień okręgu: ) i odpowiednio modyfikując wyrażenia na obliczanie współrzędnych x i y. Ćw [5, Ćw. 2 str. 47] Napisz funkcję, która przelicza temperaturę pomiędzy skalą Celsjusza i Fahrenheita. Danymi wejściowymi funkcji powinny być dwie liczby definiujące zakres temperatur podanych w skali Celsjusza. Wynikiem działania funkcji powinna być tablica zawierająca wskazania temperatur w skali Celsjusza w podanym zakresie co 1 C oraz odpowiadające im wartości temperatury w skali Fahrenheita, obliczane zgodnie ze wzorem F = 9 5 C + 32.

39 Rozdział 1. Wprowadzenie do Matlaba 39 Ćw [5, Ćw. 3 str. 47] Używając pętli for lub while, napisz funkcję, która dla podanego n oblicza wartość n!. (Uwaga: zadanie można również rozwiązać, wykorzystując wbudowaną funkcję prod). Ćw [5, Ćw. 5 str. 47] Napisz funkcję, która dla podanych r i n oblicza sumę n początkowych wyrazów ciągu geometrycznego o pierwszym wyrazie równym 1 i ilorazie r. Ćw [5, Ćw. 6 str. 48] Zysk uzyskany po n latach z wkładu, którego oprocentowanie roczne wynosi r, zależy od sposobu kapitalizacji odsetek. Jeżeli są one dodawane do stanu konta k razy w roku, a zainwestowany kapitał to X 0, to po n latach powinno być na koncie X = X ( r kn. k) Napisz funkcję, która obliczy zysk X X 0 dla danych X 0, n, r oraz k. Użyj jej do zbadania różnicy pomiędzy zyskiem z wkładu o wysokości 1000 dolarów przy oprocentowaniu 6% rocznie, osiągniętym po 5 latach, gdy odsetki są kapitalizowane kwartalnie (k = 4) oraz, gdy są kapitalizowane codziennie (k = 365). Ćw [5, str ] Utwórz nowy skrypt, wpisując w niego treść zamieszczoną poniżej (uwzględniając puste wiersze). %% Publikowanie raportów - prosty przykład %% Wykres spirali % Narysujmy spiralę, przyjmując dane % r(t)=exp(-theta/10), 0<=theta<=10*pi %% Tworzenie wektorów theta oraz r theta=0:0.05:10*pi; % rozmieszczamy punkty na odcinku[0,10*pi] co 0,05 r=exp(-theta/10); % obliczamy r %% Rysowanie biegunowego wykresu r w zależności od theta polar(theta,r) Zapisz plik jako wykres_spirali.m. Opublikuj plik w formacie html, a następnie zwróć uwagę na rolę % i %%. Zamień czwarty wiersz skryptu na dwa następujące: % % $r(t)=\exp(-\theta/10), 0\leq\theta\leq10\pi$ Sprawdź efekt działania Zadania Zad Napisz funkcję o nazwie kwadratowa, która będzie wczytywała podane przez użytkownika rzeczywiste współczynniki a, b, c równania kwadratowego, a następnie będzie rozwiązywała to równanie i wyświetlała jego wynik. W przypadku braku rozwiązań rzeczywistych funkcja powinna wyświetlić komunikat

40 40 Rozdział 1. Wprowadzenie do Matlaba Wyróżnik równania jest ujemny. Brak pierwiastków rzeczywistych. i podawać rozwiązania zespolone. Zad Napisz funkcję o nazwie gestosc_normalnego, która będzie wczytywała 2-wymiarowy wektor wartości oczekiwanej a = [a 1, a 2 ], macierz ( ) b11 b B = 12 b 21 b 22 oraz punkt x = [x 1, x 2 ], a następnie a) sprawdzała, czy macierz B jest macierzą kowariancji (tj. jest symetryczna i dodatnio określona), b) w przypadku, gdy B jest macierzą kowariancji, obliczała wartość gęstości rozkładu normalnego w podanym punkcie, zaś gdy B nie jest macierzą kowariancji, wyświetlała napis Macierz nie jest macierzą symetryczną i dodatnio określoną. Gęstość 2-wymiarowego rozkładu normalnego ma postać ( 1 f(x) = 2π det B exp 1 B 1 (x a), (x a) ), 2 gdzie x = [x 1, x 2 ] T, a = [a 1, a 2 ] T. Zad Napisz funkcję o nazwie wykres_normalnego, która będzie wczytywała 2-wymiarowy wektor wartości oczekiwanej a = [a 1, a 2 ] oraz macierz ( ) b11 b B = 12, b 21 b 22 a następnie a) sprawdzała, czy macierz B jest macierzą kowariancji (tj. jest symetryczna i dodatnio określona), b) w przypadku, gdy B jest macierzą kowariancji, rysowała wykres gęstości 2-wymiarowego rozkładu normalnego N(a, B) na obszarze x [a 1 3 b 11, a ] b 11, y [a 2 3 b 22, a ] b 22, zaś gdy B nie jest macierzą kowariancji, wyświetlała napis Macierz nie jest macierzą symetryczną i dodatnio określoną. Uwaga: Przekształć wzór gęstości rozkładu normalnego tak, aby wyrażenie pod eksponentą zależało od wartości x 1 i x 2, a nie od całego wektora [x 1, x 2 ].

41 Rozdział 2. Wizualizacja danych giełdowych 2.1. Giełda i akcje wprowadzenie Papierami wartościowymi (ang. securities) nazywamy dokumenty potwierdzające istnienie określonego prawa majątkowego. Do najważniejszych papierów wartościowych zaliczane są obligacje i akcje. Obligacjami zajmiemy się w rozdziale 4., tutaj skupimy się na akcjach. Akcja (ang. stock, share) jest dokumentem stwierdzającym udział posiadacza akcji akcjonariusza (ang. stockholder, shareholder), w majątku spółki akcyjnej. Z tego tytułu ma on prawo do uczestniczenia w podziale zysku spółki oraz ewentualnie w kierowaniu spółką. Przypadającą na każdą akcję część zysku przeznaczoną do podziału nazywamy dywidendą (ang. dividend). Wypłata dywidendy ani jej wysokość nie są gwarantowane. Zależy to od kondycji finansowej spółki oraz polityki prowadzonej przez jej władze. Obrót akcjami odbywa się głównie na giełdach papierów wartościowych (ang. stock exchange). Najważniejsze giełdy światowe to: amerykańskie NYSE i NASDAQ, giełda tokijska oraz londyńska. W Polsce od 1991 roku funkcjonuje Giełda Papierów Wartościowych w Warszawie (GPW). Ceny akcji mają tendencje do wspólnych ruchów w górę (hossa) lub w dół (bessa). Wygodnym wskaźnikiem ogólnej sytuacji na rynku są indeksy giełdowe. Są to średnie arytmetyczne lub ważone wszystkich akcji będących w obrocie bądź ich reprezentatywnej części. Najbardziej znane światowe indeksy to: amerykańskie Dow Jones Industrial Average (DJIA), Nasdaq Composite oraz Standard and Poor s 500 (S&P 500), japoński Nikkei 225, brytyjski FTSE 100. W Polsce najważniejszymi indeksami są WIG i WIG20. Ceny akcji odzwierciedlają rynkowe oczekiwania inwestorów co do prawdopodobnych przyszłych dywidend i przyszłego wzrostu kapitału firmy. Wycena akcji to bardzo złożony problem, raczej ekonomiczny niż matematyczny. W naszym skrypcie nie będziemy się tą kwestią zajmować. W rozdziale 5. omówimy problem modelowania cen akcji za pomocą narzędzi matematycznych drzewek dwumianowych i procesów stochastycznych. W tym rozdziale skupimy się na wizualizacji historycznych danych giełdowych. 1 Pakiet Financial Toolbox zawiera wiele funkcji do tego przeznaczonych. Zanim jednak będziemy mogli z nich skorzystać musimy nauczyć się wczytywać do Matlaba dane umieszczone w zewnętrznych plikach tekstowych oraz zapoznać się z kwestią obsługi dat w Matlabie. 1 Nie będziemy natomiast prognozować przyszłych cen na podstawie danych historycznych, czyli zajmować się tzw. analizą techniczną. 41

42 42 Rozdział 2. Wizualizacja danych giełdowych 2.2. Data i czas w Matlabie Większość obliczeń finansowych wiąże się z wykonywaniem operacji na danych kalendarzowych raty kredytu musimy spłacać w określonych odstępach czasu, dywidendy związane z posiadanymi akcjami są wypłacane w konkretnych dniach, analiza danych giełdowych wymaga nieraz zbadania danych z wielu poprzednich miesięcy. W związku z tym bardzo potrzebne są funkcje operujące na danych związanych z datą i czasem. Najważniejsze z nich omówimy w dalszej części tego rozdziału. Najczęściej używany sposób zapisu daty to przedstawienie jej w postaci tekstowej jako łańcucha znaków np. 1 czerwca 2010 roku. Niestety tę samą datę możemy przedstawić na wiele różnych sposobów, na przykład: 01-Jun , 01/06/2010, 01/06/10, , , , June 01, Z powodu tej różnorodności napisanie uniwersalnej funkcji operującej na danych kalendarzowych staje się kłopotliwe. Można oczywiście zmusić użytkownika do podawania dat w jednym określonym formacie, jednak często musimy operować na danych pochodzących ze źródeł zewnętrznych. W Matlabie problem ten rozwiązano, wprowadzając wewnętrzny numeryczny format zapisu daty i czasu oraz udostępniając użytkownikowi wygodne funkcje pozwalające konwertować daty z różnych formatów tekstowych na format numeryczny i odwrotnie. W formacie numerycznym data kalendarzowa reprezentowana jest jako liczba dni, która upłynęła od pewnej ustalonej daty bazowej. W Matlabie tą datą jest 1 stycznia 0000 roku naszej ery 3. Spróbujmy najpierw uzyskać dzisiejszą datę, służy do tego polecenie today. > > today Do zamiany tej daty na bardziej zrozumiały format tekstowy służy funkcja datestr. > > datestr(734290) 01-Jun-2010 Aby wrócić do formatu tekstowego używamy funkcji datenum. > > datenum( 01-Jun-2010 ) 2 Matlab stosuje angielskie nazwy miesięcy i dni tygodnia. 3 Nie jest to oczywiście rzeczywista data, a pewien sztucznie ustalony punkt odniesienia. 4 Stan na 1 czerwca 2010 r.

43 Rozdział 2. Wizualizacja danych giełdowych 43 Specyfikator Znaczenie Przykład yyyy Rok w postaci czterocyfrowej 2010, 1945 yy Rok w postaci dwucyfrowej 87, 09 mmmm Pełna nazwa miesiąca June, August mmm Trzyliterowy skrót nazwy miesiąca Jun, Aug mm Miesiąc w postaci dwucyfrowej 06, 08 m Pierwsza litera nazwy miesiąca J, A dddd Pełna nazwa dnia tygodnia Monday, Friday ddd Trzyliterowy skrót nazwy dnia tygodnia Mon, Fri dd Dzień miesiąca w postaci dwucyfrowej 05, 31 d Pierwsza litera nazwy dnia tygodnia M, F Tablica 2.1: Specyfikatory formatu daty Jeżeli to możliwe, rok należy podawać w postaci czterocyfrowej. Forma dwucyfrowa może powodować problemy z interpretacją 14 może oznaczać 1914 lub Matlab zakłada, że podana data leży w 100-letnim przedziale, którego środek znajduje się w aktualnym roku. Oznacza to na przykład, że 14 w roku 2010 zostanie zinterpretowane jako 2014, a 80 jako Funkcja datestr zwraca datę w postaci dzień-miesiąc-rok, gdzie miesiąc jest trzyliterowym skrótem angielskiej nazwy miesiąca, a rok jest podany w postaci czterocyfrowej. Jeżeli preferujemy inny format zapisu daty, musimy go podać jako drugi parametr polecenia datestr. Format określamy za pomocą tzw. specyfikatorów wymienionych w tabeli 2.1. Przykład 2.1. Przedstawimy w różnej postaci datę (czyli 1 czerwca 2010). > > datestr(734290, dd/mm/yy ) 01/06/10 > > datestr(734290, mmmm dd, yyyy ) June 01, 2010 > > datestr(734290, mmm dd, yyyy (dddd) Jun 01, 2010 (Tuesday) Funkcja datenum potrafi rozpoznać kilkanaście standardowych tekstowych formatów zapisu daty i zamienić je na postać numeryczną. 5 Jeżeli używamy danych z datami zapisanymi w formacie, który nie jest rozpoznawany poprawnie, musimy sami określić ten format za pomocą odpowiednich specyfikatorów. 5 Dla pewności warto zawsze sprawdzić, czy format daty został poprawnie rozpoznany, wywołując na wyniku działania polecenia datenum funkcję odwrotną datestr. W szczególności warto pamiętać o tym, że w języku angielskim często najpierw podaje się miesiąc, a dopiero później dzień, a więc 12/08/1989 może oznaczać datę 8 grudnia 1989, a nie 12 sierpnia 1989.

44 44 Rozdział 2. Wizualizacja danych giełdowych Specyfikator Znaczenie Przykład HH Godzina w postaci dwucyfrowej 23, 06 MM Minuty w postaci dwucyfrowej 15, 58 SS Sekundy w postaci dwucyfrowej 34, 07 FFF Milisekundy w postaci trzycyfrowej.024,.895 Tablica 2.2: Specyfikatory formatu czasu Przykład 2.2. > > datenum( 12.09/2010 ) Error using datenum... Cannot parse date 12.09/2010. > > datenum( 12.09/2010, dd.mm/yyyy ) > > datestr(734393) 12-Sep-2010 Omówione funkcje pozwalają operować również na danych czasowych (godziny, minuty, sekundy, milisekundy). Specyfikatory formatu czasu znajdują się w tabeli 2.2. Aktualny czas możemy uzyskać za pomocą funkcji now. > > now e+005 > > datestr( e+005) 01-Jun :01:55 > > datestr(now, HH:MM:SS.FFF ) 15:07: Interpretacja ułamkowej części numerycznej postaci daty jest bardzo naturalna. Wartość 0,5 oznacza połowę dnia czyli godzinę 12:00:00, wartość 0,333 to prawie jedna trzecia dnia, czyli godzina 7:59:31 itp. Oprócz poleceń datestr i datenum Matlab udostępnia kilka innych przydatnych funkcji związanych z kalendarzem: eomdate(rok,miesiąc) zwraca datę (w formacie numerycznym) ostatniego dnia w danym miesiącu i roku, w szczególności możemy sprawdzić ile dni miał luty w danym roku, lweekdate(dzień_tygodnia,rok,miesiąc) zwraca datę ostatniego wystąpienia danego dnia tygodnia w danym roku i miesiącu, czyli np. kiedy wypadnie ostatnia sobota w sierpniu 2056 roku, dzień tygodnia podajemy numerycznie: 1 = niedziela, 2 = poniedziałek itd.

45 Rozdział 2. Wizualizacja danych giełdowych 45 nweekdate(n,dzień_tygodnia,rok,miesiąc) zwraca datę n-tego wystąpienia danego dnia tygodnia w danym roku i miesiącu, czyli np. kiedy wypadł trzeci piątek września 1954 roku, weeknum(data) zwraca numer tygodnia, w którym występuje podana data, możemy np. dowiedzieć się, że 1 czerwca 2010 roku wypada w 23. tygodniu tego roku Rachunek czasu w matematyce finansowej W matematyce finansowej niezwykle ważne jest pojęcie dnia roboczego. Zazwyczaj w weekendy i święta państwowe giełdy są zamykane i często trzeba to uwzględniać w obliczeniach. Lista świąt państwowych jest oczywiście właściwością specyficzną dla danego państwa. W Matlabie zdefiniowana została lista świąt i innych dni wolnych od handlu na Nowojorskiej Giełdzie Papierów Wartościowych (NYSE). Listę tę można wyświetlić za pomocą polecenia holidays (lub datestr(holidays)). Na liście tej znajdują się dni świąteczne z lat Listę tę można zmodyfikować za pomocą polecenia createholidays, bądź edytując plik tekstowy holidays.m. Niektóre polecenia pozwalają na bezpośrednie podanie listy dni świątecznych jako jednego z argumentów. Funkcja isbusday(dzień, święta, weekend) pozwala sprawdzić, czy dany dzień jest dniem roboczym. Przyjmuje ona trzy argumenty, z których pierwszy jest obowiązkowy, a pozostałe dwa opcjonalne. Pierwszy argument to oczywiście data lub tablica dat, które chcemy sprawdzić. Drugi argument to wektor zawierający daty dni świątecznych, jeżeli go nie podamy, Matlab skorzysta z domyślnej (amerykańskiej) listy świąt. Ostatni argument pozwala określić, które dni tygodnia należą do weekendu. Jest to wektor 7 zer lub jedynek, zero oznacza dzień pracujący, jedynka weekendowy. Pierwszy element wektora to niedziela, drugi poniedziałek itd. Domyślnie wektor ten ma wartość [ ], co oznacza, że weekend stanowią sobota i niedziela. Funkcja dla każdej badanej daty zwraca jedynkę, jeżeli jest to dzień roboczy, lub zero w przeciwnym wypadku. Podobna funkcja to busdate(dzień, kierunek, święta, weekend). Jeżeli argument kierunek ma wartość 1, to zwraca ona następny dzień roboczy, a jeżeli 1, to poprzedni dzień roboczy (względem daty umieszczonej w pierwszym argumencie). Przykład 2.3. Zdefiniujemy listę polskich świąt i wykorzystamy ją do testowania czy dany dzień jest roboczy. > > polswieta = [ 01-Jan-2010 ; 04-Apr-2010 ; 05-Apr-2010 ; 01-May-2010 ; 03-May-2010 ; 23-May-2010 ; 03-Jun-2010 ; 15-Aug-2010 ; 01-Nov-2010 ; 11-Nov-2010 ; 25-Dec-2010 ; 26-Dec-2010 ] > > isbusday( 1-Jul-2010,polswieta) 1 > > isbusday( 3-May-2010,polswieta) 0 Dla porównania, to samo polecenie z domyślną amerykańską listą świąt > > isbusday( 3-May-2010 )

46 46 Rozdział 2. Wizualizacja danych giełdowych 1 Sprawdzamy, jaki będzie w Polsce następny dzień roboczy po 30 kwietnia. > > busdate( 30-Apr-2010,1,polswieta) > > datestr(ans) 04-May-2010 W USA natomiast jest to > > busdate( 30-Apr-2010,1) > > datestr(ans) 03-May-2010 Często w obliczeniach musimy wyznaczyć liczbę dni pomiędzy dwiema datami. Jest to bardzo proste, jeżeli korzystamy z numerycznego formatu daty. Wystarczy wówczas od daty końcowej odjąć datę początkową. Matlab udostępnia również funkcję daysact, która wykonuje to obliczenie. Często bankowa definicja roku różni się od kalendarzowej. Niektóre banki nie uwzględniają lat przestępnych każdy rok ma 365 dni. Inne zakładają, że rok ma 360 dni jest to tzw. rok bankowy, a każdy miesiąc 30 dni (miesiąc bankowy). W tym przypadku do wyznaczania liczby dni między ustalonymi datami korzystamy z funkcji days365 lub days360. Przykład 2.4. Sprawdźmy, ile dni będzie pomiędzy 1 lutego a 1 marca 2012 roku (rok przestępny). Prawdziwa liczba dni to > > daysact( 1-Feb-2012, 1-Mar-2012 ) 29 W kalendarzu 365-dniowym jest to > > days365( 1-Feb-2012, 1-Mar-2012 ) 28 a w kalendarzu 360-dniowym > > days360( 1-Feb-2012, 1-Mar-2012 ) 30 Kolejną często wykonywaną operacja jest ustalenie jaką część roku stanowi przedział czasu między dwiema datami. Inaczej mówiąc, zamiana liczby dni na liczbę lat. Stosujemy wzór czas w dniach n = liczba dni w roku. Oczywiście wynik zależy od przyjętego sposobu liczenia dni oraz długości roku.

47 Rozdział 2. Wizualizacja danych giełdowych 47 Przykład 2.5. Załóżmy, że chcemy wyrazić w latach liczbę dni od 14 czerwca 2010 do 20 listopada Wyznaczymy najpierw liczbę dni pomiędzy tymi datami. Kalendarzowa liczba dni wynosi: > > d1 = 14-Jun-2010 ; > > d2 = 20-Nov-2010 ; > > kd = daysact(d1,d2) kd = 159 Jeżeli korzystamy z bankowej definicji miesiąca, to dni tych jest tylko > > bd = days360(d1,d2) bd = 156 Otrzymane wyniki możemy podzielić przez długość roku kalendarzowego bądź bankowego. Możliwe są cztery kombinacje > > n1 = kd/365 n1 = > > n2 = kd/360 n2 = > > n3 = bd/365 bd = > > n4 = bd/360 n4 = Z powyższego przykładu wynika, że dla banku pożyczającego pieniądze najkorzystniejsze jest obliczanie dokładnej liczby dni i zamiana ich na lata bankowe. Jest to tzw. reguła bankowa (ang. banker s rule). Dla dłużnika najkorzystniejsze jest obliczanie liczby dni bankowych i zamiana jej na lata kalendarzowe Wczytywanie danych z plików zewnętrznych Matlab umożliwia wczytywanie danych różnego typu z plików zewnętrznych. Proste pliki zawierające tylko dane liczbowe możemy wczytać za pomocą omawianego wcześniej polecenia load. Załóżmy na przykład, że mamy plik dane.txt o następującej zawartości: Po wczytaniu tego pliku poleceniem load dane.txt w przestrzeni roboczej Matlaba pojawi się nowa zmienna o nazwie dane. Jest to macierz o wymiarach 3 6, której elementami są liczby z pliku dane.txt. Polecenie load ma wiele ograniczeń, nie radzi sobie z różną

48 48 Rozdział 2. Wizualizacja danych giełdowych liczbą danych w wierszach, nie rozpoznaje niektórych separatorów, nie pozwala też wczytywać innych typów danych np. tekstowych czy kalendarzowych. Znacznie bardziej funkcjonalnym narzędziem jest kreator importu (ang. Import Wizard). Prześledzimy jego działanie na przykładzie prostego pliku dane.txt o następującej zawartości: Moje wazne dane A B C Kreator możemy uruchomić kilkoma sposobami: wybierając polecenie Import Data... z menu File, wpisując w oknie poleceń komendę uiimport -file, w oknie aktualnego katalogu, klikając prawym przyciskiem myszy na odpowiedni plik i wybierając z menu podręcznego polecenie Import data. W dwóch pierwszych przypadkach pojawi się standardowe okno, w którym wybieramy plik z danymi. Po zaakceptowaniu wyboru pliku pojawi się pierwsze okno kreatora (patrz rysunek 2.1). Składa się ono z dwóch paneli. Lewy panel pokazuje dane w postaci surowej, tzn. w takiej, w jakiej zostały zapisane w pliku. W prawym panelu znajdują się te same dane w postaci, w jakiej zostaną zaimportowane do Matlaba. Matlab stara się rozpoznać typ danych i podzielić je na kategorie, następnie przypisuje dane do standardowych zmiennych: data macierz zawierająca wszystkie zaimportowane dane liczbowe, puste elementy są zapisywane jako NaN, textdata macierz zawierająca wszystkie zaimportowane dane tekstowe, puste elementy są zapisywane jako, colheaders wektor zawierający nagłówki kolumn, rowheaders wektor kolumnowy zawierający nagłówki wierszy. W naszym przypadku zostały utworzone tylko trzy pierwsze zmienne. Ich zawartość możemy obejrzeć, wybierając odpowiednią zakładkę prawego panelu. Jeżeli wszystkie dane są tego samego typu, tworzona jest tylko jedna zmienna, której nazwa jest taka sama jak nazwa pliku, z którego importujemy dane (ale bez jego rozszerzenia). Matlab w większości przypadków prawidłowo rozpoznaje symbol oddzielający poszczególne kolumny danych (w naszym przypadku jest to tabulacja). Zawsze możemy jednak ustalić ten symbol sami w górnej części okna kreatora.

49 Rozdział 2. Wizualizacja danych giełdowych 49 Rysunek 2.1: Pierwsze okno kreatora importu Rysunek 2.2: Drugie okno kreatora importu Często zdarza się, że na początku pliku znajduje się fragment tekstu opisujący jego zawartość. Tekst powinien zostać zignorowany przez program. W polu znajdującym się w prawym górnym narożniku okna możemy ustalić liczbę początkowych wierszy, które powinny zostać zignorowane (u nas są to dwa wiersze). Ostatni z tych wierszy uznawany jest za nagłówki kolumn i przypisywany do zmiennej colheads. Po dokonaniu ewentualnych poprawek klikamy przycisk Next. Pojawi się wówczas następne okno kreatora (patrz rysunek 2.2). Lewy panel tego okna zawiera listę zmiennych, które zostaną utworzone z naszych danych. Po kliknięciu wybranej zmiennej w prawym panelu pojawi się jej zawartość. Jeżeli nie chcemy importować którejś z nich, usuwamy znak znajdujący się przy jej nazwie. Jeżeli nie chcemy przechowywać wszystkich danych numerycznych w jednej macierzy data,

50 50 Rozdział 2. Wizualizacja danych giełdowych ale wolimy, żeby dla każdej kolumny utworzona była nowa zmienna o nazwie odpowiadającej nazwie tej kolumny, to musimy wybrać opcję Create vectors from each column using column names. Możemy też zmienić domyślne nazwy zmiennych, klikając na nie prawym przyciskiem myszy i wybierając z menu podręcznego polecenie Rename variable. Wciśnięcie przycisku Finish powoduje zakończenie działania kreatora i import danych. W przestrzeni roboczej Matlab pojawiły się trzy nowe zmienne A,B,C zawierające dane z kolejnych kolumn naszego pliku. Niestety, import danych nie zawsze przebiega w tak prosty sposób. Często pojawiają się problemy. Spróbujmy zaimportować do Matlaba plik SP500.dat zawierający wartości jednego z najbardziej znanych światowych indeksów giełdowych Standard & Poors 500. Początek tego pliku wygląda tak: STANDARD & POORS 500 O H L C 17-Feb Feb Feb Feb Feb Feb Feb Dane umieszczone są w 5 kolumnach zawierających kolejno: datę notowania, wartość otwarcia, wartość najwyższą, wartość najniższą i wartość zamknięcia. Kolumny oddzielone są kilkoma spacjami, w pierwszym wierszu znajduję się nazwa indeksu, w drugim skróty nagłówków kolumn. Otwieramy kreator importu i szukamy katalogu z plikiem SP500.dat. 6 Jeżeli plik nie jest widoczny, na liście Pliki typu wybieramy All files *.*. Powinno otworzyć się okno podobne do tego na rysunku 2.3. Mimo że Matlab prawidłowo rozpoznał, że separatorem kolumn są spacje, zawartości zmiennych data, textdata i rowheaders wyglądają niezbyt zachęcająco. Zauważmy, że Matlab nie rozpoznał, że dwa pierwsze wiersze tekstu stanowią nagłówek. Wprowadźmy ręcznie w odpowiednie pole wartość 2. Teraz zmienna data zawiera cztery ostatnie kolumny z pliku, zmienna textdata pierwszą kolumnę i nagłówek, a zmienna rowheaders zniknęła. Przejdźmy do kolejnego okna kreatora, klikając przycisk Next. W tym oknie nic nie zmieniamy i klikamy przycisk Finish. W przestrzeni roboczej Matlaba pojawiły się dwie nowe zmienne data i textdata. Pierwsza z nich to macierz o wymiarach zawierająca dane numeryczne. Druga to macierz zawierająca dane tekstowe. Podstawmy dane z tych macierzy pod nowe zmienne: > > OPEN = data(:,1); > > HIGH = data(:,2); > > LOW = data(:,3); > > CLOSE = data(:,4); > > DATE = textdata(:,1); 6 Plik ten można znaleźć w katalogu MATLAB\R2009a\toolbox\finance\findemos, gdzie MATLAB jest nazwą katalogu w którym zainstalowaliśmy Matlaba.

51 Rozdział 2. Wizualizacja danych giełdowych 51 Rysunek 2.3: Import pliku SP500.dat Ostatnia zmienna ma o dwa wiersze więcej od pozostałych. Jej pierwsze dwa wiersze zawierają nazwę indeksu giełdowego oraz nagłówki kolumn z pliku. Dane te nie są nam potrzebne, co więcej będą przeszkadzać, gdyż każdej dacie z i-tego wiersza zmiennej DATE powinny odpowiadać wartości indeksu giełdowego z i-tych wierszy zmiennych OPEN, HIGH, LOW i CLOSE. Usuńmy zatem te dwa wiersze. > > DATE(1:2,:) = []; Jeżeli wolimy pracować z datami w formacie numerycznym, możemy dokonać konwersji: > > DATE = datenum(date); Dane w tej postaci są już gotowe do dalszej obróbki. Spróbujemy teraz zaimportować do Matlaba inny plik Agora.mst. 7 Zawiera on notowania giełdowe spółki Agora z okresu od 20 kwietnia 1999 do 9 czerwca Początek tego pliku wygląda następująco: <TICKER>,<DTYYYYMMDD>,<OPEN>,<HIGH>,<LOW>,<CLOSE>,<VOL> AGORA, ,49.90,49.90,46.10,47.10, AGORA, ,47.00,47.20,46.50,46.70, AGORA, ,47.00,49.90,47.00,49.10, AGORA, ,49.40,51.00,49.10,49.70, AGORA, ,49.50,49.80,49.00,49.00,90323 AGORA, ,48.50,48.50,47.50,47.80,84823 AGORA, ,47.50,47.50,46.00,46.20,51058 Dane umieszczone są w 7 kolumnach zawierających kolejno: nazwę spółki, datę notowania, cenę otwarcia, cenę najwyższą, cenę najniższą, cenę zamknięcia i obrót. Kolumny oddzielone są przecinkami, w pierwszym wierszu znajdują się ich nagłówki. 7 Plik ten został pobrany ze strony

52 52 Rozdział 2. Wizualizacja danych giełdowych Rysunek 2.4: Import pliku Agora.mst Otwieramy kreator importu i wybieramy plik Agora.mst. Powinno otworzyć się okno podobne do tego na rysunku 2.4. Widzimy, że Matlab rozpoznał prawidłowo, że separatorem kolumn jest przecinek (ang. Comma). Matlab zignorował też pierwszy wiersz pliku, niestety nie rozpoznał prawidłowo, że zawiera on etykiety kolumn (w prawym panelu nie pojawiła się zakładka colheads). Utworzone zostały dwie zmienne data zawierająca 6 kolumn z pliku (wszystkie poza pierwszą), oraz zmienna textdata, której zawartości niestety nie możemy obejrzeć, po kliknięciu odpowiedniej zakładki pojawia się komunikat Preview too large to be displayed properly, czyli Zawartość zbyt dużych rozmiarów, żeby można ją było poprawnie wyświetlić. Możemy przypuszczać, że zostały tam umieszczone dane tekstowe z pierwszego wiersza i z pierwszej kolumny, czyli nagłówki kolumn i powtarzające się wielokrotnie słowo AGORA. Klikamy przycisk Next. Ponieważ Matlab nie rozpoznał właściwie ani nagłówków kolumn, ani wierszy, w kolejnym oknie kreatora nie mamy wyboru i musimy wybrać opcję Create variable matching preview, czyli Utwórz zmienne takie jak na podglądzie. W lewym panelu możemy zostawić zaznaczoną tylko zmienną data, dane tekstowe nie są dla nas zbyt interesujące. Klikamy przycisk Finish. W przestrzeni roboczej Matlaba pojawi się nowa zmienna data zawierająca dane liczbowe z pliku Agora.mst. Możemy obejrzeć jej zawartość, wpisując w oknie poleceń nazwę tej zmiennej, znacznie wygodniej będzie jednak kliknąć dwa razy jej nazwę w oknie przestrzeni roboczej i otworzyć ją w edytorze zmiennych. Widzimy, że jest to macierz wymiaru Kolumny od 2. do 5. zawierają ceny akcji, kolumna 6. wartość dziennego obrotu. Podstawmy zawartość tych kolumn pod nowe zmienne: > > OPEN = data(:,2); > > HIGH = data(:,3); > > LOW = data(:,4); > > CLOSE = data(:,5); > > VOLUME = data(:,6);

53 Rozdział 2. Wizualizacja danych giełdowych 53 Problem stanowią dane z pierwszej kolumny. Przypomnijmy, że w pliku z danymi zawierała ona daty notowań giełdowych. Niestety Matlab rozpoznał te dane jako zwykłe liczby naturalne. W jaki sposób możemy przekształcić je na daty? Problemu nie da się rozwiązać za pomocą omawianej wcześniej funkcji datestr przekształcającej daty z postaci numerycznej na tekstową. Liczby znajdujące się w pierwszej kolumnie nie są datami zapisanymi w numerycznym formacie Matlaba. Możemy się o tym łatwo przekonać: > > datestr( ) 29-Nov-4731 Nie jest to na pewno data, o którą nam chodziło. Żeby rozwiązać ten problem musimy najpierw zamienić liczby z pierwszej kolumny na łańcuchy znaków. Służy do tego funkcja num2str. > > s = num2str( ) s = Pozornie nic się nie stało, ale zmienna s jest już tekstem, a nie liczbą. Zauważmy, że w oknie przestrzeni roboczej ikona przy zmiennej s wygląda inaczej niż przy zmiennych liczbowych. Teraz możemy użyć funkcji datenum, aby otrzymać numeryczną postać daty. > > n = datenum(s, yyyymmdd ) n = Sprawdźmy, czy jest to data, o którą nam chodziło: > > datestr(n) 20-Apr-1999 Teraz wszystko jest w porządku. Oczywiście nie musimy wykonywać tych operacji osobno na każdym z ponad 3000 elementów 1. kolumny. Wszystko możemy zrobić za pomocą jednej instrukcji: > > DATE = datenum(num2str(data(:,1)), yyyymmdd ) lub > > DATE = datestr(datenum(num2str(data(:,1)), yyyymmdd )) jeżeli wolimy mieć daty w postaci tekstowej. Te dwa przykłady pokazują, że trudno jest podać uniwersalną receptę pozwalającą poradzić sobie z importem dowolnego pliku. Szczególne trudności mogą sprawić daty zapisane w nietypowych formatach. Często musimy zaimportować wiele plików zawierających dane zapisane w tym samym formacie. Na szczęście nie musimy uruchamiać kreatora importu dla każdego pliku. Jeżeli w kreatorze importu zaznaczymy pole Generate M-code, zostanie wygenerowany kod funkcji, za pomocą której można będzie w przyszłości dokonywać importu danych z plików tego samego typu. Przy odrobinie wprawy można ten kod zmodyfikować tak, aby również operacje, które wykonywaliśmy już po zaimportowaniu pliku (tworzenie nowych zmiennych, konwersja dat), były wykonywane automatycznie.

54 54 Rozdział 2. Wizualizacja danych giełdowych 2.5. Wizualizacja danych Trudno jest wydobyć potrzebne informacje z długich kolumn danych. Analiza jest znacznie łatwiejsza, gdy są one przedstawione w postaci graficznej. Pakiet Financial Toolbox zawiera wiele funkcji przeznaczonych do wizualizacji danych. Zanim jednak przejdziemy do ich omówienia, spróbujmy skorzystać ze standardowej funkcji Matlaba plot i narysować wykres cen akcji. Zaimportujmy do Matlaba plik Agora.mst w sposób opisany w rozdziale 2.4 (jeżeli jeszcze tego nie zrobiliśmy). Dalej będziemy zakładać, że w przestrzeni roboczej Matlaba zdefiniowane są zmienne DATE OPEN, HIGH, LOW, CLOSE i VOLUME zawierające dane z tego pliku. Jeżeli daty są w formacie tekstowym, przekształcamy je do formatu numerycznego. Narysujmy najpierw wykres przedstawiający jak zmieniała się cena otwarcia. > > plot(date,open) Powinniśmy otrzymać wykres podobny do tego na rysunku 2.5. Jeżeli interesuje nas tylko część danych, np. tylko te z ostatnich 200 notowań, to wpisujemy polecenia > > n = length(date) > > plot(date(n-200:n),open(n-200:n)) Etykiety na osi X to daty notowań w formacie numerycznym (funkcja plot nie przyjęłaby dat w formie tekstowej). Nie jest to zbyt czytelne, trudno się zorientować z jakiego okresu pochodzą dane. Matlab zawiera funkcję dateaxis, która rozwiązuje ten problem. > > dateaxis( X,1) X to oczywiście oś, której etykiety chcemy zmienić. Drugi argument to format, w jakim ma być wyświetlona data, 1 oznacza, że będą to daty postaci 04-Mar Inne możliwe wartości tego parametru można znaleźć w plikach pomocy. Na rysunku 2.6 przedstawiony jest wykres z poprawionymi etykietami osi. W ten sam sposób możemy narysować wykresy danych z innych kolumn. Przyjęło się jednak, że dane ze zmiennej VOLUME oznaczające dzienny obrót (czyli liczbę akcji, jakie zmieniły właściciela danego dnia) przedstawia się w postaci wykresu słupkowego (rysunki 2.7 i 2.8). Przypomnijmy, że do rysowania wykresów tego typu służy funkcja bar. > > bar(volume) Jeżeli interesują nas dane z pierwszych 50 dni i dodatkowo chcemy, żeby oś X była etykietowana datami, to wpisujemy polecenia: > > bar(date(1:50),volume(1:50)) > > dateaxis( X,1) Przejdziemy teraz do omówienia bardziej specjalistycznych funkcji przeznaczonych do wizualizacji danych finansowych. Rozpoczniemy od funkcji highlow pozwalającej przedstawić na jednym wykresie ceny najwyższe, najniższe, zamknięcia i otwarcia (jest to tzw. Open-High-Low-Close chart (OHLC)). Ograniczymy się do 50 pierwszych notowań, przy większej liczbie danych wykres może stać się nieczytelny. > > highlow(high(1:50),low(1:50),close(1:50),open(1:50)) > > dateaxis( X,1, 20-Apr-1999 ) Trzeci argument funkcji dateaxis określa datę odpowiadającą pierwszemu notowaniu. Otrzymamy wykres podobny do tego z rysunku 2.9. Wykres ma postać szeregu pionowych odcinków. Każdy odcinek odpowiada danym z jednego dnia. Górny koniec odcinka to cena najwyższa, a dolny najniższa. Krótki poziomy znacznik z lewej strony odcinka

55 Rozdział 2. Wizualizacja danych giełdowych 55 Rysunek 2.5: Cena otwarcia akcji Agory Rysunek 2.6: Cena otwarcia akcji Agory (wykres z poprawionymi etykietami osi X)

56 56 Rozdział 2. Wizualizacja danych giełdowych Rysunek 2.7: Wielkość obrotu akcjami Agory Rysunek 2.8: Wielkość obrotu akcjami Agory (pierwsze 50 dni)

57 Rozdział 2. Wizualizacja danych giełdowych 57 Rysunek 2.9: Wykres typu Open-High-Low-Close odpowiada cenie otwarcia, a ten z prawej cenie zamknięcia. Wykresy takie pozwalają zorientować się w tym, jak zmieniała się cena w ciągu dnia. Wykresy świecowe również pozwalają przedstawić te cztery charakterystyczne ceny na jednym wykresie. Tworzymy je za pomocą funkcji candle. Wywołajmy ją dla danych z poprzedniego przykładu. > > candle(high(1:50).low(1:50),close(1:50),open(1:50)) > > dateaxis( X,1, 20-Apr-1999 ) Na otrzymanym wykresie (patrz rysunek 2.10) ponownie widzimy pionowe odcinki, na które nałożone zostały prostokąty. Znaczenie odcinków jest takie samo, jak w przypadku wykresów typu OHLC, górny koniec to cena najwyższa, dolny najniższa. Dolne i górne krawędzie prostokątów oznaczają ceny otwarcia i zamknięcia. Jeżeli jest on wypełniony, oznacza to, że cena akcji w ciągu dnia zmalała, jeżeli pusty to, że wzrosła. Takie wykresy pozwalają zorientować się, jaka jest tendencja kursu akcji. Jeżeli np. widzimy długi ciąg pustych prostokątów, to akcje idą w górę. Ostatnim typem wykresu, który omówimy, jest wstęga Bollingera (ang. Bollinger Bands). Nazwa pochodzi od nazwiska Johna Bollingera, który pierwszy zaczął stosować to narzędzie na początku lat 80. XX wieku. Wstęga Bollingera składa się z trzech wykresów (wstęg): wstęgi środkowej będącej n-okresową średnią ruchomą danych (M A), wstęgi górnej będącej k-krotnością n-okresowego odchylenia standardowego powyżej środkowej wstęgi (MA + kσ),

58 58 Rozdział 2. Wizualizacja danych giełdowych Rysunek 2.10: Wykres świecowy wstęgi dolnej będącej k-krotnością n-okresowego odchylenia standardowego poniżej środkowej wstęgi (MA kσ). Typowe wartości dla n i k to odpowiednio 20 i 2. Przypomnijmy, że n-okresowa średnia ruchoma (ang. moving average) jest to średnia arytmetyczna wartości z n ostatnich okresów. Na przykład dla ciągu (x k ) k=1,...,n i n = 5 średnią ruchomą obliczamy ze wzoru: MA 5 = x M 4 + x M 3 + x M 2 + x M 1 + x M 5 dla M = 5, 6, 7,..., N. Analogicznie definiujemy n-okresowe odchylenie standardowe. Do rysowania wstęgi Bollingera służy funkcja bolling. Przyjmuje ona dwa obowiązkowe parametry: wektor z danymi i krotność średniej. Trzeci parametr jest opcjonalny (domyślnie równy 0), czwarty parametr (również opcjonalny) to współczynnik k, przez który mnożymy odchylenie standardowe, domyślnie jest on równy 2. Narysujmy wstęgę Bollingera dla ceny zamknięcia. > > bolling(close(1:250),20) > > dateaxis( x,1, 20-Apr-1999 Na wykresie (rysunek 2.11) widzimy 4 krzywe. Ta najbardziej postrzępiona to wykres ceny zamknięcia, ta najbardziej gładka to wstęga środkowa, czyli średnia ruchoma. Dwie pozostałe to wstęgi górna i dolna. Widzimy, że wykres średniej ruchomej powoduje wygładzenie wykresu cen, pokazuje ogólną tendencję, pomijając okresowe wahania. Zauważmy też, że wszelkie ekstrema są przesunięte w prawo w stosunku do wykresu danych. Sposób liczenia średniej ruchomej powoduje, że jest ona opóźniona w stosunku do danych

59 Rozdział 2. Wizualizacja danych giełdowych 59 Rysunek 2.11: Wstega Bollingera wejściowych. Odległość między wstęgą górną i dolną określa, jak duża jest zmienność rynku Szeregi czasowe Dane giełdowe, którymi zajmowaliśmy się w poprzedniej części skryptu, możemy traktować jako tzw. szeregi czasowe (ang. time series). Szeregiem czasowym nazywamy ciąg informacji uporządkowanych w czasie. Badaniem własności takich szeregów i prognozowaniem na ich podstawie zajmuje się analiza szeregów czasowych. Matlab zawiera szereg narzędzi służących do analizy i wizualizacji szeregów czasowych. Kiedyś tworzyły one osobny pakiet Financial Series Toolbox, kilka lat temu zostały dołączone do Financial Toolbox. Dokładne omówienie tego narzędzia wykracza poza możliwości naszego skryptu. Omówimy tu tylko kilka podstawowych funkcji umożliwiających stworzenie szeregu czasowego i jego wizualizację. Zaimportujmy do Matlaba plik Agora.mst w sposób opisany w rozdziale 2.4 (jeżeli jeszcze tego nie zrobiliśmy). Dalej będziemy zakładać, że w przestrzeni roboczej Matlaba zdefiniowane są zmienne DATE, OPEN, HIGH, LOW, CLOSE i VOLUME zawierające dane z tego pliku. W Matlabie istnieje specjalny typ danych reprezentujący szeregi czasowe, jest to tzw. financial time series object. Obiekty takie tworzymy za pomocą funkcji fints(czas,[dane1,dane2,...,danen],{etykieta1,etykieta2,...,etykietan}) Pierwszy parametr to wektor zawierający daty, drugi to tablica zawierająca kolejne serie danych (musimy podać przynajmniej jedną serię). Ostatni parametr jest opcjonalny,

60 60 Rozdział 2. Wizualizacja danych giełdowych Rysunek 2.12: Okno narzędzia chartfts możemy tu określić etykiety serii danych. Utworzymy teraz szereg czasowy z wczytanych wcześniej danych giełdowych. >> szereg = fints(date,[open, HIGH, LOW, CLOSE, VOLUME], { Open, High, Low, Close, Volume }) Do wizualizacji tak utworzonych szeregów czasowych służy funkcja chartfts. > > chartfts(szereg) Funkcja ta wyświetla okno z osobnymi wykresami dla każdej serii danych (liniowe dla pierwszych czterech serii i słupkowy dla ostatniej). Kiedy wskazujemy kursorem dowolny punkt na wykresie, na dole okna pokazuje się data oraz odpowiadające jej wartości wszystkich serii danych. Możemy powiększyć dowolny fragment wykresu. W tym celu z menu Chart Tools wybieramy podmenu Zoom i ustawiamy przełącznik w pozycji On. Następnie zaznaczamy kliknięciem na wykresie początek i koniec obszaru, który chcemy powiększyć, i klikamy przycisk Zoom In. Aby ponownie obejrzeć cały wykres, klikamy przycisk Reset Zoom. Możemy też wyświetlić na jednym wykresie kilka serii danych. Z menu Chart Tools wybieramy podmenu Combine Axes i ustawiamy przełącznik w pozycji On. Z prawej strony każdego wykresu pojawi się pole wyboru. Zaznaczamy pola przy wykresach, które chcemy ze sobą połączyć, i klikamy przycisk Combine Selected Graphs. Aby rozdzielić wykresy, z menu Chart Tools\Combine Axes wybieramy polecenie Reset Axes. Matlab zawiera wiele innych narzędzi ułatwiających analizę finansowych szeregów czasowych. W szczególności warto zapoznać się z ftsgui graficznym interfejsem umożliwiającym analizę szeregów bez wpisywania poleceń z linii komend. Inne przydatne narzędzie to ftsttol. Pozwala ono tworzyć szeregi nie tylko z danych pochodzących ze zmiennych Matlaba czy z plików zewnętrznych. Jeżeli posiadamy pakiet Database Toolbox

61 Rozdział 2. Wizualizacja danych giełdowych 61 lub Datafeed Toolbox, 8 to możemy połączyć się i pobierać dane z profesjonalnych serwisów finansowych, takich jak Bloomberg R, FactSet R czy Reuters R Ćwiczenia Ćw Zamień na format numeryczny swoją datę urodzenia, a następnie: a) sprawdź, jaki to był dzień tygodnia, b) sprawdź, ile dni miał luty w roku Twojego urodzenia, c) podaj datę pierwszej i ostatniej niedzieli w roku Twojego urodzenia, d) sprawdź, w którym tygodniu roku się urodziłeś, e) sprawdź, ile dni minęło od dnia Twojego urodzenia do dziś w kalendarzach zwykłym, 365-dniowym oraz przy bankowej definicji miesiąca, f) oblicz, ile masz lat według reguły bankowej, tj. podziel liczbę dni kalendarzowych przez 360. Ćw Zaimportuj do Matlaba plik odziez.dat (plik przykładowy programu PASW Statistics, dostępny na Moodle) zawierający dane dotyczące miesięcznych wydatków na reklamę oraz wyników sprzedaży odzieży dla dorosłych i odzieży młodzieżowej w pewnej firmie z branży tekstylnej. Poszczególne kolumny (zmienne data, telewizja, radio, gazety, obsluga, odz_mlodz, odz_dor, promocje) z danymi są oddzielone znakiem tabulacji, a nazwy zmiennych znajdują się w pierwszym wierszu danych. Zadbaj o to, żeby data została zapisana w formacie mmm-yyyy. Ćw Zaimportuj do Matlaba plik SP500.dat zawierający wartości indeksu giełdowego Standard & Poors 500, znajdujący się w katalogu Ćw MATLAB\R2009a\toolbox\finance\findemos. Dokonaj takiej restrukturyzacji danych, żeby mieć 4 zmienne zawierające dane numeryczne (OPEN, HIGH, LOW, CLOSE) oraz zmienną z datami. a) Wczytaj do programu Matlab dane z pliku Agora.mst (plik pochodzi ze strony dostępny również na Moodle) tak, by otrzymać zmienne OPEN, HIGH, LOW, CLOSE, VOLUME oraz zmienną z datami zapisanymi w formacie dd-mmm-yyyy. W kreatorze importu tekstu zaznacz pole Generate M-code. b) Korzystając z wygenerowanego kodu, wczytaj dane z pliku Apator.mst (j.w.). c) Narysuj wykres liniowy cen otwarcia dla 200 ostatnich notowań cen akcji Apatora. d) Na wykresie słupkowym przedstaw dzienny obrót akcji Apatora z ostatnich 50 dni. 8 WMiI UMK niestety nie posiada żadnego z tych narzędzi. 9 Takie serwisy są najczęściej płatne i musimy wcześniej wykupić odpowiedni abonament.

62 62 Rozdział 2. Wizualizacja danych giełdowych e) Przedstaw ceny otwarcia, zamknięcia, cenę najwyższą i najniższą dla akcji Apatora kolejno na wykresach OHLC, świecowym (ostatnie 50 notowań) oraz wstędze Bollingera (tylko cenę zamknięcia, ostatnie 200 notowań). f) Z wczytanych danych utwórz szereg czasowy. Dokonaj wizualizacji szeregu, używając funkcji chartfts Zadania Zad Wczytaj do programu Matlab dane z pliku Zywiec.dat (dane pochodzą ze strony plik dostępny na Moodle). Napisz skrypt, który będzie a) z tabeli danych data i textdata wyodrębniał zmienne OPEN, HIGH, LOW, CLOSE, VOLUME oraz zmienną z datami zapisanymi w formacie dd-mmmyyyy, b) rysował wykres liniowy cen otwarcia dla 1000 ostatnich notowań cen akcji Żywca, c) rysował wykres słupkowy przedstawiający dzienny obrót akcji Żywca z ostatnich 60 dni, d) prezentował ceny otwarcia, zamknięcia, cenę najwyższą i najniższą dla akcji Żywca kolejno na wykresach OHLC, świecowym (ostatnie 60 notowań) oraz wstędze Bollingera (tylko cenę zamknięcia, ostatnie 1000 notowań), e) z wczytanych danych tworzył szereg czasowy oraz wizualizował ten szereg, używając funkcji chartfts. Skrypt przystosuj do publikacji jako HTML.

63 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie 3.1. Najważniejsze modele kapitalizacji Jedną z podstawowych kwestii, którą zajmuje się matematyka finansowa, jest porównywanie wartości pieniądza w różnych momentach czasu. Złotówkę, która posiadamy teraz, możemy wpłacić na bezpieczną lokatę bankową i za rok, dzięki odsetkom, wypłacić kwotę odpowiednio większą. Przyszła wartość naszej złotówki jest więc większa od obecnej. Z drugiej strony, jeżeli wiemy, że za rok będziemy potrzebowali złotówki, możemy dziś wpłacić na konto mniejszą kwotę, która za rok, po dopisaniu do niej odsetek, da nam potrzebną złotówkę. Wynika stąd, że obecna wartość tej złotówki jest mniejsza od przyszłorocznej. Wprowadzimy najpierw kilka podstawowych pojęć. Przez K t oznaczać będziemy kapitał posiadany w chwili czasu t. 1 W szczególności K 0 nazywać będziemy kapitałem początkowym, czyli pierwotnie zainwestowaną kwotą pieniędzy. Przyjmujemy, że podstawową jednostką czasu (okresem bazowym) jest 1 rok, tak więc K 1/12 oznaczać będzie nasz kapitał po miesiącu, K 1/2 po pół roku, K 1 po roku itd. Liczbę K 1 K 0 nazywać będziemy zyskiem (rocznym) albo odsetkami (rocznymi). Stosunek zysku do zainwestowanego kapitału r = K 1 K 0 K 0 (3.1) nazywać będziemy stopą procentową 2 (roczną) (ang. interest rate). Wzór (3.1) zapisujemy często w innej formie K 1 = K 0 + rk 0 = K 0 (1 + r). Wielkość (1 + r) nazywamy czynnikiem oprocentowującym. Należy pamiętać, że stopa procentowa jest ściśle związana z wybraną jednostką czasu (okresem bazowym). Zmiana tej jednostki prowadzi do innej wartości stopy procentowej. Na rynku funkcjonuje wiele różnych stóp procentowych. Najważniejsze polskie stopy procentowe to ustalane przez NBP: stopa referencyjna, stopa lombardowa, stopa depozytowa, stopa redyskontowa oraz ustalane przez 13 banków stopy WIBOR i WiWID. W naszych rozważaniach najczęściej będziemy posługiwali się tzw. stopą procentową wolną od 1 K możemy traktować jako funkcję z R + w R +. 2 Często r nazywać będziemy stopą zwrotu (ang. rate of return). 63

64 64 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie ryzyka (ang. risk-free interest rate). Pojęcie to odnosi się do stopy, przy której udzielenie pożyczki lub lokata terminowa nie są zagrożone możliwością niewywiązania się drugiej strony takiej transakcji z warunków umowy. Jest to wielkość teoretyczna, w praktyce przyjmujemy najczęściej, że jest ona równa oprocentowaniu gwarantowanemu przez krótkoterminowe obligacje rządowe. Są one powszechnie uważane za bezpieczny papier wartościowy, choć oczywiście nie można całkowicie wykluczyć przypadku, że państwo stanie się niewypłacalne. Z reguły będziemy zakładać, że stopa ta jest stała w czasie i nie zależy od długości inwestowania. Będziemy zakładać również, że oprocentowanie lokat i kredytów jest jednakowe. Jest to oczywiście pewne uproszczenie, ale w stosunku do dużych i wiarygodnych inwestorów nie odbiega zbytnio od rzeczywistości. Proces dopisywania odsetek do kapitału nazywamy kapitalizacją. Wyróżniamy dwa podstawowe sposoby naliczania odsetek: kapitalizację prostą i złożoną. Kapitalizacja prosta polega na obliczaniu odsetek od tego samego stałego kapitału początkowego. Same odsetki nie są kapitalizowane w następnych okresach. Możemy zakładać, że nie są one dopisywane do kapitału, ale są od razu wypłacane posiadaczowi tego kapitału. Schemat kapitalizacji prostej wygląda następująco: K 0, K 1 = K 0 + rk 0 = K 0 (1 + r), K 2 = K 1 + rk 0 = K 0 (1 + 2r),. K n = K n 1 + rk 0 = K 0 (1 + nr). Kapitalizacja złożona polega na każdorazowym dopisywaniu odsetek do kapitału. Przynoszą one dodatkowy zysk w następnym okresie, ponieważ są również kapitalizowane. Schemat kapitalizacji złożonej wygląda tak: K 0, K 1 = K 0 + rk 0 = K 0 (1 + r), K 2 = K 1 (1 + r) = K 0 (1 + r) 2,. K n = K n 1 (1 + r) = K 0 (1 + r) n. W dalszej części skryptu stosować będziemy głównie kapitalizację złożoną. W obu opisanych modelach odsetki dopisywane były na końcu każdego okresu. Jest to tzw. kapitalizacja z dołu. Czasami rozważamy modele, w których odsetki dopisujemy na początku okresu, mówimy wówczas o kapitalizacji z góry. Do tej pory zakładaliśmy, że okres kapitalizacji jest równy okresowi stopy procentowej, tzn. że odsetki dopisywane są jednorazowo na końcu każdego okresu (roku). Często okres kapitalizacji jest mniejszy od okresu stopy procentowej, tzn. odsetki dopisywane są częściej, np. raz w miesiącu. Mówimy wówczas o kapitalizacji w podokresach. W dalszym ciągu zakładać będziemy, że okres stopy procentowej = m okres kapitalizacji, gdzie m N.

65 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie 65 Najczęściej używane wartości m to: m = 1 m = 2 m = 4 m = 12 m = 360 (lub 365) m = 8640 kapitalizacja roczna, kapitalizacja półroczna, kapitalizacja kwartalna, kapitalizacja miesięczna, kapitalizacja dzienna, kapitalizacja godzinna. Niech r będzie roczną stopą procentową, a kapitalizacja dokonywana będzie w m podokresach. Wówczas kapitał po n podokresach wynosić będzie: K n/m = K 0 ( 1 + r m) n. Liczbę r (m) = r/m nazywamy wówczas względną stopą procentową, a liczbę r nominalną stopą procentową (ang. nominal interest rate). Z powyższych wzorów wynika, że wartość kapitału po roku wynosi K 1 = K m/m = K 0 (1 + r m )m. Efektywną stopą procentową (roczną) (ang. effective interest rate) nazywamy liczbę r (m) eff spełniającą równanie K 0 (1 + r (m) eff ) = K ( r m m). (3.2) Jest to taka wartość stopy procentowej, dla której zysk przy kapitalizacji rocznej jest taki sam, jak zysk przy kapitalizacji w m podokresach z względną stopą r. Z wzoru (3.2) m łatwo wynika, że r (m) eff = ( 1 + r m) m 1. Możemy rozważać też problem odwrotny, przy ustalonej stopie efektywnej r (m) eff i ustalonej liczbie podokresów m znaleźć wartość nominalnej stopy procentowej r spełniającą równanie (3.2). Nietrudno zauważyć, że jest ona równa: [ ( ) ] 1/m r = m 1 + r (m) eff 1. Stopa względna odpowiadająca tej stopie efektywnej jest oczywiście równa ( ) 1/m r (m) = r = 1 + r (m) m 1. Matlab udostępnia dwie funkcje effrr i nomrr służące do zamiany stopy nominalnej na efektywną i odwrotnie. Przyjmują one dwa parametry: stopę procentową, którą chcemy zamienić i liczbę podokresów. Przykład 3.1. Załóżmy, że nominalna stopa procentowa wynosi r = 0,08. W przypadku kapitalizacji miesięcznej stopa efektywna wynosi > > effrr(0.08,12) eff

66 66 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie a w przypadku kapitalizacji dziennej > > effrr(0.08,360) Możemy sprawdzić nasze obliczenia i wyznaczyć nominalną stopę procentową: > > nomrr(0.0830,12) Widzimy, że wraz ze wzrostem liczby podokresów stopa efektywna rośnie. Możemy wyobrazić sobie, że kapitalizację wykonujemy w każdej chwili, tzn. przechodzimy z m do nieskończoności. Efektywna stopa procentowa rośnie wówczas do [( r eff = lim 1 + r m ] m m) 1 = e r 1, a czynnik oprocentowujący wynosi 1 + r eff = e r. Liczbę r nazywamy wówczas intensywnością oprocentowania. Dopisywanie odsetek w sposób ciągły może wydawać się nieco sztuczne, lecz upraszcza wiele obliczeń. Możemy np. wyznaczyć wartość kapitału w dowolnej chwili t, a nie tylko w momentach będących wielokrotnościami okresu kapitalizacji. Nietrudno zauważyć, że wynosi ona K t = e rt K 0. Do tej pory zajmowaliśmy się odpowiedzią na pytanie, jaka będzie wartość naszego kapitału w przyszłości. Możemy odwrócić problem jaką kwotę musimy mieć teraz, aby w przyszłości wartość naszego kapitału wynosiła K t. Inaczej mówiąc, jaka jest obecna wartość tego kapitału. Wartość ta zależy oczywiście od używanego modelu kapitalizacji. Jeżeli np. stosujemy kapitalizację złożoną z roczną stopą procentową r, to z podanych wcześniej wzorów wynika, że K n = K 0 (1 + r) n. Stąd oczywiście wynika, że obecna wartość kapitału K n to K 0 = K n (1 + r) n. Operację obliczania wartości obecnej nazywamy dyskontowaniem, a liczbę (1 + r) 1 czynnikiem dyskontującym (ang. discount factor). Jeżeli stosujemy ciągły model kapitalizacji z intensywnością oprocentowania r, to K 0 = e rt K t Strumień pieniądza w czasie Przejdziemy teraz do obliczania wartości strumienia pieniądza w czasie. Strumieniem pieniądza (ang. cash flow) (dyskretnym) nazywamy ciąg płatności C k w określonych mo-

67 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie 67 mentach czasu t = t 0, t 1,..., t k. Najczęściej momenty te są równomiernie rozłożone, płatności następują np. na końcu każdego roku, wówczas t = 0, 1, 2,..., k. Przyjmujemy następującą konwencję: jeżeli my płacimy komuś, to płatność zapisujemy ze znakiem minus (C k < 0), jeżeli ktoś nam płaci, to ze znakiem plus (C k > 0). Niech C 0, C 1,..., C n będzie strumieniem pieniądza. Załóżmy, że C 0 oznacza płatność dokonaną w chwili początkowej t = 0, C 1 płatność dokonaną na końcu pierwszego roku, C 2 drugiego itd. Niech r będzie roczną stopą procentową. Załóżmy, że stosujemy kapitalizację złożoną roczną z dołu. Ile będzie wynosić wartość tego strumienia na końcu n-tego roku? Wielkość tę nazywamy wartością przyszłą strumienia i oznaczamy symbolem FV(z ang. future value). Jak łatwo sprawdzić, w naszym przypadku FV n = n C k (1 + r) n k. (3.3) k=0 Widzimy, że płatność początkowa jest kapitalizowana n razy, następna n 1 razy, a ostatnia płatność C n w ogóle nie jest kapitalizowana. W przypadku, gdy stosujemy inny model kapitalizacji, wzór (3.3) zmienia się. Jeżeli np. płatności dokonywane są m razy do roku w równych odstępach czasu, to wartość przyszła po n latach wynosić będzie mn FV n = C k (1 + r/m) nm k. k=0 Jeżeli płatności nie są dokonywane regularnie, ale w dowolnych momentach t 0, t 1,..., t n, to wzór może przyjąć skomplikowaną postać. W takim przypadku wygodniej jest użyć ciągłego modelu kapitalizacji. Otrzymujemy wówczas FV tn = n C k e tn t k. k=0 W Matlabie do obliczania wartości przyszłej służy funkcja fvvar. Jeżeli strumień składa się z płatności wykonywanych w regularnych odstępach, to wywołujemy ją w następujący sposób: fvvar(str,r), gdzie str jest wektorem zawierającym kolejne płatności, a r okresową stopą procentową. Zakładamy, że płatności dokonywane są na końcu każdego okresu. Funkcja zwraca wartość przyszłą strumienia w momencie dokonywania ostatniej płatności. Przykład 3.2. Załóżmy najpierw, że strumień składa się tylko z jednej płatności. Jego wartość obliczana jest w momencie jej dokonania, zatem nie są dopisywane żadne odsetki. > > fvvar([100],0.07) 100 Jeżeli dodamy drugą płatność (chociażby o zerowej wartości), to obliczona zostanie wartość strumienia na końcu drugiego okresu, do pierwszej płatności zostaną zatem dopisane odsetki. > > fvvar([100 0],0.07)

68 68 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie 107 Załóżmy, że roczna stopa procentowa wynosi 7%. Wpłacamy na konto najpierw 100 zł, po roku 300 zł, a po kolejnym roku 200 zł. Jaka będzie wartość naszej lokaty po dokonaniu ostatniej wpłaty, a jaka po 4 latach od dokonania pierwszej wpłaty? > > fvvar([ ],0.07) > > fvvar([ ],0.07) Funkcja fvvar pozwala obliczać wartość przyszłą również w przypadku, gdy wpłaty nie są dokonywane regularnie. Wywołujemy ją wówczas z dodatkowym parametrem fvvar(str,r,daty). Drugi parametr jest w tym przypadku roczną stopą procentową. Trzeci parametr to wektor zawierający daty, w których dokonywane są płatności. Przykład 3.3. Obliczmy wartość przyszłą następującego strumienia: 10 grudnia zł, 13 lutego zł, 14 maja zł, 5 listopada zł, 2 grudnia zł. Jaka będzie wartość tego strumienia 2 grudnia 2010 roku, jeżeli roczna stopa procentowa wynosi 8%? > > str = [ ]; > > r = 0.08; > > daty = [ 10-Dec-2007 ; 13-Feb-2008 ; 14-May-2008 ; 05-Nov-2009 ; 02-Dec-2010 ]; > > fvvar(str,r,daty) Jeżeli płatności mają zawsze tę samą wartość i dokonywane są regularnie (np. wpłacamy na lokatę po 100 zł co miesiąc przez 20 lat), to do obliczania wartości przyszłej wygodniej jest użyć funkcji fvfix(r,n,c,c0,d). Jej trzy pierwsze parametry są obowiązkowe: r to okresowa stopa procentowa, n liczba okresów, a C wysokość pojedynczej płatności. Opcjonalnie możemy podać początkową wartość strumienia (domyślnie C0=0) i określić, czy płatności dokonywane będą na końcu (d=0, wartość domyślna), czy na początku (d=1) każdego okresu. Przykład 3.4. Załóżmy, że początkowy stan naszego konta to 1500 zł. Przez 20 lat na końcu każdego miesiąca wpłacamy na konto 200 zł. Zakładając, że roczna stopa procentowa jest w tym okresie stała i wynosi 8%, a odsetki dopisywane są co miesiąc, obliczyć stan lokaty po 20 latach. > > fvfix(0.08/12, 12 * 20, 200, 1500 )

69 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie Obecna wartość (ang. present value (PV)) przyszłej kwoty pieniądza to ilość pieniędzy, jaką należy wpłacić dziś na rachunek bankowy, aby w przyszłości otrzymać daną kwotę. Inaczej mówiąc, jest to zdyskontowana wartość tej kwoty. Wartość obecna strumienia pieniądza jest równa sumie wartości obecnych poszczególnych płatności należących do tego strumienia. Niech C 0, C 1,..., C n będzie strumieniem pieniądza, a r będzie roczną stopą procentową. Zakładamy, że stosujemy kapitalizację złożoną roczną z dołu. Wówczas PV = n k=0 C k (1 + r) k. Jeżeli stosujemy ciągły model kapitalizacji, a strumień składa się z płatności wykonywanych w momentach t 0, t 1,..., t n, to PV = n C k e rt k. k=0 Warto zauważyć, że między wartością przyszłą FV n, a wartością obecną PV zachodzą związki FV n = PV (1 + r) n w przypadku dyskretnym i FV t = PV e rt. w przypadku ciągłym. W Matlabie do obliczania wartości obecnej służą funkcje pvvar(str,r,daty) i pvfix(r,n,c,cn,d). Używamy ich w sposób podobny do funkcji fvvar i fvfix. Jedyna różnica to czwarty parametr funkcji pvfix. Cn oznacza dodatkową płatność dokonywaną w ostatnim momencie Mierniki oceny inwestycji finansowych Wartość obecna jest często stosowanym kryterium opłacalności inwestycji. Załóżmy, że w czasie trwania inwestycji ma miejsce n+1 przepływów gotówki C 0, C 1,..., C n w momentach 0, 1, 2,... n. Najczęściej (choć nie zawsze) C 0 < 0 na początku inwestujemy pieniądze, i C k 0 dla k 1 inwestycja przynosi nam zysk. Wartością obecną netto (ang. net present value (NPV)) tej inwestycji nazywamy liczbę NPV = n k=0 C k (1 + r) k. Jeżeli NPV < 0, to inwestycja jest nieopłacalna, lepiej wpłacić pieniądze na lokatę bankową. Jeżeli NPV > 0, to warto zainwestować.

70 70 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie Przykład 3.5. Znajomy proponuje nam, żebyśmy zainwestowali w jego firmę zł. Obiecuje, że w pięciu kolejnych latach inwestycja przyniesie nam zyski równe odpowiednio 3000 zł, 2500 zł, 3000 zł, 2000 zł i 2000 zł. Czy warto przyjąć propozycję, jeżeli roczna stopa procentowa wynosi a) 7%, b) 10%? > > str = [ ]; > > r = 0.07; > > pvvar(str,r) Wynika stąd, że warto zainwestować. Czy na pewno? Sprawdźmy. Jeżeli wpłacimy zł na lokatę bankową, to po 5 latach otrzymamy: > > 10000*(1+0.07)ˆ Jeżeli zainwestujemy w firmę znajomego, a wypłacane zyski będziemy wpłacać na lokatę, to po 5 latach jej stan wynosić będzie: 3 > > 3000*(1.07)ˆ *(1.07)ˆ *(1.07)ˆ *(1.07) Zysk jest o około 544,18 zł większy. Warto zauważyć, że taka jest właśnie przyszła wartość naszej inwestycji > > fvvar(str,r) Sprawdźmy teraz, czy sytuacja zmieni się, jeżeli stopa procentowa wzrośnie do 10%. > > r = 0.1; > > pvvar(str,r) Widzimy, że inwestycja przestała być opłacalna. Rzeczywiście, zł wpłacone na lokatę po 5 latach da nam > > 10000*(1+0.1)ˆ Wpłacanie na lokatę zysków z inwestycji przyniesie tylko > > 3000*(1.1)ˆ *(1.1)ˆ *(1.1)ˆ *(1.1) Powyższy przykład pokazuje, że dla niższej stopy procentowej bardziej opłacalna była inwestycja w firmę, a dla wyższej wpłata pieniędzy na lokatę bankową. Możemy sobie zadać pytanie, czy istnieje taka wartość stopy procentowej, że obie te inwestycje będą jednakowo opłacalne? Inaczej mówiąc, czy istnieje taka wartość stopy procentowej, dla 3 Możemy to obliczyć prościej: fvvar([ ],r), lub jeszcze krócej: fvvar(str(2:6),r).

71 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie 71 której wartość obecna inwestycji jest równa zero? Niech C 0, C 1,..., C n będzie strumieniem pieniądza. Wewnętrzną stopą zwrotu (ang. internal rate of return (IRR)) nazywamy taką wartość stopy procentowej, dla której obecna wartość strumienia jest równa zero. Inaczej mówiąc, jest to wartość r spełniająca równanie NPV = n k=0 C k (1 + r) k = 0 (3.4) lub, w przypadku kapitalizacji ciągłej, NPV = n C k e rt k = 0. k=0 W Matlabie do wyznaczania wewnętrznej stopy zwrotu służy funkcja irr. Przykład 3.6. Wyznaczymy wewnętrzną stopę zwrotu dla strumienia z poprzedniego przykładu: > > irr([ ]) Rzeczywiście, > > pvvar([ ],ans) 0 Przy takiej stopie procentowej nie ma znaczenia, czy zainwestujemy w firmę znajomego, czy wpłacimy pieniądze na lokatę bankową. Niestety przy obliczaniu wewnętrznej stopy zwrotu mogą pojawić się problemy. Równanie (3.4) może nie mieć rozwiązania, może mieć więcej niż jedno rozwiązanie, może mieć też tylko rozwiązania zespolone. Znane są twierdzenia podające warunki, jakie musi spełniać strumień, aby równanie (3.4) miało jednoznaczne rozwiązanie rzeczywiste. Jedno z takich twierdzeń mówi, że wystarczy, aby wszystkie wpłaty nastąpiły przed wypłatami, (tzn. w strumieniu najpierw wystąpiły wszystkie wartości niedodatnie, a dopiero po nich nieujemne) oraz przynajmniej jedna wpłata i jedna wypłata były różne od zera. W naszym przykładzie warunki te były oczywiście spełnione. Wewnętrzna stopa zwrotu może posłużyć jako kryterium opłacalności inwestycji. Jeżeli jest ona wyższa od obowiązującej na rynku stopy procentowej, to inwestycja warta jest rozważenia, w przeciwnym wypadku lepiej włożyć pieniądze do banku. Wewnętrznej stopy zwrotu nie należy natomiast używać do porównywania różnych projektów. Może się zdarzyć, że projekt A ma wyższą wewnętrzną stopę zwrotu niż projekt B, a mimo to bardziej opłacalna jest inwestycja w ten drugi projekt. Przy obliczaniu wewnętrznej stopy zwrotu zakłada się bowiem, że wszystkie zyski, jakie przynosi projekt, są inwestowane w ten sam projekt lub w inny o takiej samej rentowności. Założenie to nie zawsze jest spełnione, często zyski inwestuje się w inne projekty o niższej stopie zwrotu. Również koszty pozyskania kapitału są zazwyczaj różne od wewnętrznej stopy zwrotu. Bardziej wiarygodnym kryterium oceny może być tzw. zmodyfikowana wewnętrzna stopa zwrotu (ang. modified internal rate of return (MIRR)). Uwzględnia ona wymienione wyżej problemy, ma również tę zaletę, że zawsze jest jednoznacznie wyznaczona. Aby obliczyć zmodyfikowaną

72 72 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie wewnętrzną stopę zwrotu w Matlabie, używamy funkcji mirr(str,r1,r2), gdzie r1 jest stopą procentową, według której pozyskujemy kapitał, a r2 stopą procentową, według której reinwestujemy zyski z projektu Spłata kredytu Najważniejszymi wartościami charakteryzującymi kredyt są: jego wysokość P, oprocentowanie r, czas spłaty n i wysokość raty C. Ograniczymy się do najprostszego przypadku, gdy oprocentowanie jest stałe przez cały okres spłaty pożyczki, raty są płacone w równych odstępach czasu i są równej wysokości (są to tzw. raty annuitetowe). Wówczas parametry charakteryzujące kredyt są powiązane następującym wzorem: P = n k=1 C (1 + r) k. (3.5) Korzystając z wzoru (3.5), możemy obliczyć dowolny parametr kredytu, jeżeli znamy trzy pozostałe. 4 Matlab udostępnia trzy funkcje pozwalające wyznaczać parametry takich kredytów. Pierwsza z tych funkcji to payper(r,n,pv,fv,d). Dla danej okresowej stopy procentowej r, liczby okresów spłaty n oraz obecnej wysokości kredytu pv wyznacza ona wysokość raty. Dodatkowo możemy podać wartość kredytu fv, którą chcemy osiągnąć po n okresach, domyślnie jest to 0 (tzn. chcemy spłacić cały kredyt) oraz informację, czy raty będziemy płacić na końcu każdego okresu (d=0, wartość domyślna), czy na początku d=1. Przykład 3.7. Załóżmy, że bierzemy kredyt w wysokości zł i musimy go spłacić w ciągu 5 lat. Ile powinna wynosić miesięczna rata, jeżeli roczna stopa procentowa wynosi 10%? > > payper(0.1/12,5*12,10000) Miesięczna rata wynosi nieco ponad 212 zł. Jeżeli znamy obecną wysokość kredytu pv, wysokość pojedynczej raty c oraz okresową stopę procentową r, to za pomocą funkcji annuterm(r,c,pv,fv,d) możemy obliczyć, jak długo będziemy musieli spłacać kredyt. Pozostałe dwa parametry tej funkcji są opcjonalne i ich znaczenie jest takie samo jak w przypadku funkcji payper. Przykład 3.8. Tak samo jak w poprzednim przykładzie bierzemy kredyt w wysokości zł, roczna stopa procentowa wynosi 10%, a wysokość miesięcznej raty to 212,47 zł. Jak długo będziemy musieli spłacać taki kredyt? > > annuterm(0.1/12,212.47,-10000) Kredyt będziemy spłacać przez 60 miesięcy, czyli 5 lat. Wynik ten zgadza się z poprzednim przykładem. Zauważmy, że wysokość kredytu podaliśmy ze znakiem minus. 4 Łatwo możemy otrzymać wzory na P, C i n. Wyznaczenie r może być trudne.

73 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie 73 Załóżmy teraz, że znane są wysokość kredytu pv, wysokość raty c oraz liczba okresów spłaty n. Na podstawie tych danych za pomocą funkcji annurate(n,c,pv,fv,d) możemy wyznaczyć wysokość okresowej stopy procentowej. Przykład 3.9. Ponownie bierzemy kredyt w wysokości zł i spłacamy go w całości w ciągu 5 lat w miesięcznych ratach w wysokości 212,47 zł. Ile wynosi oprocentowanie tego kredytu? > > annurate(5*12, , 10000) Jest to miesięczna stopa procentowa, aby otrzymać roczną trzeba ją przemnożyć przez 12. > > ans * Czyli około 10%. Pozostała jeszcze jedna możliwość: znamy wysokość raty, oprocentowanie i okres spłaty kredytu. Za pomocą omawianej wcześniej funkcji pvfix możemy obliczyć początkową wysokość kredytu: > > pvfix(0.1/12, 5*12, ) Na koniec omówimy funkcję amortize(r,n,pv,fv,d). Przyjmuje ona takie same argumenty jak funkcja payper, ale pozwala uzyskać bardziej szczegółowe informacje na temat miesięcznej raty. Wiadomo, że każda rata składa się z części kapitałowej przeznaczonej na spłatę podstawowej pożyczki oraz z części odsetkowej przeznaczonej na spłatę odsetek. Funkcja amortize zwraca cztery wartości. Dwie pierwsze to n-elementowe wektory zawierające części kapitałowe i odsetkowe każdej z rat. Trzecia ze zwracanych wartości to również n-elementowy wektor zawierający wartości długu bieżącego po każdym okresie (czyli ile zostało jeszcze do spłaty), a czwarta to skalar zawierający wysokość miesięcznej raty. Przykład Sprawdźmy, jak zmieniają się części odsetkowe i kapitałowe raty dla danych z naszego przykładu. Aby zaoszczędzić miejsce, podajemy tylko trzy pierwsze i trzy ostatnie wartości każdego z 60-elementowych wektorów. > > [rkap rods biez rata] = amortize(0.1/12, 5*12, 10000) rkap = rods = biez = rata =

74 74 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie Widzimy, że wraz ze spłatą długu, część kapitałowa raty rośnie, a odsetkowa maleje. Na początku odsetki stanowią około 40% raty, na końcu jest to już niecały 1%. Wartość bieżąca długu maleje oczywiście do zera Ćwiczenia Ćw Napisz funkcję kapital, która dla podanych wartości rocznej stopy procentowej, liczby podokresów kapitalizacji, długości lokaty (w podokresach kapitalizacji) oraz kapitału początkowego obliczy wysokość kapitału końcowego oraz poda wartość efektywnej stopy zwrotu. Przy pomocy utworzonej funkcji porównaj dwie 24-miesięczne lokaty o wysokości zł, z których jedna jest oprocentowana na 5,5% rocznie, przy czym kapitalizacja odsetek odbywa się miesięcznie, a druga na 6% rocznie przy kapitalizacji co pół roku. Ćw Napisz funkcję dlugosc_lokaty, która dla danych wartości rocznej stopy procentowej, liczby podokresów kapitalizacji, kapitału początkowego oraz oczekiwanego kapitału końcowego obliczy minimalną długość okresu, na który należy dokonać wpłaty na lokatę (w latach). Używając tej funkcji, oblicz, na ile miesięcy należy wpłacić zł na lokatę oprocentowaną na 6% rocznie z kapitalizacją kwartalną, aby odsetki wyniosły 2000 zł. Ćw Pan Kowalski założył dwa konta: po jednym dla syna i córki. Wysokość oprocentowania wynosi 3% miesięcznie. Synowi wpłaca regularnie po 100 zł miesięcznie, a córce co drugi miesiąc (zaczynając od 2. miesiąca) 200 zł. Ile wyniesie różnica pomiędzy kapitałem syna a kapitałem córki po 10 latach? Metodą prób i błędów ustal, o ile złotych więcej musiałby wpłacać ojciec na konto córki, żeby wartość ich kapitału po 10 latach była taka sama (z dokładnością do 1 zł). Ćw Masz do wyboru dwie opcje: dostawać co miesiąc przez 5 miesięcy po 300 zł lub dostawać co miesiąc kolejno 500 zł, 400 zł, 300 zł, 200 zł i 100 zł. Która opcja jest dla Ciebie bardziej korzystna, jeśli konto jest oprocentowane na 3% miesięcznie? Gdybyś miał zamienić bardziej korzystną opcję na możliwość otrzymania i wpłacenia na konto od razu całej kwoty, to jakiej kwoty mógłbyś zażądać? Sprawdź przyszłą wartość tej kwoty (uwaga: po 4, a nie 5 miesiącach!). Ćw [4, Zad str. 267] Inwestycja wymaga nakładu 500 zł dziś i generuje dochody na koniec kolejnych pięciu lat w kwotach 50, 100, 150, 200 i 250 zł. Oblicz wartość obecną netto tej inwestycji dla oprocentowania lokat i kredytów równego kolejno 10% i 14%. Zinterpretuj wyniki. Przy jakiej wartości oprocentowania inwestycja jest równoważna wpłacie wymaganego nakładu na konto? Ćw (Na podst. [4, Zad str. 151]) Pożyczamy znajomemu 1900 zł, proponując mu spłatę w 3 ratach rocznych po kolejno 610,45 zł, 720,65 zł i 1096,49 zł lub 4 ratach rocznych po kolejno 500,50 zł, 610,65 zł, 705,20 zł i 730,70 zł. Sprawdź, która z tych opcji jest dla nas korzystniejsza przy oprocentowaniu lokat i inwestycji równym 10%. Przy jakiej wartości oprocentowania pożyczanie pieniędzy znajomemu przestanie być dla nas opłacalne?

75 Rozdział 3. Podstawowe obliczenia finansowe w Matlabie 75 Ćw Pan Kowalski wziął jednocześnie dwa kredyty. Pierwszy na 5 lat, oprocentowany na 6% rocznie z miesięczną ratą w wysokości 270,66 zł. Drugi na 7 lat, oprocentowany na 6,5% rocznie z miesięczną ratą w wysokości 237,59 zł. W domu przemyślał sytuację i stwierdził, że nie będzie w stanie spłacać tych kredytów, gdyż łączna wysokość rat przekroczyła 500 zł. a) Pan Kowalski postanowił zamienić oba te kredyty na 7-letni kredyt konsolidacyjny oprocentowany na 6,25%. Wyznacz wysokość rat tego kredytu. b) Pan Kowalski postanowił zamienić oba te kredyty na kredyt konsolidacyjny oprocentowany na 6,25%, którego rata będzie wynosić 495 zł. Czy będzie go spłacał dłużej niż 6 lat? c) Przy jakim oprocentowaniu kredytu konsolidacyjnego pan Kowalski spłaci kredyt w ciągu 6 lat, płacąc po 500 zł miesięcznie? Ćw Napisz funkcję, która dla podanej wysokości kredytu, oprocentowania rocznego oraz zakresu okresu kredytowania (w miesiącach) będzie rysować wykres prezentujący zależność wysokości rat miesięcznych od okresu kredytowania. Ćw Dla 3-letniego kredytu w wysokości zł zaciągniętego przy oprocentowaniu równym 6% sporządź schemat spłaty, uwzględniając wysokość rat, wysokość ich części kapitałowej i odsetkowej oraz wartość bieżącego zadłużenia Zadania Zad Napisz funkcję podwojenie, która dla danych wartości oprocentowania rocznego oraz liczby okresów kapitalizacji będzie obliczała okres (w latach) po jakim wpłacany kapitał początkowy ulegnie podwojeniu. Dla kapitalizacji rocznej i oprocentowania rocznego zmieniającego się od 1 do 20 procent napisz skrypt porównanie, który utworzy wykres liniowy porównujący wyniki otrzymane za pomocą wspomnianej funkcji z wynikami otrzymanymi przy pomocy tzw. Reguły 70 ([4, str. 73]): Przy rocznej stopie r% i przy rocznym okresie kapitalizacji kapitał podwaja swoją wartość w czasie równym około 70/r lat. Zad Napisz funkcję, która dla podanej wysokości kredytu, oprocentowania rocznego oraz liczby miesięcznych rat będzie rysować w osobnych oknach a) zestawiony wykres słupkowy prezentujący wysokość rat z uwzględnieniem podziału rat na część kapitałową i odsetkową, b) wykres kołowy prezentujący udział procentowy części kapitałowej i odsetkowej w łącznej sumie rat, c) wykres liniowy prezentujący zmianę bieżącej wartości długu.

76

77 Rozdział 4. Obligacje 4.1. Wprowadzenie Obligacja (ang. bond) jest papierem wartościowym, w którym emitent (wystawca) stwierdza istnienie określonego zobowiązania finansowego w stosunku do nabywcy obligacji, zobowiązując się jednocześnie do jego spełnienia w określony sposób i w określonym czasie. Innymi słowy emitent potwierdza zaciągnięcie pożyczki w określonej kwocie i zobowiązuje się do jej zwrotu w określonym terminie. W odróżnieniu od akcji obligacje nie dają ich posiadaczowi żadnych uprawnień typu współwłasność, dywidenda, czy uczestnictwo w walnych zgromadzeniach. Obligacje mogą być emitowane przez skarb państwa, samorządy oraz przedsiębiorstwa. Obligacje emitowane są z określoną wartością nominalną (ang. face value, par value, principal). Jest to suma, jaką emitent zobowiązuje się wypłacić posiadaczowi obligacji po upływie terminu wykupu (ważności) (ang. maturity date). Dodatkowo co pewien ustalony okres (np. co rok lub co miesiąc) posiadaczowi obligacji wypłaca się odsetki ze względów historycznych nazywane kuponami (ang. coupons). Przynoszą one posiadaczowi pewien stały dochód, dlatego obligacje zaliczamy do tzw. fixed income securities. 1 Istnieją również tzw. obligacje zerokuponowe (ang. zero-coupon bonds), od których nie otrzymuje się odsetek. Po upływie terminu wykupu posiadacz obligacji otrzymuje od emitenta kwotę równą wartości nominalnej. Takie obligacje sprzedawane są z dyskontem, tzn. po cenie niższej od nominalnej. Obligacji nie musimy kupować bezpośrednio od ich wystawcy w momencie ich emisji 2, nie musimy ich też trzymać aż do momentu wykupu. Funkcjonuje dobrze rozwinięty wtórny rynek obligacji, na którym możemy je kupować i sprzedawać w dowolnym momencie. Pojawia się zatem problem właściwej wyceny obligacji Cena sprawiedliwa i arbitraż Zanim zajmiemy się wyceną obligacji musimy się zastanowić, jaka jest właściwa definicja ceny instrumentu finansowego i jakie warunki powinna ona spełniać. W matematyce 1 Czasami dochód ten zmienia się, wysokość kuponu może zależeć np. od aktualnej stopy procentowej. 2 Dlatego musimy odróżniać datę emisji (ang. issue date) od daty dokonania transakcji kupnasprzedaży (ang. settlement date). 77

78 78 Rozdział 4. Obligacje finansowej najczęściej korzystamy z pojęcia tzw. ceny sprawiedliwej (ang. fair price). Nazywamy tak cenę, która nie faworyzuje żadnej ze stron transakcji. Sprzedaż czy kupno po tej cenie nie powinny przynieść zysku ani straty. Inaczej mówiąc, jest to cena niedopuszczająca możliwości arbitrażu (ang. arbitrage), czyli osiągania zysku bez ponoszenia ryzyka. 3 Wyobraźmy sobie sytuację, że w banku A roczna stopa oprocentowania kredytów wynosi 10%, a w banku B roczna stopa oprocentowania depozytów wynosi 12%. Wówczas możemy zaciągnąć kredyt w banku A i wpłacić całą otrzymaną kwotę do banku B. Po upływie roku likwidujemy lokatę i zwracamy kredyt. Nietrudno zauważyć, że z każdej pożyczonej złotówki zostaną nam dwa grosze. Osiągnęliśmy więc zysk i to bez angażowania środków własnych. Przykład ten uzasadnia inną często spotykaną definicją arbitrażu. Jest to taka strategia gry rynkowej, w której startując z zerowego kapitału początkowego, nasz kapitał końcowy na pewno nie będzie ujemny, a z niezerowym prawdopodobieństwem będzie dodatni. Czyli na pewno nie stracimy, a być może nawet zyskamy. W praktyce na rynku występują możliwości arbitrażu, ale prawa rynku szybko je eliminują. Bank A z naszego przykładu po stwierdzeniu wzmożonego popytu na kredyty podniesie ich oprocentowanie, a duży napływ gotówki do banku B spowoduje spadek oprocentowania lokat i po niedługim czasie obie stopy procentowe powinny się wyrównać Wycena obligacji Na początku zajmiemy się przypadkiem obligacji zerokuponowej, o wartości nominalnej F. Załóżmy, że kupujemy ją dokładnie rok przed terminem ważności po cenie P. Roczna stopa zwrotu naszej inwestycji wynosi oczywiście r = F P P. Jeżeli to F i r są ustalone, to po przekształceniu otrzymamy wzór na bieżącą cenę obligacji P = F 1 + r. (4.1) Pozostaje pytanie: jaką wartość r powinniśmy wstawić do powyższego wzoru, aby otrzymana cena P była ceną sprawiedliwą, tzn. niedającą możliwości arbitrażu? Pokażemy, że r powinno być równe obowiązującej na rynku stopie procentowej wolnej od ryzyka. 4 Będziemy zakładać, że kredyty i lokaty są tak samo oprocentowane. Jest to założenie nierealistyczne, aczkolwiek dla dużych i wiarygodnych inwestorów nie całkiem pozbawione sensu. Załóżmy najpierw, że obligacje są sprzedawane po cenie P 1 niższej niż ta określona wzorem (4.1), tzn. P 1 < P = F 1 + r. 3 Dlatego cenę sprawiedliwą często nazywamy ceną arbitrażową. 4 W praktyce często mamy do czynienia z sytuacją odwrotną. To ustalona przez skarb państwa cena obligacji wyznacza stopę procentową wolną od ryzyka.

79 Rozdział 4. Obligacje 79 Wówczas możemy pożyczyć kwotę P 1 i kupić za nią jedną obligację. Po roku za obligację otrzymamy F i zwracamy dług, który wraz z odsetkami wynosi P 1 (1 + r). Ponieważ P 1 < P, to F P 1 (1 + r) > F P (1 + r) = 0. Widzimy, że udało nam się osiągnąć zysk bez żadnego wkładu własnego. Istnieje zatem możliwość arbitrażu. Załóżmy teraz, że obligacje sprzedawane są po cenie P 1 wyższej niż ta ze wzoru (4.1), tzn. P 1 > P = F 1 + r. Tym razem zamiast gotówki pożyczamy jedną obligację i sprzedajemy ją po cenie P 1. Taką operację nazywamy krótką sprzedażą (ang. short selling). W praktyce jest ona obłożona wieloma ograniczeniami, ale w modelach teoretycznych zwykle zakłada się, że jest ona dopuszczalna. Pieniądze otrzymane ze sprzedaży obligacji wpłacamy na lokatę bankową. Po roku wartość lokaty wzrośnie do P 1 (1 + r). Po oddaniu poprzedniemu właścicielowi obligacji jej wartości nominalnej F w portfelu zostaje nam kwota P 1 (1 + r) F > P (1 + r) F = 0. Znowu osiągnęliśmy zysk bez żadnego wkładu własnego. Wynika stąd, że P określone wzorem (4.1) jest jedyną ceną niedającą możliwości arbitrażu, czyli ceną sprawiedliwą. Przejdźmy teraz do wyceny obligacji kuponowych. Przynoszą one ich posiadaczowi pewien dodatkowy dochód wypłacany przed terminem wykupu. Wysokość tego dochodu najczęściej wyraża się jako pewien procent nominalnej wartości obligacji, nazywany stopą oprocentowania obligacji (ang. coupon rate). Jeżeli np. nominalna wartość obligacji wynosi 100 zł, a jej stopa oprocentowania 8%, to posiadacz obligacji co roku otrzyma 8 zł, a w terminie wykupu 108 zł (wartość nominalna plus ostatni kupon). Zdarza się, że kupony wypłacane są częściej, np. co pół roku. Wówczas posiadacz otrzymuje 4 zł co 6 miesięcy. Załóżmy, że wartość nominalna obligacji wynosi F, wysokość pojedynczego kuponu C, a do terminu wykupu zostało n lat. Postępując podobnie jak w przypadku obligacji zerokuponowych, można pokazać, że sprawiedliwa cena takiej obligacji wynosi P = n k=1 C (1 + r) + F k (1 + r), (4.2) n gdzie r jest roczną stopą procentową. Jeżeli kupony wypłacane są częściej, np. m razy do roku, to m n C/m P = (1 + r/m) + F k (1 + r/m). m n k=1 Zauważmy, że cena obligacji jest wartością bieżącą strumienia pieniądza związanego z tą obligacją. Znając bieżącą cenę obligacji i jej wszystkie parametry, możemy zadać sobie pytanie, jaki dochód ona przynosi. Musimy rozwiązać równanie P = m n k=1 C/m (1 + λ/m) k + F (1 + λ/m) m n

80 80 Rozdział 4. Obligacje ze względu na λ. Otrzymane rozwiązanie nazywamy wewnętrzną wartością obligacji lub stopą dochodu w terminie do wykupu (ang. yield to maturity). W praktyce przy wycenie obligacji pojawia się jeszcze jeden problem. Obligacjami możemy handlować w dowolnym momencie. Jeżeli kupujemy obligację w dniu znajdującym się pomiędzy dniami, w których wypłacane są kupony, część wartości następnego kuponu należy się poprzedniemu właścicielowi obligacji. Jeżeli np. kupony wypłacane są co roku, a my kupujemy obligację 3 miesiące przed następnym terminem płatności, to musimy zapłacić poprzedniemu właścicielowi dodatkowo 3/4 wartości kuponu. Tę dodatkową kwotę nazywamy narosłymi odsetkami (ang. accrued interest). Cenę uwzględniającą te odsetki nazywamy ceną brudną (ang. dirty price), a cenę bez nich ceną czystą (ang. clean price). Aby prawidłowo obliczać narosłe odsetki, musimy umieć wyznaczyć liczbę dni pomiędzy dwiema datami, musimy też umieć stwierdzić, jaką część okresu płatności kuponu stanowi ta liczba. Wyniki tych obliczeń zależą od przyjętego systemu obliczania liczby dni w roku i w miesiącu. Nie będziemy wyprowadzać tu konkretnych wzorów na cenę obligacji, omówimy natomiast funkcje Matlaba, które pozwalają wykonywać takie obliczenia Matlab a obligacje Matlab udostępnia wiele funkcji związanych z wyceną obligacji. Omówimy tu tylko najważniejsze z nich. Pierwsza z tych funkcji jest bndprice. Służy ona do wyznaczania ceny obligacji, a wywołujemy ją tak: [Price, AccruedInt] = bndprice(yield, CouponRate, Settle, Maturity, Period, Basis, EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate, StartDate, Face) Na szczęście wystarczy podać tylko 4 pierwsze argumenty, pozostałe są opcjonalne, jeżeli ich nie podamy, to przyjmą wartości domyślne. Cztery parametry obowiązkowe to: Yield stopa dochodu w terminie do wykupu, przy założeniu, że kupony wypłacane są dwa razy do roku, CouponRate roczne oprocentowanie wyznaczające wartość kuponów (np. dla 0,06 wartość kuponu wynosi 6), Settle data kupna/sprzedaży obligacji, Maturity data wykupu obligacji. Wywołanie funkcji tylko z tymi argumentami > > [Price, AccruedInt] = bndprice(yield, CouponRate, Settle, Maturity) zwróci nam cenę czystą (Price) i narosłe odsetki (AccruedInt) obligacji o cenie nominalnej 100 z kuponami wypłacanymi co pól roku. Cena brudna tej obligacji to oczywiście Price + AccruedInt. Przykład 4.1. Wyznaczymy cenę obligacji o następujących parametrach: > > Yield = 0.07;

81 Rozdział 4. Obligacje 81 > > CouponRate = 0.05; > > Settle = 01-Jan-2007 ; > > Maturity = 01-Jan-2010 ; > > [Price, AccruedInt] = bndprice(yield, CouponRate, Settle, Maturity) Price = AccruedInt = 0 Poprawność wyniku możemy sprawdzić za pomocą omawianej wcześniej funkcji pvvar. Strumień pieniądza generowany przez obligację to [ ]. W momencie zakupu nie dostajemy nic, potem co pól roku 2,5, a po trzech latach 100+2,5. Półroczna stopa procentowa to oczywiście 0,07/2 = 0,035. Stąd > > pvvar([ ],0.035) co potwierdza otrzymany wcześniej wynik. Ponieważ obligację kupiliśmy w dniu wypłaty odsetek, cena czysta równa się cenie brudnej. Jeżeli zmienimy datę zakupu > > Settle = 12-Feb-2007 > > [Price, AccruedInt] = bndprice(yield, CouponRate, Settle, Maturity) Price = AccruedInt = to pojawiają się dodatkowe odsetki. Opcjonalne parametry funkcji bndprice to: Period liczba kuponów wypłacanych co roku. Może być równa: 0, 1, 2, 3, 4, 5, 12. Wartością domyślną jest 2, co oznacza, że kupony wypłacane są co pół roku. Basis sposób obliczania liczby dni między datami. Parametr ten może przyjmować wartości od 0 do 12. Domyślna wartość 0 oznacza, że obliczana jest prawdziwa liczba dni, a rok ma zawsze prawdziwą długość. Jeżeli parametr ma wartość 1, to przy obliczeniach zakłada się, że każdy miesiąc ma 30 dni, a każdy rok 360. Znaczenie innych wartości tego parametru można znaleźć w dokumentacji Matlaba. EndMonthRule ma zastosowanie tylko w przypadku, gdy Maturity wypada w ostatni dzień miesiąca mającego mniej niż 31 dni. Jeżeli argument ten ma wartość zero, to kupony wypłaca się zawsze dokładnie w tym dniu miesiąca (np. 30). Domyślnie parametr ten ma wartość jeden, co oznacza, że kupony wypłacane są zawsze w ostatnim dniu miesiąca. IssueDate data emisji obligacji. FirstCouponDate i LastCouponDate parametry te pozwalają określić niestandardowe daty płatności dla pierwszego i ostatniego kuponu.

82 82 Rozdział 4. Obligacje StartDate obecnie ignorowany, ma być używany w następnych wersjach Financial Toolbox. Face nominalna cena obligacji, domyślnie równa 100. Parametrów tych możemy używać w dowolnych kombinacjach, możemy wybrać które chcemy zmienić, a dla reszty pozostawić wartości domyślne. Jeżeli nie chcemy zmieniać parametru opcjonalnego z końca listy, to po prostu go pomijamy, a jeżeli znajduje się on pomiędzy parametrami, które chcemy zmienić, to zastępujemy go znakami []. Oto kilka przykładowych poprawnych wywołań tej funkcji: [Price, AccruedInt] = bndprice(yield, CouponRate, Settle, Maturity, Period, Basis) [Price, AccruedInt] = bndprice(yield, CouponRate, Settle, Maturity, Period, [], [], IssueDate, FirstCouponDate, LastCouponDate) [Price, AccruedInt] = bndprice(yield, CouponRate, Settle, Maturity, [], Basis, EndMonthRule, [], FirstCouponDate, [], StartDate, Face) Funkcja bndyield służy do wyznaczania stopy dochodu w terminie do wykupu. Wywołujemy ją w następujący sposób: Yield = bndyield(price, CouponRate, Settle, Maturity, Period, Basis, EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate, StartDate, Face) Lista argumentów jest taka sama jak w przypadku w funkcji bndprice z jednym wyjątkiem: jej pierwszym argumentem jest Price czysta cena obligacji. Znaczenie pozostałych argumentów jest takie samo jak dla poprzednio omawianej funkcji. Tylko cztery pierwsze parametry są obowiązkowe, podanie pozostałych jest opcjonalne. Przykład 4.2. Wyznaczymy stopę dochodu obligacji z poprzedniego przykładu: > > Price = ; > > CouponRate = 0.05; > > Settle = 01-Jan-2007 ; > > Maturity = 01-Jan-2010 ; > > Yield = bndyield(price, CouponRate, Settle, Maturity) Yield = Otrzymaliśmy wartość równą stopie dochodu z poprzedniego przykładu. Widzimy, że funkcje bndprice i bndyield są w pewnym sensie odwrotne. Jeżeli chcemy wyznaczyć daty płatności kuponów, możemy użyć funkcji

83 Rozdział 4. Obligacje 83 CFlowDates = cfdates(settle, Maturity, Period, Basis, EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate) Musimy podać tylko datę kupna/sprzedaży obligacji i datę wykupu. Pozostałe parametry są opcjonalne. Przykład 4.3. Sprawdźmy, kiedy wypłacane są kupony obligacji omawianej we wcześniejszych przykładach. > > Settle = 01-Jan-2007 ; > > Maturity = 01-Jan-2010 ; > > CFlowDates = cfdates(settle, Maturity) CFlowDates = Przekształcimy otrzymany wynik do bardziej czytelnej postaci. > > datestr(cflowdates) 01-Jul Jan Jul Jan Jul Jan-2010 Widzimy, że rzeczywiście kupony wypłacane są co pól roku. Ostatnią funkcją, którą omówimy w tym rozdziale, jest cfamounts. Jej nagłówek ma postać [CFlowAmounts, CFlowDates, TFactors, CFlowFlags] = cfamounts(couponrate, Settle, Maturity, Period, Basis, EndMonthRule, IssueDate, FirstCouponDate, LastCouponDate, StartDate, Face) Tylko trzy pierwsze argumenty są obowiązkowe. Funkcja zwraca strumień pieniądza generowany przez obligację (CFlowAmounts) oraz daty wypłaty kuponów (CFlowDates). TFactors i CFlowFlags to czynniki czasowe używane przy dyskontowaniu kuponów oraz typy płatności (dokładniejsze informacje można znaleźć w dokumentacji funkcji). Przykład 4.4. Sprawdźmy, jaki strumień czasowy jest związany z omawianą obligacją. > > Settle = 01-Jan-2007 ; > > Maturity = 01-Jan-2010 ; > > CouponRate = 0.05; > > CFlowAmounts = cfamounts(couponrate, Settle, Maturity) CFlowAmounts = Tak, jak się należało spodziewać, co pół roku mamy wypłacane 2,5, a w momencie wykupu 100+2,5. Pakiet Financial Toolbox zawiera jeszcze wiele przydatnych funkcji związanych z wyceną obligacji. Ich szczegółowy opis możemy znaleźć w dokumentacji tego pakietu.

84 84 Rozdział 4. Obligacje 4.5. Ćwiczenia Ćw Wyznacz cenę 3-letniej obligacji o nominale 1000 zł i kuponie 30 zł płatnym co pół roku, przy rocznej stopie procentowej równej 4,04%. Sprawdź, ile wynosi bieżąca cena netto takiej inwestycji. Jak zmieni się cena obligacji, jeśli zakupu dokonujemy nie w momencie emisji, ale miesiąc później? Ćw Sprawdź, czy zakup 5-letniej obligacji o nominale 1000 zł i kuponie 40 zł płatnym co pół roku za cenę 1050 zł jest bardziej opłacalny niż wpłata tej sumy na konto o oprocentowaniu 5%. Ćw Dla 3-letniej obligacji wyemitowanej w dniu 1 czerwca 2010 roku o nominale 200 zł i kuponach w wysokości 10 zł płatnych dwa razy do roku wyznacz generowany przez nią strumień pieniądza oraz daty płatności kuponów.

85 Rozdział 5. Instrumenty pochodne 5.1. Podstawowe pojęcia Instrumenty pochodne, derywaty, derywatywy (ang. derivatives) są instrumentami finansowymi, których wartość uzależniona jest od ceny innego instrumentu, który nazywamy instrumentem pierwotnym bądź bazowym. Instrumentami bazowymi mogą być akcje, obligacje, zboża, ropa, metale szlachetne lub inne surowce naturalne. Cena instrumentu pochodnego może również zależeć od wartości pewnych wskaźników finansowych: kursów walut, poziomów stóp procentowych bądź wartości indeksów giełdowych. Instrument pochodny jest umową o przeprowadzeniu w przyszłości transakcji typu kupnosprzedaż. W momencie zawierania umowy określa się termin wykonania takiej transakcji oraz cenę kupna (sprzedaży). Wynik finansowy takiej transakcji (tzn. która ze stron na niej zarobi, a która straci) jest w momencie zawierania umowy nieznany, zależy bowiem od przyszłej ceny instrumentu bazowego. Instrumenty pochodne możemy podzielić na dwa podstawowe typy: kontrakty charakteryzują się tym, że obie strony transakcji muszą wypełnić swoje zobowiązania, opcje są to transakcje niesymetryczne, jedna ze stron (posiadacz opcji) może (ale nie musi) skorzystać ze swojego prawa do realizacji umowy, druga strona (wystawca opcji) musi wypełnić swoje zobowiązanie, jeżeli posiadacz opcji tego zażąda. W dalszej części tego rozdziału omówimy zagadnienia związane z wyceną instrumentów pochodnych. Zakładać będziemy, że rynek, na którym działamy, jest rynkiem idealnym, tzn.: wolna od ryzyka stopa procentowa r nie zmienia się w okresie ważności instrumentu pochodnego, oprocentowanie kredytów i depozytów jest jednakowe, nie ma ograniczeń w dostępie do kredytów, ich wysokość jest nieograniczona, inwestorzy nie ponoszą żadnych kosztów (transakcji, prowizji, podatków), rynek jest płynny, tzn. zawsze możemy kupić lub sprzedać dowolną liczbę aktywów, 85

86 86 Rozdział 5. Instrumenty pochodne dopuszczalna jest krótka sprzedaż instrumentów finansowych (tzn. sprzedaż pożyczonych instrumentów), instrumenty bazowe są podzielne (tzn. możemy kupić np. 1/2 akcji), wszyscy inwestorzy mają taki sam dostęp do informacji, uczestnicy rynku są małymi inwestorami, ich samodzielne działanie nie zmienia cen, uczestnicy rynku zachowują się racjonalnie, tzn. preferują większe bogactwo, na rynku brak jest możliwości arbitrażu, tzn. osiągania zysku bez ponoszenia ryzyka. W rzeczywistości trudno znaleźć rynek, który spełniałby wszystkie powyższe warunki. Pewne z nich można opuścić, co jednak zazwyczaj powoduje, że model rynku staje się bardziej skomplikowany, a wycena instrumentów trudniejsza Kontrakty forward Kontrakt terminowy typu forward jest umową zawartą w chwili początkowej, w której jedna ze stron zobowiązuje się kupić, druga zaś sprzedać, pewne dobro w ustalonej chwili T w przyszłości za z góry określona cenę K. 1 Stronę, która zobowiązuje się do dostarczenia przedmiotu kontraktu, nazywamy wystawcą kontraktu lub mówimy, że zajmuje tzw. krótką pozycję (ang. short position). Drugą stronę, która zobowiązuje się do zapłaty za dostarczony towar, nazywamy nabywcą kontraktu, bądź mówimy, że zajmuje długą pozycję (ang. long position). Termin T rozliczenia kontraktu nazywamy zwykle terminem wygaśnięcia (rozliczenia, wykonania ang. maturity), a cenę K ceną rozliczenia (dostarczenia, wykonania, forward ang. exercise price). Strony kontraktu ustalają, czy w terminie wygaśnięcia wymagana jest fizyczna dostawa towaru, czy rozliczenie gotówkowe (ang. cash settlement), czyli wypłata różnicy między ceną umówioną a ceną bieżącą przedmiotu transakcji. Kontrakty forward nie są standaryzowane. Mogą być zawierane na dowolną ilość towaru i na dowolny termin. Z tego powodu handluje się nimi tylko na rynku pozagiełdowym. Przy zawieraniu takich kontraktów zazwyczaj nie jest wymagane wnoszenie depozytu, a płatność następuje dopiero po dostawie. Powoduje to, że kontrakty forward mogą być obarczone dużym ryzykiem niedotrzymania umowy przez jedną ze stron. Przykład 5.1. Firma A wie, że za pół roku będzie musiała zapłacić swoim podwykonawcom 1 milion dolarów za wykonane usługi. Obecny kurs wynosi 3,25 zł za dolara. Firma zawiera z bankiem kontrakt forward, zobowiązując się, że za 6 miesięcy kupi potrzebne dolary za zł (tzn. po kursie 3,2 zł za 1 dolara). Jeżeli po pól roku cena dolara wzrośnie do 3,50 zł, to firma będzie mogła kupić dolary taniej i zarobi (zaoszczędzi) zł. Jeżeli cena dolara spadnie do 3,10 zł, to firma poniesie stratę w wysokości zł. Oczywiście w przypadku banku sytuacja wygląda odwrotnie zarabia on, kiedy firma traci i traci, kiedy firma zarabia. 1 Transakcje, w których wymiana towaru na fundusze zachodzi od razu po uzgodnieniu warunków, nazywamy transakcjami spot.

87 Rozdział 5. Instrumenty pochodne 87 Wycena kontraktów forward sprowadza się do znalezienia właściwej ceny rozliczenia K. Tak samo jak w przypadku wyceny obligacji będziemy szukać ceny sprawiedliwej, tzn. takiej, która nie dopuszcza arbitrażu. Oznaczmy przez S t cenę instrumentu bazowego w chwili t. S 0 jest więc ceną początkową (w momencie zawierania kontraktu), a S T ceną w chwili rozliczenia kontraktu. Jeżeli cena wykonania K jest niższa od S T, to nabywca kontraktu osiągnie zysk w wysokości S T K (kupuje on towar po cenie K i może go natychmiast sprzedać po wyższej cenie S T ). Jeżeli cena instrumentu bazowego w chwili T będzie niższa niż K, to nabywca kontraktu poniesie stratę w wysokości K S T. Sytuacja wystawiającego kontrakt jest odwrotna. Tak samo jak w przypadku obligacji zerokuponowych nietrudno zauważyć, że jedyną ceną kontraktu forward, która nie dopuszcza arbitrażu, jest K = S 0 e rt, (5.1) gdzie r jest wysokością rocznej stopy procentowej wolnej od ryzyka. Zakładamy, że jednostką czasu jest 1 rok, a kapitalizacja odsetek następuje w sposób ciągły. Istotnie, gdyby cena kontraktu wynosiła K 1 < K, to nabywca kontraktu mógłby jednocześnie dokonać krótkiej sprzedaży instrumentu bazowego (po cenie S 0 ) i pieniądze ze sprzedaży wpłacić na rachunek bankowy. W chwili T wypłaciłby stamtąd S 0 e rt i na mocy zawartego kontraktu odkupiłby pożyczone akcje za cenę K 1. Bez żadnego własnego wkładu osiągnąłby zysk w wysokości S 0 e rt K 1 > 0. Gdyby cena kontraktu była wyższa i wynosiła K 1 > K, to zysk mógłby osiągnąć wystawca kontraktu. W momencie jego zwarcia pożyczyłby z banku kwotę S 0. Kupiłby za to jedną jednostkę instrumentu bazowego. W chwili T na mocy zawartego kontraktu otrzymałby za nią kwotę K 1. Po zwrocie do banku pożyczki wraz z odsetkami S 0 e rt jego zysk wyniósłby K 1 S 0 e rt > 0. Wzór (5.1) możemy łatwo uogólnić na przypadek instrumentu bazowego, który wypłaca dywidendę (np. akcji). Jeżeli wypłacana jest ona w sposób ciągły według stopy d w skali rocznej, to cena sprawiedliwa kontraktu forward jest równa K = S 0 e (r d)t. (5.2) Nieco bardziej złożona jest wycena walutowych kontraktów forward. Kontrakt walutowy polega na tym, że wystawca kontraktu zobowiązuje się sprzedać, a nabywca kupić ustaloną ilość waluty po określonym kursie. W tym przypadku ceną instrumentu podstawowego S t jest kurs walutowy w momencie t. Ceną wykonania będzie kurs, po jakim ma być dostarczona waluta. Przy wycenie takich kontraktów musimy uwzględnić dwie stopy procentowe: stopę r dla rynku krajowego i stopę r f dla rynku związanego z walutą, na którą zawierany jest kontrakt. Można pokazać, że cena sprawiedliwa (czy może raczej sprawiedliwy kurs) takiego kontraktu wynosi K = S 0 e (r r f )T. (5.3) Istotnie, załóżmy, że cena ta jest wyższa i wynosi K 1 > K. Wówczas w chwili 0 możemy pożyczyć (w walucie krajowej) kwotę S 0 e r f T. Kwota ta wystarczy nam na kupno dokładnie e r F T jednostek waluty obcej, które wpłacamy na lokatę walutową. W chwili 0 wystawiamy również kontrakt walutowy na jedną jednostkę obcej waluty. W chwili T wypłacamy z lokaty dokładnie jedną jednostkę obcej waluty (e r f T e r f T = 1). Dostarczamy tę jednostkę nabywcy kontraktu i otrzymujemy z tego tytułu kwotę K 1. Na spłatę kredytu musimy przeznaczyć S r f T 0 e rt = S 0 e (r r f )T. Nasz bilans końcowy w chwili T to

88 88 Rozdział 5. Instrumenty pochodne K 1 S 0 e (r r f )T > 0. Zauważmy, że wygenerowaliśmy go bez angażowania żadnych środków własnych. Można pokazać, że podobna sytuacja zachodzi, jeżeli cena (kurs) kontraktu jest niższa od tej określonej wzorem (5.3) Kontrakty futures Wadą kontraktów forward jest duże ryzyko niedotrzymania warunków umowy przez jedną ze stron. Jeżeli np. dostawca towaru zauważy, że obowiązująca cena rynkowa jest znacznie wyższa od tej zapisanej w kontrakcie, to będzie wolał sprzedać towar na rynku, niż dostarczyć go swojemu kontrahentowi. Wyegzekwowanie takiej transakcji może być trudne i kosztowne. Zasada działania kontraktu futures jest taka sama jak w przypadku kontraktu forward. Dwie strony umawiają się na kupno-sprzedaż określonego instrumentu bazowego w określonym terminie po z góry określonej cenie. Kontrakty futures są przedmiotem obrotu giełdowego, dlatego wszystkie ich parametry: ilość i jakość towaru, termin i miejsce dostarczenia, są ściśle zestandaryzowane. Główna różnica między kontraktami forward a futures polega na tym, że kontrakty futures zawierane są za pośrednictwem wyspecjalizowanej instytucji izby rozliczeniowej (ang. clearing house). Każda ze stron zawierających kontrakt musi wpłacić na konto izby pewną kwotę, tzw. wstępny depozyt zabezpieczający (ang. initial margin). Przy rozliczaniu kontraktów futures stosuje się rozliczenie dzienne. Na koniec każdego dnia porównujemy cenę kontraktu z ceną rynkową. Jeżeli zmiana ceny rynkowej spowodowała zysk inwestora, to jest on dopłacany do jego depozytu, jeżeli stratę, to jest ona od depozytu odejmowana. Jeżeli sytuacja na rynku ułoży się niekorzystnie i stan depozytu zabezpieczającego spadnie poniżej pewnej ustalonej kwoty minimum podtrzymującego (ang. maintenance margin), izba rozliczeniowa wezwie inwestora do uzupełnienia stanu tego depozytu (wyśle mu tzw. margin call). Jeżeli nie spełni on tego wymagania, to kontrakt zostanie zamknięty i inwestor będzie musiał pogodzić się ze stratą. Kontrakt futures jest równoważny serii jednodniowych kontraktów forward. Pod koniec każdego dnia rozliczany jest kontrakt poprzedni i zawierany następny. Co więcej, strony kontraktu mogą się zmieniać w trakcie jego trwania. Nie jest to istotne, gdyż kontrakt zawierany jest za pośrednictwem izby i obie strony nie mają ze sobą bezpośredniego kontaktu. Kontakty futures na ogół nie kończą się dostawą towaru, ale są zamykane przed terminem wygaśnięcia. Kontrakty te są przedmiotem obrotu giełdowego, zatem ich ceny kształtuje popyt i podaż na nie. Można jednak pokazać, że w warunkach rynku idealnego ceny kontraktów forward i futures (o takich samych parametrach) są zbliżone do siebie Opcje Omawiane wcześniej kontrakty forward zobowiązywały obie strony transakcji do wypełnienia warunków umowy. Opcje (ang options) dają jednej z umawiających się stron (nabywcy kontraktu) możliwość wycofania się z umowy. Opcją kupna (ang. call option lub call) nazywamy kontrakt, który daje nabywcy (posiadaczowi) prawo do kupienia określonego w umowie instrumentu bazowego w ustalonej chwili (lub przez ustalony okres czasu) po z góry ustalonej cenie. Opcja sprzedaży (ang.

89 Rozdział 5. Instrumenty pochodne 89 put option lub put) daje nabywcy prawo do sprzedaży określonego instrumentu bazowego w ustalonej chwili (lub przez ustalony okres czasu) po z góry ustalonej cenie. Tak samo jak w przypadku kontraktów forward instrumentem bazowym mogą być akcje, towary, waluty obce, indeksy giełdowe itp. W naszym skrypcie zajmować będziemy się głównie opcjami na akcje. Opcje rozliczane są pieniężnie, w przypadku niektórych instrumentów jest to wygodniejsze, w przypadku innych, np. indeksów giełdowych, fizyczna dostawa jest po prostu niemożliwa. Należy wyraźnie podkreślić, że opcja jest instrumentem niesymetrycznym. Posiadacz opcji (ang. holder) ma prawo, a nie obowiązek kupna lub sprzedaży instrumentu bazowego. Oczywiście skorzysta on z tego prawa tylko wtedy, gdy będzie mu się to opłacało. Wystawiający opcję (ang. writer) ma obowiązek odsprzedać (opcja kupna) lub odkupić (opcja sprzedaży) instrument bazowy, jeżeli posiadacz opcji tego zażąda. Najważniejsze parametry charakteryzujące opcję to cena wykonania (ang. strike price, exercise price) i termin wygaśnięcia (ang. expiration date, maturity). Cena wykonania to cena, za jaką właściciel opcji może kupić(sprzedać) instrument bazowy, jeżeli skorzysta ze swojego prawa. Termin wygaśnięcia określa moment, po którym opcja nie może już być wykonana i traci swoją ważność. Termin ten nie zawsze jest taki sam jak termin wykonania opcji (ang. exercise date), czyli moment, w którym nabywca korzysta ze swego prawa. Opcje możemy podzielić na: europejskie (ang. European) mogą być wykonane jedynie w dniu wygaśnięcia (w tym przypadku termin wykonania jest taki sam jak termin wygaśnięcia), amerykańskie (ang. American) mogą być wykonane w dowolnym dniu od momentu nabycia do momentu wygaśnięcia, bermudzkie (ang. Bermudan) mogą być wykonane w pewnych ściśle określonych datach pomiędzy momentem nabycia a terminem wygaśnięcia. Nazwy te mają jedynie znaczenie historyczne, opcjami amerykańskimi handluje się również w Europie, a europejskimi w Ameryce. Przykład 5.2. Załóżmy, że posiadamy europejską opcję kupna na akcję PZU z ceną wykonania K = 100 zł i terminem wykonania T = 1 lipca 2010 roku. Jeżeli 1 lipca rynkowa cena akcji S T będzie mniejsza niż 100 zł, to opcja będzie bezwartościowa, nie opłaca się kupować akcji po 100 zł, skoro na rynku można kupić je taniej. Jeżeli 1 lipca rynkowa cena akcji S T będzie wyższa niż 100 zł, to opcję opłaca się wykonać, a nasz zysk wyniesie S T 100. Z powyższego przykładu wynika, że zysk posiadacza europejskiej opcji kupna o cenie wykonania K i terminie wykonania T jest równy { f(s T ) = (S T K) + S T K, gdy S T > K = max{s T K, 0} = (5.4) 0, gdy S T K. Funkcje f nazywamy funkcją wypłaty, bądź wypłatą opcji (ang. payoff ). Nietrudno zauważyć, że dla europejskiej opcji sprzedaży funkcja wypłaty jest określona wzorem { f(s T ) = (K S T ) + K S T, gdy S T < K = max{k S T, 0} = (5.5) 0, gdy S T K.

90 90 Rozdział 5. Instrumenty pochodne Opcja daje swojemu posiadaczowi pewne prawo. Za to prawo musi on zapłacić wystawcy opcji pewną opłatę wstępną, którą nazywamy ceną opcji lub premią (ang. option price, option premium). Cena ta jest kształtowana przez rynek i zmienia się w czasie. Problem wyceny opcji jest jednym z głównych zagadnień, jakimi zajmuje się matematyka finansowa. Opcje służą do zabezpieczania się przed niekorzystnymi zmianami cen. Opcje kupna zabezpieczają nas przed wzrostem cen, dają gwarancję, że w najgorszym wypadku będziemy mogli kupić instrument bazowy po cenie wykonania K. Oczywiście, jeżeli ceny spadną, nasza opcja będzie bezwartościowa. Podobnie opcja sprzedaży zabezpiecza przed spadkiem cen, daje gwarancję, że w najgorszym razie sprzedamy nasz instrument po cenie K. Tym razem, jeżeli ceny wzrosną, opcji nie będzie się opłacało wykonać. Opcje można porównać do polisy ubezpieczeniowej, cenę opcji możemy traktować jak składkę ubezpieczeniową. Jeżeli zdarzy nam się nieszczęście, polisa pozwoli nam przynajmniej częściowo zrekompensować straty, jeżeli nic złego się nie wydarzy, składka przepadnie. Opcje można również wykorzystać w celach spekulacyjnych. Pozwalają one zwielokrotnić zarówno zyski, jak i straty. Przykład 5.3. Załóżmy, że posiadamy 500 zł i chcemy je zainwestować w akcje PKO, gdyż spodziewamy się, że ich cena wzrośnie. Aktualna cena 1 akcji wynosi 100 zł, za posiadaną sumę możemy więc nabyć 5 akcji. Jeżeli w przyszłości cena akcji wzrośnie do 120 zł, to nasz zysk wyniesie 5 ( ) = 100 zł. Stopa zwrotu naszej inwestycji to ( )/500 = 0,2. Zamiast akcji możemy nabyć opcje kupna na akcje PKO. Cena opcji jest zazwyczaj o wiele niższa od ceny instrumentu bazowego. Załóżmy, że w naszym wypadku opcja o cenie wykonania K = 105 kosztuje 10 zł. Nasz kapitał pozwoli nam nabyć 50 opcji. Jeżeli, tak jak w poprzednim wypadku, cena akcji wzrośnie do 120 zł, to każda z 50 opcji przyniesie nam zysk = 15 zł. Nasz zysk wyniesie zatem = 250 zł, a stopa zwrotu inwestycji będzie równa ( )/500 = 0,5. Jeżeli pomyliliśmy się w naszych przewidywaniach i cena akcji spadnie do 90 zł, to posiadane 5 akcji przyniesie nam stratę równą 50 zł. Jeżeli zamiast akcji kupiliśmy opcje, to są one bezwartościowe i tracimy całą zainwestowaną sumę. Standardowe europejskie i amerykańskie opcje kupna i sprzedaży określa się czasem wspólną nazwą opcje waniliowe (ang. vanilla). 2 Na rynku funkcjonują również opcje o bardziej skomplikowanych funkcjach wypłaty, nazywamy je opcjami egzotycznymi (ang. exotic). Skonstruowano bardzo wiele takich opcji, tutaj omówimy tylko najważniejsze z nich. Opcje binarne (ang. binary), nazywane też cyfrowymi (ang. digital), to opcje, których funkcja wypłaty zależy w sposób nieciągły (skokowy) od ceny instrumentu bazowego w momencie wygaśnięcia T. Najpopularniejsze opcje tego typu to: opcje cash-or-nothing, których wypłata zależy jedynie od tego, czy cena w momencie wygaśnięcia przekroczy pewien poziom, funkcja wypłaty opcji kupna ma postać: f(s T ) = X1 {ST >K}, a opcji sprzedaży f(s T ) = X1 {ST <K}, gdzie X i K są z góry ustalone, 2 Nazwa ta pochodzi podobno od podstawowego smaku amerykańskich lodów, czyli właśnie lodów waniliowych i w języku angielskim oznacza wersję podstawową, nieskażoną, czystą.

91 Rozdział 5. Instrumenty pochodne 91 opcje asset-or-nothing, podobne do poprzednich, ale zamiast ustalonej kwoty posiadacz otrzymuje instrument bazowy, funkcja wypłaty opcji kupna to f(s T ) = S T 1 {ST >K}, a opcji sprzedaży f(s T ) = S T 1 {ST <K}, gdzie K jest z góry ustalone. Opcje barierowe (ang. barrier), których wypłata zależy od tego, czy w trakcie trwania kontraktu cena instrumentu bazowego spadnie poniżej albo przekroczy pewną ustaloną wartość (barierę). Najczęściej spotykane rodzaje opcji barierowych to: opcje kupna typu down-and-out tracą wartość, gdy cena instrumentu bazowego spadnie poniżej bariery B, ich funkcja wypłaty ma postać f(s t ) = (S T K) + 1 {mint T S t B}, opcje kupna typu up-and-out tracą wartość, gdy cena instrumentu bazowego przekroczy barierę B, ich funkcja wypłaty ma postać f(s t ) = (S T K) + 1 {maxt T S t B}, opcje kupna typu up-and-in uzyskują wartość, gdy cena instrumentu bazowego przekroczy barierę B, ich funkcja wypłaty ma postać f(s t ) = (S T K) + 1 {maxt T S t B}, opcje kupna typu down-and-in uzyskują wartość, gdy cena instrumentu bazowego spadnie poniżej bariery B, ich funkcja wypłaty ma postać f(s t ) = (S T K) + 1 {mint T S t B}. W zależności od wzajemnego umiejscowienia bariery B i ceny wykonania K opcje barierowe możemy jeszcze podzielić na opcje in-the-money, jeżeli B > K i out-the-money, jeżeli B < K. W podobny sposób definiujemy barierowe opcje sprzedaży. Opcje azjatyckie (ang. Asian) nazywane również uśrednionymi (ang. average). Ich funkcje wypłaty zależą od średniej ceny instrumentu bazowego w czasie ważności opcji. Średnią cenę możemy obliczać w sposób dyskretny: S sr = 1 n n S i/n, k=1 gdzie S i/n jest ceną zamknięcia w i-tym dniu, a N liczbą dni handlowych w roku. Rozważa się też średnie ciągłe : S sr = 1 T S t dt. T t 0 t 0 Średnią arytmetyczną czasem zastępujemy średnią geometryczną. Funkcja wypłaty azjatyckiej opcji kupna ma postać f(s t ) = (S sr K) +

92 92 Rozdział 5. Instrumenty pochodne dla opcji typu average value lub f(s t ) = (S T S sr ) + dla opcji typu average strike. Funkcje wypłaty dla azjatyckich opcji sprzedaży definiujemy analogicznie. Opcje typu lookback to opcje, których wypłata zależy od maksymalnej lub minimalnej ceny instrumentu bazowego. Opcja kupna tego typu pozwala jej posiadaczowi kupić instrument bazowy po najniższej cenie, jaką osiągnął w okresie ważności opcji. Funkcja wypłaty tej opcji ma postać f(s t ) = S T min t [0,T ] S t. Opcja sprzedaży typu lookback pozwala jej właścicielowi sprzedać instrument podstawowy po najwyższej cenie, jaką osiągnął on w okresie ważności opcji, jej funkcja wypłaty to f(s t ) = max t [0,T ] S t S T. Zauważmy, że wypłata europejskich opcji kupna oraz sprzedaży, a także opcji binarnych, zależy jedynie od ceny instrumentu bazowego w momencie wygaśnięcia T. W przypadku opcji barierowych, azjatyckich i lookback cena zależy od cen instrumentu w całym okresie [0, T ]. Takie opcje nazywamy opcjami zależnymi od trajektorii (ang. path-dependent options) Wycena opcji model jednookresowy, dwustanowy W poprzednim rozdziale dowiedzieliśmy się, ile możemy zarobić posiadając opcje. Teraz zajmiemy się trudniejszym problemem wyceną opcji. Na początku ograniczymy się do przypadku europejskiej opcji kupna. Zakładać będziemy, że instrumentem bazowym są akcje, przez S t oznaczymy cenę akcji w chwili t. Postaramy się zatem odpowiedzieć na pytanie: ile powinien kosztować instrument dający w chwili T wypłatę równą (S T K) +? Będziemy zakładać, że nasz rynek jest rynkiem idealnym (patrz rozdział 5.1). Rozważymy najpierw tzw. model rynku jednookresowego, dwustanowego. Jest to rynek spełniający następujące założenia: transakcji możemy dokonywać tylko w dwóch chwilach czasu: 0 i T, możliwe są tylko dwa scenariusze wydarzeń: 1, który interpretujemy jako korzystny i -1 który interpretujemy jako niekorzystny. Zakładamy, że oba scenariusze mogą zajść, tzn. że prawdopodobieństwo zajścia każdego z nich jest większe od zera. Na rynku funkcjonują dwa papiery wartościowe: pierwszy bezpieczny (obligacja bądź lokata bankowa) i drugi ryzykowny (akcja). Niech B t oznacza cenę instrumentu pozbawionego ryzyka, będziemy zakładać, że B 0 = 1, B T = B 0 (1 + r),

93 Rozdział 5. Instrumenty pochodne 93 gdzie r jest oczywiście stopą procentową (stałą w okresie czasu od 0 do T ). S t oznaczać będzie cenę drugiego instrumentu (akcji) w chwili t. Cena tego instrumentu w chwili 0 będzie ustalona, a w chwili T zależeć będzie od scenariusza ω { 1, 1}, tzn. { S u, gdy ω = 1 S 0 = s > 0, S T (ω) = S d, gdy ω = 1. Przyjmujemy, że S u > S d, dlatego 1 nazywamy scenariuszem korzystnym. Niech na przykład r = 0,05, S 0 = 100, S u = 120, S d = 70. Wówczas B T = B 0 (1 + r) = 1(1 + 0,05) = 1,05, { 120, gdy ω = 1 S T (ω) = 70, gdy ω = 1. Model ten możemy przedstawić na grafie nazywanym zwykle drzewkiem dwumianowym (ang. binomial tree): t = 0 t = T Rozważmy teraz europejską opcję kupna o terminie wykonania T i cenie wykonania K = 110. Wartość takiej opcji w chwili T jest równa { f(s T (ω)) = (S T (ω) 110) + ( ) + = 10, gdy ω = 1 = (70 110) + = 0, gdy ω = 1. Na drzewku dwumianowym wygląda to tak:? 10 0 t = 0 t = T W węźle t = 0 brakuje ceny opcji. Zastanówmy się, ile wynosi wartość tej opcji w chwili 0, tzn. ile powinniśmy za nią zapłacić? Podobnie jak w przypadku omawianych wcześniej instrumentów powinna to być cena sprawiedliwa, tzn. niefaworyzująca żadnej ze stron transakcji. Załóżmy, że inwestor ocenia, że prawdopodobieństwo zajścia korzystnego scenariusza (tzn. wzrostu ceny akcji do 120) wynosi p = 0,4, a niekorzystnego (tzn. spadku ceny akcji

94 94 Rozdział 5. Instrumenty pochodne do 70) wynosi 1 p = 0,6. W tym pierwszym przypadku nasza wypłata wyniesie 10, a w drugim 0. Wartość oczekiwana wypłaty opcji w chwili T wynosi więc E P f = 0, ,6 0 = 4. Aby otrzymać wartość opcji w chwili 0 (którą oznaczać będziemy przez C 0 ), musimy jeszcze zdyskontować powyższy wynik (tzn. przemnożyć przez czynnik (1 + r) 1 ). C 0 = (1 + r) 1 E P f = 1, ,81. Oczywiście tak obliczona cena zależy od wyboru prawdopodobieństwa p, tzn. od oszacowania sytuacji na rynku przez inwestora. Jeżeli inny inwestor uważa, że prawdopodobieństwo zajścia korzystnego scenariusza wynosi p = 0,3, a niekorzystnego 1 p = 0,7, to zdyskontowana wartość oczekiwana wypłaty wynosić będzie C 0 = (1 + r) 1 E P f = 1,05 1 (0, ,7 0) 2,86. Którą cenę powinniśmy uważać za sprawiedliwą? Metoda obliczania ceny, której wynik zależy od subiektywnych oszacowań inwestorów, nie jest zbyt użyteczna. Spróbujmy zatem innego podejścia. Spójrzmy na problem z punktu widzenia wystawcy opcji. Wystawca opcji jest stroną, która nie może wycofać się z transakcji. Wydaje się zatem, że suma, jaką otrzyma za opcję, powinna wystarczyć na zabezpieczenie jego zobowiązań. To znaczy, jeżeli zainwestuje ją w chwili 0 w akcje i lokatę bankową, to w chwili T (niezależnie od tego, który ze scenariuszy zajdzie) powinna wygenerować zysk pozwalający wypłacić posiadaczowi opcji kwotę wynikająca z umowy. Załóżmy więc, że wystawca opcji w chwili 0 wpłacił (lub wypłacił, jeżeli β < 0) kwotę β na rachunek bankowy i kupił (lub dokonał krótkiej sprzedaży, jeżeli γ < 0) γ akcji (β, γ R). Wartość jego inwestycji w chwili T (którą oznaczamy X T ) wynosić będzie, w zależności od tego, który scenariusz zajdzie, X T (1) = β B T + γ S T (1) = β 1,05 + γ 120, X T ( 1) = β B T + γ S T ( 1) = β 1,05 + γ 70. Ponieważ inwestycja ma zabezpieczać opcję o funkcji wypłaty f T, zatem powinno zachodzić X T (1) = f(1) = 10, X T ( 1) = f( 1) = 0. Otrzymaliśmy zatem układ równań { β 1,05 + γ 120 = 10 β 1,05 + γ 70 = 0. Jego rozwiązaniem jest para (β, γ) = ( , 1 5 ). Obliczmy teraz, ile wynosi wartość tej inwestycji w chwili 0 (inaczej mówiąc, jaki musimy mieć kapitał początkowy, aby dokonać takiej inwestycji) X 0 = β B 0 + γ S 0 = = =

95 Rozdział 5. Instrumenty pochodne 95 Wynika stąd, że jeżeli za sprzedaż opcji dostaniemy 6 2, to możemy zainwestować tę kwotę 3 tak, że niezależnie od scenariusza będziemy w stanie w chwili T wypłacić należność nabywcy opcji. Zauważmy, że w obliczeniach nie wykorzystywaliśmy żadnych subiektywnych prawdopodobieństw zajścia obu scenariuszy. Czy jednak C 0 = 6 2 jest sprawiedliwą (niekrzywdzącą żadnej ze stron) ceną opcji? 3 Przeanalizujmy najpierw sytuację z punktu widzenia wystawcy opcji. W chwili 0 powinien on postąpić następująco: W chwili T natomiast: Sprzedaje jedną opcję Bierze kredyt Kupuje 1 akcji 100 = = ω = 1 ω = 1 Realizuje jedną opcję 10 0 Spłaca kredyt Sprzedaje 1 akcji = = = = 0 dla ω = 1, = 0 dla ω = 1. Niezależnie od tego, który scenariusz zajdzie, wystawca będzie w stanie wypłacić należność posiadaczowi opcji. Zauważmy, że nie musi on angażować żadnych własnych środków, inwestowana jest tylko kwota otrzymana za opcję. Wynika stąd, że gdyby opcja była sprzedawana po cenie C > C 0, to wystawca opcji miałby pewny zysk C C 0 > 0, gdyż wydałby tylko C 0, aby zabezpieczyć opcję, a resztę zachowałby dla siebie. Postępowanie nabywcy opcji powinno być odwrotne. W chwili 0: W chwili T natomiast: Kupuje jedną opcję Wpłaca na rachunek bankowy Sprzedaje 1 akcji (krótka sprzedaż) = = ω = 1 ω = 1 Odbiera wypłatę z opcji 10 0 Wypłaca pieniądze z rachunku Odkupuje 1 akcji = = = = 0 dla ω = 1, = 0 dla ω = 1.

96 96 Rozdział 5. Instrumenty pochodne Widzimy, że niezależnie od scenariusza nabywca opcji wychodzi na zero. Gdyby opcja była tańsza, to miałby on pewny zysk w wysokości C 0 C > 0, gdyż aby otrzymać wypłatę f musiałby wydać C 0, a tak wydałby tylko C. Wynika stąd, że jeżeli C C 0, to jedna ze stron transakcji może osiągnąć zysk bez ponoszenia ryzyka. Podamy teraz ogólny wzór na cenę sprawiedliwą europejskiej opcji kupna w omawianym modelu rynku. Załóżmy, że Cena akcji Wartość opcji S u f u S 0? S d f d t = 0 t = T t = 0 t = T Wówczas, powtarzając rozumowanie z omawianego przykładu, można pokazać, że cena sprawiedliwa opcji jest określona wzorem gdzie β = C 0 = β + γ S 0, (5.6) f d S u f u S d (1 + r)(s u S d ), γ = f u f d S u S d. (5.7) Oczywiście wzory te mają sens tylko wówczas, gdy S u S d. Aby zabezpieczyć opcję, należy wpłacić β na rachunek bankowy i kupić γ akcji. Rozważmy jeszcze jeden przykład. Niech r = 0, K = 11 (cena wykonania opcji). Cena akcji Wartość opcji ? 11 0 t = 0 t = T t = 0 t = T Wówczas, korzystając z wzorów (5.6) i (5.7), otrzymujemy, że β = (1 + 0)(12 11) = 11, γ = = 1, C 0 = = 1??? Jak należy zinterpretować ujemną cenę? Zauważmy, że w tym przykładzie cena akcji w obu scenariuszach rośnie, jej kupno zawsze się opłaca. Możemy zatem osiągnąć zysk,

97 Rozdział 5. Instrumenty pochodne 97 nic nie ryzykując. Na rynku występuje więc możliwość arbitrażu. Świadczy to o błędzie w wycenie instrumentów na rynku. Można pokazać, że jednookresowy, dwustanowy model rynku jest wolny od arbitrażu wtedy i tylko wtedy, gdy spełniony jest warunek S d < (1 + r)s 0 < S u. (5.8) Warunek ten oznacza, że w scenariuszu niekorzystnym akcja musi przynosić mniejszy zysk niż rachunek bankowy, a w scenariuszu korzystnym większy Wycena opcji w dwumianowym modelu Coxa-Rossa- Rubinsteina Przejdźmy teraz do nieco bardziej złożonego modelu rynku. Zakładać będziemy, że transakcji można dokonywać w chwilach t = 0, 1, 2,..., T, gdzie T < +. Tak jak w modelu jednookresowym na rynku istnieją dwa papiery wartościowe: ryzykowny (akcja) i pozbawiony ryzyka (obligacja, rachunek bankowy). Przez S t i B t oznaczać będziemy odpowiednio cenę jednostkową papieru ryzykownego i papieru bez ryzyka w okresie czasu [t, t + 1). Będziemy zakładać, że w okresie [0, T ] stopa procentowa wolna od ryzyka jest stała i równa r 0 oraz, że B 0 = 1, B t = B t 1 (1 + r) dla t = 1, 2,..., T. W każdym momencie t = 1, 2,..., T może zajść jeden z dwóch scenariuszy: 1, który interpretujemy jako korzystny i -1, który interpretujemy jako niekorzystny. To, który ze scenariuszy zajdzie, nie zależy od tego, które scenariusze zachodziły w poprzednich momentach. Cenę akcji opisuje zatem wzór { S t 1 (1 + b), gdy ω = 1 S 0 = s > 0, S t (ω) = S t 1 (1 + a), gdy ω = 1, gdzie 1 < a < b. W języku teorii prawdopodobieństwa możemy napisać, że S t = S t 1 U t dla t = 1, 2,..., T, gdzie U t są niezależnymi zmiennymi losowymi o jednakowym rozkładzie P (U t = 1 + b) = p, P (U t = 1 + a) = 1 p, p (0, 1). Można pokazać, że na rynku nie ma możliwości arbitrażu wtedy i tylko wtedy, gdy a < r < b. Wówczas oczywiście 1 + a < 1 + r < 1 + b i w scenariuszu korzystnym akcja przynosi większy zysk niż lokata bankowa, a w scenariuszu niekorzystnym mniejszy. Opisany model rynku nazywamy modelem dwumianowym. Został on wprowadzony w 1979 roku przez J.C. Coxa, S.A. Rossa i M. Rubinsteina, dlatego nazywamy go często modelem CRR. Przez β t oznaczać będziemy wysokość wkładu bankowego w okresie czasu (t 1, t], t = 1,..., T. Jeżeli β t < 0, to interpretujemy to jako zaciągnięcie kredytu w banku. Podobnie γ t będzie liczbą posiadanych akcji w okresie czasu (t 1, t], t = 1,..., T. Jeżeli γ t < 0, to inwestor dokonał krótkiej sprzedaży, tzn. sprzedał pożyczone akcje. Ciąg par π = {π t = (β t, γ t ) ; t = 1,..., T } nazywać będziemy strategią inwestycyjną bądź portfelem (ang. portfolio). Zauważmy, że β t, γ t nie muszą być takie same dla każdego scenariusza. Inwestor podejmuje decyzje o tym, ile jednostek danego instrumentu chce posiadać w chwili t, na

98 98 Rozdział 5. Instrumenty pochodne podstawie dostępnej mu informacji o zmianach cen instrumentów w okresie od 0 do t 1. Inwestor nie potrafi natomiast przewidywać przyszłości, dlatego jego decyzje nie mogą zależeć od cen instrumentów w chwilach t, t + 1,..., T. Przez Xt π oznaczać będziemy wartość portfela π w chwili t. Nietrudno zauważyć, że X π t = β t B t + γ t S t dla t = 1,..., T. Dodatkowo niech X π 0 = x 0 będzie kapitałem początkowym inwestora. Rozważać będziemy wyłącznie strategie samofinansujące (ang. self-financing), tzn. spełniające warunek X π t 1 = β t B t 1 + γ t S t 1, t = 1,..., T. Oznacza to, że nie ma dopływu kapitału z zewnątrz, ani wypływu na zewnątrz. Cały kapitał, jaki inwestor posiada w chwili t 1, jest przeznaczony na zakup portfela (β t, γ t ). Mówimy, że strategia samofinansująca π o wartości początkowej x 0 replikuje opcję o funkcji wypłaty f, jeżeli X π t 0, t = 0,..., T, X π T = f, tzn. niezależnie od scenariusza wartość portfela jest nieujemna, a w chwili T (również niezależnie od scenariusza) wartość portfela jest równa wartości opcji. Ceną sprawiedliwą C 0 opcji o funkcji wypłaty f będziemy nazywać najmniejszy kapitał początkowy, który pozwala skonstruować strategię replikującą tę opcję: C 0 = inf{x 0 ; istnieje strategia π o wartości początkowej x replikująca opcję o funkcji wypłaty f}. Przykład 5.4. Podać cenę sprawiedliwą oraz skonstruować strategię replikującą europejską opcję kupna, jeżeli T = 3, K = 100, a = 0,2, b = 0,2, a r = 0. Ceny akcji S = {S 0, S 1, S 2, S 3 } opisuje następujące drzewko : , , , ,2 t = 0 t = 1 t = 2 t = 3

99 Rozdział 5. Instrumenty pochodne 99 Zbiór możliwych scenariuszy to {(ω 1, ω 2, ω 3 ) ; ω i { 1, 1}}. Ponieważ r = 0, więc B i (ω 1, ω 2, ω 3 ) = 1 dla i = 0, 1, 2, 3, ω 1, ω 2, ω 3 { 1, 1}. Proces cen akcji wygląda następująco: S 0 (ω 1, ω 2, ω 3 ) = 100 dla ω 1, ω 2, ω 3 { 1, 1}, S 1 (1, ω 2, ω 3 ) = 120 dla ω 2, ω 3 { 1, 1}, S 1 ( 1, ω 2, ω 3 ) = 80 dla ω 2, ω 3 { 1, 1}, S 2 (1, 1, ω 3 ) = 144 dla ω 3 { 1, 1},. Rozważamy opcję o funkcji wypłaty f(ω 1, ω 2, ω 3 ) = (S 3 (ω 1, ω 2, ω 3 ) 100) +. Stąd f T (1, 1, 1) = (S 3 (1, 1, 1) 100) + = (172,8 100) + = 72,8, f T (1, 1, 1) = (S 3 (1, 1, 1) 100) + = (115,2 100) + = 15,2, f T (1, 1, 1) = (S 3 (1, 1, 1) 100) + = (115,2 100) + = 15,2, f T ( 1, 1, 1) = (S 3 ( 1, 1, 1) 100) + = (115,2 100) + = 15,2, f T (1, 1, 1) = (S 3 (1, 1, 1) 100) + = (76,8 100) + = 0, f T ( 1, 1, 1) = (S 3 ( 1, 1, 1) 100) + = (76,8 100) + = 0, f T ( 1, 1, 1) = (S 3 ( 1, 1, 1) 100) + = (76,8 100) + = 0, f T ( 1, 1, 1) = (S 3 ( 1, 1, 1) 100) + = (51,2 100) + = 0. Zatem wartość opcji w chwili t = 3 wynosi: 72,8 15,2 0 t = 0 t = 1 t = 2 t = 3 0

100 100 Rozdział 5. Instrumenty pochodne Skonstruujemy strategię π replikującą f, tzn. taką, że X π 3 (ω 1, ω 2, ω 3 ) = f(ω 1, ω 2, ω 3 ) dla dowolnych ω 1, ω 2, ω 3 { 1, 1}. Zrobimy to w kilku krokach. Krok 1. Wiemy, że Z drugiej strony X π 3 (1, 1, 1) = f(1, 1, 1) = 72,8, X π 3 (1, 1, 1) = f(1, 1, 1) = 15,2. X π 3 (1, 1, 1) = β 3 (1, 1, 1) B 3 (1, 1, 1) + γ 3 (1, 1, 1) S 3 (1, 1, 1) = β 3 (1, 1, 1) 1 + γ 3 (1, 1, 1) 172,8, X π 3 (1, 1, 1) = β 3 (1, 1, 1) B 3 (1, 1, 1) + γ 3 (1, 1, 1) S 3 (1, 1, 1) = β 3 (1, 1, 1) 1 + γ 3 (1, 1, 1) 115,2. Decyzję o tym, ile akcji i obligacji będziemy posiadać w chwili t = 3, musimy podjąć wcześniej, zatem liczba ta nie może zależeć od ceny tych aktywów w chwili t = 3. Stąd β 3 (1, 1, 1) = β 3 (1, 1, 1), γ 3 (1, 1, 1) = γ 3 (1, 1, 1). Otrzymujemy układ równań { β 3 (1, 1, ω 3 ) 1 + γ 3 (1, 1, ω 3 ) 172,8 = 72,8 Rozwiązaniem układu jest para β 3 (1, 1, ω 3 ) 1 + γ 3 (1, 1, ω 3 ) 115,2 = 15,2. β 3 (1, 1, ω 3 ) = 100, γ 3 (1, 1, ω 3 ) = 1. Ponieważ strategia π jest samofinansująca, to X π 2 (1, 1, ω 3 ) = β 3 (1, 1, ω 3 ) B 2 (1, 1, ω 3 ) + γ 3 (1, 1, ω 3 ) S 2 (1, 1, ω 3 ) = = 44. Możemy też potraktować fragment drzewka jako model jednookresowy i skorzystać z uzyskanych wcześniej wzorów (5.7). Cena akcji Wartość portfela X π t 172,8 72,8 144? 115,2 t = 2 t = 3 15,2 t = 2 t = 3

101 Rozdział 5. Instrumenty pochodne 101 β 3 (1, 1, ω 3 ) = 15,2 172,8 72,8 115,2 = 100, γ 3 (1, 1, ω 3 ) = 172,8 115,2 X2 π (1, 1, ω 3 ) = = ,8 15,2 172,8 115,2 = 1, Podobnie pokazujemy, że Cena akcji Wartość portfela X π t 115,2 15,2 96? 76,8 t = 2 t = 3 0 t = 2 t = 3 β 3 (1, 1, ω 3 ) = 0 115,8 15,2 76,8 = 30,4, γ 3 (1, 1, ω 3 ) = 15, ,2 76,8 115,2 76,8 = 0,3958, X2 π (1, 1, ω 3 ) = 30,4 + 0, = 7,6. Analogicznie: Cena akcji Wartość portfela X π t 76,8 0 64? 51,2 t = 2 t = 3 0 t = 2 t = 3 β 3 ( 1, 1, ω 3 ) = 0 76,8 0 51,5 = 0, γ 3 ( 1, 1, ω 3 ) = 76,8 51,2 X2 π ( 1, 1, ω 3 ) = ,8 51,2 = 0, Wyznaczyliśmy zatem wartości portfela π w chwili t = 2:

102 102 Rozdział 5. Instrumenty pochodne 72, ,2 7, t = 0 t = 1 t = 2 t = 3 Krok 2. Tą samą metodą wyznaczamy wartość portfela w chwili t = 1. Cena akcji Wartość portfela Xt π ? 96 t = 1 t = 2 7,6 t = 1 t = 2 β 2 (1, ω 2, ω 3 ) = Dalej mamy 7, ,6 = 65,2, γ 2 (1, ω 2, ω 3 ) = = 0,7583, X1 π (1, ω 2, ω 3 ) = 65,2 + 0, = 25,8. Cena akcji Wartość portfela X π t 96 7,6 80? 64 t = 1 t = 2 0 t = 1 t = 2 β 2 ( 1, ω 2, ω 3 ) = ,6 64 = 15,2, γ 2 ( 1, ω 2, ω 3 ) = 7, = 0,2375, X1 π ( 1, ω 2, ω 3 ) = 15,2 + 0, = 3,8. Wyznaczyliśmy zatem wartość portfela π w chwili t = 1

103 Rozdział 5. Instrumenty pochodne ,8 25,8 15,2 7,6 3,8 0 0 t = 0 t = 1 t = 2 t = 3 0 Pozostaje wyznaczyć początkową wartość portfela replikującego. Cena akcji Wartość portfela X π t ,8 100? 80 t = 0 t = 1 3,8 t = 0 t = 1 β 1 (ω 1, ω 2, ω 3 ) = 3, ,8 80 = 40,2, γ 1 (ω 1, ω 2, ω 3 ) = X0 π (ω 1, ω 2, ω 3 ) = 40,2 + 0, = 14,8. 25,8 3, = 0,55, Oto kompletne drzewko wartości portfela π.

104 104 Rozdział 5. Instrumenty pochodne 44 72,8 25,8 15,2 14,8 7,6 3,8 0 0 t = 0 t = 1 t = 2 t = 3 Zatem minimalna wartość początkowa strategii zabezpieczającej opcję f wynosi X π 0 = Ostatecznie więc cena sprawiedliwa opcji wynosi C 0 = 14,8. Poniższa tabelka przedstawia strategię inwestora wystawiającego opcję w przypadku zajścia scenariusza (1, 1, 1). Innymi słowy: Czas Zmiana Cena akcji Strategia Kapitał n S n β n+1 γ n+1 X n ,2 0,55 14, ,2 0, , , Pożyczamy z banku 40,2 zł, dokładamy do tego 14,8 zł uzyskane ze sprzedaży opcji i wydajemy 55 zł na zakup 0,55 akcji. 2. Pożyczamy jeszcze 25 zł (razem 65,2 zł) i dokupujemy za to 0,2083 akcji (po cenie 120 zł za akcję). 3. Pożyczamy jeszcze 34,8 zł (razem 100 zł) i dokupujemy za to 0,2417 akcji (po cenie 144 zł za akcję). W tej chwili mamy 1 akcję i 100 zł długu. 4. Sprzedajemy 1 akcję za 115,2 zł, wypłacamy posiadaczowi opcji należność 15,2 zł i oddajemy dług do banku. Widzimy, że kwota otrzymana za opcję wystarcza do wygenerowania sumy, którą musimy wypłacić posiadaczowi opcji. Podobnie możemy rozpisać pozostałe scenariusze. Gdyby cena opcji była wyższa, wystawca opcji mógłby osiągnąć zysk bez ponoszenia ryzyka. W przeciwnym wypadku (gdyby cena była niższa) zysk mógłby osiągnąć nabywca opcji. 0

105 Rozdział 5. Instrumenty pochodne 105 W podobny sposób możemy wycenić europejską opcję sprzedaży. Jedyna różnica polega na tym, że przy wypełnianiu ostatniego poziomu drzewka (t = 3) używamy innej funkcji wypłaty: (K S T ) + zamiast (S T K) +. Okazuje się jednak, że jeżeli mamy wyznaczoną cenę C 0 europejskiej opcji kupna, to wyznacza nam już ona cenę P 0 europejskiej opcji sprzedaży (z tą samą ceną wykonania K i terminem wykonania T ). Wzór C 0 P 0 = S 0 K(1 + r) T (5.9) nazywamy parytetem kupna-sprzedaży (ang. put-call parity). W przypadku, gdy stosujemy ciągły model kapitalizacji, czynnik dyskontujący (1 + r) T zastępujemy przez e rt. Dla danych z naszego przykładu (K = 100, S 0 = 100, r = 0, T = 3, C 0 = 14,8) cena europejskiej opcji sprzedaży wynosi P 0 = C 0 S 0 + K = 14,8. Za pomocą drzew dwumianowych możemy wyceniać opcje typu amerykańskiego i bermudzkiego. Drzewa konstruujemy w podobny sposób. W przypadku opcji amerykańskich i bermudzkich musimy wziąć pod uwagę możliwość ich wcześniejszego wykonania. Dla opcji amerykańskich w każdym węźle wyznaczamy wartość opcji tak samo jak robiliśmy to dla opcji europejskiej, a następnie porównujemy tę wartość z sumą, jaką możemy otrzymać w przypadku wykonania opcji w tym węźle. Ostatecznie do węzła wpisujemy większą z tych dwóch liczb. W przypadku opcji bermudzkich wartości w węzłach, w których opcja może być wykonana, wyznaczamy w sposób amerykański, a w pozostałych w europejski. Wycena opcji zależnych od trajektorii jest również możliwa, choć znacznie trudniejsza. Musimy pamiętać, że cena takich opcji zależeć będzie nie tylko od tego, w którym węźle jesteśmy, ale również od ścieżki którą tam doszliśmy. Nie będziemy podawać przykładów wyceny takich opcji. W następnym rozdziale pokażemy jak można to zrobić za pomocą odpowiednich funkcji Matlaba Drzewa dwumianowe w Matlabie Pakiet Financial Derivatives Toolbox zawiera funkcje pozwalające na modelowanie cen akcji za pomocą modeli drzewowych. Mamy do dyspozycji trzy modele: model Coxa- Rossa-Rubinsteina (CRR), którego teoretyczne założenia przedstawiliśmy w poprzednim rozdziale, oraz Equal probabilities (EQP) model i Implied trinomial tree (ITT) model. W naszym skrypcie skupimy się na najczęściej stosowanym modelu CRR. Do tworzenia drzew CRR służy funkcja crrtree. Przyjmuje ona trzy argumenty wejściowe: strukturę StockSpec zawierającą parametry związane z akcją, strukturę RateSpec zawierającą parametry związane ze stopą procentową, strukturę TimeSpec zawierającą parametry związane z samym drzewem. Rozpoczniemy od wyspecyfikowania parametrów związanych z modelem cen akcji. Przypomnijmy, że w modelu CRR zakłada się, że transakcji możemy dokonywać w pewnych ustalonych momentach i że w każdym z tych momentów cena akcji może się zmienić

106 106 Rozdział 5. Instrumenty pochodne na dwa sposoby, tzn. S t = S t 1 (1 + a) lub S t = S t 1 (1 + b), gdzie 1 < a < b. W Matlabie przy określaniu modelu ceny, nie będziemy podawać parametrów a i b w sposób bezpośredni. Zamiast tego podamy współczynnik σ określający tzw. zmienność ceny akcji (ang. volatility). Jest to pewnego rodzaju miara niepewności co do przyszłych zmian tej ceny. Możemy ją wyznaczyć empirycznie jako odchylenie standardowe stopy zwrotu tego instrumentu. W modelu CRR związek między parametrami a, b i σ wyraża się wzorami 1 + a = e σ δt, 1 + b = e σ δt, (5.10) gdzie δt jest krokiem czasowym, tzn. odstępem między kolejnymi momentami, w których można dokonywać transakcji. Do definiowania struktury opisującej parametry akcji służy funkcja StockSpec = stockspec(sigma, AssetPrice, DividendType, DividendAmounts, ExdividendDates) Tylko dwa pierwsze argumenty sa obowiązkowe: Sigma współczynnik zmienności, i AssetPrice cena początkowa akcji. Pozostałe trzy argumenty są opcjonalne, określają rodzaj, wysokość i terminy wypłat dywidendy. Jeżeli akcja dywidendy nie wypłaca, parametry te możemy pominąć. Funkcja zwraca specjalną strukturę zawierającą parametry akcji. > > Sigma = 0.08; > > AssetPrice = 100; > > StockSpec = stockspec(sigma,assetprice) StockSpec = FinObj: StockSpec Sigma: AssetPrice: 100 DividendType: [] DividendAmounts: 0 ExDividendDates: [] Następny krok to określenie parametrów drugiego instrumentu funkcjonującego na rynku instrumentu pozbawionego ryzyka. Inaczej mówiąc, musimy określić parametry związane ze strukturą terminową stopy procentowej. Wykorzystamy funkcję RateSpec = intenvset( Arg1, Val1, Arg2, Val2,..., ArgN,ValN) Wywołujemy ją nieco inaczej niż inne funkcje Matlaba. Podajemy w dowolnej kolejności pary: nazwa argumentu i jego wartość. Nie będziemy tu opisywać dokładnie wszystkich argumentów, podamy tylko te, których będziemy używać. Compounding częstotliwość naliczania odsetek, u nas będzie to 1, co oznacza kapitalizację ciągłą, Rates wysokość rocznej stopy procentowej,

107 Rozdział 5. Instrumenty pochodne 107 StartDates data wyceny opcji, EndDates data wygaśnięcia opcji. Funkcja zwraca strukturę zawierającą parametry związane ze stopą procentową. >> RateSpec = intenvset( Compounding, -1, Rates, 0.1, StartDates, 01-Jul-2010, EndDates, 01-Jul-2011 ) RateSpec = FinObj: RateSpec Compounding: -1 Disc: Rates: EndTimes: 1 StartTimes: 0 EndDates: StartDates: ValuationDate: Basis: 0 EndMonthRule: 1 Ostatni krok to stworzenie struktury opisującej samo drzewo. Służy do tego funkcja TimeSpec = crrtimespec(valuationdate, Maturity, NumPeriods) gdzie ValuationDate i Maturity to odpowiednio daty wyceny i wygaśnięcia opcji, a NumPeriods określa liczbę poziomów drzewa. Na przykład NumPeriods=5 oznacza, że drzewo składa się z 5 kroków czasowych i 6 poziomów (0, 1,..., 5). Funkcja zwraca strukturę opisującą drzewo. > > ValuationDate = 01-Jul-2010 ; > > Maturity = 01-Jul-2011 ; > > NumPeriods = 10; > > TimeSpec = crrtimespec(valuationdate, Maturity, NumPeriods) TimeSpec = FinObj: BinTimeSpec ValuationDate: Maturity: NumPeriods: 10 Basis: 0 EndMonthRule: 1 tobs: [1x11 double] dobs: [1x11 double]

108 108 Rozdział 5. Instrumenty pochodne Mamy już wszystko, czego potrzebujemy do zbudowania drzewa. Trzy struktury, które utworzyliśmy podajemy jako argumenty funkcji crrtree. > > CRRTree = crrtree(stockspec, RateSpec, TimeSpec) CRRTree = FinObj: BinStockTree Method: CRR StockSpec: [1x1 struct] TimeSpec: [1x1 struct] RateSpec: [1x1 struct] tobs: [1x11 double] dobs: [1x11 double] STree: {1x11 cell} UpProbs: [1x10 double] Otrzymujemy strukturę zawierająca wszystkie parametry drzewa. W polach StockSpec, TimeSpec i RateSpec przechowywane są utworzone przez nas wcześniej struktury. Pola tobs i dobs to wektory zawierające czas i daty odpowiadające kolejnym poziomom drzewa. Ich zawartość możemy obejrzeć wpisując komendy CRRTree.tObs i CRRTree.dObs. Właściwa struktura drzewa przechowywana jest w polu STree. Możemy ją przeglądać za pomocą funkcji treepath. > > treepath(crrtree.stree, [1 2 2]) Pierwszy argument to odpowiednie pole struktury drzewa (nie cała struktura). Drugi argument to wektor określający ścieżkę: 1 oznacza ruch w górę, 2 w dół. Funkcja zwraca wektor cen. Pierwszy element tego wektora to cena w korzeniu drzewa, następne odpowiadają wierzchołkom leżącym na podanej ścieżce. Przeglądanie drzewa w ten sposób nie jest zbyt wygodne. Zamiast funkcji treepath można wykorzystać narzędzie treeviewer. Po wpisaniu polecenia > > treeviewer(crrtree) otworzy się okno takie, jak na rysunku 5.1. Okno składa się z trzech paneli: lewy przedstawia całe drzewo, na którym możemy zaznaczać ścieżki, będą się one pokazywać w prawym dolnym panelu. Prawym górny panel służy do zmiany parametrów wizualizacji drzewa. Domyślny tryb zaznaczania wierzchołków to Path. Żeby rozpocząć zaznaczanie ścieżki, klikamy lewym przyciskiem myszy na wybrany węzeł z pierwszego poziomu drzewa (nie na korzeń). Następnie klikamy kolejne wierzchołki wybranej ścieżki. Zaznaczone wierzchołki i krawędzie znajdujące się pomiędzy nimi zmienią kolor na czerwony. Możemy zaznaczyć drugą ścieżkę, ponownie klikając na wybrany wierzchołek z pierwszego poziomu drzewa,

109 Rozdział 5. Instrumenty pochodne 109 Rysunek 5.1: Okno programu treeviewer a następnie na kolejne wierzchołki. Tym razem ścieżka będzie zaznaczona kolorem fioletowym. Szczegółowy widok zaznaczonej ścieżki (ścieżek) możemy obejrzeć w postaci tabelki, diagramu i wykresu. Odpowiedni tryb ustawiamy w prawym, górnym panelu. Liczby widoczne przy wierzchołkach to oczywiście ceny akcji. Dokładniej, cena przy wierzchołku z poziomu i obowiązuje w przedziale [i, i + 1). Najlepiej widać to w tabelarycznym trybie przeglądania. Drugi tryb zaznaczania wierzchołków to Node and children. Po kliknięciu na wybrany wierzchołek pojawi się on wraz ze wszystkimi wierzchołkami potomnymi w prawym panelu. Dotychczas utworzyliśmy drzewo dwumianowe modelujące cenę akcji. Spróbujemy teraz wykorzystać je do wyceny opcji. Najprościej możemy to zrobić za pomocą funkcji [Price, PriceTree] = optstockbycrr(crrtree, OptSpec, Strike, Settle, ExerciseDates, AmericanOpt) Pierwszy argument funkcji to drzewo modelujące cenę akcji. Funkcja pozwala wyceniać opcje typu europejskiego, bermudzkiego i amerykańskiego. Od typu opcji zależy interpretacja argumentów Strike i ExerciseDates. OptSpec rodzaj opcji, wpisujemy Call dla opcji kupna lub Put dla opcji sprzedaży, Strike dla opcji europejskich i amerykańskich cena wykonania opcji, dla opcji bermudzkich wektor cen wykonania,

110 110 Rozdział 5. Instrumenty pochodne Rysunek 5.2: Wizualizacja ścieżek w postaci diagramu Rysunek 5.3: Wizualizacja ścieżek w postaci tabelarycznej

Matematyka finansowa w pakiecie Matlab

Matematyka finansowa w pakiecie Matlab Matematyka finansowa w pakiecie Matlab Wykład 1. Wprowadzenie do Matlaba Bartosz Ziemkiewicz Wydział Matematyki i Informatyki UMK Kurs letni dla studentów studiów zamawianych na kierunku Matematyka w ekonomii

Bardziej szczegółowo

Podstawy MATLABA, cd.

Podstawy MATLABA, cd. Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki Przetwarzanie Sygnałów Studia Podyplomowe, Automatyka i Robotyka Podstawy MATLABA, cd. 1. Wielomiany 1.1. Definiowanie

Bardziej szczegółowo

1 Programowanie w matlabie - skrypty i funkcje

1 Programowanie w matlabie - skrypty i funkcje 1 Programowanie w matlabie - skrypty i funkcje 1.1 Skrypty Skrypt jest plikiem tekstowym z rozszerzeniem *.m zawierającym listę poleceń do wykonania. Aby utworzyć skrypt w matlabie wybierz File New Script,

Bardziej szczegółowo

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA PRZEDMIOT : : LABORATORIUM PODSTAW AUTOMATYKI 1. WSTĘP DO

Bardziej szczegółowo

Elementy metod numerycznych - zajęcia 9

Elementy metod numerycznych - zajęcia 9 Poniższy dokument zawiera informacje na temat zadań rozwiązanych w trakcie laboratoriów. Elementy metod numerycznych - zajęcia 9 Tematyka - Scilab 1. Labolatoria Zajęcia za 34 punktów. Proszę wysłać krótkie

Bardziej szczegółowo

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH II rok Kierunek Logistyka Temat: Zajęcia wprowadzające. BHP stanowisk

Bardziej szczegółowo

Metody Numeryczne. Laboratorium 1. Wstęp do programu Matlab

Metody Numeryczne. Laboratorium 1. Wstęp do programu Matlab Metody Numeryczne Laboratorium 1 Wstęp do programu Matlab 1. Wiadomości wstępne liczby, format Program Matlab używa konwencjonalną notację dziesiętną, z kropka dziesiętną. W przypadku notacji naukowej

Bardziej szczegółowo

SKRYPTY. Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego

SKRYPTY. Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego 1 SKRYPTY Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego z = 1 y + 1+ ( x + 2) 3 x 2 + x sin y y + 1 2 dla danych wartości x = 12.5 i y = 9.87. Zadanie to można rozwiązać: wpisując dane i wzór wyrażenia

Bardziej szczegółowo

Matlab Składnia + podstawy programowania

Matlab Składnia + podstawy programowania Matlab Składnia + podstawy programowania Matlab Matrix Laboratory środowisko stworzone z myślą o osobach rozwiązujących problemy matematyczne, w których operuje się na danych stanowiących wielowymiarowe

Bardziej szczegółowo

Modelowanie Systemów Dynamicznych Studia zaoczne, Automatyka i Robotyka, rok II. Podstawy MATLABA, cz2.

Modelowanie Systemów Dynamicznych Studia zaoczne, Automatyka i Robotyka, rok II. Podstawy MATLABA, cz2. Akademia Górniczo-Hutnicza Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki Modelowanie Systemów Dynamicznych Studia zaoczne, Automatyka i Robotyka, rok II Podstawy MATLABA, cz2. 1. Wielomiany

Bardziej szczegółowo

MATLAB - laboratorium nr 1 wektory i macierze

MATLAB - laboratorium nr 1 wektory i macierze MATLAB - laboratorium nr 1 wektory i macierze 1. a. Małe i wielkie litery nie są równoważne (MATLAB rozróżnia wielkość liter). b. Wpisanie nazwy zmiennej spowoduje wyświetlenie jej aktualnej wartości na

Bardziej szczegółowo

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje Opracował: Zbigniew Rudnicki Powtórka z poprzedniego wykładu 2 1 Dokument, regiony, klawisze: Dokument Mathcada realizuje

Bardziej szczegółowo

MATLAB ŚRODOWISKO MATLABA OPIS, PODSTAWY

MATLAB ŚRODOWISKO MATLABA OPIS, PODSTAWY MATLAB ŚRODOWISKO MATLABA OPIS, PODSTAWY Poszukiwanie znaczeń funkcji i skryptów funkcja help >> help % wypisuje linki do wszystkich plików pomocy >> help plot % wypisuje pomoc dotyczą funkcji plot Znaczenie

Bardziej szczegółowo

Wprowadzenie do środowiska MATLAB z zastosowaniami w modelowaniu i analizie danych

Wprowadzenie do środowiska MATLAB z zastosowaniami w modelowaniu i analizie danych Wprowadzenie do środowiska MATLAB z zastosowaniami w modelowaniu i analizie danych Daniel Wójcik Instytut Biologii Doświadczalnej PAN Szkoła Wyższa Psychologii Społecznej d.wojcik@nencki.gov.pl tel. 022

Bardziej szczegółowo

, h(x) = sin(2x) w przedziale [ 2π, 2π].

, h(x) = sin(2x) w przedziale [ 2π, 2π]. Informatyczne podstawy projektowania, IŚ, / Maima, część II. Rysowanie wykresów w dwu i trzech wymiarach (zob. 5). a. Otwórz panel okna Wykres D i zapoznaj się z nim. Wyrażenie(a) - tutaj wpisujemy funkcję

Bardziej szczegółowo

Ćwiczenie 3: Wprowadzenie do programu Matlab

Ćwiczenie 3: Wprowadzenie do programu Matlab Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Laboratorium modelowania i symulacji Ćwiczenie 3: Wprowadzenie do programu Matlab 1. Wyznaczyć wartość sumy 1 1 2 + 1 3 1 4 + 1

Bardziej szczegółowo

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9

Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9 Wstęp 7 Rozdział 1. OpenOffice.ux.pl Writer środowisko pracy 9 Uruchamianie edytora OpenOffice.ux.pl Writer 9 Dostosowywanie środowiska pracy 11 Menu Widok 14 Ustawienia dokumentu 16 Rozdział 2. OpenOffice

Bardziej szczegółowo

Ćwiczenie 1. Matlab podstawy (1) Matlab firmy MathWorks to uniwersalny pakiet do obliczeń naukowych i inżynierskich, analiz układów statycznych

Ćwiczenie 1. Matlab podstawy (1) Matlab firmy MathWorks to uniwersalny pakiet do obliczeń naukowych i inżynierskich, analiz układów statycznych 1. Matlab podstawy (1) Matlab firmy MathWorks to uniwersalny pakiet do obliczeń naukowych i inżynierskich, analiz układów statycznych i dynamicznych, symulacji procesów, przekształceń i obliczeń symbolicznych

Bardziej szczegółowo

Laboratorium Algorytmy Obliczeniowe. Lab. 9 Prezentacja wyników w Matlabie

Laboratorium Algorytmy Obliczeniowe. Lab. 9 Prezentacja wyników w Matlabie Laboratorium Algorytmy Obliczeniowe Lab. 9 Prezentacja wyników w Matlabie 1. Wyświetlanie wyników na ekranie: W Matlabie możliwe są następujące sposoby wyświetlania wartości zmiennych: a. wpisując w programie

Bardziej szczegółowo

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 1 WPROWADZENIE DO PROGRAMU KOMPUTEROWEGO MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR 1 Wprowadzenie do programu komputerowego Matlab 1.1.

Bardziej szczegółowo

Ćwiczenie 1. Wprowadzenie do programu Octave

Ćwiczenie 1. Wprowadzenie do programu Octave Politechnika Wrocławska Wydział Elektroniki Mikrosystemów i Fotoniki Przetwarzanie sygnałów laboratorium ETD5067L Ćwiczenie 1. Wprowadzenie do programu Octave Mimo że program Octave został stworzony do

Bardziej szczegółowo

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 1 WPROWADZENIE DO PROGRAMU KOMPUTEROWEGO MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR 1 Wprowadzenie do programu komputerowego Matlab 1.1.

Bardziej szczegółowo

Obliczenia w programie MATLAB

Obliczenia w programie MATLAB Obliczenia w programie MATLAB Na zajęciach korzystamy z programu MATLAB, w którym wykonywać będziemy większość obliczeń. Po uruchomieniu programu w zależności od wersji i konfiguracji może pojawić się

Bardziej szczegółowo

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI Wprowadzenie do środowiska Matlab 1. Podstawowe informacje Przedstawione poniżej informacje maja wprowadzić i zapoznać ze środowiskiem

Bardziej szczegółowo

Ćwiczenia nr 4. Arkusz kalkulacyjny i programy do obliczeń statystycznych

Ćwiczenia nr 4. Arkusz kalkulacyjny i programy do obliczeń statystycznych Ćwiczenia nr 4 Arkusz kalkulacyjny i programy do obliczeń statystycznych Arkusz kalkulacyjny składa się z komórek powstałych z przecięcia wierszy, oznaczających zwykle przypadki, z kolumnami, oznaczającymi

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Cw.12 JAVAScript w dokumentach HTML

Cw.12 JAVAScript w dokumentach HTML Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane

Bardziej szczegółowo

MATLAB Podstawowe polecenia

MATLAB Podstawowe polecenia MATLAB Podstawowe polecenia W MATLABie możliwe jest wykonywanie prostych obliczeń matematycznych. Działania (np. +) należy wpisać w okienku poleceń na końcu naciskając klawisz enter. Program MATLAB wydrukuje

Bardziej szczegółowo

GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej.

GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej. 1 GNU Octave GNU Octave (w skrócie Octave) to rozbudowany program do analizy numerycznej. Octave zapewnia: sporą bibliotęke użytecznych funkcji i algorytmów; możliwośc tworzenia przeróżnych wykresów; możliwość

Bardziej szczegółowo

Wstęp do Programowania Lista 1

Wstęp do Programowania Lista 1 Wstęp do Programowania Lista 1 1 Wprowadzenie do środowiska MATLAB Zad. 1 Zapoznaj się z podstawowymi oknami dostępnymi w środowisku MATLAB: Command Window, Current Folder, Workspace i Command History.

Bardziej szczegółowo

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab

Podstawy Automatyki ćwiczenia Cz.1. Środowisko Matlab Podstawy Automatyki ćwiczenia Cz.1 Środowisko Matlab Podstawową jednostką obliczeniową w programie Matlab jest macierz. Wektory i skalary mogą być tutaj rozpatrywane jako specjalne typy macierzy. Elementy

Bardziej szczegółowo

Matlab Składnia + podstawy programowania

Matlab Składnia + podstawy programowania Matlab Składnia + podstawy programowania Matlab Matrix Laboratory środowisko stworzone z myślą o osobach rozwiązujących problemy matematyczne, w których operuje się na danych stanowiących wielowymiarowe

Bardziej szczegółowo

Wprowadzenie do Scilab: macierze

Wprowadzenie do Scilab: macierze Wprowadzenie do Scilab: macierze Narzędzia Informatyki Magdalena Deckert Izabela Szczęch Barbara Wołyńska Bartłomiej Prędki Politechnika Poznańska Instytut Informatyki Agenda Definiowanie macierzy Funkcje

Bardziej szczegółowo

Metody i analiza danych

Metody i analiza danych 2015/2016 Metody i analiza danych Macierze Laboratorium komputerowe 2 Anna Kiełbus Zakres tematyczny 1. Funkcje wspomagające konstruowanie macierzy 2. Dostęp do elementów macierzy. 3. Działania na macierzach

Bardziej szczegółowo

TWORZENIE WYKRESÓW (1)

TWORZENIE WYKRESÓW (1) TWORZENIE WYKRESÓW (1) Pewne wykresy można wygenerować za pomocą jednego polecenia, np.: graf2d, graf2d2, peaks, membrane, penny, earthmap, xfourier, xpklein, Lorenz, graf3d. Okno graficzne można wyczyścić

Bardziej szczegółowo

Przykładowo, jeśli współrzędna x zmienia się od 0 do 8 co 1, a współrzędna y od 12 co 2 do 25, to punkty powinny wyglądać następująco:

Przykładowo, jeśli współrzędna x zmienia się od 0 do 8 co 1, a współrzędna y od 12 co 2 do 25, to punkty powinny wyglądać następująco: Informatyka I Przypomnienie wiadomości z poprzednich zajęć: Kolokwium!!! II Nowe wiadomości: 1 Funkcje trójwymiarowe Wykresy trójwymiarowe tworzone są na podstawie funkcji dwóch zmiennych Wejściem takich

Bardziej szczegółowo

PODSTAWY INFORMATYKI 1 MATLAB CZ. 3

PODSTAWY INFORMATYKI 1 MATLAB CZ. 3 PODSTAWY INFORMATYKI 1 MATLAB CZ. 3 TEMAT: Program Matlab: Instrukcje sterujące, grafika. Wyrażenia logiczne Wyrażenia logiczne służą do porównania wartości zmiennych o tych samych rozmiarach. W wyrażeniach

Bardziej szczegółowo

Pętle iteracyjne i decyzyjne

Pętle iteracyjne i decyzyjne Pętle iteracyjne i decyzyjne. Pętla iteracyjna for Pętlę iteracyjną for stosuje się do wykonywania wyrażeń lub ich grup określoną liczbę razy. Licznik pętli w pakiecie MatLab może być zwiększany bądź zmniejszany

Bardziej szczegółowo

Przykład 1 -->s="hello World!" s = Hello World! -->disp(s) Hello World!

Przykład 1 -->s=hello World! s = Hello World! -->disp(s) Hello World! Scilab jest środowiskiem programistycznym i numerycznym dostępnym za darmo z INRIA (Institut Nationale de Recherche en Informatique et Automatique). Jest programem podobnym do MATLABa oraz jego darmowego

Bardziej szczegółowo

Wprowadzenie do programu Mathcad 15 cz. 1

Wprowadzenie do programu Mathcad 15 cz. 1 Wpisywanie tekstu Wprowadzenie do programu Mathcad 15 cz. 1 Domyślnie, Mathcad traktuje wpisywany tekst jako wyrażenia matematyczne. Do trybu tekstowego można przejść na dwa sposoby: Zaczynając wpisywanie

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Funkcja kwadratowa. f(x) = ax 2 + bx + c, Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax 2 + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax 2, a R \

Bardziej szczegółowo

Co to jest arkusz kalkulacyjny?

Co to jest arkusz kalkulacyjny? Co to jest arkusz kalkulacyjny? Arkusz kalkulacyjny jest programem służącym do wykonywania obliczeń matematycznych. Za jego pomocą możemy również w czytelny sposób, wykonane obliczenia przedstawić w postaci

Bardziej szczegółowo

Wykorzystanie programów komputerowych do obliczeń matematycznych

Wykorzystanie programów komputerowych do obliczeń matematycznych Temat wykładu: Wykorzystanie programów komputerowych do obliczeń matematycznych Kody kolorów: żółty nowe pojęcie pomarańczowy uwaga kursywa komentarz * materiał nadobowiązkowy Przykłady: Programy wykorzystywane

Bardziej szczegółowo

Przetwarzanie sygnałów

Przetwarzanie sygnałów Spis treści Przetwarzanie sygnałów Ćwiczenie 1 Wprowadzenie do programu Octave 1 Operatory 1 1.1 Operatory arytmetyczne...................... 1 1.2 Operatory relacji.......................... 1 1.3 Operatory

Bardziej szczegółowo

Wprowadzenie do środowiska

Wprowadzenie do środowiska Wprowadzenie do środowiska www.mathworks.com Piotr Wróbel piotr.wrobel@igf.fuw.edu.pl Pok. B 4.22 Metody numeryczne w optyce 2017 Czym jest Matlab Matlab (matrix laboratory) środowisko obliczeniowe oraz

Bardziej szczegółowo

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2

WyŜsza Szkoła Zarządzania Ochroną Pracy MS EXCEL CZ.2 - 1 - MS EXCEL CZ.2 FUNKCJE Program Excel zawiera ok. 200 funkcji, będących predefiniowanymi formułami, słuŝącymi do wykonywania określonych obliczeń. KaŜda funkcja składa się z nazwy funkcji, która określa

Bardziej szczegółowo

Skrypt 7. Funkcje. Opracowanie: L1

Skrypt 7. Funkcje. Opracowanie: L1 Projekt Innowacyjny program nauczania matematyki dla liceów ogólnokształcących współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego Skrypt 7 Funkcje 8. Miejsce zerowe

Bardziej szczegółowo

1) Podstawowe obliczenia. PODSTAWY AUTOMATYKI I ROBOTYKI Laboratorium. Wykonał: Łukasz Konopacki Sala 125. Grupa: poniedziałek/p,

1) Podstawowe obliczenia. PODSTAWY AUTOMATYKI I ROBOTYKI Laboratorium. Wykonał: Łukasz Konopacki Sala 125. Grupa: poniedziałek/p, PODSTAWY AUTOMATYKI I ROBOTYKI Laboratorium Wykonał: Sala 125 Łukasz Konopacki 155796 Grupa: poniedziałek/p, 16.10 18.10 Prowadzący: Dr.inż.Ewa Szlachcic Termin oddania sprawozdania: Ocena: Matlab - firmy

Bardziej szczegółowo

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 9 WYRAŻENIA LOGICZNE, INSTRUKCJE WARUNKOWE I INSTRUKCJE ITERACYJNE W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR

Bardziej szczegółowo

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji

Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki. Podstawy Informatyki i algorytmizacji Pracownia Informatyczna Instytut Technologii Mechanicznej Wydział Inżynierii Mechanicznej i Mechatroniki Podstawy Informatyki i algorytmizacji wykład 1 dr inż. Maria Lachowicz Wprowadzenie Dlaczego arkusz

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Scilab - podstawy. Wersje instalacyjne programu Scilab mogą zostać pobrane ze strony

Scilab - podstawy. Wersje instalacyjne programu Scilab mogą zostać pobrane ze strony Scilab - podstawy Scilab jest środowiskiem numerycznym, programistycznym i numerycznym dostępnym za darmo z INRIA (Institut Nationale de Recherche en Informatique et Automatique). Jest programem podobnym

Bardziej szczegółowo

Kolumna Zeszyt Komórka Wiersz Tabela arkusza Zakładki arkuszy

Kolumna Zeszyt Komórka Wiersz Tabela arkusza Zakładki arkuszy 1 Podstawowym przeznaczeniem arkusza kalkulacyjnego jest najczęściej opracowanie danych liczbowych i prezentowanie ich formie graficznej. Ale formuła arkusza kalkulacyjnego jest na tyle elastyczna, że

Bardziej szczegółowo

Ćwiczenie 1. Wprowadzenie do programu Octave

Ćwiczenie 1. Wprowadzenie do programu Octave Politechnika Wrocławska Wydział Elektroniki Mikrosystemów i Fotoniki Przetwarzanie sygnałów laboratorium ETD5067L Ćwiczenie 1. Wprowadzenie do programu Octave Mimo że program Octave został stworzony do

Bardziej szczegółowo

MATLAB tworzenie własnych funkcji

MATLAB tworzenie własnych funkcji MATLAB tworzenie własnych funkcji Definiowanie funkcji anonimowych Własne definicje funkcji możemy tworzyć bezpośrednio w Command Window, są to tzw. funkcje anonimowe; dla funkcji jednej zmiennej składnia

Bardziej szczegółowo

Zadanie 8. Dołączanie obiektów

Zadanie 8. Dołączanie obiektów Zadanie 8. Dołączanie obiektów Edytor Word umożliwia dołączanie do dokumentów różnych obiektów. Mogą to być gotowe obiekty graficzne z galerii klipów, równania, obrazy ze skanera lub aparatu cyfrowego.

Bardziej szczegółowo

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt. Grafika w dokumencie Wprowadzanie ozdobnych napisów WordArt Do tworzenia efektownych, ozdobnych napisów służy obiekt WordArt. Aby wstawić do dokumentu obiekt WordArt: 1. Umieść kursor w miejscu, w którym

Bardziej szczegółowo

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a Funkcja kwadratowa. Funkcją kwadratową nazywamy funkcję f : R R określoną wzorem gdzie a, b, c R, a 0. f(x) = ax + bx + c, Szczególnym przypadkiem funkcji kwadratowej jest funkcja f(x) = ax, a R \ {0}.

Bardziej szczegółowo

5.2. Pierwsze kroki z bazami danych

5.2. Pierwsze kroki z bazami danych 5.2. Pierwsze kroki z bazami danych Uruchamianie programu Podobnie jak inne programy, OO Base uruchamiamy z Menu Start, poprzez zakładkę Wszystkie programy, gdzie znajduje się folder OpenOffice.org 2.2,

Bardziej szczegółowo

Podstawowe operacje na macierzach

Podstawowe operacje na macierzach Podstawowe operacje na macierzach w pakiecie GNU octave. (wspomaganie obliczeń inżynierskich) Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z tworzeniem macierzy i wektorów w programie GNU octave.

Bardziej szczegółowo

Usługi Informatyczne "SZANSA" - Gabriela Ciszyńska-Matuszek ul. Świerkowa 25, Bielsko-Biała

Usługi Informatyczne SZANSA - Gabriela Ciszyńska-Matuszek ul. Świerkowa 25, Bielsko-Biała Usługi Informatyczne "SZANSA" - Gabriela Ciszyńska-Matuszek ul. Świerkowa 25, 43-305 Bielsko-Biała NIP 937-22-97-52 tel. +48 33 488 89 39 zwcad@zwcad.pl www.zwcad.pl Aplikacja do rysowania wykresów i oznaczania

Bardziej szczegółowo

KRYTERIA OCENIANIA Z MATEMATYKI W OPARCIU O PODSTAWĘ PROGRAMOWĄ I PROGRAM NAUCZANIA MATEMATYKA 2001 DLA KLASY DRUGIEJ

KRYTERIA OCENIANIA Z MATEMATYKI W OPARCIU O PODSTAWĘ PROGRAMOWĄ I PROGRAM NAUCZANIA MATEMATYKA 2001 DLA KLASY DRUGIEJ KRYTERIA OCENIANIA Z MATEMATYKI W OPARCIU O PODSTAWĘ PROGRAMOWĄ I PROGRAM NAUCZANIA MATEMATYKA 2001 DLA KLASY DRUGIEJ TREŚCI KSZTAŁCENIA WYMAGANIA PODSTAWOWE WYMAGANIA PONADPODSTAWOWE Liczby wymierne i

Bardziej szczegółowo

Pokaz slajdów na stronie internetowej

Pokaz slajdów na stronie internetowej Pokaz slajdów na stronie internetowej... 1 Podpisy pod zdjęciami... 3 Publikacja pokazu slajdów w Internecie... 4 Generator strony Uczelni... 4 Funkcje dla zaawansowanych użytkowników... 5 Zmiana kolorów

Bardziej szczegółowo

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych) Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych) Funkcja uwikłana (równanie nieliniowe) jest to funkcja, która nie jest przedstawiona jawnym przepisem, wzorem wyrażającym zależność wartości

Bardziej szczegółowo

Arkusz kalkulacyjny EXCEL

Arkusz kalkulacyjny EXCEL ARKUSZ KALKULACYJNY EXCEL 1 Arkusz kalkulacyjny EXCEL Aby obrysować tabelę krawędziami należy: 1. Zaznaczyć komórki, które chcemy obrysować. 2. Kursor myszy ustawić na menu FORMAT i raz kliknąć lewym klawiszem

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

Matlab MATrix LABoratory Mathworks Inc.

Matlab MATrix LABoratory Mathworks Inc. Małgorzata Jakubowska Matlab MATrix LABoratory Mathworks Inc. MATLAB pakiet oprogramowania matematycznego firmy MathWorks Inc. (www.mathworks.com) rozwijany od roku 1984 język programowania i środowisko

Bardziej szczegółowo

I. Program II. Opis głównych funkcji programu... 19

I. Program II. Opis głównych funkcji programu... 19 07-12-18 Spis treści I. Program... 1 1 Panel główny... 1 2 Edycja szablonu filtrów... 3 A) Zakładka Ogólne... 4 B) Zakładka Grupy filtrów... 5 C) Zakładka Kolumny... 17 D) Zakładka Sortowanie... 18 II.

Bardziej szczegółowo

Metody numeryczne Laboratorium 2

Metody numeryczne Laboratorium 2 Metody numeryczne Laboratorium 2 1. Tworzenie i uruchamianie skryptów Środowisko MATLAB/GNU Octave daje nam możliwość tworzenia skryptów czyli zapisywania grup poleceń czy funkcji w osobnym pliku i uruchamiania

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup Baltie 3 Podręcznik do nauki programowania dla klas I III gimnazjum Tadeusz Sołtys, Bohumír Soukup Czytanie klawisza lub przycisku myszy Czytaj klawisz lub przycisk myszy - czekaj na naciśnięcie Polecenie

Bardziej szczegółowo

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku

Diary przydatne polecenie. Korzystanie z funkcji wbudowanych i systemu pomocy on-line. Najczęstsze typy plików. diary nazwa_pliku Diary przydatne polecenie diary nazwa_pliku Polecenie to powoduje, że od tego momentu sesja MATLAB-a, tj. polecenia i teksty wysyłane na ekran (nie dotyczy grafiki) będą zapisywane w pliku o podanej nazwie.

Bardziej szczegółowo

Podstawy obsługi pakietu GNU octave.

Podstawy obsługi pakietu GNU octave. Podstawy obsługi pakietu GNU octave. (wspomaganie obliczeń inżynierskich) Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z obsługą pakietu GNU octave. W ćwiczeniu wprowadzono opis podstawowych komend

Bardziej szczegółowo

Techniki wstawiania tabel

Techniki wstawiania tabel Tabele w Wordzie Tabela w Wordzie to uporządkowany układ komórek w postaci wierszy i kolumn, w które może być wpisywany tekst lub grafika. Każda komórka może być formatowana oddzielnie. Możemy wyrównywać

Bardziej szczegółowo

Spis treści Szybki start... 4 Podstawowe informacje opis okien... 6 Tworzenie, zapisywanie oraz otwieranie pliku... 23

Spis treści Szybki start... 4 Podstawowe informacje opis okien... 6 Tworzenie, zapisywanie oraz otwieranie pliku... 23 Spis treści Szybki start... 4 Podstawowe informacje opis okien... 6 Plik... 7 Okna... 8 Aktywny scenariusz... 9 Oblicz scenariusz... 10 Lista zmiennych... 11 Wartości zmiennych... 12 Lista scenariuszy/lista

Bardziej szczegółowo

Maple i wykresy. 1.1 Najpierw należy się zalogować. Jak to zrobić zostało opisane w moim poprzednim tutorialu.

Maple i wykresy. 1.1 Najpierw należy się zalogować. Jak to zrobić zostało opisane w moim poprzednim tutorialu. Maple i wykresy 1 Program Maple 1.1 Najpierw należy się zalogować. Jak to zrobić zostało opisane w moim poprzednim tutorialu. 1.2 Uruchomienie programu Maple Uruchamiamy go, wpisując w konsoli maple, potwierdzając

Bardziej szczegółowo

Podręcznik użytkownika programu. Ceremonia 3.1

Podręcznik użytkownika programu. Ceremonia 3.1 Podręcznik użytkownika programu Ceremonia 3.1 1 Spis treści O programie...3 Główne okno programu...4 Edytor pieśni...7 Okno ustawień programu...8 Edycja kategorii pieśni...9 Edytor schematów slajdów...10

Bardziej szczegółowo

Obliczenia iteracyjne

Obliczenia iteracyjne Lekcja Strona z Obliczenia iteracyjne Zmienne iteracyjne (wyliczeniowe) Obliczenia iteracyjne wymagają zdefiniowania specjalnej zmiennej nazywanej iteracyjną lub wyliczeniową. Zmienną iteracyjną od zwykłej

Bardziej szczegółowo

Wstęp Pierwsze kroki Pierwszy rysunek Podstawowe obiekty Współrzędne punktów Oglądanie rysunku...

Wstęp Pierwsze kroki Pierwszy rysunek Podstawowe obiekty Współrzędne punktów Oglądanie rysunku... Wstęp... 5 Pierwsze kroki... 7 Pierwszy rysunek... 15 Podstawowe obiekty... 23 Współrzędne punktów... 49 Oglądanie rysunku... 69 Punkty charakterystyczne... 83 System pomocy... 95 Modyfikacje obiektów...

Bardziej szczegółowo

BIBLIOTEKA LOKALNE CENTRUM WIEDZY PRAKTYCZNEJ PRZEWODNIK PO NARZĘDZIACH WARSZTAT NR 1: ARKUSZE KALKULACYJNE - MINI SKRYPT

BIBLIOTEKA LOKALNE CENTRUM WIEDZY PRAKTYCZNEJ PRZEWODNIK PO NARZĘDZIACH WARSZTAT NR 1: ARKUSZE KALKULACYJNE - MINI SKRYPT BIBLIOTEKA LOKALNE CENTRUM WIEDZY PRAKTYCZNEJ PRZEWODNIK PO NARZĘDZIACH WARSZTAT NR 1: ARKUSZE KALKULACYJNE - MINI SKRYPT 1. Wprowadzenie Arkusze kalkulacyjne Google umożliwiają łatwe tworzenie, udostępnianie

Bardziej szczegółowo

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85 Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych Klasa Średnia 8a 3,54 8b 5,25 8c 4,21 8d 4,85 Do wstawienia wykresu w edytorze tekstu nie potrzebujemy mieć wykonanej tabeli jest ona tylko

Bardziej szczegółowo

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni, Baltie Zadanie 1. Budowanie W trybie Budowanie wybuduj domek jak na rysunku. Przedmioty do wybudowania domku weź z banku 0. Zadanie 2. Czarowanie sterowanie i powtarzanie W trybie Czarowanie z pomocą czarodzieja

Bardziej szczegółowo

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze... Tekst na niebiesko jest komentarzem lub treścią zadania. Zadanie. Dane są macierze: A D 0 ; E 0 0 0 ; B 0 5 ; C Wykonaj poniższe obliczenia: 0 4 5 Mnożenia, transpozycje etc wykonuję programem i przepisuję

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

Ćwiczenie: JavaScript Cookies (3x45 minut)

Ćwiczenie: JavaScript Cookies (3x45 minut) Ćwiczenie: JavaScript Cookies (3x45 minut) Cookies niewielkie porcje danych tekstowych, które mogą być przesyłane między serwerem a przeglądarką. Przeglądarka przechowuje te dane przez określony czas.

Bardziej szczegółowo

Arkusz kalkulacyjny. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski

Arkusz kalkulacyjny. R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski Arkusz kalkulacyjny R. Robert Gajewski omklnx.il.pw.edu.pl/~rgajewski www.il.pw.edu.pl/~rg s-rg@siwy.il.pw.edu.pl O arkuszach ogólnie! Arkusz kalkulacyjny (spreadshit) to komputerowy program umożliwiający

Bardziej szczegółowo

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Prezentacja multimedialna MS PowerPoint 2010 (podstawy) Prezentacja multimedialna MS PowerPoint 2010 (podstawy) Cz. 1. Tworzenie slajdów MS PowerPoint 2010 to najnowsza wersja popularnego programu do tworzenia prezentacji multimedialnych. Wygląd programu w

Bardziej szczegółowo

Ćwiczenie 3. MatLab: Algebra liniowa. Rozwiązywanie układów liniowych

Ćwiczenie 3. MatLab: Algebra liniowa. Rozwiązywanie układów liniowych Ćwiczenie 3. MatLab: Algebra liniowa. Rozwiązywanie układów liniowych Wszystko proszę zapisywać komendą diary do pliku o nazwie: imie_ nazwisko 1. Definiowanie macierzy i odwoływanie się do elementów:

Bardziej szczegółowo

Tworzenie prezentacji w MS PowerPoint

Tworzenie prezentacji w MS PowerPoint Tworzenie prezentacji w MS PowerPoint Program PowerPoint dostarczany jest w pakiecie Office i daje nam możliwość stworzenia prezentacji oraz uatrakcyjnienia materiału, który chcemy przedstawić. Prezentacje

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA) Podstawy programowania w języku Visual Basic dla Aplikacji (VBA) Instrukcje Język Basic został stworzony w 1964 roku przez J.G. Kemeny ego i T.F. Kurtza z Uniwersytetu w Darthmouth (USA). Nazwa Basic jest

Bardziej szczegółowo

KLUCZ PUNKTOWANIA ODPOWIEDZI

KLUCZ PUNKTOWANIA ODPOWIEDZI Egzamin maturalny maj 009 MATEMATYKA POZIOM ROZSZERZONY KLUCZ PUNKTOWANIA ODPOWIEDZI Zadanie. a) Wiadomości i rozumienie Matematyka poziom rozszerzony Wykorzystanie pojęcia wartości argumentu i wartości

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

Zakłócenia w układach elektroenergetycznych LABORATORIUM

Zakłócenia w układach elektroenergetycznych LABORATORIUM Zakłócenia w układach elektroenergetycznych LABORATORIUM Obliczenia w programie MATLAB Na zajęciach korzystamy z programu MATLAB, w którym wykonywać będziemy większość obliczeń. Po uruchomieniu programu

Bardziej szczegółowo

Podstawowe operacje graficzne.

Podstawowe operacje graficzne. Podstawowe operacje graficzne. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z możliwościami graficznymi środowiska GNU octave, w tym celu: narzędziami graficznymi, sposobami konstruowania wykresów

Bardziej szczegółowo

Zanim zaczniemy GNU Octave

Zanim zaczniemy GNU Octave MatLab część I 1 Zanim zaczniemy GNU Octave 2 Zanim zaczniemy GNU Octave 3 Zanim zaczniemy GNU Octave 4 Środowisko MatLab-a MatLab ang. MATrix LABoratory Obliczenia numeryczne i symboliczne operacje na

Bardziej szczegółowo

Zadanie 1. Stosowanie stylów

Zadanie 1. Stosowanie stylów Zadanie 1. Stosowanie stylów Styl to zestaw elementów formatowania określających wygląd: tekstu atrybuty czcionki (tzw. styl znaku), akapitów np. wyrównanie tekstu, odstępy między wierszami, wcięcia, a

Bardziej szczegółowo

Praktyczne wykorzystanie arkusza kalkulacyjnego w pracy nauczyciela część 1

Praktyczne wykorzystanie arkusza kalkulacyjnego w pracy nauczyciela część 1 Praktyczne wykorzystanie arkusza kalkulacyjnego w pracy nauczyciela część 1 Katarzyna Nawrot Spis treści: 1. Podstawowe pojęcia a. Arkusz kalkulacyjny b. Komórka c. Zakres komórek d. Formuła e. Pasek formuły

Bardziej szczegółowo

Wykład z Technologii Informacyjnych. Piotr Mika

Wykład z Technologii Informacyjnych. Piotr Mika Wykład z Technologii Informacyjnych Piotr Mika Uniwersalna forma graficznego zapisu algorytmów Schemat blokowy zbiór bloków, powiązanych ze sobą liniami zorientowanymi. Jest to rodzaj grafu, którego węzły

Bardziej szczegółowo

3.7. Wykresy czyli popatrzmy na statystyki

3.7. Wykresy czyli popatrzmy na statystyki 3.7. Wykresy czyli popatrzmy na statystyki Współczesne edytory tekstu umożliwiają umieszczanie w dokumentach prostych wykresów, służących do graficznej reprezentacji jakiś danych. Najprostszym sposobem

Bardziej szczegółowo