Cvičení z finanční matematiky Relativní hodnota a míra i-tá komodita, i=1,2,3 se obchoduje v okamžiku t=1,2,3,4,5 v kurzu > restart; kappa:=(i,t)->abs(2*i^3+(5*i^2)*sin(i*t/6))+1; > plot({kappa(1,t),kappa(2,t),kappa(3,t)},t=0..6, color=[GREEN,NAVY,RED],title=`kurzy komodit v závislosti na čase`); Kurzy > Digits:=3; j:='j'; for i from 0 to 5 do print(i,evalf(kappa('j',i)) $'j'=1..3); #print(i,(kappa(i,j)) $j=1..3); od; > Rozdíly kurzů (přírústek kurzu na jednotku množství komodity) > for i from 0 to 5. do xxx:=evalf(kappa(j,i)):yyy:=evalf(kappa(j,i+1)): zzz:=([xxx,yyy] $j=1..3); zzzz:=evalf(kappa(j,i+1)-kappa(j,i)); print(i,evalf(kappa(j,i+1)-kappa(j,i)) $j=1..3); od: evalf([5, -3.70+5.*sin(1), -19.9+20.*sin(2), -26.9+45.*sin(3)]); > Od okamžiku 0 po okamžik 2 má největší přírústek kurzu za jednotku času, která po daném okamžiku následuje, komodita 3. tato informace ale není podstatná pro rozhodování o investicích. Nás nezajímá, kolik vyděláme na jednotce množství komodity, ale na jednotce množství kapitálu, kterě do komodity investujeme. Proto si spočítáme: Relativní přírůstky kurzů (přírústek kurzu na jednotku investovaného kapitálu) > for i from 0.1 to 5.1 do i:=i-.1; print(i,evalf(kappa(j,i+1.)-kappa(j,i))/(kappa(j,i)) $j=1..3); i:=i+.1 od: > for i from 1 to 3 do plot({kappa(i,t),kappa(i,t+1)-kappa(i,t),(kappa(i,t+1)-kappa(i,t))/kappa(i,t)},t=0..6, color=[GREEN,NAVY,RED]); od; > plot({kappa(1,t+1)-kappa(1,t),kappa(2,t+1)-kappa(2,t),kappa(3,t+1)-kappa(3,t)},t=0..6, color=[GREEN,NAVY,RED],title=`přírůstky kurzů za dobu 1`); plot({(kappa(1,t+1)-kappa(1,t))/kappa(1,t), (kappa(2,t+1)-kappa(2,t))/kappa(2,t), (kappa(3,t+1)-kappa(3,t))/kappa(1,t)},t=0..6, color=[GREEN,NAVY,RED],title=`relativní přírůstky kurzů za dobu 1`); Derivace kurzu podle času je určuje okamžitou absolutní změnu kurzu. > plot({diff(kappa(1,t),t),diff(kappa(2,t),t),diff(kappa(3,t),t)},t=0..6, color=[GREEN,NAVY,RED],title=`derivace kurzů komodit podle času`); > diff(Kappa(i,t)/Kappa(i,t0),t)=diff(Kappa(i,t),t)/Kappa(i,t0); Relativní okamžitá změna kurzu je . > plot( {diff(kappa(1,t),t)/kappa(1,t) ,diff(kappa(2,t),t)/kappa(2,t) ,diff(kappa(3,t),t)/kappa(3,t) },t=0..6, color=[GREEN,NAVY,RED],title=`relativní hodnoty derivace kurzů komodit podle času`); > Digits:=12; Kdybychom tedy mohli obchodovat komodity v každém okamžiku, bylo by pro nás nejvěhodnější nakoupit třetí a podržet ji až do okamžiku > Pak je prodat a nakoupit druhou komoditu a tu podržet až do okamžiku > a pak koupiprvnt první komoditu. Porovnáme věnos s obchodování v diskrétním a spojitém čase: Obchodování Máte k dispozici 100 korun a přesnou znalost všech kurzů předem. Jakou největší částku můžete vyobchodovat (předpokládejme, že komodity jsou ideálně dělitelné, že můžete koupit jakoukoliv část jednotky komodity a že začínáte obchodovat v okamžiku t=0 a končíte v okamžiku t=4)? Obchodování v diskrétních okamžicích t=1,2,. . . > PocetTitulu:=3; Kapital[0]:=100; Vynosnost:=(i,t)->kappa(i,t+1)/kappa(i,t); Hodnota:=t->Sum(kappa(i,t)*Pocet[i],i=1..PocetTitulu); > Max:=t->max(Vynosnost(i,t) $i=1..PocetTitulu); > Vyber:=proc(t) global CisloTitulu; for i from 1 to PocetTitulu do if Max(t)=Vynosnost(i,t) then CisloTitulu:=i; fi od end; Warning, `i` is implicitly declared local to procedure `Vyber` > for t from 0 to 4 do i:='i'; Vyber(t); for i from 1 to PocetTitulu do Pocet[i]:=0; od: Pocet[CisloTitulu]:=Kapital[t]/kappa(CisloTitulu,t); Kapital[t+1]:=Pocet[CisloTitulu]*kappa(CisloTitulu,t+1); print(`v čase `,t, ` kupuji `, evalf(Pocet[CisloTitulu]), ` jednotek komodity číslo `, CisloTitulu, `v čase`, t+1, `budu mít kapitál velikosti`, evalf(Kapital[t+1])); od: > V okamžicích 3 a 4 nemusíme chodit na trh, stačí stále držet komoditu číslo 1. Obcodování v libovolném čase: Do okamžiku t=5 můžeme vyobchodovat o něco větší kapitál, pokud uskutečníme obchody v okamžicích 0, T1 a T2 namísto obchodů v okamžicích 0,1,2. Jeho velikost je: > > > Složeně úrok (Coumpound interest) Obecně vzorec > restart; Phi[1]:=(x0,xi,t)->x0*(1+xi)^(floor(t)); Phi[2]:=(x0,xi,t)->x0*(1+xi)^(floor(t))*(1+xi*(t-floor(t))); Phi[3]:=(x0,xi,t)->x0*(1+xi)^(t); Dosadíme nějaké hodnoty: > Arg:=(10,1.9,t); plot({ Phi[1](Arg), Phi[2](Arg), Phi[3](Arg)}, t=0..5, thickness=3, color=[coral,gold,maroon],discont=true); Rozdíl mezi hodnotami spojitého a smíšeného uročení, tedy rozdíl mezi hodnotami exponencíální funkce a hodnotami na jejích sečnách. > plot(Phi[2](Arg)-Phi[3](Arg),t=0..5); Určíme okamžik, kdy je rozdíl roven polovině původního vkladu > T:=solve(Phi[2](Arg)-Phi[3](Arg)=5,t); > evalf(subs(t=T,Phi[2](Arg))); evalf(subs(t=T,Phi[3](Arg))); Příklady 1. 1. máme na kontě 10. zlatěch 1. 3. ulo žíme dalších 10 zlatěch a 1. 9. ještě 20 zlatěch. Jakě bude stav účtu při roční úrokové míře 0.05 1. 1. následujícího roku? üešení > PocetDniVMesici[1]:=31: PocetDniVMesici[2]:=28: PocetDniVMesici[3]:=31: PocetDniVMesici[4]:=30: PocetDniVMesici[5]:=31: PocetDniVMesici[6]:=30: PocetDniVMesici[7]:=31: PocetDniVMesici[8]:=31: PocetDniVMesici[9]:=30: PocetDniVMesici[10]:=31: PocetDniVMesici[11]:=30: PocetDniVMesici[12]:=31: PocetDniDoKonceRoku:=(d,m)-> PocetDniVMesici[m]-d+sum(PocetDniVMesici[i],i=m+1..12); PocetDniDoKonceRoku(1,1); > zeta := (1+5/100)^(1/365)-1; evalf(10*(1+zeta)^PocetDniDoKonceRoku(21,1)+10*(1+zeta)^PocetDniDoKonceRoku(16,3)+20*(1+zeta)^PocetDniDoKonceRoku(7,9)); > > > PocetDniDoKonceRoku(21,1); PocetDniDoKonceRoku(16,3); PocetDniDoKonceRoku(7,9); Za jak dlouhou dobu bude nominální stav vašeho účtu 120 chechtáků, když v na něj čase 0 uložíte 90 chcechtáků a úroková míra je 0.05 po dobu, kdy je nomiinální stav účztu menší než 100 chcetáků a 0.07 po dobu, kdy je větší, než 100? üešení Nejprve vypočítáme, za jak dlouhou dobu bude na našem účtu 100chechtáků: > Potom vypočítáme, za jak dlouhou dobu stav účtu naroste ze 100 na 120 > Nakonec obě doby sečteme. Stav účtu bude mít nominální hodnotu 100 chcetáků za dobu Přitom jednotka času je táž, v jaké je vyjádřena míra úroku. Pokud se například úroky připisují pouze v okamžicích ,... mžeme říci, že nominální stav účtu nikdy 120 nebude. Ale první okamžik, kdy můžeme na účtu s částkou 120chectáků počítat je: > T[1]:=ceil(solve(T[1]=x*1/365,x)); T[2] := solve((90*1.05^(T[1]/365))*1.07^t = 120,t); #(90*1.07^(T[1]/365))*1.07^T[2]; T[2]:=ceil(solve(T[2]=x*1/365,x)); Tt:=T[1]+T[2]; tě okamžik, tedy doba > evalf(Tt/365); V tu chvíli ovšem budeme na účtě mít: > (90*1.05^(T[1]/365))*1.07^(T[2]/365); Při jaké úrokové míře za jenotku času je stav obou účtů po době stejně, je-li na prvním na počátku zlatěch a jednoduché úročení a na druhém na počátku zaltěch a složeném úrčení ? Při jaké úrokové míře za jenotku času je stejně věhodné spořit jednoduchěm úrokem jako složeněm úrokem po dobu . üešení > rovnice:=x[1]*(1+xi*T)=x[2]*(1+xi)^T; > reseni:=solve({rovnice,xi>0},xi); allvalues(reseni); > zeta:=op(2,op(evalf(reseni))); > plot(x[2]*(1+xi)^T-x[1]*(1+xi*T),xi=0..zeta+0.1,title=`Rozdíl v souč. hodn. jedn. a slož spoř. v záv. na vel. úrokové míry`,titlefont=[HELVETICA,7]); > Ukládání částek v ekvidistantních okamžicích Předpokládejme rok o 360 dnech s 12 měsíci po 30 dnech. Ukládáte na účet 100 kč. éčet se úročí a míra úroku je 0.05 p. a.. kolik bude na učtě na konci roku když Uložíte jen jednou a to · - na začátku roku - v polovině roku · dvakrát a to - na začátku roku a v polovině roku - v polovině roku a na konci roku · dvanáctkrát a a to - na začátku každého měsíce - na konci každého měsíce. Současnou hodnotu účtu (present value) označíme PV. ¬as budeme počítat ve dnech. > > PVdem:=Sum(Z(t)*(1+xi)^((360-t)/360), t=1..360): > , t je čas v rocích, je velikost úložky v čase t > z[1]:=t->piecewise(t=1,100,t<>0,0); z[1](t); z[2]:=t->piecewise(t=360/2,100,t<>0,0); z[2](t); z[3]:=t->piecewise(t=1,100,t=360/2,100,0); z[3](t); z[4]:=t->piecewise(t=360/2,100,t=360,100,0); z[4](t); > for i from 1 to 4 do Z:=t->z[i](t); PresentValue[i]:=PV; od; , , protože poslední úložka se už neúročí. > with(plots): Warning, the name changecoords has been redefined > z[5]:=t->piecewise(type((t-1)/(30),integer),100,0); z[5](31); pointplot({seq([n,z[5](n)],n=0..95)}); > # z[6]:=t->piecewise(type((t)/(30),integer),100,0); # z[6](31); > Z:=t->z[5](t); PresentValue[5]:=PV; Ve skutečnosti zde sčítáme řadu > #restart; > i:='i';Xi:=xi;Doba:='Doba': xi:='xi'; xxx:=Sum(100*(1+xi)^(Doba(i)/360),i=1..12)=sum(100*(1+xi)^(Doba(i)/360),i=1..12); kde > je doba od uložení i-té úložky do konce roku. > xi:=Xi; xxx; jedná se o geometrickou řadu s kvoícientem > > a tu můžeme sečíst podle obecného vzorce > Případě, že spoříme na konci měsíce se liší od předchozího pouze funkcí Doba a současnou hodnotou první úložky. Kvocient je stejnějako v předchozím případě a počet členů řady také: > Doba := i->360-(i-1)*30-30; a1:=subs(i=1,100*(1+xi)^(Doba(i)/360)); PresentValue[6]:=sum(100*(1+xi)^(Doba(i)/360),i=1..12); > a platí: > Spoření (saving) Spoření při složeném úročení a ekvidistantních úložkách Obecně vzorec Předpokládejme, že ukládáme v ekvidistantních okamžicích, které jsou od sebe v čase vzdáleny , že první úložka se děje v okamžiku , druhá v okamžiku , třetí v okamžiku a poslední v okamžiku . > #restart; CelaCast:=x->floor(x); Ukládáme v čase Kolik je úložek v čase ? > a v čase ? , což je celé číslo. > Tedy obecně, ukládáme-li v čase máme v čase > úložek. Ve kterém okamžiku se ukládá -tá položkla? > Jak dlouho se do okamžiku úročí -tá úložka je-li ? > Jaká je hodnota -té úložky v čase pří úrokové míře , je-li a pokud byla v okamžiku ukládání její nominální hodnota ? > je tedy za předpokladu Chceme-li sečíst současné hodnoty všech úložek provedeněch v čase předcházejícím nobo rovném okamžiku Dostáváme řadu Podíl i-tého a i+1-ního členu této řady nezávisí na i, a můžeme jej označit kvocient, neboś > A tedy jedná se o geometrickou řadu, s tímto kvocientem. - počet členů je - - > - nultě člen je - - > tedy součet je: > Vzorecek:=Sum(hodnota(i),i=0..pocet-1)=simplify(sum(hodnota(i),i=0..pocet-1)); Použijeme jej k definicím funkcí: > Vzorecek:=simplify(op(2,Vzorecek)): #Vzorecek:=subs(tau=1/k,Vzorecek); #limit(subs(k=K,"),K=k); > SoucetGeometrickeRady:=Sum(a[0]*q^i,i=0..n)=simplify(sum(a[0]*q^i,i=0..n)); > Vzorecek2:=subs(a[0]=NultyClen,q=kvocient,n=pocet-1,SoucetGeometrickeRady): > Vzorecek2:=op(2,Vzorecek2); > psi2:=(Tau,Epsilon,Xi,Z,TT,cas)->subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,T=TT,t=cas,Vzorecek2); print(`----------`); simplify(psi2(tau,epsilon,xi,z,T,t)-psi(tau,epsilon,xi,z,T,t)); První funkce udává hodnotu naspořené částky, ze zadaněch paramatrů: Vzájemná zdákenost úložek v čase (pro každé dvě sousední je stejná) ¬as v němž je uložena první úložka éroková míra (konstantní) Hodnota jednotlivěch úlůožek (konstantní) Doba po kterou se úložky ukládají okamžik ve kterém nás zajímá nominální stav účtu. > psi:=(Tau,Epsilon,Xi,Z,TT,cas)->subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,T=TT,t=cas,Vzorecek); Pokud nás zajímá stav účtu v době, kdy ještě spoříme, je i a p[otom je . > Vzorecek_:=subs(min(trunc((t-epsilon)/tau),T/tau)=trunc((t-epsilon)/tau),Vzorecek): Vzorecek_:=subs(min((T/tau,trunc((t-epsilon+trunc(abs((t-epsilon)/tau))*tau+tau)/tau)-trunc(abs((t-epsilon)/tau))))= trunc(T/tau,trunc((t-epsilon+trunc(abs((t-epsilon)/tau))*tau+tau)/tau)-trunc(abs((t-epsilon)/tau))) ,Vzorecek_): Vzorecek_; > A funkce udává hodnotu naspořené částky, ze zadaněch paramatrů: Vzájemná zdákenost úložek v čase (pro každé dvě sousední je stejná) ¬as v němž je uložena první úložka éroková míra (konstantní) Hodnota jednotlivěch úložek (konstantní) okamžik ve kterém nás zajímá nominální stav účtu. Pokud je , je > psi_:=(Tau,Epsilon,Xi,Z,T)->subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,N=TT,t=T,Vzorecek_); Je-li navíc celé číslo, tj. pokud se ptáme na stav účtu jen v okamžiku, kdy ukládáme, bude mít předchozí funkce tvar > VzorecekC:=subs(trunc((t-epsilon)/tau)=(t-epsilon)/tau,Vzorecek_); > Phi:=(Tau,Epsilon,Xi,Z,T)->subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,N=TT,t=T,VzorecekC); Příklad BuÔ > > p2:=plot(psi2(1/3,1/6,3/4,5,2-1/3,t),t=0..2.75,discont=false): > p3:=plot(psi2(1/3,1/6,3/4,5,2-1/3,1.4)*(1+3/4)^(t-1.4),t=1.4..2.75#,title=`yůstatek se úročí dál. i když už #neukládáme` ): > l := [[n/3+1/6,(n+1)*5] $n=0..5]: p1:=plot(l, x=0..2.5, style=point,symbol=circle#,title=`body znázorĺují součet nominálních hodnot uloženěch částek` ): > with(plots): display(p1,p2,p3); > `plotsetup/devices`[jpeg]:=[jpeg,`plot.jpg`,[],[],``]: > > #plotsetup(jpeg, plotoutput=`sporeni.jpg`); > #plotsetup(plotoptions=`height=1200,width=1200`); > #eval(plotsetup): > evalf(psi2(1/3,1/6,1/3,5,2,0.1)); > ll := [trunc(100*(n/3+1/6))/100 $n=0..5]; plot(evalf(subs(tau=1/3,epsilon=1/6,T=2-1/3,t=t,pocet)),t=0..4,y=0..7,xtickmarks=ll, title=`graf závislosti počtu uloženěch částek na čase`); > evalf(subs(tau=1/3,epsilon=1/6,T=2,t=.1,pocet)); > evalf(subs(T=2,tau=1,t=10/4,epsilon=1/2,pocet)); > Příklad Předpokládejme, že ukládáme 10. den každého měsíce 250Kč. Začneme v březnu a skočíme v květnu o tři roky později. Jakě bude stav účtu na konci onoho května, je-li úroková míra stále 2/50? Od 1. března do 31. května uložíme 15 úložek vzdálenost sousedních dvou v čase je jeden měsíc, to je roku (někdy je to 30 dní, někdy 31 dní, někdy 28 dní) üešení První (přibližné) řešení: - počítáme všechny měsíce třicetidenní a tdy - měsíců je 12 za rok - za počátek vezmeme 1. březen. - za jednotku času bereme rok a tedy pak jde o mezilhůtní spoření a podle vzorce: > evalf(psi(1/12,(1/12)/3,2/50,250,3+3/12,3+3/12)); > Error, (in psi) invalid substitution in proc Druhé (přibližné) řešení: - za počátek vezmeme 10. 3. Pak je a > evalf(psi(1/12,0,2/50,250,3+3/12,3+3/12-1/36)); Error, (in psi) invalid substitution in proc Třetí (přibližné) řešení: Spočítáme efektivní úrok za měsíc. za jednotku času bereme měsíc > xi[mesic]:=(1+2/50)^(1/12)-1; evalf(xi[mesic]); > evalf(psi(1,1/3,xi[mesic],250,3*12+3,3*12+3)); Error, (in psi) invalid substitution in proc Uvedené úvahy múžeme zobecnit a pak vždy vystačíme se vzorcem . . . tedy bez epsilon, zejména tedy není rozdíl mezi předlhůtním a polhůtním spoření. Přesné řešení záleží na tom, je-li rok přestupně, předpokládejme, že není, nebo není a po jakou dobu zůstávájí úroky konstantní, předpokládejme, že po jeden den. Pak doby, po kterou jsou úložky úročeny jsou posupně: . . . Spoření při jednoduchém úročení a ekvidistantních úložkách Obecně vzorec > #restart; CelaCast:=floor; Předpokládejme, že ukládáme v ekvidistantních okamžicích, které jsou od sebe v čase vzdáleny , že první úložka se děje v okamžiku a poslední v čase . V čase máme a v čase máme úložek, tedy v čase máme úložek, i-tá úložka se ukládá v okamžiku A do okamžiku se úročí po dobu Její hodnota v okamžiku je Máme sečíst současné hodnoty (jejích původní hodnoty a úroky) všech úložek až do okamžiku . Rozdíl hodnoty -té a -ní úložky je > diference:=simplify(hodnota(i+1)-hodnota(i)); A tedy nezávisí na a tedy řada je aritmetická. Nultě člen má v čase hodnotu a poslední úložka má v čase už hodnotu tedy součet je: > Vzorecek:=Sum(hodnota(i),i=0..pocet-1) =simplify(sum(hodnota(i),i=0..pocet-1)); > Vzorecek:=op(2,Vzorecek); > > Vzorecek2:=simplify(1/2*(hodnota(0)+hodnota(pocet-1))*pocet); > subs(min(T/tau,-trunc((-t+epsilon)/tau))=K, 2*simplify(xxx/sum(hodnota(i),i=0..pocet))); > simplify(subs(min(trunc((t-epsilon)/tau),T/tau)=K, Vzorecek-Vzorecek2)); > W:=(Tau,Epsilon,Xi,Z,TT,cas)-> [evalf(subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,T=TT,t=cas,Vzorecek)),evalf(subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,T=TT,t=cas,Vzorecek2)), evalf(subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,T=TT,t=cas,hodnota(0))), evalf(subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,T=TT,t=cas,hodnota(pocet-1))), evalf(subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,T=TT,t=cas,pocet)) ]; > W(1,0,1,5,10,1); Error, (in W) invalid substitution in proc > psi:=(Tau,Epsilon,Xi,Z,TT,cas)->subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,T=TT,t=cas,op(2,Vzorecek)); psi2:=(Tau,Epsilon,Xi,Z,TT,cas)->subs(tau=Tau,epsilon=Epsilon,xi=Xi,z=Z,T=TT,t=cas,Vzorecek2); > evalf(psi(1,0,1,5,2,1)); evalf(psi2(1,0,1,5,2,1)); Error, (in psi) invalid substitution in proc Error, (in psi2) invalid substitution in proc > > Na začátku roku začnete spořit, ukládáte na začátku každého měsíce 114,7 oobolů, a na konci každého roku platíte daĺ 1/15 z úroků. éroková míra je 1/50 p. m. a daĺ z úroků 1/15 se počítá ročně. Kolik naspoříte za 11 let? (jakě bude stav účtu na konci 11 roku, kdy už nic neukládáte). üešení > restart; z:=114.7;xi:=1/50;delta:=1/15; Za rok > Za 11 let > Vnítřní míra věnosu (internal rate of return) Dan si koupil auto na leasing, má zaplatit zbylěch130 000 Kč z ceny 36 měsíčními splátkami po 4592,5Kč. Peripetie života jej donutili splácet leasing z úspor. Na jakě úrok by musel mít peníze uloženy, aby jej toto splácení vyšlo levněji, než kdyby hned zaplatil celou částku 130 000? üešení > restart; üešíme rovnici 36 s neznámou . je v tomto případě měsíční úroková míra. > Tuton rovnici musíme řešit numericky. Maple má pvestavěnou funkci fsolve: > xxx:=fsolve(rce,xi); Dostali jsme dvě řešní, nás zajímá pouze to nezáporné. Měsíční úrokovou míru musíme přepočítat na roční: > `Splácení se vyplatí při roční úrokové míře větší než`, (1+xxx[2])^12-1; Tuto rovnici můžeme přepsat pomocí vzorce pro součet geometrické řady do tvaru: > rce2:=4592.5*(1-(1+xi)^36)/(1-(1+xi))=rhs(rce); a řešit ji přímo. Rozkladem na součin získáme přehled o kořenech: > rce3:=factor((lhs(rce2)-rhs(rce2)))=0; Jedině kladně kořen je měsíční úroková míra > solve({rce3,xi>0}); stejná jakou jsme dostali při předchozím postupu. > Tato úroková míra je vnitřní mírou věnosu toku peněz (Cash flow), -130 000, 4592.5, 4592.5, . . . , 4592.5. Nyní předpokládejme, že by chtěl Dan raději zaplatit posledních 13 splátek najednou. Chtěl by ovšem zaplatit méně, než Kč, protže peníze zaplatí hned. Představuje si, že zaplatit hned na začátku 130000 je ekvivalentní tomu, zapaltit 36 splátek po Kč. Co je v tomto smzslu ekvivalentní zapklacení 13 splátek? Pokud by poptávka po penězích leasingové společnosti převyšovala nabídku, tedy pokud by všechny peníze, které dostane mohla ihned zase investovat za stejněch podmínek (tedy při stejném úroku), můžeme otázku formulovat takto: při jak vysoké splátce (jedinné namísto 13) by byl zisk leasingové společnosti zachován? (Manipulační náklady zanedbáváme) üešení > restart; Znovu vypočítáme vnitřní míru věnosu, tedy úrokovou míru s jakou má leasingová společnost zisk ze svěch peněz: > > Xi:=fsolve(rce,xi=0.013..0.014); s touto úrokouvou mírou diskontujeme hodnotu 13 splátek. Dostaneme: > > > Jednoznačnost Uvažujme kapitálově tok (cash flow) > CF:=[-1000,3600,-4310,1716]; > PV:=sum(CF[i]*(1+xi)^(-i),i=1..4); > solve(PV); > > Spekulační poptávka po penězích (příklad) Jedne ze tří klasickěch motivů poptávky po penězích podle Johna Maynarda Keynese je spekulační motiv. Keynes se zaběval otázkou, proč suběkty drží (poptávají) větší množství peněz, než je objem peněz poptávaně z transakčního a opatrnostního motivu. Soudil, že tyto peníze jsou drženy v důsledku nejistoty o pohybu budoucích úrokověch sazeb a v důsledku vztahu mezi úrokovou sazbou a tržními cenami obligací. Důsledkem růstu úrokověch sazeb jsou kapitálové ztráty z držení obligací. Uvažujme perpetuitu, tj obligaci, která není nikdy dospělá (zralá) --- její jistina nebude nikdy splacena ale přináší svému držiteli pevnou roční kup˘novou platbu. Nechś je investorem koupena tato obligace za tržní cenu 1000Kč, a nechś jsou věnosy z kup˘nů 100Kč ročně. Jakou hodnotu má tato obligace pokud běžná tržní úroková sazba klesla na polovinu? üešení > restart; Držení obligace odpovídá věčnému důchodu o pravidelněch věplatách 100Kč ročně při uloženém kapitálu 1000Kč. Roční úroková míra, odpovídající ročnímu uroku 100Kč z 1000Kč v okamžiku, kdy investor obligaci koupil je > xi[0]:=solve(1000*xi=100); nynyní je ale úroková míra poloviční > xi[1]:=xi[0]/2; a při ní je hodnota obligace > Z:=solve(z*xi[1]=100); Tedy kapitálově zisk je 1000Kč Dva příklady --- opakování Jaká je míra inflace za třetí měsíc, když · za rok je míra inflace 0.05 a za každě měsíc byla stejná jako každě jině měsíc. · za první měsíc byla 0.01, za druhě měsíc byla 0.02 a za 1. čtvrtletí byla 0.06. · Za rok je míra inflace 0.1, · za 4. čtvrtletí je míra inflace 0.02, · za 3. čtvrtletí je míra inflace 0.03, · za 2. čtvrtletí je míra inflace 0.02, · za 1. měsíc je 0.003, · za druhě měsíc je 0.004 Jak dlouho budete splácet měsíčními polhútními splátkami dluh 10 000 splátkami 1000 · při úrokové míře 0 p. m., · při úrokové míře 0.05 p. m. · při úrokové míře 0.1 p. m. Jaké by musely bět splátky, aby ve druhém případě byla doba o měsíc kratší? > pom:=Sum(1000*(1+xi)^(t-i),i=1..t)=simplify(sum(1000*(1+xi)^(t-i),i=1..t)); > pom:=op(2,pom)=10000*(1+xi)^t; > solve({pom,xi=.1}); Warning, solutions may have been lost > simplify(sum(a*q^i,i=1..n)); > > Durace (duration) a konvexita (convexity) BuÔ současná hodnota závislá na toku peněz a úrokové míře. Zkoumáme relativní změnu PV v závislosti na změně úrokové míry, tedy věraz > restart; with(linalg): F:=(PV(CF,xi+Delta[xi])-PV(CF,xi))/PV(CF,xi); Warning, the protected names norm and trace have been redefined and unprotected > F:=unapply(F,Delta[xi]); Věray rozvineme do taylorovy řady > Taylor[f]:=taylor(F(Delta),Delta); Věraz > Duration:=op(1,Taylor[f]); > Je durace (v literatuře se tak nazěvají i různé jiné modifikace tohoto věrazu) Duration=discount mean term of the cash flow=elasticity of the net present value Je vyjádřena v jednotkách času. Věraz > Convexity:=2*op(3,Taylor[f]); se nazěvá konvexnost (konvexita?) konvexity of a cash flow. Je vyjádřena ve čtvercích jednotek času. Uvažujme pět projektů: > CF[1]:=(-1000,300,500,200,100); CF[2]:=(-1000,47,47,47,1047); CF[3]:=(-851.18586,281.0005,170.39716,300,200); CF[4]:=(-600,-500,-300,400,500,600); CF[5]:=(1200,-400,-300,-200,-400); projekty 1,2,3,4 jsou prvního druhu, projekt 5 je druhého druhu. Projekt 2 přčedstavuje kup˘nově dluhopis. Současná hodnota závisí na úrokové míře: > j:='j':i:='i': for i from 1 to 5 do N[i]:=vectdim(convert([CF[i]],vector)); od; > PV:=(i,xi)->sum(CF[i][j]*(1+xi)^(1-j),j=1..N[i]); > for k from 1 to 5 do Xi[k]:=fsolve(PV(k,xi)=0,xi=0.01..1); plot(PV(k,xi),xi=0..0.05); od; > print([Xi['i'] $'i'=1..5]); Tedy akceptujeme 1, 2., 3., 4., projekt je li akceptujeme 1., 2., a 3., projekt je-li A akceptujrma pouze 5., je-li Porovnáme nyní pouze 1. a 3. projekt. > plot(PV(3,xi)-PV(1,xi),xi=0.01..0.03,title=`rozdíl PV`); plot(PV(3,xi)-PV(1,xi),xi=0.0195..0.0205,title=`rozdíl PV`); je zanedbatelně > RozdilDuraci:=(diff(PV(3,xi),xi)/PV(3,xi) - diff(PV(1,xi),xi)/PV(1,xi)) ; > plot(RozdilDuraci,xi=0.01..0.03); > V bodě 0.02 se přibližně rovnají současné hodnoty i durace. Ale v okolí tohoto bodu je rozdíl konvexností: > RozdilKonv:=(diff(PV(3,xi),xi,xi)/PV(3,xi) - diff(PV(1,xi,xi),xi)/PV(1,xi)) ; > plot(RozdilKonv,xi=0..0.03); je v okolí bodu 0.02 kladně, proto dáme přednost 3. projektu Depozita denominovaná v různěch měnách Problém změny kursů Kurs jen-min-piao (juan) je 36:37 k rupii je. Očekávaně kurs v následujícím období je 34:39. Jakou z těchto dvou měn je věhodnější podržet. vyjádřete tuto věhodu kvantitativně. > restart; E[0]:=36/37; E[1]:=34/39; je hodnota rupie v jenech v čase t. Hodnota jenu v rupiích je převrácená hodnota > Měřme zisk v této míře: podržíme-li rupie, nic nezískáme, ani neztratíme. Podržíme-li místo rupií jeny, bude náš (relativní) zisk v rupiích roven: > x rupií investujeme, rupií získáme zpátky. Míra zisku je > Pokud bychom ctěli měřit zisk v jenech, zisk bychom přeškálovali tak, že držení jenu by pro nás znamenalo zisk 0 znamenalo by držení rupií ztrátu, kterou vyčíslíme takto: pokudinvestujeme do rupii x jenů, budeme mít v následujícím období už jen > a míra zisku by byla > E[0]^(-1)*E[1]-1; Jak to, že nám nevyšlo číslo s toutéž absolutní hodnotou, jako v předchozím případě? Protože jsme zvolili jinou (větší) jednotku (přijít o jen je větší ztrátam než přijít o rupii). Vhodné by tedy bylo pro podobné věpočty zvolit pevnou měnu, Kurz měn (1) jen-min-piao (2) ngultrum (bhůtán) a (3) kyata (Barma) je k Dánská koruně v čase , t=1,2,3,4,5 roven (tj. součet absolutni hodnoty sinu šestiny součinu pořadového čísla měny času a čísla s číslem devět děleno pořadové číslo měny je cena v dánskěch korunách). Máte k dispozici 100 dánskěch korun a přesnou znalost všech kurzů předem. Směäovat můžete měny v aktualních kurzech v časech i=1,2,3,4,5 bez poplatků. Jakou největší částku můžete vyobchodovat ? > restart; kappa:=(i,t)->9/i+abs(sin(i*t*Pi/6)); > plot({kappa(1,t),kappa(2,t),kappa(3,t)},t=0..6, color=[navy,blue,aquamarine]); > kappa(1,1); řešení > PocetTitulu:=3; Kapital[1]:=100; Vynosnost:=(i,t)->kappa(i,t+1)/kappa(i,t); Hodnota:=t->Sum(kappa(i)*Pocet[i],i=1..PocetTitulu); > Max:=t->max(Vynosnost(i,t) $i=1..PocetTitulu); > Vyber:=proc(t) global CisloTitulu; i:='i'; #print(evalf(Vynosnost(i,t)) $i=1..PocetTitulu); for i from 1 to PocetTitulu do if Max(t)=Vynosnost(i,t) then CisloTitulu:=i; #print(`největší věnosnost má titul`,i,`a to`,evalf(Vynosnost(i,t))); fi od end; Warning, `i` is implicitly declared local to procedure `Vyber` > for t from 1 to 6 do i:='i'; Vyber(t); MAX:=evalf(Max(t));#print(MAX); if MAX>1 then for i from 1 to PocetTitulu do Pocet[i]:=0; od: Pocet[CisloTitulu]:=Kapital[t]/kappa(CisloTitulu,t); Kapital[t+1]:=Pocet[CisloTitulu]*kappa(CisloTitulu,t+1); print(`v čase `,t, ` kupuji `, evalf(Pocet[CisloTitulu]), ` jednotek měny číslo `, CisloTitulu, `v čase`, t+1, `budu mít kapitál velikosti`, evalf(Kapital[t+1]),`původní měny`); else Kapital[t+1]:=Kapital[t]; print(MAX,evalf(Vynosnost(i,t)) $i=1..PocetTitulu,`V čase`,t,`nechávám peníze v původní měně, v čase`, t+1, `budu mít kapitál velikosti`, evalf(Kapital[t+1]),`původní měny`) fi od: > > Podmínka nekryté úrokové parity (uncovered interest parity condition), mezinárodní úroková arbitráž Uvažujme dvě měny, třeba CZK a USD, jejich kurzy v čase 0 a (skuitečně) a v čase 1 (předpokládaně) a (tj. E(i) je cena dolaru v korunách v čase i)dvě úrokové sazby a . Pokud investujeme v čase 0 koruny (o objemu x CZK) do dolarověch depozit, bude náš zisk v čase 1 roven > restart; > > Při jaké úrokové míře by tento věnos byl stejně, jako věnos z ¬eskěch depozit? > Vynos[CZ]:=x*xi[CZK]; > > xxx:=solve(rce,xi[CZK]); > Upravíme. Označme očekávanou míru depreciace koruny proti dolaru Q: > Q:=(E(1)-E(0))/E(0); xxx2:=sort(expand(xxx/Q),xi[USD]); > PodmRovnovahy:=xi[CZK]=sort( (simplify((op(1,xxx2)-xi[USD])*Q)+xi[USD]*Q)+ simplify(op(2,xxx2)*Q+op(3,xxx2)*Q) ,xi[USD]); Věraz > op(2,op(2,PodmRovnovahy)); je velmi malě (pokud je i míra očekávané depreciace malá, neboś jej jejich součinem). Můžeeme shrnout: v rovnovážném stavu je rozdíl úrokověch měr roven zúročené očekávane míře depreciace: > lhs(PodmRovnovahy)=op(1,rhs(PodmRovnovahy))+ factor( simplify(op(2,rhs(PodmRovnovahy))+op(3,rhs(PodmRovnovahy))) ); > Citlivost sporeni na urokovu miru Present value > Z:=simplify(sum(z*(1+xi)^(-t),t=0..T)); > F:=xi-> z*(-(1/(1+xi))^T+1+xi)/xi; xxx:=normal((F(xi+delta)-F(xi))/F(xi)); yyy:=simplify(taylor(xxx,delta=0,2)); zzz:=expand(simplify(numer(op(1,yyy))/(1+xi)^T)/ simplify(denom(op(1,yyy))/(1+xi)^T)); i:='i'; > G:=unapply(xxx,delta,xi,T); > G(0.01,0.1,144); > plot(G(delta,0.03,144),delta=0..0.02); plot(G(0.01,xi,144),xi=0..0.5); plot(G(0.1*xi,xi,144),xi=0..0.75); plot(G(0.01,0.05,T),T=0..150); > > Future value Citlivost nasporene castky > Z:=simplify(sum(z*(1+xi)^t,t=0..T)); > F:=xi->z*((1+xi)^(T+1)-1)/xi; > xxx:=normal((F(xi+delta)-F(xi))/F(xi)); > #readlib(coeftayl): Diff(F,delta)=simplify(diff(xxx,delta)); yyy:=simplify(taylor(xxx,delta=0,2)); > expand(op(1,yyy)); > zzz:=expand(simplify(numer(op(1,yyy))/(1+xi)^T)/ simplify(denom(op(1,yyy))/(1+xi)^T)); > i:='i'; xxxx:=sum(simplify(op(i,zzz)),i=1..nops(zzz)); subs(q=1+xi, q^T*simplify(subs(1+xi=q, op(1,xxxx)+op(2,xxxx))/q^T) )+sum(op(i,xxxx),i=3..nops(xxxx)); > G:=unapply(xxx,xi,T); > [(G(j/100,i)) $i=1..3] $j=1..4; > subs(delta=0.01,(G(0.5,144))); > plot(G(0.05,144),delta=0..0.03); > plot(subs(delta=0.001,G(xi,144)),xi=0..0.01); plot(subs(delta=0.001,G(xi,144)),xi=0..1.0); plot(subs(delta=0.01,G(xi,144)),xi=0..1.0); > plot(subs(delta=0.01,G(0.03,T)),T=1..210); > normal((taylor(xxx,delta,2))); > > >