Wykład

Transkrypt

Wykład
Matematyka finansowa w pakiecie Matlab
Wykład 3. Podstawowe obliczenia finansowe w Matlabie. Obligacje
Bartosz Ziemkiewicz
Wydział Matematyki i Informatyki UMK
Kurs letni dla studentów studiów zamawianych
na kierunku „Matematyka w ekonomii i finansach”
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
1/55
Wartość pieniądza w czasie
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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
2/55
Podstawowe pojęcia
Kt — kapitał posiadany w chwili czasu t.
K0 — kapitał początkowy, czyli pierwotnie zainwestowaną kwotą
pieniędzy.
podstawowa jednostka czasu (okres bazowy) to 1 rok.
K1 − K0 — zysk (roczny), albo odsetki (roczne).
Stosunek zysku do zainwestowanego kapitału
r=
K1 − K0
K0
(1)
nazywać będziemy stopą procentową lub stopą zwrotu
(ang. interest rate, rate of return).
Wzór (1) zapisujemy często w innej formie
K1 = K0 + rK0 = K0 (1 + r ).
(1 + r ) — czynnik oprocentowujący
Stopa procentowa jest ściśle związana z wybraną jednostką czasu.
Zmiana tej jednostki prowadzi do innej wartości stopy procentowej.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
3/55
Stopy procentowe
Na rynku funkcjonuje wiele różnych stóp procentowych.
Najważniejsze polskie stopy procentowe to ustalane przez NBP
stopy: referencyjna, lombardowa, depozytowa, 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 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.
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ć, że oprocentowanie lokat i kredytów jest
jednakowe. Jest to pewne uproszczenie, ale w stosunku do dużych
i wiarygodnych inwestorów nie odbiega zbytnio od rzeczywistości.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
4/55
Kapitalizacja prosta
Proces dopisywania odsetek do kapitału nazywamy kapitalizacją.
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:
K0 ,
K1 = K0 + rK0 = K0 (1 + r ),
K2 = K1 + rK0 = K0 (1 + 2r ),
..
.
Kn = Kn−1 + rK0 = K0 (1 + nr ).
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
5/55
Kapitalizacja złożona
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:
K0 ,
K1 = K0 + rK0 = K0 (1 + r ),
K2 = K1 (1 + r ) = K0 (1 + r )2 ,
..
.
Kn = Kn−1 (1 + r ) = K0 (1 + r )n .
W dalszej części 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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
6/55
Kapitalizacja w podokresach
Do tej pory zakładaliśmy, ż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.
Najczęściej używane wartości m to:
m=1
— kapitalizacja roczna,
m=2
— kapitalizacja półroczna,
m=4
— kapitalizacja kwartalna,
m = 12
— kapitalizacja miesięczna,
m = 360 (lub 365)
m = 8640
Bartosz Ziemkiewicz
— kapitalizacja dzienna,
— kapitalizacja godzinna.
Matematyka finansowa w pakiecie Matlab
7/55
Stopa nominalna, a stopa względna
Niech r będzie roczną stopą procentową, a kapitalizacja
dokonywana będzie w m podokresach. Wówczas kapitał po
n podokresach wynosić będzie:
n
Kn/m = K0 1 + mr .
Wówczas r (m) = r /m nazywamy względną stopą procentową,
a r nominalną stopą procentową (ang. nominal interest rate).
Wartość kapitału po roku wynosi
K1 = Km/m = K0 (1 +
Bartosz Ziemkiewicz
r m
m) .
Matematyka finansowa w pakiecie Matlab
8/55
Stopa nominalna, a stopa efektywna
Niech r będzie roczną stopą procentową, a kapitalizacja
dokonywana będzie w m podokresach.
Efektywną stopą procentową (roczną) (ang. effective interest rate)
(m)
nazywamy liczbę reff spełniającą równanie
m
(m)
K0 (1 + reff ) = K0 1 + mr
.
(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ą mr . Z wzoru (2) łatwo wynika,
że
m
(m)
− 1.
reff = 1 + mr
Możemy rozważać też problem odwrotny, przy ustalonej stopie
(m)
efektywnej reff i ustalonej liczbie podokresów m znaleźć wartość
stopy nominalnej r spełniającej równanie (2). Nietrudno zauważyć,
że:
(m) 1/m
r = m 1 + reff
−1 .
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
9/55
Funkcje effrr i nomrr
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.
Załóżmy, że nominalna stopa procentowa wynosi r = 0,08.
W przypadku kapitalizacji miesięcznej stopa efektywna wynosi
> > effrr(0.08,12)
ans =
0.0830
a w przypadku kapitalizacji dziennej
> > effrr(0.08,360)
ans =
0.0833
Wyznaczymy ponownie nominalną stopę procentową:
> > nomrr(0.0830,12)
ans =
0.0800
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
10/55
Kapitalizacja ciągła
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
m
reff = lim
1 + mr
− 1 = e r − 1,
m→∞
a czynnik oprocentowujący wynosi 1 + reff = 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
Kt = e rt K0 .
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
11/55
Dyskontowanie
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 Kt . Inaczej
mówiąc, jaka jest obecna wartość tego kapitału.
Jeżeli stosujemy kapitalizację złożoną z roczną stopą
procentową r , to z podanych wcześniej wzorów wynika, że
K0 =
Kn
.
(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
K0 = e −rt Kt .
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
12/55
Strumień pieniądza
Strumieniem pieniądza (ang. cash flow)nazywamy ciąg płatności
Ck w określonych momentach czasu t = t0 , t1 , . . . , tk .
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” (Ck < 0), jeżeli ktoś nam
płaci, to ze znakiem „plus” (Ck > 0).
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
13/55
Wartość przyszła (FV)
Niech C0 , C1 , . . . , Cn będzie strumieniem pieniądza. Załóżmy, że
C0 oznacza płatność dokonaną w chwili początkowej t = 0,
C1 płatność dokonaną na końcu pierwszego roku, C2 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
FVn =
n
X
Ck (1 + r )n−k .
(3)
k=0
Widzimy, że płatność początkowa jest kapitalizowana n razy,
następna n − 1 razy, a ostatnia płatność Cn w ogóle nie jest
kapitalizowana.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
14/55
Wartość przyszła (FV)
W przypadku, gdy stosujemy inny model kapitalizacji, wzór (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
FVn =
mn
X
Ck (1 + r /m)nm−k .
k=0
Jeżeli płatności nie są dokonywane regularnie, ale w dowolnych
momentach t0 , t1 , . . . , tn , to wzór może przyjąć skomplikowaną
postać. W takim przypadku wygodniej jest użyć ciągłego modelu
kapitalizacji. Otrzymujemy wówczas
FVtn =
n
X
Ck e tn −tk .
k=0
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
15/55
Funkcja fvvar
Do obliczania wartości przyszłej służy funkcja fvvar(str,r)
str — wektor zawierający kolejne płatności wykonywane
w regularnych odstępach, na końcu każdego okresu,
r — okresowa stopa procentowa.
Funkcja zwraca wartość przyszłą strumienia w momencie
dokonywania ostatniej płatności.
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([100 300 200],0.07)
ans =
635.4900
> > fvvar([100 300 200 0 0],0.07)
ans =
727.5725
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
16/55
Funkcja fvvar
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 — wektorem
zawierającym daty, w których dokonywane są płatności.
Obliczmy wartość przyszłą następującego strumienia:
10 grudnia 2007 — 1000 zł 13 lutego 2008
— 1500 zł,
14 maja 2008
— 3000 zł, 5 listopada 2009 — 2000 zł,
2 grudnia 2010
— 1500 zł.
Jaka będzie wartość tego strumienia 2 grudnia 2010 roku, jeżeli
roczna stopa procentowa wynosi 8%?
> > str = [1000 1500 3000 2000 1500];
> > r = 0.08;
> > daty = [’10-Dec-2007’ ; ’13-Feb-2008’ ;
’14-May-2008’ ; ’05-Nov-2009’ ; ’02-Dec-2010’ ];
> > fvvar(str,r,daty)
ans =
10440.57
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
17/55
Funkcja fvfix
Jeżeli płatności mają zawsze tę samą wartość i dokonywane są
regularnie, 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, dwa kolejne
opcjonalne:
r — okresowa stopa procentowa,
n — liczba okresów,
C — wysokość pojedynczej płatności. Opcjonalnie możemy podać
C0 — początkowa wartość strumienia (domyślnie C0=0)
d — czy płatności na końcu każdego okresu (d=0, wartość
domyślna), czy na początku (d=1).
Załóżmy, że początkowy stan konta to 1500 zł. Przez 20 lat na
końcu każdego miesiąca wpłacamy 200 zł. Roczna stopa
procentowa jest 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 )
ans =
125194.29
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
18/55
Wartość obecna (PV)
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 C0 , C1 , . . . , Cn 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
n
X
Ck
.
PV =
(1 + r )k
k=0
Jeżeli stosujemy ciągły model kapitalizacji, a strumień składa się
z płatności wykonywanych w momentach t0 , t1 , . . . , tn , to
n
X
PV =
Ck e −rtk .
k=0
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
19/55
Wartość obecna (PV)
Warto zauważyć, że między wartością przyszłą FVn , a wartością
obecną PV zachodzą związki
FVn = PV · (1 + r )n
w przypadku dyskretnym i
FVt = 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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
20/55
Wartość obecna netto (NPV)
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 C0 , C1 , . . . , Cn w momentach 0, 1, 2, . . . n.
Najczęściej (choć nie zawsze) C0 < 0 — na początku inwestujemy
pieniądze, i Ck > 0 dla k > 1 — inwestycja przynosi nam zysk.
Wartością obecną netto (ang. net present value (NPV)) tej
inwestycji nazywamy liczbę
NPV =
n
X
k=0
Ck
.
(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ć.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
21/55
Wartość obecna netto (NPV) — przykład
Znajomy proponuje nam żebyśmy zainwestowali w jego firmę
10 000 zł.
Obiecuje, że w pięciu kolejnych latach inwestycja przyniesie nam
zyski równe odpowiednio 3000, 2500, 3000, 2000 i 2000 zł.
Czy warto przyjąć propozycję, jeżeli roczna stopa procentowa
wynosi a) 7%, b) 10%?
> > str = [-10000 3000 2500 3000 2000 2000];
> > r = 0.07;
> > pvvar(str,r)
ans =
387.9916
Wynika stąd, że warto zainwestować. Czy na pewno?
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
22/55
Wartość obecna netto (NPV) — przykład
Sprawdźmy. Jeżeli wpłacimy 10 000 zł na lokatę bankową, to po 5
latach otrzymamy:
> > 10000*(1+0.07)ˆ 5
ans =
14025.52
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:
> > fvvar([3000 2500 3000 2000 2000],r)
ans =
14569.69
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)
ans =
544.18
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
23/55
Wartość obecna netto (NPV) — przykład
Sprawdźmy teraz, czy sytuacja zmieni się, jeżeli stopa procentowa
wzrośnie do 10%.
> > r = 0.1;
> > pvvar(str,r)
ans =
-344.80
Widzimy, że inwestycja przestała być opłacalna. Rzeczywiście,
10 000 zł wpłacone na lokatę po 5 latach da nam
> > 10000*(1+0.1)ˆ 5
ans =
16105.10
Wpłacanie na lokatę zysków z inwestycji przyniesie tylko
> > 3000*(1.1)ˆ 4 + 2500*(1.1)ˆ 3 + 3000 *(1.1)ˆ 2 +
2000*(1.1)+2000
ans =
15549.80
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
24/55
Wartość obecna netto (NPV) — przykład
Ostatni 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
której wartość obecna inwestycji jest równa zero?
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
25/55
Wewnętrzna stopa zwrotu (IRR)
Niech C0 , C1 , . . . , Cn 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
n
X
Ck
NPV =
=0
(1 + r )k
k=0
lub, w przypadku kapitalizacji ciągłej,
NPV =
n
X
Ck e −rtk = 0.
k=0
W Matlabie do wyznaczania wewnętrznej stopy zwrotu służy
funkcja irr.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
26/55
Wewnętrzna stopa zwrotu (IRR) — przykład
Wyznaczymy wewnętrzną stopę zwrotu dla strumienia
z poprzedniego przykładu:
> > irr([-10000 3000 2500 3000 2000 2000])
ans =
0.0854
Rzeczywiście,
> > pvvar([-10000 3000 2500 3000 2000 2000],ans)
ans =
0
Przy takiej stopie procentowej nie ma znaczenia, czy
zainwestujemy w firmę znajomego, czy wpłacimy pieniądze na
lokatę bankową.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
27/55
Wewnętrzna stopa zwrotu (IRR) — wady
Niestety przy obliczaniu wewnętrznej stopy zwrotu mogą pojawić
się problemy.
Równanie
n
X
Ck
NPV =
=0
(4)
(1 + r )k
k=0
może nie mieć rozwiązania, może mieć więcej niż jedno
rozwiązanie, może mieć też tylko rozwiązania zespolone.
Wiadomo jednak, że jeżeli wszystkie wpłaty nastąpiły przed
wypłatami, oraz przynajmniej jedna wpłata i jedna wypłata były
różne od zera, to równanie (4) ma jednoznaczne rozwiązanie
rzeczywiste.
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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
28/55
Wewnętrzna stopa zwrotu (IRR) — wady
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ą IRR niż projekt B, a mimo to bardziej opłacalna jest
inwestycja w ten drugi projekt.
Przy obliczaniu IRR zakłada się, że wszystkie zyski, jakie przynosi
projekt, są inwestowane w ten sam projekt lub w inny o takiej
samej rentowności. Często jednak zyski inwestuje się w inne
projekty o niższej stopie zwrotu. Również koszty pozyskania
kapitału są zazwyczaj różne od IRR.
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ć MIRR w Matlabie, używamy funkcji
mirr(str,r1,r2), gdzie r1 jest stopą według której pozyskujemy
kapitał, a r2 stopą według której reinwestujemy zyski z projektu.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
29/55
Spłata kredytu
Najważniejszymi wartościami charakteryzującymi kredyt są:
jego wysokość P,
oprocentowanie r ,
czas spłaty n,
wysokość raty C .
Ograniczymy się do 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.
Wówczas parametry charakteryzujące kredyt są powiązane
następującym wzorem:
P=
n
X
k=1
C
.
(1 + r )k
(5)
Jeżeli znamy trzy parametry kredytu możemy obliczyć czwarty.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
30/55
Funkcja payper
Funkcja 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 wysokość raty.
Opcjonalnie 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.
Załóżmy, że bierzemy kredyt w wysokości 10 000 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)
ans =
212.47
Miesięczna rata wynosi nieco ponad 212 zł.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
31/55
Funkcja annuterm
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.
Tak samo jak w poprzednim przykładzie bierzemy kredyt
w wysokości 10 000 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)
ans =
60.00
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”.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
32/55
Funkcja annurate
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.
Ponownie bierzemy kredyt w wysokości 10 000 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, 212.47, 10000)
ans =
0.0083
Jest to miesięczna stopa procentowa, aby otrzymać roczną trzeba
ją przemnożyć przez 12.
> > ans * 12
ans =
0.1000
Czyli około 10%.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
33/55
Funkcja pvfix (raz jeszcze)
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, 212.47)
ans =
10000
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
34/55
Funkcja amortize
Funkcja amortize(r,n,pv,fv,d) przyjmuje 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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
35/55
Funkcja amortize
Sprawdźmy, jak zmieniają się części odsetkowe i kapitałowe raty
dla danych z naszego przykładu.
Aby zaoszczędzić miejsce, podajemy tylko dwie pierwsze i dwie
ostatnie wartości każdego z 60-elementowych wektorów.
> > [rkap rods biez rata] = amortize(0.1/12, 5*12,
10000)
rkap =
129.1371 130.2133 ... 208.9731 210.7145
rods =
83.3333 82.2572 ... 3.4974 1.7560
biez =
9870.9 9740.6 ... 210.7 0.0
rata =
212.4704
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 do zera.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
36/55
Obligacje
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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
37/55
Obligacje
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).
Kupony przynoszą posiadaczowi pewien stały dochód, dlatego
obligacje zaliczamy do tzw. fixed income securities. (Czasami
dochód ten zmienia się, wysokość kuponu może zależeć np. od
aktualnej stopy procentowej.)
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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
38/55
Obligacje
Obligacji nie musimy kupować bezpośrednio od ich wystawcy
w momencie ich emisji, nie musimy ich też trzymać aż do
momentu wykupu.
Dlatego musimy odróżniać datę emisji (ang. issue date) od daty
dokonania transakcji kupna-sprzedaży (ang. settlement date).
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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
39/55
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 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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
40/55
Cena sprawiedliwa i arbitraż — przykład
Jeżeli w banku A roczna stopa oprocentowania kredytów wynosi
10%, a w banku B roczna stopa oprocentowania depozytów
wynosi 12%, to 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. 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 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ć.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
41/55
Wycena obligacji zerokuponowych
Rozważmy obligację zerokuponową, 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
F −P
.
r=
P
Jeżeli to F i r są ustalone, to po przekształceniu otrzymamy wzór
na bieżącą cenę obligacji
F
.
(6)
P=
1+r
Pozostaje pytanie: jaką wartość r powinniśmy wstawić do
powyższego wzoru, aby otrzymana cena P była ceną sprawiedliwą?
Pokażemy, że r powinno być równe obowiązującej na rynku stopie
procentowej wolnej od ryzyka.
W praktyce często mamy do czynienia z sytuacją odwrotną. To
ustalona przez skarb państwa cena obligacji wyznacza stopę
procentową wolną od ryzyka.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
42/55
Wycena obligacji zerokuponowych
Załóżmy najpierw, że obligacje są sprzedawane po cenie P1 niższej
niż ta określona wzorem (6), tzn.
P1 < P =
F
.
1+r
Wówczas możemy pożyczyć kwotę P1 i kupić za nią jedną
obligację. Po roku za obligacje otrzymamy F i zwracamy dług,
który wraz z odsetkami wynosi P1 (1 + r ). Ponieważ P1 < P, to
F − P1 (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.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
43/55
Wycena obligacji zerokuponowych
Załóżmy, że obligacje sprzedawane są po cenie P1 wyższej niż P
F
P1 > P =
.
1+r
Tym razem zamiast gotówki pożyczamy jedną obligację
i sprzedajemy ją po cenie P1 .
Jest to tzw. krótka 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ę.
Po roku jej wartość wzrośnie do P1 (1 + r ). Po oddaniu
poprzedniemu właścicielowi obligacji jej wartości nominalnej F
zostaje nam kwota
P1 (1 + r ) − F > P(1 + r ) − F = 0.
Osiągnęliśmy zysk bez żadnego wkładu własnego. Wynika stąd, że
P określone wzorem (6) jest jedyną ceną niedającą możliwości
arbitrażu, czyli ceną sprawiedliwą.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
44/55
Wycena obligacji kuponowych
Obligacje kuponowe przynoszą 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:
n
X
F
C
+
,
P=
(1 + r )n
(1 + r )k
k=1
Bartosz
Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
gdzie r jest roczną
stopą
procentową.
45/55
Wycena obligacji kuponowych
Jeżeli kupony wypłacane są częściej, np. m razy do roku, to
P=
m·n
X
k=1
C /m
F
+
.
k
(1 + r /m)m·n
(1 + r /m)
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
X
k=1
C /m
F
+
k
(1 + λ/m)m·n
(1 + λ/m)
ze względu na λ.
Otrzymane rozwiązanie nazywamy wewnętrzną wartością obligacji
lub stopą dochodu w terminie do wykupu (ang. yield to maturity).
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
46/55
Cena czysta i cena brudna
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).
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
47/55
Funkcja bndprice
Funkcja bndprice służy 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.
Funkcja (wywołana z 4 argumentami) zwraca cenę czystą (Price)
i narosłe odsetki (AccruedInt) obligacji o cenie nominalnej 100
z kuponami wypłacanymi co pól roku.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
48/55
Funkcja bndprice — przykład
Wyznaczymy cenę obligacji o następujących parametrach:
> > Yield = 0.07;
> > CouponRate = 0.05;
> > Settle = ’01-Jan-2007’;
> > Maturity = ’01-Jan-2010’;
> > [Price, AccruedInt] = bndprice(Yield, CouponRate,
Settle, Maturity)
Price =
94.6714
AccruedInt =
0
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
49/55
Funkcja bndprice — przykład
Poprawność wyniku możemy sprawdzić za pomocą funkcji pvvar.
Strumień pieniądza generowany przez obligację to
[0 2.5 2.5 2.5 2.5 2.5 102.5]. 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 0,07/2 = 0,035. Stąd
> > pvvar([0 2.5 2.5 2.5 2.5 2.5 102.5],0.035)
ans =
94.6714
Ponieważ obligację kupiliśmy w dniu wypłaty odsetek, cena czysta
równa się cenie brudnej. Jeżeli zmienimy date zakupu
> > Settle = ’12-Feb-2007’
> > [Price, AccruedInt] = bndprice(Yield, CouponRate,
Settle, Maturity)
Price =
94.8501
AccruedInt =
0.5801
Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
50/55
to pojawiają się Bartosz
dodatkowe
odsetki.
Funkcja bndprice — parametry opcjonalne
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ść.
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 — pozwalają określić
niestandardowe daty płatności dla pierwszego i ostatniego kuponu.
StartDate — obecnie ignorowany,
Face — nominalna cena obligacji, domyślnie równa 100.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
51/55
Funkcja bndyield
Służy do wyznaczania stopy dochodu w terminie do wykupu.
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.
Wyznaczymy stopę dochodu obligacji z poprzedniego przykładu:
> > Price = 94.6714; CouponRate = 0.05;
> > Settle = ’01-Jan-2007’; Maturity = ’01-Jan-2010’;
> > Yield = bndyield(Price, CouponRate, Settle,
Maturity)
Yield =
0.0700
Otrzymaliśmy stopę dochodu z poprzedniego przykładu. Funkcje
bndprice i bndyield są w pewnym sensie odwrotne.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
52/55
Funkcja cfdates
Służy do wyznaczania dat płatności kuponów.
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.
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 =
733224 733408 733590 733774 733955 734139
Przekształcimy otrzymany wynik do bardziej czytelnej postaci.
> > datestr(CFlowDates)
ans =
01-Jul-2007 01-Jan-2008 01-Jul-2008 01-Jan-2009
01-Jul-2009 01-Jan-2010
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
53/55
Funkcja cfamounts
[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).
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
54/55
Funkcja cfamounts — przykład
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 =
0 2.5000 2.5000 2.5000 2.5000 2.5000 102.5000
Tak, jak się należało spodziewać co pół roku mamy wypłacane
2,5, a w momencie wykupu 100+2,5.
Bartosz Ziemkiewicz
Matematyka finansowa w pakiecie Matlab
55/55

Podobne dokumenty