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)));

> 
> 
>