Finanční management (LS 2014/2015)

NMFM201

Termíny zkoušek

27. 5., 2. 6., 25. 6. 2015 vždy v 9:00 v posluchárně K1. Zkouška je formou testu v délce trvání cca 1 hodina, rezervujte si však raději 2 hodiny.

Literatura

[1] Dupačová, J., Hurt, J., Štěpán, J.: Stochastic Modeling in Economics and Finance. Kluwer Academic Publishers. Dordrecht 2002.

[2] Cipra, T.: Finanční ekonometrie. Ekopress, Praha 2008.

[3] Cipra, T.: Matematika cenných papírů. Kamil Mařík Professional Publishing. Praha 2013.

[4] Hurt, J.: Yield curves with Mathematica 6.0. In: Wolfram Technology Conference 2007. http://library.wolfram.com/infocenter/Conferences/6956/ . Champaign (IL) 2007.

[5] Hurt, J.: Risk measures in finance. In: 2008 International Mathematica User Conference. http://library.wolfram.com/infocenter/Conferences/7230/.  Champaign (IL) 2008.

[6] Hurt, J.: Risk measures in finance revisited. In: Wolfram Technology Conference 2010. http://library.wolfram.com/infocenter/Conferences/7861/  . Champaign (IL) 2010.

[7] Sciencedirect:  http://www.sciencedirect.com/

[8] Mathematica Cookbook

[9] Luenberger, D.: Investment Science. Oxford University Press. New York 1998.

Odstavce označené hvězdičkami je třeba interpretovat takto:

*    Slouží k procvičení, znalost ke zkoušce nutná.

**  Obsahuje důležité informace, ale jejich neznalost při zkoušce není fatální, zkouškou je možné “projít”.

*** Inspirativní náměty nebo zatím přednášejícím nezpracovaná témata.

Lekce 1 (18. 2. 2015)

Současná hodnota 1 (Present Value, Net Present Value)

Ilustrativní peněžní tok

Clear[CF,cashflow];
cashflow=Array[(Subscript[CF, #])&,4,0]

Grafické znázornění peněžního toku

(* Funkce cashFlowDiagram není součástí tohoto notebooku *)cashFlowDiagram[{{2,100},{5,200},{7.5,-200},{10,500}}]

Konstatní úroková míra

Clear[i,T];
TimeValue[Cashflow[cashflow],i,0]

(* Budoucí hodnota *)
TimeValue[Cashflow[cashflow],i,T]

Proměnné úrokové míry

Clear[i];
ii=Array[(Subscript[i, #])&,3]

TimeValue[Cashflow[cashflow],ii,0]

Okamžité (spotové) úrokové míry

Clear[R];
RR=Thread[Range[3]->Array[(Subscript[R, #])&,3]]

TimeValue[Cashflow[cashflow],RR,0]

Průměrná úroková míra

Clear[i];
ii=Array[(Subscript[i, #])&,5]

Text@Grid[{{"Aritmetický průměr",(aritmetickyprumer=Mean[ii])//TraditionalForm},{"Geometrický průměr",(geometrickyprumer=GeometricMean[1+ii]-1)//TraditionalForm}},Frame->All]

Numerické porovnání

Text@Grid[{{"Úrokové míry","Aritmetický průměr","Geometrický průměr"},{ii1={0.05,0.05,0.05,0.05,0.05},aritmetickyprumer/.Thread[ii->ii1],geometrickyprumer/.Thread[ii->ii1]},{ii2={0.05,0.09,0.01,0.09,0.01},aritmetickyprumer/.Thread[ii->ii2],geometrickyprumer/.Thread[ii->ii2]},{ii3={0.1,0.2,0.15,0.2,0.15},aritmetickyprumer/.Thread[ii->ii3],geometrickyprumer/.Thread[ii->ii3]}},Frame->All]

Kalendářní konvence

F1

DayCountConvention

FinancialBond

Taylorův rozvoj funkce ln

Využití zabudované funkce Series;

Plot[{Log[1+x],Table[Normal[Series[Log[1+x],{x,0,n}]],{n,3}]}//Flatten//Evaluate,{x,-0.5,1.5},PlotStyle->Thick,PlotLegends->SwatchLegend["Expressions",LegendFunction->(Framed[#,Background->LightBlue]&)]]

Lekce 2 (25. 2. 2015)

Současná hodnota 2 (Present Value, Net Present Value)

Příklad

Současná hodnota při složeném úročení, kalendářová konvence Actual/360. Peněžní tok ve tvaru {{(Subscript[t, 1]),C,(Subscript[F, (Subscript[t, 1])])},{(Subscript[t, 2]),C,(Subscript[F, (Subscript[t, 2])])},...}, přičemž (Subscript[t, j])={(Subscript[YYYY, j]),(Subscript[MM, j]),(Subscript[DD, j])}.

{DateList[],t0=DateList[][[1;;3]]}

{DateDifference[{2016,3,4},{2014,3,4}],DateDifference[DateList[][[1;;3]],{2014,3,4}]}

Clear[PV360];
PV360[cashflow_,t0_,i_]:=
Module[{v=(1/(1+i)),daysbetween,cashflowtranspose=Transpose[cashflow]},
daysbetween=Map[DateDifference[t0,#][[1]]&,cashflowtranspose[[1]]]//N;
cashflowtranspose[[2]].(v^(daysbetween/360))
	   ]

cfjh1=1000{-90,-15.2,45,60,25,22,27};
t1=Table[{2014+j,1,3},{j,1,7}];
example1=Transpose[{t1,cfjh1}]

yearsbetween1=Map[DateDifference[t0,#][[1]]&,t1]/360.//FullForm
yearsbetween1

cashFlowDiagram[{yearsbetween1,cfjh1}//Transpose]

PV360[example1,t0,i]//Simplify[#,Assumptions->{i>0}]&

TimeValue[Cashflow[example1],i,t0]

Profil současné hodnoty

Plot[pv1=PV360[example1,{2015,1,3},i],{i,0,0.25},AxesOrigin->{0,0},PlotStyle->Thick]

Plot[tv1=TimeValue[Cashflow[example1],i,{2015,1,3}],{i,0,0.25},AxesOrigin->{0,0},PlotStyle->Thick]

Rozdíl

Plot[pv1-tv1,{i,0,0.25},AxesOrigin->{0,0},PlotStyle->Thick]

Současná hodnota při složeném denním úročení, kalendářová konvence Actual/360. Peněžní tok ve tvaru {{(Subscript[t, 1]),C,(Subscript[F, (Subscript[t, 1])])},{(Subscript[t, 2]),C,(Subscript[F, (Subscript[t, 2])])},...}, přičemž (Subscript[t, j])={(Subscript[YYYY, j]),(Subscript[MM, j]),(Subscript[DD, j])}.

Clear[PV360daily];
PV360daily[cashflow_,t0_,i360_]:=
Module[{v=(1/(1+(i360/360))),daysbetween,cashflowtranspose=Transpose[cashflow]},
daysbetween=Map[DateDifference[t0,#][[1]]&,cashflowtranspose[[1]]]//N;
cashflowtranspose[[2]].(v^daysbetween)
	   ]

PV360daily[example1,t0,i]//Simplify[#,Assumptions->{i>0}]&

Plot[pv1daily=PV360daily[example1,t0,i],{i,0,0.25},AxesOrigin->{0,0},PlotStyle->Thick]

Rozdíl

Plot[pv1-pv1daily,{i,0,0.25},AxesOrigin->{0,0},PlotStyle->Thick]

Anuity

(* polhůtní *)
aT=TimeValue[Annuity[1,T,1],i]//Simplify

(* předlhůtní*)
aTdue=TimeValue[AnnuityDue[1,T,1],i]//Simplify

Pomocí diskontních faktorů

(* polhůtní *)
Assuming[v>0,aT/.{i->((1-v)/v)}//Simplify]//TraditionalForm

(* předlhůtní*)
Assuming[v>0,aTdue/.{i->((1-v)/v)}//Simplify]//TraditionalForm

Hodnotová rovnice (Equation of Value)

eq=TimeValue[Annuity[{PMT,{PV,FV}},T],i,0]==0//Simplify
eqDue=TimeValue[AnnuityDue[{PMT,{PV,FV}},T],i,0]==0//Simplify

Příklad (Pravidelné úložky, Installment savings)

Měsíční úložky 5000 Kč (na začátku měsíce) po 3 roky, úrok 3.6 % p. a., úročení měsíční, (i^((12)))=3.6%. Kolik se naspoří?

TimeValue[AnnuityDue[5000,36],(0.036/12),36]

Totéž při 3 úložkách po 60000 Kč na začátku roku:

TimeValue[AnnuityDue[60000,3],.036,3]

Přesnost na 20 desetinných míst

TimeValue[AnnuityDue[1,3],.036`20,3] 60000`20

Manipulate[Plot[TimeValue[AnnuityDue[pmt,T],((i/100)/12),T],{i,0,15},AxesLabel->{i,"FV"},PlotLabel->"Závislost naspořené částky na úrokové míře i "],{{pmt,5000,"PMT"},1000,10000,Appearance->"Labeled"},{{T,36,"T (v měsících)"},1,60,Appearance->"Labeled"},SaveDefinitions->True]

Příklad (Půjčka, loan)

Jste schopni splácet 5000 Kč měsíčně po dobu tří let při (i^((12)))=7.2% (tedy úročení měsíční). Kolik si můžete vypůjčit?

V pojmech hodnotové rovnice PV=?, PMT=-5000, i=(i^((12)))/12=0.006, T=36, FV=0 (podmínka splacení úvěru).

Assuming[v>0,{TimeValue[Annuity[pmt,T],i,T],TimeValue[Annuity[pmt,T],i,0],TimeValue[Annuity[pmt,T],i,-T]}/.{i->((1-v)/v)}//Simplify]//TraditionalForm

TimeValue[Annuity[5000,36],(0.072/12)]

(1.04^18)

Pravidlo zdvojení, dvojnásobku (The Doubling Rule)

Zdvojení vkladu ve výši 1 za dobu T při úrokové míře i:

TimeValue[1,i,T]/.{i->.04,T->18}

Clear[T,i]; Off[Solve::ifun];
time=T/.Solve[TimeValue[1,i,T]==2,T][[1]]
On[Solve::ifun];
Text@Grid[Prepend[Table[{i,time},{i,{0.02,0.04,0.0717735,0.1040895}}],{"i","T"}],Frame->All]

Vnitřní míry výnosnosti (IRR, Internal Rates of Return)

Příklad

(* T=6 *)

cfjh1={-90000,-15200,45000,60000,25000,22000,27000};

(1/(((1+i))^(Range[Length[cfjh1]]-1)))

Clear[pv]
pv[cashflow_,i_]:=(1/(((1+i))^(Range[Length[cashflow]]-1))).cashflow

pv[{cf1,cf2,cf3},i]

Solve[pv[cfjh1,i]==0,i]//N

Příklad nereálného peněžního toku

(* PV *)
Plot[TimeValue[Cashflow[{-1000,3600,-4310,1716}],i],{i,.01,.34},AxesLabel->{i,PV}]

Vnitřní míry výnosnosti

i/.Solve[TimeValue[Cashflow[{-1000,3600,-4310,1716}],i]==0,i]//N

Příklad (dluhopis, bond)

cfbond=Cashflow[{-1,Table[0.1,{9}],1.1}//Flatten]
Plot[TimeValue[cfbond,i],{i,0.04,0.16}]
vnitrnivynosovaprocenta=i/.NSolve[TimeValue[cfbond,i]==0,i]
kladna=Select[vnitrnivynosovaprocenta,(Re[#]>0∧Im[#]==0)&]

Lekce 3 (4. 3. 2015)

Modifikované vnitřní míry výnosnosti (MIRR, Modified Internal Rates of Return)

Nejprve pomocné funkce pro manipulaci s peněžním tokem

cf={-1000,-4000,5000,2000};
(* Peněžní tok výdajů *)
cfvvydaje=cf/.{_?(#>0&)->0}
(* Peněžní tok příjmů *)
cfvvydaje=cf/.{_?(#<0&)->0}

Současná hodnota výdajů při ceně kapitálu k

Clear[PVoutflows];PVoutflows[CF_,k_]:=(CF/.{_?(#>0&)->0}). (1/(((1+k))^(Range[Length[CF]]-1)))
PVoutflows[cf,k]

Budoucí hodnota příjmů při ceně kapitálu k

Clear[FVinflows];
FVinflows[CF_,k_]:=(CF/.{_?(#<0&)->0}).Reverse[(((1+k))^(Range[Length[CF]]-1))]
FVinflows[cf,k]

Současná hodnota budoucí hodnoty příjmů při MIRR

PVFV[CF_,k_,MIRR_]:=(1/(((1+MIRR))^(Length[CF]-1)))FVinflows[CF,k]
PVFV[cf,k,MIRR]

Výpočet MIRRi

Clear[MIRRi];
MIRRi[CF_,k_]:=(((-((FVinflows[CF,k])/(PVoutflows[CF,k]))))^(1/(Length[CF]-1)))-1
MIRRi[cf,0.11]

Pro srovnání IRR a MIRRi při ceně kapitálu rovné IRR

{IRRcf=Select[IRR/.NSolve[TimeValue[Cashflow[cf],IRR]==0,IRR],(Re[#]>0∧Im[#]==0)&]//First,MIRRi[cf,IRRcf]}

Vidíme, že je-li vypočtené IRR vyšší než skutečná reinvestiční úroková míra, pak IRR (někdy podstatně) přecení očekávanou míru výnosnosti projektu.

Výpočet MIRRii

Clear[MIRRii];
MIRRii[CF_,kI_,kO_]:=(((-((FVinflows[CF,kI])/(PVoutflows[CF,kO]))))^(1/(Length[CF]-1)))-1
MIRRii[cf,kI,kO]//Simplify//TraditionalForm
MIRRii[cf,0.12,0.10]

Plot3D[MIRRii[cf,kI,kO],{kI,0.05,0.30},{kO,0.05,0.30}]

(* Citlivost, derivace podle kI *)D[MIRRii[cf,kI,kO],kI]//Simplify//TraditionalForm

*Vnitřní hodnota peněžního toku (bude doplněno)

HIV(i)

Příklad (Swap)

***HIV(R), závislost na spotové (okamžité) výnosové křivce (spot yield curve)

Durace a konvexita

Clear[CF,cashflow];
cashflow=Array[(Subscript[CF, #])&,5,0]

Vyjádření úrokové míry pomocí diskontního faktoru:

Solve[v== 1/(1+i),i]

D[TimeValue[Cashflow[cashflow],((1-v)/v)],v]//Simplify//Apart

Clear[durace];
durace[CF_,v_]:=(((v D[TimeValue[Cashflow[CF],((1-v)/v)],v])//Simplify//Expand)/(TimeValue[Cashflow[CF],((1-v)/v)]//Simplify//Expand))
durace[cashflow,v]
durace[cashflow,v]/.v->1/(1+i)

Clear[konvexita];
konvexita[CF_,v_]:=Module[{T=Length[CF],citatel,jmenovatel},
citatel=TimeValue[Cashflow[(Range[T]-1)*Range[T]*CF],((1-v)/v)]//Simplify//Expand;
jmenovatel=TimeValue[Cashflow[CF],((1-v)/v)]//Simplify//Expand;
(citatel/jmenovatel)]
konvexita[cashflow,v]

TimeValue[Cashflow[CF],i]/.CF->cashflow
(* druha derivace soucasne hodnoty *)
D[TimeValue[Cashflow[CF]/.CF->cashflow,i],{i,2}]

Alternativně

((((((1+i))^2)D[TimeValue[Cashflow[CF],i]/.CF->cashflow,{i,2}])/.(1+i)->i1//Expand)/.i1->i+1)/TimeValue[Cashflow[CF]/.CF->cashflow,i]

Hodnocení investičních příležitostí I

Doba návratnosti, diskontovaná doba návratnosti (Payback Method, Discounted Payback Method)

** Test whether the project cf is a type I project

(* Test whether the project cf is a type I project, i. e., the outflows precede the inflows *)
Clear[typeI];
typeI[cf_]:=Module[{au},
	au=DeleteCases[Sign[cf],0];
	Sort[au]==au
				]
{typeI[{-1,0,-3,0,3,4}],typeI[{-1,2,-1,0,3,4,4}]}

Discounted Payback method

(* Discounted Payback method, for i = 0 the simple payback method *)
Clear[payback];
payback[cf_,i_]:=Module[{dcf,au,ak,k},
If[Not[typeI[cf]],Return[Print["    The project\n ",cf,  "\n    is not of type I (outflows do not precede inflows).   "]]];
	dcf=cf*(1/(1+i))^(Range[Length[cf]]-1);
	au=Accumulate[dcf];
	ak=If[Select[au,#>0&]=={},{},Select[au,#>0&]//First];
	k=(Position[au,ak]-1)//Flatten;
	If[k=={},∞,(k-1-au[[k]]/dcf[[k+1]]//First//N)]]

Clear[payback2];
payback2[cf_,i_]:=Module[{dcf,au,ak,k},
Which[Not[typeI[cf]],Print["    The project\n ",cf,  "\n    is not of type I (outflows do not precede inflows).   "],
True,	dcf=cf*(1/(1+i))^(Range[Length[cf]]-1);
	au=Accumulate[dcf];
	ak=If[Select[au,#>0&]=={},{},Select[au,#>0&]//First];
	k=(Position[au,ak]-1)//Flatten;
	If[k=={},∞,(k-1-au[[k]]/dcf[[k+1]]//First//N)]]]

Příklad

(* Investment projects *)
cfa={-1000,300,500,200,100};
cfb={-1000,47,47,47,1047};
cfc={-851.18586,281.0005,170.39716,300,200};
(* cfe={-1000,800,100,90,90}; *)
cfd={-600,-500,-300,400,500,600};
cfe={1200,-400,-300,-200,-400};
cfh={-600,-500,0,700,500};
cfZ={-6,-10,-4,-8,-3,-5,18.5,18.5};
cfarray={cfa,cfb,cfc,cfd,cfe,cfh,cfZ};
cfarraystring={"cfa","cfb","cfc","cfd","cfe","cfh","cfZ"};

Text@Grid[Prepend[Map[{#[[1]],Length[#[[2]]],payback[#[[2]],0],payback[#[[2]],0.02],payback[#[[2]],0.04]}&,{cfarraystring,cfarray}//Transpose],{"CF","T","Payback period  i = 0","Payback period  i = 0.02","Payback period  i = 0.04"}],Frame->All]

Text@Grid[Prepend[Map[{#[[1]],Length[#[[2]]],payback2[#[[2]],0],payback2[#[[2]],0.02],payback2[#[[2]],0.04]}&,{cfarraystring,cfarray}//Transpose],{"CF","T","Payback period  i = 0","Payback period  i = 0.02","Payback period  i = 0.04"}],Frame->All]

Lekce 4 (11. 3. 2015)

Karel IV. (Jak se zúročí jedna koruna uložená v roce 1348 na 4% p. a. ?)

Historická poznámka. Jest vzato za historický fakt, že Universita Karlova byla založena nadační listinou Karla IV. ze dne 7. dubna 1348. A to přesto, že již  zakládající listinou papeže (bulou) Klementa VI. (mj. svého času opatem kláštera benediktinů ve Fécamp v Normandii) potvrzenou v Avignonu 26. ledna 1347 byla založena Pražská univerzita.

Překvapivé výsledky dostaneme v případě, že se začneme zajímat o to, kdy v onom inkriminovaném roce 1348 byla ta jedna koruna uložena, na začátku roku, v okamžiku založení, na konci roku.

(t1=Map[{DateString[#,{"DayName", "  ","Day",". ","Month",". ","Year"}],TimeValue[1,0.04,{{2015,3,11},#}]}&,{{1348,1,1},{1348,4,7},{1348,12,31}}])//TableForm
Grid[{{"Rozdíly v datech úložky ","         "},
{"Leden - Duben    ",t1[[1,2]]-t1[[2,2]] },{"Duben - Prosinec ",t1[[2,2]]-t1[[3,2]]},{"Leden - Prosinec ",t1[[1,2]]-t1[[3,2]]},
{"Kdo otálel a místo na začátku roku uložil až na konci roku přišel o více než 8 miliard Kč!"}}]

Hodnocení investičních příležitostí II

Metody založené na profilu současné hodnoty

Příklad (Protipříklad)

Projekt cfZ = {-6,-10,-4,-8,-3,-5,18.5,18.5} splňuje předpoklady o existenci právě jednoho kladného vnitřního výnosového procenta. Typický profil současné hodnoty pro projekty typu I je klesající funkce. Projekt cfZ je vzácná výjímka:

(* Kumulativní součty (Subscript[A, j]) *)
cfZ={-6,-10,-4,-8,-3,-5,18.5,18.5};Accumulate[cfZ]

PVcfZ=TimeValue[Cashflow[cfZ],i]

Právě jedno kladné IRR:

Select[i/.NSolve[PVcfZ==0,i],Re[#]>0∧Im[#]==0&]//First

Ale

GraphicsRow[{Plot[PVcfZ,{i,0,0.01},PlotRange->All,PlotStyle->Thick,AxesOrigin->{0,0}],Plot[PVcfZ,{i,0,1.5},PlotRange->All,PlotStyle->Thick,AxesOrigin->{0,0}]}]

IRR, durace, konvexita (definice pro účely této lekce)

Clear[IRR];
IRR[cf_]:=Select[i/.NSolve[TimeValue[Cashflow[cf],i]==0,i],(Re[#]>0∧Im[#]==0)&]//First

Clear[durace];
durace[CF_,v_]:=((v D[TimeValue[Cashflow[CF],((1-v)/v)],v])//Simplify//Expand)/(TimeValue[Cashflow[CF],((1-v)/v)]//Simplify//Expand)

Clear[konvexita];
konvexita[CF_,v_]:=Module[{T=Length[CF],citatel,jmenovatel},
citatel=TimeValue[Cashflow[(Range[T]-1)*Range[T]*CF],((1-v)/v)]//Simplify//Expand;
jmenovatel=TimeValue[Cashflow[CF],((1-v)/v)]//Simplify//Expand;
(citatel/jmenovatel)]

Příklad (Porovnání pěti investičních projektů)

(* Investment projects *)
cfa={-1000,300,500,200,100};
cfb={-1000,47,47,47,1047};
cfc={-851.18586,281.0005,170.39716,300,200};
(* cfe={-1000,800,100,90,90}; *)
cfd={-600,-500,-300,400,500,600};
cfe={1200,-400,-300,-200,-400};
cfh={-600,-500,0,700,500};
cfZ={-6,-10,-4,-8,-3,-5,18.5,18.5};
cfarray={cfa,cfb,cfc,cfd,cfe,cfh,cfZ};
cfarraystring={"cfa","cfb","cfc","cfd","cfe","cfh","cfZ"};

IRR všech projektů

Text@Grid[Map[{#[[1]],IRR[#[[2]]]}&,{cfarraystring,cfarray}//Transpose],Frame->All]

Profily současných hodnot

Durace projektů A a C

Plot[Evaluate@{durace[cfa,v]/.v->(1/(1+i)),durace[cfc,v]/.v->(1/(1+i))},{i,0,0.1},PlotStyle->Thick]

Cvičení. Durace je u obou projektů A a C rostoucí. Proč je singularita okolo bodu 0.047?

Cvičení. Porovnejte projekty A a B z hlediska durace a konvexity.

Durace projektů A a C v detailu (okolí IRR):

Plot[Evaluate@{durace[cfa,v]/.v->(1/(1+i)),durace[cfc,v]/.v->(1/(1+i))},{i,0.046,0.049},PlotStyle->Thick]

Durace projektů E (červeně) a D (zeleně):

Plot[Evaluate@{durace[cfe,v]/.v->(1/(1+i)),durace[cfd,v]/.v->(1/(1+i))},{i,0,0.06},PlotStyle->{{Red,Thick},{Green,Thick}}]

Vytvoření peněžních toků stejné délky (doplnění zprava nulami, v přednášce prostor (𝕃^(T+1))).

Clear[arraySameLength];
arraySameLength[array_]:=Module[{sortarrayByLength,lengthMax},
sortarrayByLength=SortBy[array,Length];
lengthMax=Length[Last[sortarrayByLength]];
Map[Join[#,Table[0,{lengthMax-Length[#]}]]&,array]
		]

(cfarraySameLength=arraySameLength[cfarray])//TableForm

Text@Grid[Map[{#[[1]],#[[2]],IRR[#[[2]]]}&,{cfarraystring,cfarraySameLength}//Transpose],Frame->All]

Rozdíly C-A (současná hodnota, durace, konvexita)

differenceCminusA=Cashflow[cfarraySameLength[[3]]-cfarraySameLength[[1]]]
Text@Row[{"IRR rozdílu C-A:   ",IRR[cfarraySameLength[[3]]-cfarraySameLength[[1]]]}]

Detail:

Plot[TimeValue[differenceCminusA,i],{i,0,0.03},PlotStyle->Thick,AxesLabel->{"i","PV"}]

Ještě větší detail:

Plot[TimeValue[differenceCminusA,i],{i,0.01987,0.02011},PlotStyle->Thick,AxesLabel->{"i","PV"}]

Co se týká durace, nejprve si všimněte, jak vypadá durace rozdílu dvou peněžích toků, zde C-A, a jak vypadá rozdíl durací. Durace není (na rozdíl od současné hodnoty) lineární funkcí na prostoru peněžních toků (𝕃^(T+1)).

Durace rozdílu:

Plot[durace[cfarraySameLength[[3]]-cfarraySameLength[[1]],v]/.v->(1/(1+i)),{i,0,.03},PlotLabel->Style["Durace rozdílu projektů (C - A)",14],AxesLabel->{i,D}]

Rozdíl durací:

Plot[(durace[cfarraySameLength[[3]],v]-durace[cfarraySameLength[[1]],v])/.v->(1/(1+i)),{i,0,.03},PlotLabel->Style["Rozdíl durací projektů C a A",14],AxesLabel->{i,D},PlotStyle->Thick]

Rozdíl konvexit:

Plot[(konvexita[cfarraySameLength[[3]],v]-konvexita[cfarraySameLength[[1]],v])/.v->(1/(1+i)),{i,0,.03},PlotLabel->Style["Rozdíl konvexit projektů C a A\n",14],AxesLabel->{i,"Difference of convexities"},PlotStyle->Thick]

Úrokové míry a výnosové křivky I

Dekompozice úrokové míry

r ... nominalni (kotovana) urokova mira

1+r=(1+(Subscript[r, 0]))(1+(Subscript[r, infl])) (1+(Subscript[r, default]))  (1+(Subscript[r, liquid])) (1+(Subscript[r, mat]))

Zde (Subscript[r, 0]) označuje bezrizikou, riskless, riskfree úrokovou míru bez vlivu inﬂace (složka závislá na ekonomických podmínkách vnitřních i mezinárodních, časové preferenci spotřeby), (Subscript[r, inﬂ]) (prémie za inﬂaci, inﬂation premium) je očekávaná míra inﬂace, (Subscript[r, default]) (prémie za riziko nesplacení, kreditní riziko, default, credit risk) je přirážka, která zohledňuje situaci, kdy dlužník nebude schopen dostát svým závazkům, splatit jistinu či úrok nebo obojí, úplně či částečně, úmyslně či neúmyslně. Člen (Subscript[r, liquid]) (prémie za likviditu, liquidity premium) zohledňuje riziko pramenící ze ztížené možnosti dané aktivum rychle a bez podstatných ztrát proměnit na hotovost. Konečně (Subscript[r, mat]) (prémie za riziko v okamžiku splatnosti, riziko z vypršení, maturity risk premium) je prémie za riziko vzniklé případnými změnami sazeb během období trvání kontraktu, jinak řečeno životností aktiva. V podstatě vzniká tento typ rizika ze dvou příčin: první spočívá ve změnách úrokové míry (riziko úrokové míry, interest rate risk) během trvání obchodovatelného kontraktu, druhá pak v možné bezmocnosti investora, co dělat s utrženými penězi: v okamžiku splatnosti se totiž investiční příležitosti (měřené mírou výnosnosti) mohou diametrálně lišit od představ investora investujícího před řadou let. Toto riziko se nazývá reinvestiční riziko, reinvestment rate risk. V případě dlouhodobých dluhopisů jde skutečně o riziko změny úrokové míry: jestliže tržní úrokové míry rostou, ceny dluhopisů klesají. U krátkodobých dluhopisů vzniká již zmíněný problém reinvestice: když jsou v okamžiku splatnosti dluhopisu úrokové míry nízké, vyústí věřiteli (tj. emitentovi dluhopisu) splacená částka v úrokovou ztrátu.

(Subscript[r, nominalni])==(1+(Subscript[r, 0]))(1+(Subscript[r, infl])) (1+(Subscript[r, default]))  (1+(Subscript[r, liquid])) (1+(Subscript[r, mat]))-1

Rating

Bezriziková ú. m. (Subscript[r, 0infl]) se zahrnutím inflace:

(1+(Subscript[r, 0infl]))=(1+(Subscript[r, 0]))(1+(Subscript[r, infl]))

Příklad (výpočet (Subscript[r, default]))

Nominalni urokova mira 1+r=(1+(Subscript[r, 0 infl]))(1+(Subscript[r, default]))

(* v procentním vyjádření *)Solve[1+(r/100)==(1+(r0infl/100))(1+(rdefault/100)),rdefault]

Text@Grid[{{" ","(Subscript[r, 1991]) [%]","\!\(\*SubscriptBox[\(r\), \(default\\ 1991\)]\) [%]","(Subscript[r, 1984]) [%]","\!\(\*SubscriptBox[\(r\), \(default\\ 1984\)]\) [%]"},
{"T-bonds",8,0,12.34,0},
{"AAA",8.9,((100 (r-r0infl))/(100+r0infl))/.{r->8.9,r0infl->8},12.50,((100 (r-r0infl))/(100+r0infl))/.{r->12.50,r0infl->12.34}},
{"AA",9.1,((100 (r-r0infl))/(100+r0infl))/.{r->9.1,r0infl->8},12.70,((100 (r-r0infl))/(100+r0infl))/.{r->12.70,r0infl->12.34}},{"A",9.4,((100 (r-r0infl))/(100+r0infl))/.{r->9.4,r0infl->8},13.41,((100 (r-r0infl))/(100+r0infl))/.{r->13.41,r0infl->12.34}}},Frame->All]

Příklad (Matice pravděpodobností přechodu)

Credit Rating Transition Probabilities

Kreditní třídy (v terminologii markovských řetězců stavy řetězce): AAA, AA, A, BBB, BB, B, CCC, D (klasifikace podle Standard & Poor’s). AAA jsou firmy s nejvyšší kredibilitou, D jsou zkrachovalé firmy.

Matice pravděpodobností přechodu mezi kreditními křídami je čtvercová matice P=((Subscript[p, i,j])), i,j= AAA, AA, A, BBB, BB, B, CCC, D. Jestliže v čase t je firma ve třídě i, pak (Subscript[p, i,j]) je pravděpodobnost, že v čase t+1 se ocitne ve třídě j. Čas se v drtivé většině případů uvádí v rocích. Ve finanční literatuře se obvykle poslední řádek vynechává, neboť je vždy ve tvaru (0,0,...,0,1). Třída D je pohlcující: firma, která do ní spadne se z ní nemůže dostat.

Jestliže pravděpodobnosti přechodu zůstávají v čase konstantní (tzv. homogenní markovský řetězec), pak matice pravděpodobností přechodu z času t do času t+n je n-tá mocnina (P^((n)))=(P^n).

Dimitrios Kavvathas 
Goldman Sachs Group, Inc.
Estimating Credit Rating Transition Probabilities for Corporate Bonds,
AFA 2001 New Orleans Meetings 
http://web.sakarya.edu.tr/~adurmus/basel_II/SSRN-id252517 %20 rating.pdf

Odpovídající matice

(transitionmatrix={{0.9446`,0.0477`,0.006`,0.001`,0.0007,0.0001`,0.`,0.`},{0.0049`,0.9179`,0.0694`,0.0059`,0.0007,0.0009`,0.0002`,0.0001`},{0.001`,0.0187`,0.9198999999999999`,0.052199999999999996`,0.0055000000000000005`,0.0025`,0.0001`,0.0001`},{0.0004`,0.0032`,0.0547`,0.8819`,0.0496`,0.0083`,0.0007,0.0011`},{0.0004`,0.0014,0.0084`,0.0675`,0.8388`,0.0713`,0.0072`,0.005`},{0.0001`,0.0007,0.0027`,0.006`,0.0562`,0.8479,0.0481`,0.0384`},{0.0012`,0.0001`,0.0051`,0.0046`,0.017`,0.0891`,0.5401`,0.3428`},{0.`,0.`,0.`,0.`,0.`,0.`,0.`,1.`}})//MatrixForm

Matice přechodu po 3 letech

Map[PaddedForm[#,{4,4}]&,MatrixPower[transitionmatrix,3],{2}]//MatrixForm

MatrixPower[transitionmatrix,3]//MatrixForm

Lekce 5 (18. 3. 2015)

Časová struktura úrokových měr

(Subscript[R, t]) (spotové) okamžité,  (Subscript[f, t]) forwardové úrokové míry

(((1+(Subscript[R, t])))^t)=(∏_(j=1)^t)(1+(Subscript[f, j])),  t=1,...,T

Výnosové křivky (Yield curves, YC)

YC ...  závislost úrokové míry na době splatnosti: r=r(t), graf této závislosti

Příklad (Oldřich Alfons Vasicek, EWGFM Oct 2010 Prague)

Na eficientním trhu nemůže být výnosová křivka konstantní. Předpokládejme, že je tomu naopak a r(t)=0.05=:r, 1≤t≤10, čas v rocích. Předpokládejme počáteční investici W=100. Můžeme si vybrat ze dvou možností:

Portfolio (investice) A: pětiletý bezkuponový dluhopis s výše uvedeným výnosem r=0.05. Odpovídající cfA je

cfA=Cashflow[{-100,0,0,0,0,100(((1+r))^5)}/.r->0.05]

Portfolio (investice) B: kombinace jednoročního bezkuponového dluhopisu ((Subscript[B, 1])) a desetiletého bezkuponového dluhopisu ((Subscript[B, 10])), portfolio s pětiletou průměrnou dobou splatnosti (průměrná doba splatnosti ne ve smyslu durace!). Nechť w je váha (Subscript[B, 1]) a tedy 1-w váha  (Subscript[B, 10]). w tedy musí splňovat rovnici

w0=w/.Solve[1 w+10(1-w)==5,w]//First

Odpovídající cfB je tedy

Clear[cfB];cfB[w_,r_]:=Cashflow[{-100,w 100(1+r),0,0,0,0,0,0,0,0,(1-w)100(((1+r))^10)}]
cfBw0=cfB[w0,0.05]

Současné hodnoty při hodnotící úrokové míře i:

{npvA=TimeValue[cfA,i],npvBw0=TimeValue[cfBw0,i]}//Simplify

Plot[npvBw0-npvA,{i,0,0.1},PlotStyle->Thick]

Investice (portfolio) B poskytuje tedy vždy minimálně stejný výnos jako investice A. Na eficientním trhu nabídka a poptávka budou stlačovat cenu dluhopisu A dolů a cenu kombinace B nahoru.

Table[{i,npvBw0-npvA}/.i->i1,{i1,{0,0.03,0.04,0.05,0.06,0.07,0.1}}]//TableForm

**Stejné durace

Clear[w];
cfAdur=Cashflow[cfA[[1]]*(Range[Length[cfA[[1]]]]-1)]
cfBdur=Cashflow[(auxB={-100,w 100(1+r),0,0,0,0,0,0,0,0,(1-w)100(((1+r))^10)})*(Range[Length[auxB]]-1)/.r->0.05]

{durA=((TimeValue[cfAdur,i])/(TimeValue[cfA,i])),durB=((TimeValue[cfBdur,i])/(TimeValue[cfB,i]))}

Show[Plot[w/.((Solve[durA==durB,w]//FullSimplify)[[1,1]]/.i->i1),{i1,0,0.1}],Graphics[{PointSize[Large],Red,Point[{0.05,5/9}]}]]

(weights=Table[{i,w/.((Solve[durA==durB,w]//FullSimplify)[[1,1]]/.i->i1)}/.i->i1,{i1,{0,0.03,0.04,0.05,0.06,0.07,0.1}}])//TableForm

5/9.

weights=weights/.Indeterminate->5./9

Map[{#[[1]],#[[2]],TimeValue[cfB[#[[2]],0.05],#[[1]]]-TimeValue[cfA,#[[1]]]}&,weights]//TableForm

Table[{i1,TimeValue[cfA,i1],TimeValue[cfB[w,0.05]},{i1,{0,0.03,0.04,0.05,0.06,0.07,0.1}}]//TableForm

Lekce 6 (25. 3. 2015)

Úrokové míry a výnosové křivky II

Statistické a numerické metody konstrukce výnosových křivek

N srovnatelných aktiv (cenných papírů) 1,...N,
pozorované, kótované výnosy (úrokové míry) (Subscript[y, 1]),...,(Subscript[y, N]) v časech (Subscript[T, 1]),...,(Subscript[T, N])

Pro účely finančního rozhodování je zapotřebí znát výnosy také v časech různých od kótovaných minimálně v intervalu [(Subscript[T, 1]),(Subscript[T, N])].

Numerický přístup (interpolace)

Intepolační funkce y=f(t) musí splňovat (Subscript[y, n])=f((Subscript[T, n])), n=1,...,N.

Příklad (v grafech pozor na počátky souřadnic)

Data ir2 jsou reálná ve tvaru {splatnost (ve dnech), okamžitá (spotová) úroková míra (v procentech)}, N=12. Jedná se o termínovaný vklad České spořitelny, sazby z února 1999.

plot2=ListPlot[ir2={{7,5.4`},{14,5.4`},{30,6.2`},{60,6.1`},{90,6.1`},{120,6.`},{150,6.`},{180,5.9`},{210,5.9`},{240,5.9`},{270,5.9`},{290,5.8`}},PlotStyle->{Red,PointSize[0.015]}]

Data ir3 jsou reálná ve tvaru {splatnost (ve dnech), okamžitá (spotová) úroková míra (v procentech)}, N=22.

plot3=ListPlot[(ir3={{7,4.74},{14,4.728},{30,4.705},{60,4.595},{90,4.53},{180,4.42},{270,4.415},{360,4.41},{730,4.51},{1095,4.68},{1460,4.85},{1825,4.99},{2190,5.09},{2555,5.19},{2920,5.27},{3285,5.33},{3650,5.38},{4015,5.42},{4380,5.46},{4745,5.49},{5110,5.51},{5475,5.54}}),PlotStyle->{Red,PointSize[0.015]}]

Nejjednodušší v řadě případů nejlepší) je lineární interpolace, tj. pospojování bodů úsečkami:

int21=Interpolation[ir2,InterpolationOrder->1];
plotint21=Plot[int21[t],{t,7,290},PlotRange->All,PlotStyle->Thick];
Show[plot2,plotint21]

int31=Interpolation[ir3,InterpolationOrder->1];
plotint31=Plot[int31[t],{t,7,10000}];
Show[plot3,plotint31]

V detailu

Katastrofální výsledky dává interpolace polynomy.

poly2=InterpolatingPolynomial[ir2,t];
poly2plot=Plot[poly2,{t,Min[First[ir2][[1]]],Max[Last[ir2][[1]]]},PlotRange->All,PlotStyle->Thick];
Show[plot2,poly2plot,PlotRange->All]

Interpolační polynom je stupně N-1, v našem případě 11:

poly2//Expand//TraditionalForm

Koeficienty polynomů nejsou malá čísla. Uvědomme si, že t∈[7,290], takže třeba (200^11)=2.048×(10^25).

poly3=InterpolatingPolynomial[ir3,t];
poly3plot=Plot[poly3,{t,Min[First[ir3][[1]]],Max[Last[ir3][[1]]]},PlotRange->All,PlotStyle->Thick];
Show[plot3,poly3plot,PlotRange->All]

Interpolační polynom je stupně 21:

poly3//Expand//TraditionalForm

Interpolace polynomy nižšího stupně, dáno volbou InterpolationOrder. Polynomy na sebe vzájemně navazují (viz pospojování bodů úsečkami, InterpolationOrder → 1):

Manipulate[intpol2=Interpolation[ir2,InterpolationOrder->order];
Show[plotpol2=Plot[intpol2[t],{t,Min[First[ir2][[1]]],Max[Last[ir2][[1]]]},PlotRange->All],plot2,PlotRange->All],
{{order,4,"order"},1,11,1,Appearance->"Labeled"},SaveDefinitions->True]

Manipulate[intpol3=Interpolation[ir3,InterpolationOrder->order];
Show[plotpol3=Plot[intpol3[t],{t,Min[First[ir3][[1]]],Max[Last[ir3][[1]]]},PlotRange->All],plot3,PlotRange->All],
{{order,4,"order"},1,21,1,Appearance->"Labeled"},SaveDefinitions->True]

Statistický přístup (vyrovnání, fitting): parametrický

Hledáme funkci y=g(t) takovou, že g((Subscript[T, n])) se od (Subscript[y, n]) “příliš neliší”, např. ve smyslu součtu čtverců odchylek.

Příklad (vyrovnání kubickým polynomem)

g(t; (Subscript[β, 0]), (Subscript[β, 1]),(Subscript[β, 2]),(Subscript[β, 3]))=(Subscript[β, 0])+(Subscript[β, 1])t+(Subscript[β, 2])(t^2)+(Subscript[β, 3])(t^3)

(Subscript[β, i]) neznámé parametry

{(Subscript[β, 0]),(Subscript[β, 1]),(Subscript[β, 2]),(Subscript[β, 3])}

(cubic2fit=LinearModelFit[ir2,{t,(t^2),(t^3)},t])//Normal
Show[plot2,Plot[cubic2fit[t],{t,Min[First[ir2][[1]]],Max[Last[ir2][[1]]]}]]

(cubic3fit=LinearModelFit[ir3,{t,(t^2),(t^3)},t])//Normal
Show[plot3,Plot[cubic3fit[t],{t,Min[First[ir3][[1]]],Max[Last[ir3][[1]]]}]]

Příklad (Bradley-Crane)

(Subscript[g, B,C])(t;α,β,γ)=α,(t^β)(e^(γ,t))

α, β, γ neznámé parametry

Transformace, která převede funkci nelineární v parametrech na funkci lineární v parametrech; pak je možné použít metod lineární regrese. V našem případě logaritmická transformace

(y^★)= log g(t;α,β,γ)=log α +β log ,t+γ,t, po reparamerizaci (α^★):=log α je

(y^★)=(α^★)+β log ,t+γ,t

(* Logaritmy kótovaných výnosů (y^★) *)
(ir2log=Map[{#//First,Log[#//Last]}&,ir2])//Transpose//TableForm
(BC2fit=NonlinearModelFit[ir2log,αstar+β Log[t]+γ t,{αstar,β,γ},t]//Normal//Exp//Simplify)
Show[plot2,Plot[BC2fit,{t,7,290},PlotStyle->Thick]]

(* Logaritmy kótovaných výnosů (y^★) *)
(ir3log=Map[{#//First,Log[#//Last]}&,ir3])//Transpose//TableForm
(BC3fit=NonlinearModelFit[ir3log,αstar+β Log[t]+γ t,{αstar,β,γ},t]//Normal//Exp//Simplify)
Show[plot3,Plot[BC3fit,{t,Min[First[ir3][[1]]],Max[Last[ir3][[1]]]},PlotStyle->Thick]]

Příklad (Nelson-Siegel)

(Subscript[g, N,S])(t;(Subscript[β, 0]),(Subscript[β, 1]),(Subscript[β, 2]),c)= ...

Clear[nelsonsiegelspot]; (* Spot curve or zero-coupon*)
nelsonsiegelspot[b0_,b1_,b2_,c_,t_]:=b0+(((b1+b2) (1-(E^(-(t/c)))))/(t/c))-b2 (E^(-(t/c)))

The parameters have the following meaning: the function starts at level b,0+b,1 at time 0 and has asymptote at level b,0; a local extreme is determined by parameter c.

Limit[nelsonsiegelspot[b0,b1,b2,c,t],t->0]
Limit[nelsonsiegelspot[b0,b1,b2,c,t],t->∞,Assumptions->{b0>0∧b1>0∧b2>0∧c>0}]

Manipulating spot:

Manipulate[Plot[nelsonsiegelspot[b0,b1,b2,c,t],{t,0,10000},PlotRange->{{0,10000},{3,6}},AxesOrigin->{0,3},PlotStyle->{Thick}],
{{b0,5.8,"b0"},5,6,0.1,Appearance->"Labeled"},
{{b1,-1,"b1"},-2,-0.5,0.1,Appearance->"Labeled"},
{{b2,-3,"b2"},-5,-1,0.2,Appearance->"Labeled"},
{{c,400,"c"},100,1000,10,Appearance->"Labeled"},SaveDefinitions->True
]

Remeber: r ... spot rate, f ...forward rate, then

R(t)=(1/t)(∫_0^t)f(τ)dτ

(* Forward curve *)
Clear[nelsonsiegelforward];
nelsonsiegelforward[b0_,b1_,b2_,c_,t_]:=b0+b1 (E^(-t/c))+b2 (t/c) (E^(-t/c))

Both spot and forward curves

Manipulate[Plot[{nelsonsiegelspot[b0,b1,b2,c,t],nelsonsiegelforward[b0,b1,b2,c,t]},{t,0,10000},PlotRange->{{0,10000},{3,6}},AxesOrigin->{0,3},PlotStyle->{{Blue,Thick},{Orange,Thick}}],
{{b0,5.8,"b0"},5,6,0.1,Appearance->"Labeled"},
{{b1,-1,"b1"},-2,-0.5,0.1,Appearance->"Labeled"},
{{b2,-3,"b2"},-5,-1,0.2,Appearance->"Labeled"},
{{c,400,"c"},100,1000,10,Appearance->"Labeled"},SaveDefinitions->True
]

Fitting Nelson-Siegel: on the graph, estimated spot is blue and estimated forward is orange. The estimates of the parameters of the spot curve are substituted into the forward rate so that the forward curve is estimated indirectly.

fitnelsonsiegel2= FindFit[ir2,nelsonsiegelspot[b0,b1,b2,c,t],{b0,b1,b2,c},t]
curvenel2=nelsonsiegelspot[b0,b1,b2,c,t]/.fitnelsonsiegel2;
curvenelfc2[t_]:=nelsonsiegelspot[b0,b1,b2,c,t]/.fitnelsonsiegel2;
curvenel2forward=nelsonsiegelforward[b0,b1,b2,c,t]/.fitnelsonsiegel2;
Show[plot2,Plot[curvenel2forward,{t,7,290},PlotRange->All,PlotStyle->{Orange,Thick}],Plot[curvenel2,{t,7,290},PlotRange->All,PlotStyle->Thick],PlotRange->All]

fitnelsonsiegel3= FindFit[ir3,nelsonsiegelspot[b0,b1,b2,c,t],{b0,b1,b2,c},t]
curvenel3=nelsonsiegelspot[b0,b1,b2,c,t]/.fitnelsonsiegel3;
curvenelfc3[t_]:=nelsonsiegelspot[b0,b1,b2,c,t]/.fitnelsonsiegel3;
curvenel3forward=nelsonsiegelforward[b0,b1,b2,c,t]/.fitnelsonsiegel3;
Show[plot3,Plot[curvenel3forward,{t,0,10000},PlotRange->All,PlotStyle->{Orange,Thick}],Plot[curvenel3,{t,0,10000},PlotRange->All,PlotStyle->Thick],PlotRange->All]

Příklad (Swensson)

Zobecňuje předchozí, obsahuje navíc dva parametry.

(Subscript[g, S,w])(t;(Subscript[β, 0]),(Subscript[β, 1]),(Subscript[β, 2]),(Subscript[β, 3]),(Subscript[c, 1]),(Subscript[c, 2]))= ...

Začneme s jednošším tvarem forwardové křivky:

Clear[swenssonforward];swenssonforward[b0_,b1_,b2_,b3_,c1_,c2_,t_]:=b0+b1 (E^(-t/c1))+b2 (t/c1) (E^(-t/c1))+b3 (t/c2)(E^(-t/c2))

Spotovou křivku dostaneme jako integrální průměr:

Clear[swenssonspot];
swenssonspot[b0_,b1_,b2_,b3_,c1_,c2_,t_]=(1/t)(∫_0^t)swenssonforward[b0,b1,b2,b3,c1,c2,τ]\[DifferentialD]τ//Simplify

The parameters have the following meaning: the function starts at level b,0+b,1 at time 0 and has asymptote at level b,0; a local extreme is determined by parameter c. (?????)

Limit[swenssonspot[b0,b1,b2,b3,c1,c2,t],t->0,Assumptions->{b0>0&&b1>0&&b2>0&&b3>0&&c1>0&&c2>0}]
Limit[swenssonspot[b0,b1,b2,b3,c1,c2,t],t->∞,Assumptions->{b0>0&&b1>0&&b2>0&&b3>0&&c1>0&&c2>0}]

Manipulating spot:

Manipulate[Plot[swenssonspot[b0,b1,b2,b3,c1,c2,t],{t,0,10000},PlotRange->{{0,10000},{3,6}},AxesOrigin->{0,3},PlotStyle->{Thick}],
{{b0,5.8,"b0"},5,6,0.1,Appearance->"Labeled"},
{{b1,-1,"b1"},-2,-0.5,0.1,Appearance->"Labeled"},
{{b2,-3,"b2"},-5,-1,0.2,Appearance->"Labeled"},
{{b3,-3,"b3"},-5,-1,0.2,Appearance->"Labeled"},
{{c1,200,"c1"},100,1000,10,Appearance->"Labeled"},
{{c2,5000,"c2"},100,10000,10,Appearance->"Labeled"},SaveDefinitions->True
]

Remeber: r ... spot rate, f ...forward rate, then

R(t)=(1/t)(∫_0^t)f(τ)dτ

Both spot and forward curves

Manipulate[Plot[{swenssonspot[b0,b1,b2,b3,c1,c2,t],swenssonforward[b0,b1,b2,b3,c1,c2,t]},{t,0,10000},PlotRange->{{0,10000},{3,6}},AxesOrigin->{0,3},PlotStyle->{{Black,Thick},{Black,Dashed,Thick}}],
{{b0,5.8,"b0"},5,6,0.1,Appearance->"Labeled"},
{{b1,-1,"b1"},-2,-0.5,0.1,Appearance->"Labeled"},
{{b2,-3,"b2"},-5,-1,0.2,Appearance->"Labeled"},
{{b3,-3,"b3"},-5,-1,0.2,Appearance->"Labeled"},
{{c1,200,"c1"},100,1000,10,Appearance->"Labeled"},
{{c2,5000,"c2"},100,10000,10,Appearance->"Labeled"},SaveDefinitions->True
]

Fitting Swensson: on the graph, estimated spot is blue and estimated forward is orange.

fitswensson2= FindFit[ir2,swenssonspot[b0,b1,b2,b3,c1,c2,t],{b0,b1,b2,b3,c1,c2},t]
(curveswe2=swenssonspot[b0,b1,b2,b3,c1,c2,t]/.fitswensson2)//Simplify;
curveswefc2[t_]:=swenssonspot[b0,b1,b2,b3,c1,c2,t]/.fitswensson2
(curveswe2forward=swenssonforward[b0,b1,b2,b3,c1,c2,t]/.fitswensson2)//Simplify;
Show[plot2,Plot[curveswe2,{t,7,290},PlotRange->All,PlotStyle->Thick],Plot[curveswe2forward,{t,7,290},PlotRange->{4.5,6.6},(* ,ClippingStyle->Directive[Red,Thick]] *)PlotStyle->{Orange,Thick}],PlotRange->All]

fitswensson3= FindFit[ir3,swenssonspot[b0,b1,b2,b3,c1,c2,t],{b0,b1,b2,b3,c1,c2},t]
(curveswe3=swenssonspot[b0,b1,b2,b3,c1,c2,t]/.fitswensson3)//Simplify;
curveswefc3[t_]:=swenssonspot[b0,b1,b2,b3,c1,c2,t]/.fitswensson3
(curveswe3forward=swenssonforward[b0,b1,b2,b3,c1,c2,t]/.fitswensson3)//Simplify;
Show[plot3,Plot[curveswe3,{t,0,10000},PlotRange->All,PlotStyle->Thick],Plot[curveswe3forward,{t,0,10000},PlotRange->All,PlotStyle->{Orange,Thick}],PlotRange->All]

**Statistický přístup (vyrovnání, fitting): spliny

Hyperlink[Button["Splines"],"paclet:ref/BSplineCurve"]

Least Square Fitting

pts=ir3;
ListPlot[pts]

Use uniform parametrization:

uparam[pts_]:=N[Range[0,1,1/(Length[pts]-1)]];

Define a function to generate clamped knots for a given number of control points and degrees:

kfun[n_,d_]:=Join[ConstantArray[0,d],Range[0,1,1/(n-d)],ConstantArray[1,d]];

Define the basis matrix for least squares:

mbasis[pts_,n_,d_]:=With[{param=uparam[pts]},Table[BSplineBasis[{d,kfun[n,d]},j-1,param[[i]]],{i,Length[param]},{j,n}]];

A cubic B-spline curve with 12 control points will be used for fitting:

ctrlpts=LeastSquares[mbasis[pts,12,3],pts];

Show the data with the curve:

ListPlot[pts,Epilog->{Red,BSplineCurve[ctrlpts,SplineDegree->3]}]

The results with various numbers of control points:

Table[With[{ctrlpts=LeastSquares[mbasis[pts,k,3],pts]},ListPlot[pts,Epilog->{Red,BSplineCurve[ctrlpts,SplineDegree->3]}]],{k,{4,9,12,20}}]

The results with 12 control points and different degrees:

Table[With[{ctrlpts=LeastSquares[mbasis[pts,12,d],pts]},ListPlot[pts,Epilog->{Red,BSplineCurve[ctrlpts,SplineDegree->d]}]],{d,{1,2,3,5}}]

***Statistický přístup (vyrovnání, fitting): neparametrický: jádrové odhady

Příklad

***Užití výnosových křivek pro hodnocení investic

***Příklad

Výnos, očekávaný výnos a riziko 1

(Subscript[P, 0]),(Subscript[P, 1]),... ceny aktiva (prices of asset)
(Subscript[p, t])=ln (Subscript[P, t]) ... logaritmická cena

(Subscript[R, t])=(((Subscript[P, t+1])-(Subscript[P, t]))/(Subscript[P, t])) ...  míra výnosnosti, míra zisku, výnos (rate of return)

(R^((T)))=(∏_(t=0)^(T-1))(1+(Subscript[R, t]))-1=(Subscript[P, T-1])/(Subscript[P, 0]) ...  výnos za období [0,T]

(((1+(R^((T)))))^(1/T))-1 ...  anualizovaný výnos za období [0,T] (geometrický průměr)

Předpokládané znalosti

Náhodná veličina, diskrétní a spojité rozdělení, momenty, korelace, kovarianční a korelační matice. Kvantilová funkce, medián, kvartily. Marginální rozdělení, nezávislost a nekorelovanost. Podmíněné rozdělení, podmíněná střední hodnota. Viz:

http://www.karlin.mff.cuni.cz/~kulich/vyuka/statfpm/doc/pravdepodobnost_fm.pdf

http://www.karlin.mff.cuni.cz/~kulich/vyuka/statfpm/doc/rozdeleni.pdf

(Subscript[X, 1]),(Subscript[X, 2]),... nezávislé stejně rozdělené náhodné veličiny, zkráceně iid (independent identically distributed random varaibles)

Logaritmicko-normální rozdělení

Značení: X∼L,N(μ,(σ^2)) nebo ℒ(X)=L,N(μ,(σ^2))

Parametry: μ∈ℝ, σ>0

Nosič: X∈(0,∞)

Hustota:

PDF[𝒟LN=LogNormalDistribution[μ,σ],x]//TraditionalForm

Manipulate[Plot[PDF[LogNormalDistribution[μ,σ],x],{x,0,7},PlotStyle->Thick],
{{μ,2},-1,3,Appearance->"Labeled"},{{σ,0.75},0.5,1.5,Appearance->"Labeled"}]

Střední hodnota:

Mean[𝒟LN]//TraditionalForm

Rozptyl:

Variance[𝒟LN]//TraditionalForm

Poznámky:
1. Parametry nemají význam střední hodnoty a rozptylu!!!
2. Jesliže Y∼N(μ,(σ^2)), pak X:=(e^Y)∼L,N(μ,(σ^2)).

Podmíněné rozdělení podmíněné náhodným jevem

Nechť X je náhodná veličina na (Ω,𝒜,P) a B∈𝒜 je náhodný jev takový, že P(B)>0.

Podmíněnou distribuční funkcí náhodné veličiny X za podmínky B nazýváme funkci

F(x,|B)=P(X<x|B)=(1/(P(B)))P(ω:X(ω)<x∧ω∈B)=(1/(P(B)))P(X<x,B).

Jestliže rozdělení X je absolutně spojité, pak podmíněnou hustotou náhodné veličiny X za podmínky B nazýváme funkci

f(x,|B)=(1/(P(B)))((∂F(x,|B))/(∂x)).

Podmíněná střední hodnota náhodné veličiny X za podmínky B:

E(X|B)=(∫_(-∞)^∞)x,d,F(x|B)=(∫_(-∞)^∞)x,f(x,|B) d,x.

Náhodný (stochastický) proces

Náhodný (stochastický) proces je množina náhodných veličin {X(t),t∈T} (nebo {(Subscript[X, t]),t∈T}) na stejném pravděpodobnostním prostoru (Ω,𝒜), T je indexová množina. Typicky T={0,1,... } resp. T={t≥0}, pak se mluví o náhodném procesu s diskrétním resp. spojitým časem. V případě T={0,1,... } se (podle kontextu) odpovídající stochastický proces též nazývá časová řada. Při pevném ω∈Ω  se X(t,ω)  jako funkce t nazývá trajektorie. Jsou-li trajektorie spojité funkce, mluví se o spojitém procesu.

Funkce E,X(t) se nazývá střední hodnota procesu a var X(t)=E,(X^2)(t)-(((E,X(t)))^2) se nazývá rozptyl procesu. Funkce cov(X(t),X(s))=E(X(t)X(s))-(E,X(t))(E,X(s)), t∈T, s∈T se nazývá kovarianční funkce procesu {X(t),t∈T}, cor(X(t),X(s)) korelační funkce.

Konec 25. 3. 2015

Lekce 7 (1. 4. 2015)

Výnos, očekávaný výnos a riziko 1I

Model vývoje cen: náhodné procházky, hypotéza náhodné procházky

Vývoj cen podle náhodné procházky pro ceny

(Subscript[P, t+1])=μ+(Subscript[P, t])+(Subscript[ε, t+1]),    t=0,...,T-1

μ ... drift, trend, (Subscript[ε, t]) ... nekorelované (v silné verzi nezávislé) náhodné veličiny (poruchy, disturbances, innovation) s nulovou střední hodnotou, E,(Subscript[ε, t]),=0, a stejným konečným nenulovým rozptylem, var (Subscript[ε, t])=(σ^2) .

V níže uvedeném příkladě čas běží ve dnech. Jsou znázorněny 4 trajektorie pro vývoj ceny s těmito parametry: μ=(Subscript[P, 0])×0.05/365 (odpovídá ročnímu výnosu 5%), (Subscript[P, 0])=100, (Subscript[ε, t]) iid s rozdělením N(0,4×(10^(-6))), T=800 [dnů]. Pro účely reprodukovatelnosti je použito počáteční náhodné číslo (SeedRandom[113333], všechny simulace je možné kdykoli kompletně zrekonstruovat).

SeedRandom[113333];ListLinePlot[Table[NestList[(100×(0.05/365)+#+100RandomReal[NormalDistribution[0,0.002]])&,100,800],{4}],PlotStyle->{Thick},Filling->Axis,AxesLabel->{Style["   t",Italic,20],Style["(Subscript[P, t])",Italic,20]},AxesStyle->Directive[16],GridLines->{100 Range[8],Automatic},GridLinesStyle->Directive[Orange],PlotRange->{{0,801},(*{80,125}*)All},PlotLabel->Style["4 možné vývoje ceny akcie (Subscript[P, t]) v období 800 dnů\n při počáteční ceně akcie \!\(\*SubscriptBox[\(P\), \(\(0\)\(\\ \)\)]\)= 100",Bold,18]]

Vývoj cen podle náhodné procházky pro logaritmické ceny

(Subscript[p, t+1])=μ+(Subscript[p, t])+(Subscript[ε, t+1]),    t=0,...,T-1,

takže

(Subscript[P, t+1])=(Subscript[P, t])exp{μ+(Subscript[ε, t+1])},    t=0,...,T-1.

V níže uvedeném příkladě čas běží ve dnech. Jsou znázorněny 4 trajektorie pro vývoj ceny s těmito parametry: drift μ=0.05/365 (odpovídá ročnímu logaritmickému výnosu 5%), (Subscript[P, 0])=100, (Subscript[ε, t]) iid s rozdělením N(0,(0.02/(Sqrt[365]))=0.0010468478451804274`), T=800 [dnů]. Pro účely reprodukovatelnosti je použito počáteční náhodné číslo (SeedRandom[113333], všechny simulace je možné kdykoli kompletně zrekonstruovat).

SeedRandom[113333];ListLinePlot[Table[NestList[(#Exp[(0.05/365)+RandomReal[NormalDistribution[0,(0.02/(Sqrt[365]))]]])&,100,800],{4}],PlotStyle->{Thick},Filling->Axis,AxesLabel->{Style["   t",Italic,20],Style["(Subscript[P, t])",Italic,20]},AxesStyle->Directive[16],GridLines->{100 Range[8],Automatic},GridLinesStyle->Directive[Orange],PlotRange->{{0,801},All},PlotLabel->Style["4 možné vývoje ceny akcie (Subscript[P, t]) v období 800 dnů\n při počáteční ceně akcie \!\(\*SubscriptBox[\(P\), \(\(0\)\(\\ \)\)]\)= 100",Bold,18]]

Model vývoje cen: Wienerův proces

Definice Wienerova procesu a geometrický Brownův pohyb

Náhodný proces {W(t),t≥0} se nazývá (standardní) Wienerův proces, jestliže má spojité trajektorie, W(0)=0 s pravděpodobností 1, pro s>0, t>0 má W(t)-W(s) rozdělení N(0,|t-s|) a pro 0<(Subscript[t, 0])<(Subscript[t, 1])<...<(Subscript[t, n])<∞ jsou náhodné veličiny  W((Subscript[t, 0])), W((Subscript[t, 1]))-W((Subscript[t, 0])),...,W((Subscript[t, n]))-W((Subscript[t, n-1])) nezávislé. Posledně jmenované náhodné veličiny se nazývají přírůstky a Wienerův proces je tedy proces s nezávislými přírůstky (independent icrements).

SetDirectory[NotebookDirectory[]];
Import["20140417_Wiener_FM1a.jpg"]

Poznámka

{Mean[LogNormalDistribution[Log[(Subscript[P, 0])]+(μ-(1/2)(σ^2))t,σ(Sqrt[t])]]//Simplify,Variance[LogNormalDistribution[Log[(Subscript[P, 0])]+(μ-(1/2)(σ^2))t,σ(Sqrt[t])]]//Simplify}//TraditionalForm

Viz také http://en.wikipedia.org/wiki/Wiener_process

Výše definovaný Wienerův proces se někdy též nazývá standardní Wienerův proces. Náhodný proces

X(t)=μ,t+σ,W(t)

se nazývá Wienerův proces s driftem μ a rozptylem (σ^2).

Příklady

Standardní Wienerův proces

SliceDistribution[WienerProcess[],t]

Střední hodnota, rozptyl, kovarianční funkce a korelační funkce

{Mean[WienerProcess[][t]],Variance[WienerProcess[][t]],CovarianceFunction[WienerProcess[],s,t],CorrelationFunction[WienerProcess[],s,t]}

Simulace třiceti trajektorií (čas běží v obchodních dnech, časový horizont 1 rok)

SeedRandom[13];
wp30simulaci=RandomFunction[wp=WienerProcess[],{0,1,1/252},30];
ListLinePlot[%,Filling->Axis]

Wienerův proces s driftem a obecným rozptylem

Střední hodnota, rozptyl, kovarianční funkce a korelační funkce

{Mean[WienerProcess[μ,σ][t]],Variance[WienerProcess[μ,σ][t]],CovarianceFunction[WienerProcess[μ,σ],s,t],
CorrelationFunction[WienerProcess[μ,σ],s,t]}

Simulace třiceti trajektorií (čas běží v obchodních dnech, časový horizont 4 roky): 
μ = 0.05, σ = 0.01:

SeedRandom[13];
wpμσ30simulaci=RandomFunction[wpμσ=WienerProcess[μ,σ]/.{μ->0.05,σ->0.01},{0,4,(1/252)},30];
ListLinePlot[%]

Geometrický Brownův pohyb

Střední hodnota, rozptyl, kovarianční funkce a korelační funkce ((Subscript[P, 0])... počáteční cena)

{Mean[GeometricBrownianMotionProcess[μ,σ,(Subscript[P, 0])][t]],Variance[GeometricBrownianMotionProcess[μ,σ,(Subscript[P, 0])][t]],CovarianceFunction[GeometricBrownianMotionProcess[μ,σ,(Subscript[P, 0])],s,t]}//Simplify//TraditionalForm
CorrelationFunction[GeometricBrownianMotionProcess[μ,σ,(Subscript[P, 0])],s,t]

SeedRandom[13];
wpμσ100simulaci=RandomFunction[wpμσ=GeometricBrownianMotionProcess[μ,σ,100]/.{μ->0.1,σ->0.05},{0,10,(1/252)},100];
ListLinePlot[%]

Střední hodnota E,X(4) a střední hodnota E,X(10)

{100Exp[0.1 4],100Exp[0.1 10]}

Model vývoje cen: Frakcionální Brownův pohyb (fBm, FBM)

***Mathematica verze 9

Kupodivu vytvoreni variancni matice je relativne casove narocna procedura. Vstupnimi parametry jsou: casovy horizont T, pocet kroku n, Hurstuv koeficient H, smerodatna odchylka σ. Kroky jsou tedy ekvidistantni o delc T/n.Pro vytvoreni variancni matice se pouzije procedura pro vytvoreni kovariancni funkce. Obe jsou vhodne okomentovany. Vystupem procedury covarianceMatrixZ je struktura {covariance matrix, T, n, H, σ}.

***Procedury

Clear[covarianceFunctionZ,covarianceMatrixZ];
covarianceFunctionZ[{t_,s_},H_,σ_]:=(1/2)(σ^2)((t^(2H))+(s^(2H))-((Abs[s-t])^(2H)))
covarianceMatrixZ[T_(* time horizon *),n_(* number of steps *),H_,σ_]:=
Module[{times,tuples,covariances},
times=(T/n)Range[n];
tuples=Tuples[times,2];
covariances=Map[covarianceFunctionZ[#,H,σ]&,tuples]//N;
{Partition[covariances,n],T,n,H,σ}
	     ]

Kovarianční funkce

{Assuming[h>0,covarianceFunctionZ[{t,t+h},1/4,1]//Simplify],Assuming[h>0,covarianceFunctionZ[{t,t+h},1/2,1]//Simplify],Assuming[h>0,covarianceFunctionZ[{t,t+h},3/4,1]//Simplify]}

Manipulate[Plot[covarianceFunctionZ[{t,t+h},H,1],{t,0,10}],{h,0,3},{{H,1/2},0.0001,0.9999}]

Clear[fBmGeneratornew];
fBmGeneratornew[numberOfTrajectories_,covarianceMatrix_,seed_:13]:=
Module[{dim,cov,times,T,n,H,σ,dist},
cov=covarianceMatrix[[1]];T=covarianceMatrix[[2]];n=covarianceMatrix[[3]];H=covarianceMatrix[[4]];σ=covarianceMatrix[[5]];
times=Prepend[(T/n)Range[n],0];
dim=Length[cov];
dist=MultinormalDistribution[Table[0,{dim}],cov];
SeedRandom[seed];
{Table[{times,Prepend[RandomVariate[dist],0]//Flatten}//Transpose,{numberOfTrajectories}](*1*),T(*2*),n(*3*),H(*4*),σ(*5*),numberOfTrajectories(*6*)}
]

***Příklady

Ve všech příkladech je počet kroků n=1000. Odpovídající kovarianční matice má 1000×1000=1000000 prvků. Doba výpočtu v systému Mathematica je však zanedbatelná.

H = 0.5 (Wienerův proces)

c12=covarianceMatrixZ[1,1000,1/2,1];
fB1new=fBmGeneratornew[30,c12];
(* ListPlot[fB1new//First,Joined->True,PlotStyle->Black] *)
ListLinePlot[fB1new[[1]],Joined->True,PlotStyle-> Black,PlotLabel->Style[StringJoin["Fractional Brownian motion: No. of trajectories = ",ToString[fB1new[[6]]]," \n T = ",ToString[fB1new[[2]]],"  H = ",ToString[fB1new[[4]]//N],"  steps = ",ToString[fB1new[[3]]],"  σ = ", ToString[fB1new[[5]]//N]],16],AxesStyle->Directive[12],(*Ticks->{{0,100,400,700},{4.4,4.5,4.6,4.7}},*)PlotRange->All,AxesLabel->{Style[" t",Italic,16],Style["Z(t)",Italic,16]}]

H = 0.25 rychle oscilující (Highly oscillating)

c14=covarianceMatrixZ[1,1000,0.25,1];
fB1new=fBmGeneratornew[30,c14];
(* ListPlot[fB1new//First,Joined->True,PlotStyle->Black] *)
ListPlot[fB1new[[1]],Joined->True,PlotStyle-> Black,PlotLabel->Style[StringJoin["Fractional Brownian motion: No. of trajectories = ",ToString[fB1new[[6]]]," \n T = ",ToString[fB1new[[2]]],"  H = ",ToString[fB1new[[4]]//N],"  steps = ",ToString[fB1new[[3]]],"  σ = ", ToString[fB1new[[5]]//N]],16],AxesStyle->Directive[12],(*Ticks->{{0,100,400,700},{4.4,4.5,4.6,4.7}},*)PlotRange->All,AxesLabel->{Style[" t",Italic,16],Style["Z(t)",Italic,16]}]

H = 0.8 dlouhá paměť (Long memory)

c08=covarianceMatrixZ[1,1000,0.8,1];
fB1new=fBmGeneratornew[30,c08];
(* ListPlot[fB1new//First,Joined->True,PlotStyle->Black] *)
ListPlot[fB1new[[1]],Joined->True,PlotStyle-> Black,PlotLabel->Style[StringJoin["Fractional Brownian motion: No. of trajectories = ",ToString[fB1new[[6]]]," \n T = ",ToString[fB1new[[2]]],"  H = ",ToString[fB1new[[4]]//N],"  steps = ",ToString[fB1new[[3]]],"  σ = ", ToString[fB1new[[5]]//N]],16],AxesStyle->Directive[12],(*Ticks->{{0,100,400,700},{4.4,4.5,4.6,4.7}},*)PlotRange->All,AxesLabel->{Style[" t",Italic,16],Style["Z(t)",Italic,16]}]

Mathematica verze 10 (ve verzi  9 nespouštět!!!)

{Mean[FractionalBrownianMotionProcess[μ,σ,h][t]],Variance[FractionalBrownianMotionProcess[μ,σ,h][t]]}//TraditionalForm
CovarianceFunction[FractionalBrownianMotionProcess[μ,σ,h],s,t]//TraditionalForm

CorrelationFunction[FractionalBrownianMotionProcess[μ,σ,h],s,t]

H=1/2 Wienerův proces

SeedRandom[13];
RandomFunction[FractionalBrownianMotionProcess[0,1,h]/.h->0.5,{0,1,0.001},30];
ListLinePlot[%]

H = 0.25 rychle oscilující (Highly oscillating)

SeedRandom[13];
RandomFunction[FractionalBrownianMotionProcess[0,1,h]/.h->0.25,{0,1,0.001},30];
ListLinePlot[%]

H = 0.8 dlouhá paměť (Long memory)

SeedRandom[13];
RandomFunction[FractionalBrownianMotionProcess[0,1,h]/.h->0.8,{0,1,0.001},30];
ListLinePlot[%]

**Model vývoje cen: Skokové procesy (Jump processes)

?*Poisson*

Poissonův proces s intenzitou λ=1.3, T=15

SeedRandom[1313];
data:=RandomFunction[PoissonProcess[1.3],{0,15}];

ListLinePlot[{data,data,data},InterpolationOrder->0,Filling->Axis]

SliceDistribution[PoissonProcess[μ],t]

Mean and variance functions:

{Mean[PoissonProcess[μ][t]],Variance[PoissonProcess[μ][t]]}

CovarianceFunction[PoissonProcess[μ],s,t]

Složený Poissonův proces, rozdělení skoků exponenciální

𝒫exp=CompoundPoissonProcess[.8,ExponentialDistribution[2]];

data=RandomFunction[𝒫exp,{20}]

ListLinePlot[data,InterpolationOrder->0,Filling->Axis]

𝒫=CompoundPoissonProcess[λ,ExponentialDistribution[μ]];

{Mean[𝒫[t]],Variance[𝒫[t]]}

Složený Poissonův proces, rozdělení skoků normální

𝒫nor=CompoundPoissonProcess[.8,NormalDistribution[0,(Sqrt[2])]];
data:=RandomFunction[𝒫nor,{20}]
ListLinePlot[{data,data,data,data},InterpolationOrder->0,Filling->Axis]

𝒩=CompoundPoissonProcess[λ,NormalDistribution[μ,σ]];
{Mean[𝒩[t]],Variance[𝒩[t]]}

Lekce 8 (8. 4. 2015)

Pravděpodobnostní rozdělení míry výnosnosti

Procedury

SD ... směrodatná odchylka

Clear[moments];
moments[distribution_]:=
Text@Grid[{{"Mean",Mean[distribution]},{"SD",StandardDeviation[distribution]},{"Skewness",Skewness[distribution]},{"Kurtosis",Kurtosis[distribution]}}//Transpose,Frame->All,Alignment->{Center,Center}]

Reálná data

Erste

Manipulace s daty

SetDirectory[NotebookDirectory[]];ersteceny=FinancialData["Vienna:EBS",{{2011,1,1},{2015,3,27}}] ;
Length[%]
erstevynosy=FinancialData["Vienna:EBS","Return",{{2011,1,1},{2015,3,27}}] ;
Export["ersteceny.xls",ersteceny,"XLS"];
Export["erstevynosy.xls",erstevynosy,"XLS"];
ersteceny[[1;;4]]
GraphicsRow@{DateListPlot[ersteceny,Joined->True,PlotStyle->Thick],DateListPlot[erstevynosy,Joined->True]}

erstecenyread=Import["ersteceny.xls","XLS"];
Dimensions[erstecenyread]
erstecenyread=erstecenyread//First;
erstecenyread[[1;;4]]

Ilustrace

Výnosy Erste:

(* Odstranění data *)
erstehodnotyvynosu=Map[Last,erstevynosy];
GraphicsRow@{Histogram[erstehodnotyvynosu,Automatic,"PDF",PlotLabel->"Erste"],SmoothHistogram[erstehodnotyvynosu,PlotLabel->"Erste"]}

Vidíme dva vedlejší vrcholky.

Charakteristiky

moments[EmpiricalDistribution[erstehodnotyvynosu]]

General Motors a Apple

Ceny

GraphicsRow@{DateListPlot[GMceny=FinancialData["GM",{{2011,1,1},{2015,3,27}}],Joined->True,PlotStyle->Thick ,PlotLabel->"General Motors"],DateListPlot[Appleceny=FinancialData["AAPL",{{2011,1,1},{2015,3,27}}],Joined->True,PlotStyle->Thick,PlotLabel->"Apple" ]}

Výnosy

GMvynosy=FinancialData["GM","Return",{{2011,1,1},{2015,3,27}}] ;
Applevynosy=FinancialData["AAPL","Return",{{2011,1,1},{2015,3,27}}] ;
(* Odstranění data *)
GMhodnotyvynosu=Map[Last,GMvynosy];
(* Odstranění data *)
Applehodnotyvynosu=Map[Last,Applevynosy];

Výnosy General Motors a Apple:

GraphicsRow@{Histogram[GMhodnotyvynosu,Automatic,"PDF",PlotLabel->"General Motors"],SmoothHistogram[GMhodnotyvynosu,PlotLabel->"General Motors"]}
GraphicsRow@{Histogram[Applehodnotyvynosu,PlotLabel->"Apple"],SmoothHistogram[Applehodnotyvynosu,PlotLabel->"Apple"]}

Charakteristiky

moments[EmpiricalDistribution[GMhodnotyvynosu]]

moments[EmpiricalDistribution[Applehodnotyvynosu]]

Vysoké hodnoty špičatosti (ve srovnání s normálním rozdělením) napovídají, že data asi nepocházejí z normálního rozdělení. Ostatně to dosvědčuje i test dobré shody s normálním rozdělením (***funkce DistributionFitTest vrací p-hodnoty, čím menší p-hodnota je, tím hůře pro nulovou hypotézu. V našem případě testujeme hypotézu normality.)

{DistributionFitTest[GMhodnotyvynosu],DistributionFitTest[Applehodnotyvynosu]}

Normální rozdělení

𝒟normal=NormalDistribution[μ,σ];
moments[𝒟normal]

plot𝒟normal=Plot[PDF[𝒟normal/.{μ->0,σ->1},x],{x,-4,4},PlotStyle->{Red,Thick}]

Probability[Abs[X-μ]>3σ,X\[Distributed]NormalDistribution[μ,σ]]//N

Cauchyovo rozdělení C(μ,σ) a t-rozdělení o k stupních volnosti (Subscript[t, k])(μ,σ)

𝒟Cauchy=CauchyDistribution[μ,σ];
Row@{"Hustota  f(x;μ,σ) = ",PDF[𝒟Cauchy,x]//FullSimplify}

Caychyovo rozdělení vyniká tím, že má těžké chvosty (heavy tails). ( ***Kvantifikuje se pomocí indexu chvostu (tail index).) Je speciálním případem   t-rozdělení: C(μ,σ)=(Subscript[t, 1])(μ,σ). Pro k⟶∞ konverguje (Subscript[t, k])(μ,σ) k N(μ,(σ^2)) v distribuci. Momenty (Subscript[t, k]) existují jen do řádu k-1. Žádný moment Cauchyova rozdělení není konečný.

Porovnání s normálním rozdělením: pravděpodobnosti chvostů P(|X|>k) pro vybraná rozdělení, parametr polohy (location) μ=0 a parametr měřítka (scale) σ=1.

Text@TableForm[Table[{k,Probability[Abs[x]>k,x\[Distributed]CauchyDistribution[0.,1]],Probability[Abs[x]>k,x\[Distributed]StudentTDistribution[0.,1,5]],Probability[Abs[x]>k,x\[Distributed]StudentTDistribution[0.,1,10]],Probability[Abs[x]>k,x\[Distributed]NormalDistribution[0.,1]]},{k,{2,3,4,5}}],TableHeadings->{None,{"k","C(0,1)","(Subscript[t, 5])(0,1)","(Subscript[t, 10])(0,1)","N(0,1)"}}]

moments[StudentTDistribution[μ,σ,k]]

Kurtosis of the Student (Subscript[t, k])

Table[{k,((3 (-2+k))/(-4+k))},{k,{4.01,4.5,5,10,100}}]//N//TableForm

Manipulate[Show[Plot[PDF[StudentTDistribution[0,1,k],x],{x,-4,4},PlotRange->All,PlotStyle->Thick,AxesOrigin->{0,0}],Plot[PDF[NormalDistribution[],x],{x,-4,4},PlotStyle->{Red,Thick}]],{{k,5},1,30,Appearance->"Labeled"}]

Laplaceovo (dvojitě exponenciální) rozdělení

𝒟Laplace=LaplaceDistribution[μ,σ];
Row@{"Hustota  f(x;μ,σ) = ",PDF[𝒟Laplace,x]//FullSimplify}

Row@{moments[𝒟Laplace],"  ",moments[𝒟Laplace/.{μ->0,σ->1/(Sqrt[2])}]}

⟹ Špičatost je nezávislá na parametrech.

Porovnání s normálním rozdělením se stejným rozptylem

Show[Plot[PDF[𝒟Laplace/.{μ->0,σ->1/(Sqrt[2])},x],{x,-4,4},PlotStyle->Thick,AxesOrigin->{0,0}],Plot[PDF[NormalDistribution[],x],{x,-4,4},PlotStyle->{Red,Thick}]]

*Logistické rozdělení

𝒟Logistic=LogisticDistribution[μ,σ];
Row@{"Hustota  f(x;μ,σ) = ",PDF[𝒟Logistic,x]}

Row@{moments[𝒟Logistic],"  ",moments[(𝒟Logistic/.{μ->0,σ->((Sqrt[3])/π)})//Evaluate]}

Porovnání s normálním rozdělením se stejným rozptylem

Show[Plot[PDF[𝒟Logistic/.{μ->0,σ->((Sqrt[3])/π)},x],{x,-4,4},PlotStyle->Thick,AxesOrigin->{0,0}],Plot[PDF[NormalDistribution[],x],{x,-4,4},PlotStyle->{Red,Thick}]]

***Asymmetric Laplace distribution (ALD)

Jak z názvu patrné, jedná se o nesymetrické rozdělení.

Definice

Clear[AsymmetricLaplaceDistribution];Unprotect[Mean, Variance, StandardDeviation, Skewness, Kurtosis,
         PDF, CDF, ExpectedValue, DistributionParameterQ,
         DistributionDomainQ,DistributionDomain,
         CharacteristicFunction,Quantile,RandomReal];
AsymmetricLaplaceDistribution/: PDF[AsymmetricLaplaceDistribution[θ_,τ_,κ_],x_]:=((κ(Sqrt[2]))/(τ(1+(κ^2))))Which[x≥θ,Exp[-((κ(Sqrt[2]))/τ)(x-θ)],
			   x<θ,Exp[-((Sqrt[2])/(κ τ))(θ-x)]]
AsymmetricLaplaceDistribution/: CDF[AsymmetricLaplaceDistribution[θ_,τ_,κ_],x_]:=Which[x≤θ,(((E^(((Sqrt[2]) (x-θ))/(κ τ))) (κ^2))/(1+(κ^2))),
						 x>θ,((1-(E^(((Sqrt[2]) (-x+θ) κ)/τ))+(κ^2))/(1+(κ^2)))];
AsymmetricLaplaceDistribution/: Mean[AsymmetricLaplaceDistribution[θ_,τ_,κ_]]:=θ-(((-1+(κ^2)) τ)/((Sqrt[2]) κ))
AsymmetricLaplaceDistribution/: 
Variance[AsymmetricLaplaceDistribution[θ_,τ_,κ_]]:=(((1+(κ^4)) (τ^2))/(2 (κ^2)))
AsymmetricLaplaceDistribution/: 
StandardDeviation[AsymmetricLaplaceDistribution[θ_,τ_,κ_]]:=Sqrt[(((1+(κ^4)) (τ^2))/(2 (κ^2)))]
AsymmetricLaplaceDistribution/: 
Skewness[AsymmetricLaplaceDistribution[θ_,τ_,κ_]]:=((2 (1-(κ^6)))/((((κ^4)+1))^(3/2)))
AsymmetricLaplaceDistribution/: 
Kurtosis[AsymmetricLaplaceDistribution[θ_,τ_,κ_]]:=((9+6 (κ^4)+9 (κ^8))/(((1+(κ^4)))^2))
AsymmetricLaplaceDistribution/: Quantile[AsymmetricLaplaceDistribution[θ_,τ_,κ_],q_]:=
	Which[0<q≤((κ^2)/(1+(κ^2))),θ+((κ τ Log[q (1+(1/(κ^2)))])/(Sqrt[2])),
		  ((κ^2)/(1+(κ^2)))<q<1,θ-((τ Log[-(-1+q) (1+(κ^2))])/((Sqrt[2]) κ))]
AsymmetricLaplaceDistribution/: RandomReal[AsymmetricLaplaceDistribution[θ_,τ_,κ_]]:=Quantile[AsymmetricLaplaceDistribution[θ,τ,κ],Random[]]
Protect[Mean, Variance, StandardDeviation, Skewness, Kurtosis,
         PDF, CDF, ExpectedValue, DistributionParameterQ,
         DistributionDomainQ,DistributionDomain,
         CharacteristicFunction,Quantile,RandomReal];

Vlastnosti

𝒟AsymmetricLaplaceDistribution=AsymmetricLaplaceDistribution[θ,τ,κ];
Row@{"Hustota  f(x;θ,τ,κ) = ",PDF[𝒟AsymmetricLaplaceDistribution,x]}

moments[𝒟AsymmetricLaplaceDistribution]

Due to the three parameters the distribution is apparently flexible. Nevertheless its kurtosis is always high (≥6), which might be unsatisfactory in some practical situations.

Print["Minimal kurtosis is ", FindMinimum[Kurtosis[AsymmetricLaplaceDistribution[θ,τ,κ]],{κ,2}]//First//Round, " and is achieved for κ = ",κ/.(FindMinimum[Kurtosis[AsymmetricLaplaceDistribution[θ,τ,κ]],{κ,2}]//Last)//Round,"."]

Plot[{Skewness[AsymmetricLaplaceDistribution[θ,τ,κ]],Kurtosis[AsymmetricLaplaceDistribution[θ,τ,κ]]},{κ,0,3},AxesLabel->{"κ"," "}]

Manipulate [Plot[PDF[AsymmetricLaplaceDistribution[θ,τ,κ],y]//Evaluate,{y,-6,6},PlotPoints->70,PlotRange->All,PlotStyle->Thick],{{θ,0},-5,5,Appearance->"Labeled"},{{τ,4},0.1,5,Appearance->"Labeled"},{{κ,1},0.1,10,Appearance->"Labeled"},SaveDefinitions->True]

Směs rozdělení (Mixture distribution)

Směs rozdělení s distribučními funkcemi {(Subscript[F, 1]),...,(Subscript[F, K])} podle p={(Subscript[p, 1]),...,(Subscript[p, K])}, kde p je rozdělení pravděpodobností ((Subscript[p, 1])+...+(Subscript[p, K])=1, (Subscript[p, k])≥0) je rozdělení s distribuční funkcí

F=(Subscript[p, 1])(Subscript[F, 1])+...+(Subscript[p, K])(Subscript[F, K]).

Vektor p reprezentuje váhy. Ekvivalentně je možné definovat směs pomocí hustot {(Subscript[f, 1]),...,(Subscript[f, K])}:

f=(Subscript[p, 1])(Subscript[f, 1])+...+(Subscript[p, K])(Subscript[f, K]).

Výhodou je velká flexibilita (mnoho parametrů), což je zároveň i nevýhodou (problémy s identifikací parametrů, i při podstatně se lišících množinách parametrů mohou být rozdělení velmi blízká). S tím souvisí možné problémy při odhadech neznámých parametrů.

Pro taková rozdělení mohou hodnoty šikmosti a špičatosti nabývat i extrémních hodnot.

Příklad (směs tří normálních rozdělení s obecnými parametry a se “symetrickými” vahami)

Poznamenejme, že distribuční funkce N(μ,(σ^2)) je Φ((x-μ)/σ). Odpovídající distribuční funkce směsi je

F(x)=ε, Φ(((x-(Subscript[μ, 1]))/(Subscript[σ, 1])))+(1-2ε), Φ(((x-(Subscript[μ, 2]))/(Subscript[σ, 2])))+ε, Φ(((x-(Subscript[μ, 3]))/(Subscript[σ, 3]))) ,

kde 0<ε<(1/2). Symbolicky tuto směs zapisujeme ε,N((Subscript[μ, 1]),(Subscript[σ, 1]^2))+(1-2ε)N((Subscript[μ, 2]),(Subscript[σ, 2]^2))+ε,N((Subscript[μ, 3]),(Subscript[σ, 3]^2)).

Pro vytváření směsí použijeme zabudovanou funkci MixtureDistribution. V základním nastavení si všimněte hodnoty špičatosti.

Clear[𝒟3normals,μ1,μ2,μ3,σ1,σ2,σ3,σ,ε];
𝒟3normals[μ1_,μ2_,μ3_,σ1_,σ2_,σ3_,ε_]=MixtureDistribution[{ε,1-2 ε,ε},{NormalDistribution[μ1,σ1],NormalDistribution[μ2,σ2],NormalDistribution[μ3,σ3]}];
{Skewness[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]],kurtosis3normals=Kurtosis[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]]}//Simplify;
({Skewness[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]],Kurtosis[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]]}/.{σ1->σ,σ2->σ,σ3->σ})//Simplify;

moments[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]]

Manipulate[Column[{
Text@Style[Row[{"Mean:        ",Mean[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]],"        Variance: ",Variance[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]]}],Bold,16],
Text@Style[Row[{"Skewness: ",Skewness[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]],"     Kurtosis: ",Kurtosis[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]]}],Bold,16],
Show[Plot[PDF[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε],x],{x,-5,5},AxesOrigin->{0,0},PlotStyle->{Black,Thick},PlotRange->All,ImageSize->Large,PlotLabel->"Červeně je vyznačena hustota N(μ,σ) se stejnými parametry jako má směs."],Plot[PDF[NormalDistribution[μ,σ]/.{μ->Mean[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]],σ->StandardDeviation[𝒟3normals[μ1,μ2,μ3,σ1,σ2,σ3,ε]]},x]//Evaluate,{x,-4,4},PlotStyle->{Red,Thick}]]}],
{{μ1,-3.57},-4,4,Appearance->"Labeled"},
{{μ2,0},-4,4,Appearance->"Labeled"},
{{μ3,3},-4,4,Appearance->"Labeled"},
{{σ1,0.8},0.1,3,Appearance->"Labeled"},
{{σ2,0.2},0.1,3,Appearance->"Labeled"},
{{σ3,0.8},0.1,3,Appearance->"Labeled"},
{{ε,0.02},0.01,0.4,Appearance->"Labeled"},SaveDefinitions->True]

Příklad (směs tří normálních rozdělení s různými středními hodnotami, stejným rozptylem a se “symetrickými” vahami)

Clear[mixture];
mixture[dist1_,dist2_,dist3_,ε_]:=MixtureDistribution[{ε,1-2ε,ε},{dist1,dist2,dist3}]
𝒟3normalsEqualVariances[μ1_,μ2_,μ3_,σ_,ε_]=mixture[NormalDistribution[μ1,σ],NormalDistribution[μ2,σ],NormalDistribution[μ3,σ],ε]

Manipulate[Column[{
Text@Style[Row[{"Mean:        ",Mean[𝒟3normalsEqualVariances[μ1,μ2,μ3,σ,ε]],"        Variance: ",Variance[𝒟3normalsEqualVariances[μ1,μ2,μ3,σ,ε]]}],Bold,16],
Text@Style[Row[{"Skewness: ",Skewness[𝒟3normalsEqualVariances[μ1,μ2,μ3,σ,ε]],"     Kurtosis: ",Kurtosis[𝒟3normalsEqualVariances[μ1,μ2,μ3,σ,ε]]}],Bold,16],
(* Text@Style[Row[{"\n\n"}]], *)
Show[Plot[PDF[𝒟3normalsEqualVariances[μ1,μ2,μ3,σ,ε],x],{x,-5,5},AxesOrigin->{0,0},PlotStyle->{Black,Thick},PlotRange->All,ImageSize->Large,PlotLabel->"Červeně je vyznačena hustota N(μ,σ) se stejnými parametry jako má směs."],Plot[PDF[NormalDistribution[μ,σ]/.{μ->Mean[𝒟3normalsEqualVariances[μ1,μ2,μ3,σ,ε]],σ->StandardDeviation[𝒟3normalsEqualVariances[μ1,μ2,μ3,σ,ε]]},x]//Evaluate,{x,-4,4},PlotStyle->{Red,Thick}]]}],
{{μ1,-3},-4,4,Appearance->"Labeled"},
{{μ2,0},-4,4,Appearance->"Labeled"},
{{μ3,3},-4,4,Appearance->"Labeled"},
{{σ,0.51},0.1,3,Appearance->"Labeled"},
{{ε,0.04},0.001,0.4,Appearance->"Labeled"},SaveDefinitions->True]

**Meixnerovo rozdělení

𝒟Meixner=MeixnerDistribution[σ,b,μ,d];
Row@{"Hustota  f(x;σ,b,μ,d) = ",PDF[𝒟Meixner,x]//TraditionalForm}

Row@{moments[𝒟Meixner],"  "(*,moments[(𝒟Logistic/.{μ->0,σ->((Sqrt[3])/π)})//Evaluate]*)}

Porovnání s normálním rozdělením se stejnou střední hodnotou a stejným rozptylem

Manipulate[Show[Plot[PDF[MeixnerDistribution[σ,b,μ,d],x],{x,-15,15},PlotRange->All,PlotStyle->Thick,AxesOrigin->{0,0}],Plot[PDF[NormalDistribution[μ+d σ Tan[(b/2)],(((Sqrt[d]) σ Sec[(b/2)])/(Sqrt[2]))],x],{x,-15,15},PlotStyle->{Red,Thick},PlotRange->All]],{{σ,1.5},0.01,5,Appearance->"Labeled"},{{b,2.5},-π,π,Appearance->"Labeled"},{{μ,0},-0.1,0.1,Appearance->"Labeled"},{{d,0.9},0.1,1,Appearance->"Labeled"}]

Konec 8. 4. 2015

Lekce 9 (15. 4. 2015)

Míry rizika

Připomeneme, že za míru výnosnosti, krátce výnos považujeme za náhodnou veličinu a v daném kontextu označujeme ρ, (Subscript[ρ, t]) nebo ρ(t), potřebujeme-li vyjádřit závislost na čase (pozor na časové jednotky!). Náhodná veličina

L=-ρ ,              (Subscript[L, t])=(((Subscript[P, t])-(Subscript[P, t+1]))/(Subscript[P, t]))

se nazývá ztráta (loss) nebo také ztrátová náhodná veličina (loss random variable).

V praxi, je-li výnos ρ>0, jde o  zisk, je-li výnos ρ<0, jde o ztrátu, která se však také uvádí s kladným znaménkem, tj. uvádí se L.

Směrodatná odchylka, volatilita

Hodnota v riziku (Value at Risk, VaR)

Value at Risk at level 1-α (VaR)

Value at risk at level 1-α is simply the α-quantile of L, sometimes denoted by (Subscript[q, α]).

(Subscript[VaR, α])(L)=(F^(-1))(α)=inf{x:F(x)≥α}.

The usual interpretation is that loss will exceed (Subscript[VaR, α])(L) with a (small) probability 1-α with typical values of α=0.95, 0.99 or in some extreme cases even α=0.999. In practice the time horizons are one day or one week but often longer time horizons are of interest. These need a special care, however.

Hull, J. C.: Options, Futures, and Other Derivatives, 8th edition, p. 471: “Jsem si na X procent jist, že ztráta v příštích N dnech nebude vyšší než V dolarů.”

Zde X=α, V=(Subscript[VaR, α]).

**Poznámka

VaR není koherentní mírou rizika (coherent risk measure). Jeden z požadavků je subaditivita, a ten VaR nesplňuje. Pro koherentní míru rizika 𝔪 a ztráty (Subscript[L, 1]), (Subscript[L, 2]) musí platit 𝔪((Subscript[L, 1])+(Subscript[L, 2]))≤𝔪((Subscript[L, 1]))+𝔪((Subscript[L, 2])),  a to VaR obecně nesplňuje. Další požadavky na koherentní míru rizika jsou: invariance vůči posunutí: ∀ x∈ℝ  𝔪(L+x)=𝔪(L)+x, pozitivní homogenita: ∀ α>0  𝔪(α,L)=α,𝔪(L), monotonicita: (Subscript[L, 1])≤(Subscript[L, 2])⟹, 𝔪((Subscript[L, 1]))≤ ,𝔪((Subscript[L, 2])) .

Ilustrace

Data Apple

DateListPlot[Appleceny=FinancialData["AAPL",{{2011,1,1},{2015,3,27}}],Joined->True,PlotStyle->Thick,PlotLabel->"Apple Prices" ]
Applevynosy=FinancialData["AAPL","Return",{{2011,1,1},{2015,3,27}},"Value"] ;
Appleztraty=-Applevynosy;
SetDirectory[NotebookDirectory[]];
Export["Appleztraty.txt",Appleztraty,"Table"];

Charakteristiky

Row@{"Mean ",Mean[Appleztraty]," SD ",StandardDeviation[Appleztraty]," (Subscript[γ, 1]) ",Skewness[Appleztraty]," (Subscript[γ, 2]) ",Kurtosis[Appleztraty]}
Row@{"Min ",Min[Appleztraty]," Max ",Max[Appleztraty]}
Table[{1-α,Quantile[Appleztraty,α]},{α,{0.9,0.95,0.99}}]//TableForm
SmoothHistogram[Appleztraty,PlotStyle->Thick,PlotLabel->"Apple Losses\n"]

Příklad (parametrická hodnota v riziku)

Normální rozdělení

V našem případě nereálný předpoklad, jak jsme viděli zvláště na výběrové špičatosti. Nejprve odhadneme neznámé parametry na základě pozorování (odhadnuté parametry jsou prakticky totožné s výše uvedenými):

𝒟normalApple=EstimatedDistribution[Appleztraty,NormalDistribution[μ,σ]]

Denní VaR na konfidenčních úrovních 1-α= 0.1, 0.05, 0.01:

Text@TableForm[Table[{1-α,Quantile[𝒟normalApple,α],Quantile[Appleztraty,α]},{α,{0.9,0.95,0.99}}],TableHeadings->{None,{"1 - α","VaR (normal)","VaR (sample)"}}]

Interpretace: Pravděpodobnost, že denní ztráta překročí 4% je 0.01.

VaR na T dnů na konfidenční úrovni 1-α= 0.01 pro konstantní střední hodnotu (odhadnutou, (OverHat[μ ])=-0.0008249776975707769`:

Text@TableForm[Table[{T,Quantile[NormalDistribution[-0.000824978,0.0173639(Sqrt[T])],0.99]},{T,{1,2,5,10,252}}],TableHeadings->{None,{"T","VaR"}}]

VaR na T dnů na konfidenční úrovni 1-α= 0.01 pro střední hodnotu lineárně závislou na čase, (Subscript[(OverHat[μ ]), T])= (OverHat[μ ])T=-0.0008249776975707769` T:

Text@TableForm[Table[{T,Quantile[NormalDistribution[-0.000824978 T,0.0173639(Sqrt[T])],0.99]},{T,{1,2,5,10,252}}],TableHeadings->{None,{"T","VaR"}}]

t-rozdělení

Nejprve odhadneme neznámé parametry (včetně počtů stupňů volnosti ν)

𝒟StudentApple=EstimatedDistribution[Appleztraty,StudentTDistribution[μ,σ,ν]]

V tomto případě ((OverHat[ν]) >4) existují první 4 momenty. Odhad špičatosti je poněkud “přehnaný”, srovnej s empirickou špičatostí.

Row@{"Mean ",Mean[𝒟StudentApple]," SD ",StandardDeviation[𝒟StudentApple]," (Subscript[γ, 1]) ",Skewness[𝒟StudentApple]," (Subscript[γ, 2]) ",Kurtosis[𝒟StudentApple]}

Denní VaR na konfidenčních úrovních 1-α= 0.1, 0.05, 0.01:

Text@TableForm[Table[{1-α,Quantile[𝒟StudentApple,α],Quantile[𝒟normalApple,α],Quantile[Appleztraty,α]},{α,{0.9,0.95,0.99}}],TableHeadings->{None,{"1 - α","VaR (Student)","VaR (Normal)","VaR (sample)"}}]

Interpretace: Pravděpodobnost, že denní ztráta překročí 4.2% je 0.01.

Příklad (neparametrická hodnota v riziku)

VaR jako výběrový kvantil

Text@TableForm[Table[{1-α,Quantile[Appleztraty,α]},{α,{0.9,0.95,0.99}}],TableHeadings->{None,{"1 - α","VaR"}}]

Vidíme, že tyto výsledky jsou podobné jako při užití Studentova rozdělení.

VaR na základě (neparametrického) jádrového odhadu (kernel estimates) hustoty

𝒟KernelApple=SmoothKernelDistribution[Appleztraty]

Plot[PDF[𝒟KernelApple,x],{x,-0.07,0.07},PlotStyle->Thick]

Text@TableForm[Table[{1-α,Quantile[𝒟KernelApple,α],Quantile[Appleztraty,α]},{α,{0.9,0.95,0.99}}],TableHeadings->{None,{"1 - α","VaR (kernel)","VaR (sample)"}}]

***Volatilita

last50daysAppleceny=Take[FinancialData["AAPL",{{2011,1,1},{2014,5,5}}],-50];
last50daysApplevynosy=Take[FinancialData["AAPL","Return",{{2011,1,1},{2014,5,5}}],-50];
{StandardDeviation[Map[Last,last50daysAppleceny]],StandardDeviation[Map[Last,last50daysApplevynosy]],volatility20140505Apple50=FinancialData["AAPL","Volatility50Day"],StandardDeviation[Take[Map[Last,last50daysApplevynosy],-20]],volatility20140505Apple20=FinancialData["AAPL","Volatility20Day"]}

ListPlot[volatility20140505Apple50timeseries=FinancialData["AAPL","Volatility50Day",{2011,1,1}],Joined->True,PlotStyle->Thick,PlotLabel->"Apple Volatility 50 Day"]

Podmíněná hodnota v riziku (Conditonal VaR, CVaR, Tail VaR, TVaR, expected shortfall)

Conditional value at risk (also called Expected Shortfall (Očekávaná extrémní ztráta), Tail Conditional Expectation, Mean Excess Loss, Tail VaR) is the mean of the truncated distribution of L truncated at point (Subscript[VaR, α])(L) from the left:

(Subscript[CVaR, α])(L)=E{L|L≥(Subscript[VaR, α])(L)}.

Note that sometimes an analogue to the mean residual lifetime is considered:

(Subscript[CVaR, α])(L)-(Subscript[VaR, α])(L)=E{L-(Subscript[VaR, α])(L)|L≥(Subscript[VaR, α])(L)}.

For absolutely continuous distributions we have

(Subscript[CVaR, α])(L)=(1/(1-α))(∫_( (Subscript[Var, α])(L))^( ∞))y f(y)dy.

Procedury pro výpočet VaR a CVaR

**VaR

Information about admissible values of the parameters can be transferred through the option assuming.

Clear[VaR];
VaR[distribution_,α_,assuming___]:=Assuming[{assuming},Quantile[distribution,α]//Simplify]

**CVar

Clear[CVaR];
CVaR[distribution_,α_,assuming___]:=(1/(1-α))Assuming[{assuming},(∫_(VaR[distribution,α])^∞)y PDF[distribution,y]\[DifferentialD]y]//PowerExpand//Simplify

Clear[NCVaR];
NCVaR[distribution_,α_]:=(1/(1-α))NIntegrate[y PDF[distribution,y],{y,VaR[distribution,α],∞}]

CVaR[NormalDistribution[],α]

Příklad (parametrická CVaR)

Normální rozdělení

Denní CVaR na konfidenčních úrovních 1-α= 0.1, 0.05, 0.01:

Text@TableForm[Table[{1-α,Quantile[𝒟normalApple,α],NCVaR[𝒟normalApple,α]},{α,{0.9,0.95,0.99}}],TableHeadings->{None,{"1 - α","VaR","CVaR"}}]

Interpretace: Jestliže ztráta překročí 1%-ní VaR, pak v průměru bude 0.0435, (4.35% za den).

CVaR na T dnů na konfidenční úrovni 1-α= 0.01 pro konstantní střední hodnotu (odhadnutou, (OverHat[μ ])=-0.0008249776975707769`:

Text@TableForm[Table[{T,Quantile[NormalDistribution[-0.000824978,0.0173639(Sqrt[T])],0.99],NCVaR[NormalDistribution[-0.000824978,0.0173639(Sqrt[T])],0.99]},{T,{1,2,5,10,252}}],TableHeadings->{None,{"T","VaR","CVaR"}}]

CVaR na T dnů na konfidenční úrovni 1-α= 0.01 pro střední hodnotu lineárně závislou na čase, (Subscript[(OverHat[μ ]), T])= (OverHat[μ ])T=-0.0008249776975707769` T:

Text@TableForm[Table[{T,Quantile[NormalDistribution[-0.000824978 T,0.0173639(Sqrt[T])],0.99],NCVaR[NormalDistribution[-0.000824978 T,0.0173639(Sqrt[T])],0.99]},{T,{1,2,5,10,252}}],TableHeadings->{None,{"T","VaR","CVaR"}}]

t-rozdělení

Denní CVaR na konfidenčních úrovních 1-α= 0.1, 0.05, 0.01:

Text@TableForm[Table[{1-α,Quantile[𝒟StudentApple,α],NCVaR[𝒟StudentApple,α]},{α,{0.9,0.95,0.99}}],TableHeadings->{None,{"1 - α","VaR","CVaR"}}]

Interpretace: Jestliže ztráta překročí 1%-ní VaR, pak v průměru bude 0.06, (6% za den).

Příklad (neparametrická CVaR)

CVaR jako výběrový průměr pozorovaných hodnot překračujících odpovídající VaR.

Clear[CVaRsample];
CVaRsample[data_,α_]:=Mean[Select[data,#>Quantile[data,α]&]]

Porovnání výběrové VaR a výběrové CVaR:

Text@TableForm[Table[{1-α,Quantile[Appleztraty,α],CVaRsample[Appleztraty,α]},{α,{0.9,0.95,0.99}}],TableHeadings->{None,{"1 - α","VaR","CVaR"}}]

CVaR na základě (neparametrického) jádrového odhadu hustoty

Porovnání VaR a CVaR vypočítaných na základě jádrového odhadu hustoty:

Text@TableForm[Table[{1-α,Quantile[𝒟KernelApple,α],NCVaR[𝒟KernelApple,α]},{α,{0.9,0.95,0.99}}],TableHeadings->{None,{"1 - α","VaR","CVaR"}}]

***Průměrná, vážená průměrná, mediánová a kvantilová VaR

***Spektrální míry rizika

***Expektily (expectiles)

Konec 15. 4. 2015

Lekce 10 (22. 4. 2015)

Teorie portfolia 1

Portfolio: diverzifikace, eficientní trh

Výnos, očekávaný výnos, riziko portfolia

Příklad perfektně negativně korelovaných aktiv

Časové řady výnosů A a B [%]

returnsA={17,13,15,20,10,16,14,12,18};
returnsB=30-returnsA
ListPlot[{returnsA,returnsB},Joined->True,PlotTheme->"Business",PlotLabel->"Returns of assets A and B\n"]

Obě časové řady výnosů A a B mají stejný očekávaný výnos a rozptyl (a tedy i riziko)

{(Subscript[r, A]),(Subscript[r, B])}=Map[Mean,{returnsA,returnsB}]
Map[Variance,{returnsA,returnsB}]
Text@Row[{"Riziko:  ",(Sqrt[%])}]

Výnosy A a B jsou perfektně negativně korelované:

Correlation[returnsA,returnsB]

Portfolio x=((((1/2),(1/2)))^T)má očekávaný výnos

(Subscript[r, p])=(1/2)(Subscript[r, A])+(1/2)(Subscript[r, B])

Kovarianční matice výnosů

(covAB=Covariance[{returnsA,returnsB}//Transpose])//MatrixForm

rozptyl

{(1/2),(1/2)}.covAB.{(1/2),(1/2)}

Lekce 11 (29. 4. 2015)

Teorie portfolia 2

Example 9.2.1 from [1], p. 82

N=2, (Subscript[x, 2])=1-(Subscript[x, 1])

Clear[xx,rr,vv,x1,rp,varp];
(* portfolio *)
xx={x1,1-x1};
(* expected returns *)
rr={8,14};
(* variance matrix *)
vv[ρ_]:=(({{9, 18 ρ}, {18 ρ, 36}}))
(* expected return on the portfolio *)
Text@Row[{"Expected return (Subscript[r, p]):",Spacer[10],rp[x1_]=rr.xx}]
(* variance of the portfolio return: two equivalent expressions *)
Text@Row[{"Variance (Subscript[σ, p]^2) (two equivalent expressions):",Spacer[10],varp[x1_,ρ_]=xx.vv[ρ].xx//FullSimplify,"   or   ",
xx.vv[ρ].xx//Expand}]

Dependence between the expected return and risk are usually plotted in

risk-expected return plane
variance-expected return
standard-deviation - expected return-plane
the corresponding curve: eficient frontier, efficient portfolios

Manipulate[ParametricPlot[{(Sqrt[36-72 x1+45 (x1^2)+36 x1 ρ-36 (x1^2) ρ]),14-6 x1},{x1,0,1},AxesOrigin->{0,8},AspectRatio->3/4,AxesLabel->{Style["(Subscript[σ, p])",Italic,16],Style["(Subscript[r, p])",Italic,16]},AxesStyle->Directive[14],PlotPoints->50,PlotStyle->{Black,Thick,Dashing[0.01+0.01ρ]},PlotLabel->"Efficient Frontier"],{{ρ,0},-1,1,Appearance->"Labeled"},SaveDefinitions->True]

Eficientní hranice portfolia dvou aktiv:

Import["EfficientFrontier.eps"]

Globální portfolio s minimálním rozptylem
(Global Minimum Variance Portfolio, GMVP)

For |ρ|<1 the variance matrix is positive definite so that the variance of the portfolio is a positive definite quadratic form. The only minimum is at (Subscript[x, 1]) for which the derivative of (Subscript[σ, p]^2) is zero:

derivative=D[varp[x1,ρ],x1]//Simplify

Optimal GMVP (Subscript[x, G]^✶)=((((Subscript[x, 1]^✶),(Subscript[x, 2]^✶)))^T):

xxGMVP={x1GMVP,x2GMVP}={x1GMVP=(x1/.Solve[derivative==0,x1])//First,1-x1GMVP}//Simplify

The corresponding expected return and variance

{rGMVP=xxGMVP.rr,σ2GMVP=varp[x1GMVP,ρ]}//Simplify

No short sales is equivalent to 0≤(Subscript[x, 1]^✶)≤1. We find the corresponding ρ’s:

Reduce[0≤x1GMVP≤1∧-1≤ρ≤1,ρ]

Dependence of (Subscript[x, 1]^✶) on ρ:

Plot[((2 (-2+ρ))/(-5+4 ρ)),{ρ,-1,1},PlotRange->All,AspectRatio->3/4,AxesLabel->{Style["ρ",16],Style["(Subscript[x, 1]^✶)",Italic,16]}]

For ρ>(1/2) we must sell asset 2 short, in the extreme case ρ=1 we have (Subscript[x, 1]^✶)=2 and therefore (Subscript[x, 2]^✶)=-1.

Eficientní hranice: eficientní portfolia

SetDirectory[NotebookDirectory[]];
Import["Efficient_Frontier.pdf"]//First

Portfolia s minimálním rizikem:

Import["portfoliorisky2.eps"]

Konec 29. 4. 2015

Lekce 12 (6. 5. 2015)

Teorie portfolia 3

Portfolia s minimálním rizikem při existenci bezrizikového aktiva:

Import["portfolior2riskyplusriskless.eps"]

Sharpe ratio and Markowitz portfolio

SetDirectory[NotebookDirectory[]]

Data (Mesicni vynosy 5 akcii)

SetDirectory[NotebookDirectory[]]

i1=Import["Returns.csv"];
i2=Rest[Rest[i1]]

i3=Map[Rest,i2]
Covariance[i3]

Nemate-li ve svem adresari soubor "Returns.dat", pouzijte "tvrdy vstup":

d1={{(* pocet akcií = *)5},{"Month","AMR","BS","UTX","WX","Z"},{1,11.594`,1.515`,-1.579`,-9.36`,-0.408`},{2,22.078`,5.299`,9.947`,7.578`,0.`},{3,-8.511`,-8.`,9.446`,-16.327`,0.694`},{4,-3.488`,0.395`,5.164`,-8.571`,-3.862`},{5,-9.639`,-9.764`,-3.571`,-18.243`,-10.949`},{6,-12.`,6.195`,-0.943`,-11.57`,-8.197`},{7,-10.606`,-0.417`,-7.619`,-8.441`,-6.786`},{8,-1.695`,-6.276`,11.856`,-8.22`,-13.725`},{9,-12.069`,-9.091`,-3.286`,-10.227`,-2.273`},{10,27.451`,15.`,11.186`,-3.797`,2.791`},{11,-21.538`,-4.465`,6.55`,-4.021`,-8.14`},{12,-19.608`,-6.132`,8.75`,12.676`,-5.063`},{13,48.78`,27.156`,4.215`,12.5`,35.2`},{14,19.672`,-2.372`,7.355`,15.271`,12.121`},{15,1.37`,15.19`,13.889`,18.`,-0.901`},{16,4.054`,15.751`,17.073`,-0.847`,18.548`},{17,-15.584`,-9.81`,1.042`,23.884`,-10.958`},{18,3.077`,4.27`,20.833`,4.196`,14.912`},{19,-4.478`,-6.485`,-7.543`,-4.027`,-5.058`},{20,4.688`,11.679`,3.263`,-6.333`,4.918`},{21,-11.94`,-7.285`,3.189`,-18.939`,-3.125`},{22,-1.695`,-3.214`,-7.506`,-2.856`,27.742`},{23,15.517`,0.369`,-3.58`,5.882`,16.026`},{24,5.97`,-1.866`,-7.25`,-0.926`,-2.762`},{25,11.268`,26.616`,15.903`,16.822`,13.295`}};

Text@Grid[d1,Frame->All]

d1[[{1,2,3,4}]]
d2=Rest[d1];
d3=Rest[d2];
datareturns=Map[Rest,d3];
expected=Mean[datareturns]
(cov=Covariance[datareturns])//MatrixForm
(Correlation[datareturns])//MatrixForm

Vidíme, že (Subscript[μ, 3])>(Subscript[μ, 5]), ale (Subscript[σ, 3])<(Subscript[σ, 5]). Odporuje předpokladu eficientního trhu.

Pokud mate jiz aktivovane predchozi bunky, nasledujici odstavec neaktivujte!!!

SetDirectory[NotebookDirectory[]];
d1=Import["Returns.dat","Table"]
d1[[{1,2,3,4}]]
d2=Rest[d1];
d3=Rest[d2];
datareturns=Map[Rest,d3];
expected=Mean[datareturns]
(cov=Covariance[datareturns])//MatrixForm
(Correlation[datareturns])//MatrixForm

Sharpe Ratio and Markowitz Mean-Variance Portfolio

We assume that N assets have returns (rates of return)  expected returns given by the N×1 vector r and the covariance matrix of returns V. If the investor possesses the wealth 1, then she/he may distribute it among N tradable assets. The proportions of the invested amounts in the individual assets are expresed by the weights x=((((Subscript[x, 1]),...(Subscript[x, N])))^T) which is called portfolio. We will seek the optimal portfolio in the sense that the Sharpe's ratio (also called Sharpe's measure of portfolio) is maximum:

max(((x^T)r)/(Sqrt[(x^T)Vx]))    subject to conditions    x≥0and(∑_(n=1)^N)(Subscript[x, n])=1,

so that short sales are not allowed.

Example 1 (short sales allowed)

Clear[xx];
xx=Table[Unique[],{Length[expected]}]

Uloha je invariantni vzhledem ke kladnemu nasobku, resime zatim bez omezujici normovaci podminky.

crit1=((xx.expected)/(Sqrt[xx.cov.xx]))//Simplify

?Max*

Maximize (* will always find a global maximum *)

?NMax*

NMaximize

?FindMaximum

sol11=NMaximize[crit1,xx]

Normovani

xa=xx/.sol11[[2]]
xnorm=xa/Total[xa]
Total[xnorm]

Hodnota kriteria

val1=(crit1/.{xx->xnorm//Thread})//First

{First[val1],val1[[1]]}

Example 2 (short sales not allowed)

Warning: The following example does not work under Mathematica 10.0.1!!!

ineq=xx≥0//Thread
ineq=Apply[And,ineq]&&Total[xx]==1

sol2=NMaximize[{crit1,ineq},xx]
Total[xx/.sol2[[2]]]

(xx/.Last[sol2])//Chop

Example 2 (Revisited)

Aktiva nesplnuji predpoklady efektivniho trhu (hned první dvě aktiva, první má menší očekávaný výnos než druhé, ale větší riziko), takze investor nemusi ani vyuzit veskere disponibilni bohatstvi a presto dosahne stejne hodnoty cilove funkce (optimalizacniho kriteria). 1. aktivum ma mensi ocekavany vynos nez 2. aktivum, ale riziko ma vetsi. Aktivum s nejvyšším očekávaným výnosem má nejmenší rozptyl.

expected
Diagonal[cov]
Text@Grid[Prepend[{expected,Diagonal[cov]}//Transpose//Sort,{"Exp. Return","Variance"}],Frame->True,Dividers->{{True,True},{True,True}}]

ineq2=xx≥0//Thread
ineq2=Apply[And,ineq2]&&Total[xx]≤1
sol2r=NMaximize[{crit1,ineq2},xx]
Total[xx/.sol2r[[2]]]

Ale

(xx/.sol2r[[2]]).expected

zatimco v predchozim pripade

(xx/.Last[sol2]).expected

Example 3a (Markowitz) Portfolio with prescribed expected return and minimum risk, short sales not allowed)

expected
Diagonal[cov]

crit3=xx.cov.xx//Simplify
cons3=Apply[And,Thread[xx≥0]]&&Total[xx]==1&&xx.expected==4

sol3=NMinimize[{crit3,cons3},xx]

Total[xx3=xx/.Last[sol3]]

{xx3,expected,(Sqrt[Diagonal[cov]])}//Chop//TableForm

xx3.expected

Example 3b (inequality instead of equality)

crit3b=xx.cov.xx//Simplify;
cons3b=Apply[And,Thread[xx≥0]]&&Total[xx]≤ 1&&xx.expected==4;
sol3b=NMinimize[{crit3b,cons3b},xx]
Total[xx3b=xx/.Last[sol3b]]
xx3b.expected

Example 3c (inequalities instead of equalities)

crit3c=xx.cov.xx//Simplify;
cons3c=Apply[And,Thread[xx≥0]]&&Total[xx]≤ 1&&xx.expected≥4;
sol3c=NMinimize[{crit3c,cons3c},xx]
Total[xx3c=xx/.Last[sol3c]]
xx3c
xx3c.expected

Unfeasible requirement
(Neither of the assets reaches the expected return reaches 4.3.)

crit34=xx.cov.xx//Simplify;
cons34=Apply[And,Thread[xx≥0]]&&Total[xx]==1&&xx.expected≥ 4.3;
sol3=NMinimize[{crit34,cons34},xx]

Example 4

We have 8 assets traded on Prague Stock Exchange with the expected returns

returns={-9.92488533927622*10^-04,5.72524775783378*10^-03,9.04818959590086*10^-03,-1.44968966764537*10^-03,-1.74045537023702*10^-02,5.70188394543127*10^-03,3.33476815091662*10^-03,2.15075479228363*10^-03};

and the covariance matrix of returns

covariancematrix={{1.35640293495777*10^-03,2.56330097904098*10^-04,3.33037161321956*10^-04,1.80223328810003*10^-04,2.81325992644196*10^-04,5.93263545509886*10^-04,7.13610711759175*10^-04,3.20932535820455*10^-04},{2.56330097904098*10^-04,2.35439634554186*10^-03,4.42407197078591*10^-04,6.57567906193998*10^-06,4.01068448708833*10^-04,5.93785356343409*10^-04,1.30961261626908*10^-04,2.93338399396577*10^-04},{3.33037161321956*10^-04,4.42407197078591*10^-04,1.57895651834543*10^-03,-1.16804549527263*10^-04,1.85336104268171*10^-04,.000176059157865,3.41400743910472*10^-04,1.86624552570071*10^-04},{1.80223328810003*10^-04,6.57567906193998*10^-06,-1.16804549527263*10^-04,6.16786555694974*10^-03,4.84828341822248*10^-04,8.50333422445824*10^-04,7.74803938060802*10^-05,4.39412705238888*10^-04},{2.81325992644196*10^-04,4.01068448708833*10^-04,1.85336104268171*10^-04,4.84828341822248*10^-04,9.45147795376653*10^-03,1.78331918975426*10^-03,5.0987274991634*10^-05,1.49823427374484*10^-03},{5.93263545509886*10^-04,5.93785356343409*10^-04,.000176059157865,8.50333422445824*10^-04,1.78331918975426*10^-03,7.38754498647722*10^-03,1.03084013803777*10^-03,9.34434830622224*10^-04},{7.13610711759175*10^-04,1.30961261626908*10^-04,3.41400743910472*10^-04,7.74803938060802*10^-05,5.0987274991634*10^-05,1.03084013803777*10^-03,2.1036055256453*10^-03,2.40818723671803*10^-04},{3.20932535820455*10^-04,2.93338399396577*10^-04,1.86624552570071*10^-04,4.39412705238888*10^-04,1.49823427374484*10^-03,9.34434830622224*10^-04,2.40818723671803*10^-04,2.77726103166242*10^-03}};

We see that the above matrix is badly conditioned:

Det[covariancematrix]

Correlation matrix

((Sqrt[DiagonalMatrix[1/Diagonal[covariancematrix]]]).covariancematrix.(Sqrt[DiagonalMatrix[1/Diagonal[covariancematrix]]]))//MatrixForm

xxPS=Table[(Subscript[x, i]),{i,1,Length[returns]}]

The criterion is given by

criterion=(((xxPS.returns))/(Sqrt[xxPS.covariancematrix.xxPS]))//Simplify;

The constraints are

constraints1=Apply[And,Table[(Subscript[x, i])≥ 0,{i,1,Length[returns]}]];
constraints2=Total[xxPS]==1;
constraints=constraints1&&(constraints2)

Next we solve the problem using the option for the method:

soldif=NMaximize[{criterion,constraints},xxPS](*,Method->"DifferentialEvolution"]*)

soldif=NMaximize[{criterion,constraints},xxPS,Method->"DifferentialEvolution"]

Porovnani metod

Map[{#,NMaximize[{criterion,constraints},xxPS,Method->#]}&,{"DifferentialEvolution","NelderMead","SimulatedAnnealing","RandomSearch"}]//TableForm

Total[xxPS/.soldif[[2]]]
Print["Expected return of the optimal portfolio = ",(xxPS/.soldif[[2]]).returns]

Looking on the criterion, we see that the solution is independent of a nonzero multiple. So we can suspend the second constraint and make the

constraints3=Apply[And,Table[(Subscript[x, i])≥ 0,{i,1,Length[returns]}]]

soldif=NMaximize[{criterion,constraints3},xxPS ]

We see that the optimal value is slightly higher than in the above case. The optimal portfolio together with its expected return (substantially higher than in the previous case) is simply obtained:

sol=xxPS/.soldif[[2]];
sol=sol/Apply[Plus,sol]
sol.returns

Lagrange multipliers

Example 3 (Markowitz, short sales allowed, μ prescribed expected return)

Clear[n,ones,xx,λ1,λ2,μ];
n=Length[expected];
ones=Table[1,{n}];
xx=Table[Unique[],{n}]
lagrange=(1/2)xx.cov.xx+λ1*(1-ones.xx)+λ2*(μ-expected.xx)//Simplify

Map[D[lagrange,#]&,xx]

expected
μ=3;
(* !!!! *)
eq1=Map[D[lagrange,#]&,xxx={xx,λ1,λ2}//Flatten]==0
Take[Flatten[xxx/.Solve[eq1,xxx]],Length[xx]]

Capital Asset Pricing Model (CAPM)

Tržní portfolio, Market portfolio (New Jan 6, 2015)

Zde je mj. matematická formulace tržního portfolia.

Hyperlink[Button[" Tržní portfolio v modelu CAPM "],"http://www.karlin.mff.cuni.cz/~hurt/Market_Portfolio_in_CAPM.pdf"]

Vynechat poznámku 7. 1. 1. na poslední straně.

Security Market Line

[3] Cipra, T.: Matematika cenných papírů. Kamil Mařík Professional Publishing. Praha 2013.

Capital Market Line

Lekce 13. 5. 2015 odpadá, Rektorský den

Lekce 13 (20. 5. 2015)

Hodnocení investic (Investice s pevným výnosem)

Zde budeme finanční investice hodnotit současnou hodnotou, případně střední hodnotou současné hodnoty.

Investice s pevným výnosem

Pozor, definice se v různých pramenech liší!!!

Cenné papíry (securities) s pevným výnosem, fixed-income securities jsou obvykle obchodovatelné finanční nástroje, které poskytují jejich vlastníkovi jistým způsobem definovaný příjem (tj.  peněžní tok) během určitého časového období. Pro investory jsou důležité, neboť vlastně definují  peněžní trh, poskytují zpětnou vazbu prostřednictvím informace o ceně peněz a většina investorů se více méně musí na peněžním trhu angažovat.

V minulosti pevný výnos skutečně zaručoval vlastníkovi příslušného ceného papíru pevný výnos, pomineme-li ovšem selhání emitenta (default) (dlužníka). V současnosti je pojem pevný výnos nutno brát s jistou rezervou. Většina emitentů nyní totiž váže výplaty úroků na nějakou obecně dobře kontrolovatelnou veličinu jako je např. depozitní úroková sazba centrální banky, mezibankovní úroková míra typu PRIBOR, LIBOR, případně jiná dohodnutá referenční sazba, méně již míra inflace apod. Obecně však platí, že cenné papíry s pevným výnosem poskytují zafixovaný peněžní tok až na dobře definované náhodné výjimky. Budeme tedy za cenné papíry s pevným výnosem považovat cenné papíry s předem definovanou strukturou posloupnosti plateb s tím, že některé platby jsou závislé na exogenních faktorech, které pravděpodobně žádná ze stran kontraktu nemůže významně ovlivnit.

Kupónové obligace (dluhopisy, bonds)

Označení

Terminologie je nejednotná, často zavádějící. Uvádíme řadu možností. Největší problémy asi činí rozdíl mezi výnosem do splatnosti a výnosem (ve smyslu hodnotící úrokové míry).

Fair = dirty = gross = hrubá = spravedlivá cena, hodnota (price, full value),
clean = pure = čistá cena (clean price, value) 
t ... hodnotící čas, settlement
T ... splatnost (maturita)
i ... hodnotící úroková míra (tržní úroková míra, někdy nazývaná výnos, yield resp. požadovaný výnos, neplést s výnosem do splatnosti!)
v=1/(1+i) ... diskontní faktor
c=C/F... kuponova sazba!!!
n ... počet období do splatnosti n=T-t, invertovaný čas; n=0 je okamžik splatnosti (vypršení, maturity), předpokládáme t<T
A,(Subscript[I, i]) ... alikvótní úrok (alikvótní úrokový výnos, AUV, Accrued Interest, AI) při úrokové míře i (v [1] jsou vzorce pro AI špatně)
YTM ... výnos do splatnosti, yield to maturity, implied yield to maturity

Hodnocení obligací (dluhopisů)

Obligace s maturitou T roků (všude předpokládáme T∈ℕ) a nominální hodnotou F  emitovaná v čase 0 vyplácí kupóny ve výši C v časech 1,...,T. Nominální hodnota je splatná taktéž v čase T. Pro držitele obligace po celou dobu její životnosti je odpovídající peněžní tok:

Import["Cashflowofabond.pdf"]//First

Obligace je však obchodovatelný cenný papír, nutno znát jeho hodnotu v libovolném čase do splatnosti  t<T. Situace je poněkud komplikována administrativními důvody (v tomto případě pochopitelnými, nutno evidovat řádově tisíce držitelů): Emitent stanoví datum ex-kupónu (Subscript[t, ex]), tj. datum, od kterého je dluhopis obchodován bez nejbližšího následujícího kupónu. (The ex coupon date is the first day the bond starts trading without the coupon attached to it.) Datum ex-kupónu je obvykle několik dnů před výplatou kupónu, typicky 14 dnů. Na obrázku je hodnotící čas t∉ℕ, t<(Subscript[t, ex]). Držiteli obligace tedy náleží kupóny v časech ⌊t⌋+1,⌊t⌋+2,...,T-1,T, celkem tedy T-⌊t⌋ kupónů. Od času (Subscript[t, ex])  jsou vypláceny kupóny v časech ⌊t⌋+2,...,T-1,T. V dalším uvedeme spravedlivé ceny obligace ve všech možných případech.

Import["CashflowofabondValuation.eps"]

V dalším užíváme elementární vztahy mezi celou ⌊⌋, zlomkovou částí {} a stropem ⌈⌉, zdůrazněme T celé.

t=⌊t⌋+{t} ,  ⌊T-t⌋=T-⌈t⌉,   ⌊t⌋+1-t=1-{t}.

Spravedlivá cena obligace: t∉ℕ, t<(Subscript[t, ex])

P,V=C,(v^(⌊t⌋+1-t))+C,(v^(⌊t⌋+2-t))+...+(Cv^(T-1-t))+(C+F)(v^(T-t))=
C,(v^(1-{t}))((1-(v^(T-⌊t⌋)))/(1-v))+F,,(v^(T-t))

Spravedlivá cena cena obligace: t∉ℕ, (Subscript[t, ex])≤t≤⌊t⌋+1

P,V=C,(v^(⌊t⌋+2-t))+C,(v^(⌊t⌋+3-t))+...+(Cv^(T-1-t))+(C+F)(v^(T-t))=
C,(v^(2-{t}))((1-(v^(T-⌊t⌋-1)))/(1-v))+F,,(v^(T-t))

Spravedlivá cena cena obligace: t∈ℕ, v čase t se pochopitelně žádný kupón nevyplácí

P,V=C,v+C,(v^2)+...+(Cv^(T-1-t))+(C+F)(v^(T-t))=
C,v((1-(v^(T-t)))/(1-v))+F,,(v^(T-t))

Čistá cena (t=0, kupóny se vyplácejí v okamžicích t=1,2,...,T):

P,(Subscript[V, p])=C,v+C,(v^2)...+(C+F)(v^T)=C,(∑_(j=1)^T)(v^j)+F,(v^T)=((C,,v((v^T)-1))/(v-1))+F,(v^T)=(C/i)+(1/(((1+i))^T))(F-(C/i))

**Procedury pro hodnocení obligací (dluhopisů)

⚠

V následujících třech procedurách se používá invertovaný čas n=T-t. Vzorec pro výpočet čisté ceny (použito v proceduře cleanvalue pro výpočet čisté hodnoty):

Procedury pro spravedlivou (dirty) cenu, čistou (clean) cenu a alikvótní úrok:

Clear[dirtyvalue,cleanvalue,accruedinterest];
{(dirtyvalue[c_,F_,n_,i_]=Module[{v},
c F  (v^(n-⌊n⌋))(If[⌊n⌋-n==0,0,1]+ (∑_(j=1)^(⌊n⌋))(v^j))+F (v^n)/.v->(1/(1+i))]//FullSimplify[#,Assumptions->i>-1]&),
(cleanvalue[c_,F_,n_,i_]=Module[{v},F ((v^n)+((c v ((v^n)-1))/(v-1)))/.v->(1/(1+i))]//FullSimplify[#,Assumptions->i>-1]&),
(accruedinterest[c_,F_,n_,i_]=
((c F (-1+(((1+i))^(1-n+Floor[n]))))/i))}//TraditionalForm

Skutečně pro alikvótní úrok platí:

dirtyvalue[c,F,n,i]-cleanvalue[c,F,n,i]//FullSimplify[#,Assumptions->i>-1]&//TraditionalForm

Ve finančním tisku se většinou uvádí hodnota A,I(Subscript[,, 0]):=C(1-{n}), nebere se v potaz hodnotící úroková míra. Ve všech případech je 0≤A,(Subscript[I, i])≤1 a 0≤A,(Subscript[I, 0])≤1.

Limit[((c F (-1+(((1+i))^(1-n+Floor[n]))))/i),i->0]//FullSimplify[#1,Assumptions->n≥0]&//TraditionalForm

Rozdíl mezi A,(Subscript[I, i]) a A,(Subscript[I, 0]):

Manipulate[Plot[({c F t,accruedinterest[c,F,1-t,i]}/.{F->1})//Evaluate,{t,0,1},PlotPoints->500,Exclusions->None,AxesLabel->{t,AI},PlotLabel->"AI a (Subscript[AI, 0])",PlotStyle->{{Dashed,Thick},{Orange,Thick}}],
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{i,0.5,"i"},0.01,0.50,0.01,Appearance->"Labeled"},SaveDefinitions->True]

A,(Subscript[I, 0])-A,(Subscript[I, i]); Derivace podle t je pro i>0 záporná, takže ∀0<t<1 je A,(Subscript[I, 0])>A,(Subscript[I, i]). (Srovnejte s analogickým výsledkem pro současnou hodnotu při úročení jednoduchém a složeném a úrokovém období kratší jednoho roku.)

dif=(c F t-accruedinterest[c,F,1-t,i]/.{F->1})//FullSimplify[#,Assumptions->i>0∧c>0∧0<t<1]&
D[dif,t]

Výnos do splatnosti (YTM) je definován jako IRR (vnitřní míra výnosnosti) peněžního toku {-MP,C,...,C,C+F}, kde MP je pořizovací cena (tržní cena, market price).

Clear[YTMdirty];
(* Používá se počáteční aproximace Hawawini & Vora, viz [3], str. 42 *)
YTMdirty[MP_,c_,F_,n_]:=Module[{ytm0=((c F+(F-MP)/n)/(0.6 MP+0.4 F)),ytm},
{ytm0,ytm/.FindRoot[dirtyvalue[c,F,n,ytm]==MP,{ytm,ytm0}]}(*//Last*)]

Manipulate[Plot[YTMdirty[MP,c,F,T-t],{t,0,0.9T},PlotPoints->500,Exclusions->None,AxesLabel->{t,YTM},PlotStyle->Thick,PlotRange->{{0,T},{0,0.2F}}],
{{T,10,"T",Appearance->"Labeled"},1,30,1,Appearance->"Labeled"},
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{F,1,"F"},1,10,Appearance->"Labeled"},
{{MP,F+c F,"MP"},0.4F,1.4F,0.05F,Appearance->"Labeled"},
SaveDefinitions->True]

Clear[YTMclean];
(* Používá se počáteční aproximace Hawawini & Vora, viz [3], str. 42 *)
YTMclean[MP_,c_,F_,n_]:=Module[{ytm0=((c F+(F-MP)/n)/(0.6 MP+0.4 F)),ytm},
{ytm0,ytm/.FindRoot[cleanvalue[c,F,n,ytm]==MP,{ytm,ytm0}]}(*//Last*)]

Manipulate[Plot[YTMclean[MP,c,F,T-t],{t,0,0.9T},PlotPoints->500,Exclusions->None,AxesLabel->{t,YTM},PlotStyle->Thick,PlotRange->{{0,T},{0,0.2F}}],
{{T,10,"T",Appearance->"Labeled"},1,30,1,Appearance->"Labeled"},
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{F,1,"F"},1,10,Appearance->"Labeled"},
{{MP,F+c F,"MP"},0.4F,1.4F,0.05F,Appearance->"Labeled"},
SaveDefinitions->True]

Příklad

Znázornění ve skutečném (a ne invertovaném) čase:

Kuponova obligace s kuponovou sazbou c=0.1, splatnost T=10, nominalni hodnota F=1, hodnotici urokova sazba i=0.15, tj. diskontni obligace.

p12=Plot[{dirtyvalue[0.1,1,10-n,0.15],cleanvalue[0.1,1,10-n,0.15]},{n,0,10},Exclusions->None,PlotPoints->500,PlotStyle->Thick,AxesLabel->{t,PV}]

Kuponova obligace s kuponovou sazbou c=0.1, splatnost T=10, nominalni hodnota F=1, hodnotici urokova sazba i=0.1.

p3=Plot[dirtyvalue[0.1,1,10-n,0.1],{n,0,10},Exclusions->None,PlotStyle->{{Dashing[{0.01,0.01}],Black,Thick}},AxesLabel->{t,PV}]

Kuponova obligace s kuponovou sazbou c=0.1, splatnost T=10, nominalni hodnota F=1, hodnotici urokova sazba i=0.05, tj. premiova obligace.

p45=Plot[{dirtyvalue[0.1,1,10-n,0.05],cleanvalue[0.1,1,10-n,0.05]},{n,0,10},PlotPoints->500,Exclusions->None,PlotStyle->Thick,AxesLabel->{t,PV}]

Show[p12,p3,p45,PlotRange->All]

Obecně

Manipulate[Plot[{dirtyvalue[c,f,T-t,i],cleanvalue[c,f,T-t,i],cleanvalue[c,f,T-t,c]},{t,0,T},PlotPoints->500,Exclusions->None,AxesLabel->{t,PV},PlotStyle->Thick,PlotRange->{{0,T},{0,2f}}],
{{T,10,"T",Appearance->"Labeled"},5,30,1,Appearance->"Labeled"},
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{f,1,"F"},1,1000,50,Appearance->"Labeled"},
{{i,0.15,"i"},0.01,0.20,0.01,Appearance->"Labeled"},SaveDefinitions->True]

Alikvótní úrok (Všimněte si, že změny úrokové míry se na grafu neprojeví.)

Manipulate[Plot[{dirtyvalue[c,f,T-t,i]-cleanvalue[c,f,T-t,i]},{t,0,T},PlotPoints->500,Exclusions->None,PlotStyle->Thick,AxesLabel->{t,AI},PlotLabel->"Alikvótní úrok",PlotRange->{{0,T},{0,0.22 f}}],
{{T,10,"T",Appearance->"Labeled"},1,30,1,Appearance->"Labeled"},
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{f,1,"F"},1,1000,50,Appearance->"Labeled"},
{{i,0.15,"i"},0.01,0.20,0.01,Appearance->"Labeled"},SaveDefinitions->True]

Konec 7. 5. 2014

Duration of a coupon bond

Definice durace kuponove obligace

((c F(∑_(j=1)^n)j (v^j)+F n (v^n))/(c F(∑_(j=1)^n) (v^j)+F  (v^n)))/.v->(1/(1+i))//PowerExpand//FullSimplify

Clear[cleanduration,dirtyduration,v];
(cleanduration[c_,F_,n_,i_]=1+(1/i)-((1+i+c n-i n)/(i+c (-1+(((1+i))^n))))//FullSimplify[#,Assumptions->i>-1]&)//TraditionalForm
(dirtyduration[c_,F_,n_,i_]=((c F (∑_(j=0)^(⌊n⌋)) (n-⌊n⌋+j) (v^(n-⌊n⌋+j))+F n (v^n))/(c F (v^(n-⌊n⌋)) (∑_(j=0)^(⌊n⌋))(v^j)+F (v^n))/.v->(1/(1+i)))//FullSimplify[#,Assumptions->i>-1]&)//TraditionalForm

Plot[{dirtyduration[0.1,1,10-t,0.15],cleanduration[0.1,1,10-t,0.15]},{t,0,10},PlotPoints->500,Exclusions->None]

Plot[{dirtyduration[0.1,1,10-n,0.05],cleanduration[0.1,1,10-n,0.05]},{n,0,10},PlotPoints->500,Exclusions->None]

* Mathematica funkce FinancialBond (obligace, dluhopis)

Tento odstavec slouží k procvičení.

*Popis zabudované funkce

FinancialBond (* Označte kursorem a stiskněte F1 *)

Označení: “FaceValue” nominální hodnota F, “Coupon” kuponova sazba c, “Maturity” doba do splatnosti od okamziku vydani T, “Settlement” hodnotici okamzik t, “InterestRate” hodnotici urokova mira r, trzni urokova mira pro srovnatelnou investici, cenu kapitalu, “CouponInterval” rocni frekvence vyplaty kuponu 1/f, (f=2 znamena dvakrat rocne), “DayCountBasis” kalendářová konvence, “AccruedInterest” alikvotni urok, “Value” clean value, “FullValue” dirty value.

POZOR NA SYNTAXI!!! PRI RESENI ULOH ZKOPIRUJTE Z HELPU!!!

propertiesFinancialBond=FinancialBond["Properties"]

Poznamka: Properties:

({{"Value", price adjusted for accrued interest}, {"FullValue", unadjusted price}, {"AccruedInterest", accrued interest at settlement}, {"Duration", Macaulay duration}, {"ModifiedDuration", modified duration}, {"Convexity", convexity}, {"CouponPeriodDays", days in coupon period containing the settlement}, {"CouponToSettlementDays", days from previous coupon to settlement}, {"SettlementToCouponDays", days from settlement to next coupon}, {"NextCouponDate", next coupon date}, {"PreviousCouponDate", previous coupon date}, {"RemainingCoupons", remaining coupon payments}})

1 Příklad (numerický)

Současná hodnotící úroková míra je  6%. Jaká je spravedlivá cena kuponové obligace splatné za 30 let s roční kuponovou sazbou 5.75% a nominální hodnotou 1000Kč?

FinancialBond[{"FaceValue"->1000,"Coupon"->0.0575,"Maturity"->30},{"InterestRate"->0.06,"Settlement"->0}]

2 Příklad (numerický)

10 - letá obligace, nominální hodnota 1000Kč, kupon dvakrát ročně, kupon 5.75% p.a., hodnocená 9 měsíců po vydání, hodnotící úr. míra r=5% p.a.:

FinancialBond[{"FaceValue"->1000,"Coupon"->0.0575,"Maturity"->10,"CouponInterval"->(1/2)},{"InterestRate"->0.05,"Settlement"->(9/12)}]

3 Příklad (numerický)

F=1000, c=0.04, kupon ctvrtletni, splatnost 31. 12. 2030, hodnocena ke dni 5. 9. 2013, r=0.06.

FinancialBond[{"FaceValue"->1000,"Coupon"->0.04,"Maturity"->{2030,12,31},"CouponInterval"->(1/4)},{"InterestRate"->.06,"Settlement"->{2013,9,5}}]

Graficky v zavislosti na hodnotici urokove mire:

Plot[FinancialBond[{"FaceValue"->1000,"Coupon"->0.04,"Maturity"->{2030,12,31},"CouponInterval"->(1/4)},{"InterestRate"->r,"Settlement"->{2013,9,5}}],{r,0.03,0.05}]

4 Priklad (alikvótní úrok)

Alikvotni urok pri kalendari "Actual/360". Ostatni je zrejme z predchoziho vykladu.

FinancialBond[{"FaceValue"->1000,"Coupon"->0.07,"Maturity"->{2030,12,31},"CouponInterval"->(1/2)},{"InterestRate"->0.06,"Settlement"->{2010,11,12},"DayCountBasis"->"Actual/360"},"AccruedInterest"]

ListPlot[Table[FinancialBond[{"FaceValue"->1000,"Coupon"->0.07,"Maturity"->{2030,12,31},"CouponInterval"->(1/2)},{"InterestRate"->0.06,"Settlement"->{2010,11,d},"DayCountBasis"->"Actual/360"},"AccruedInterest"],{d,1,30}]]

Cviceni:
Graficky znazornete alikvotni urok jako funkci hodnoticiho data pro obdobi 1.11.2010 az 31.12.2013. Navod: Pouzijte funkci DaysPlus.

5 Příklad (výnos do splatnosti)

Vynos do splatnosti (YTM, Yield To Maturity, zde nazyvany “Implied yield to maturity”) obligace, ktera se 3.5.2013 prodavala za trzni cenu 900.

FindRoot[FinancialBond[{"FaceValue"->1000,"Coupon"->0.05,"Maturity"->{2018,6,31},"CouponInterval"->(1/4)},{"InterestRate"->ytm,"Settlement"->{2013,5,3}}]==900,{ytm,.1}]

6a Příklad (explicitni vzorce)

Je mozne ziskat i explicitni vzorce:

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t}]//Apart//TraditionalForm

Value

(value=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},"Value"])//Apart//FullSimplify//TraditionalForm

FullValue

(fullvalue=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},"FullValue"])//Apart//TraditionalForm

Alikvótní úrok

(accrued=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},"AccruedInterest"])//Apart//TraditionalForm

fullvalue-value//FullSimplify//TraditionalForm

fullvalue-value==accrued//FullSimplify

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->5},{"InterestRate"->r,"Settlement"->0}]
%//Apart//TraditionalForm

6b Příklad (explicitni vzorce pro vsechny vlastnosti)

propertiesFinancialBond

Map[{#,FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},#]//FullSimplify}&,propertiesFinancialBond]//TableForm

7 Příklad (Durace, konvexita)

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->0},"Duration"]//Simplify

Podobně konvexita, místo “Duration” použít “Convexity”.

8 Příklad (Hodnoceni pri uziti urokovych mer ze spotove vynosove krivky)

vynosovakrivka=Thread[Range[5]->Table[(Subscript[R, i]),{i,5}]]

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->5},{"InterestRate"->vynosovakrivka,"Settlement"->0}]
%//Apart//TraditionalForm

***9 Příklad (Nahodna urokova mira)

pricer=FinancialBond[{"FaceValue"->1000,"RedemptionValue"->1100,"Coupon"->0.07`,"Maturity"->5,"CouponInterval"->(1/2)},{"InterestRate"->r,"Settlement"->0}]

Expectation[pricer,r\[Distributed]NormalDistribution[0.05,0.01]]

V teto podobe nefunguje. Ale treba pro dobu do splatnosti funguje:

pricet=FinancialBond[{"FaceValue"->1000,"RedemptionValue"->1100,"Coupon"->0.07`,"Maturity"->t,"CouponInterval"->(1/2)},{"InterestRate"->.09,"Settlement"->0}]
Expectation[pricet,t\[Distributed]NormalDistribution[12.5,1]]

***10 Příklad (Rules)

Je mozne ziskat i explicitni vzorce:

(FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t}]/.f->1)//FullSimplify[#,Assumptions->i>-1]&

Value

(value=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"Value"]/.f->1)//FullSimplify[#,Assumptions->i>-1]&
(%/.i->(1/v)-1)//FullSimplify[#,Assumptions->0<v<1]&

(value=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"Value"]/.{f->1,t->0})//FullSimplify[#,Assumptions->i>-1]&

FullValue

(fullvalue=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"FullValue"]/.f->1)//FullSimplify[#,Assumptions->i>-1]&

FullValue minus value

fullvalue-value//FullSimplify[#,Assumptions->i>0]&

Alikvótní úrok

(accrued=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"AccruedInterest"]/.f->1)//TraditionalForm

Rules

(rules=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"Rules"]/.f->1)//FullSimplify[#,Assumptions->i>-1]&
(%/.i->(1/v)-1)//FullSimplify[#,Assumptions->0<v<1]&

(value+accrued-fullvalue//FullSimplify[#,Assumptions->i>0]&)/.{t->3.4,T->6,i->.05}

fullvalue-value//FullSimplify

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->5},{"InterestRate"->r,"Settlement"->0}]
%//Apart//TraditionalForm

***11 Příklad ([3] Cipra, Matematika cenných papírů, 2013, str. 29 a dále)

Pozor, ve vzorcích zde figuruje kupónová sazba c=C/F!!!

Clear[cipraPV124,cipraVτ126,cipraCτ127];
(* Vzorec 1.2.4 *)
{(cipraPV124[c_,F_,n_,i_]=Module[{v},c F  (∑_(j=1)^n)(v^j)+F (v^n)/.v->(1/(1+i))]//FullSimplify[#,Assumptions->i>-1]&)//Apart//TraditionalForm,
(* Vzorec 1.2.6 *)(cipraVτ126[c_,F_,n_,τ_,i_]=(((1+i))^τ)cipraPV124[c,F,n,i]//FullSimplify[#,Assumptions->i>-1]&)//Apart//TraditionalForm,(cipraCτ127[c_,F_,n_,τ_,i_]=((c F)/i)((((1+i))^τ)-1)//FullSimplify[#,Assumptions->i>-1]&)//Apart//TraditionalForm}
(%[[2]]-%//Last)//FullSimplify[#,Assumptions->i>-1]&

C (v^(-τ))(∑_(j=1)^n)(v^j)+F (v^(n-τ))
(%/.v->(1/(1+i)))//FullSimplify[#,Assumptions->i>-1]&

***12 Příklad ([3] Cipra, Matematika cenných papírů, 2013, str. 100 a dále, Příklad 1.7.1)

Plot[{FinancialBond[{"FaceValue"->10000,"Coupon"->0.1,"Maturity"->3},{"InterestRate"->.05,"Settlement"->0}](1.05^t),
FinancialBond[{"FaceValue"->10000,"Coupon"->0.1,"Maturity"->3},{"InterestRate"->.1,"Settlement"->0}](1.1^t),
FinancialBond[{"FaceValue"->10000,"Coupon"->0.1,"Maturity"->3},{"InterestRate"->.15,"Settlement"->0}](1.15^t)}//Evaluate,{t,2.7,2.8}]

8858.39 (1.15^3)

***Obligace (bonds)

Assuming[t ∈Reals∧T∈Integers∧0<t<T,Simplify[T-Floor[T-t]]]
Assuming[t ∈Reals∧T∈Integers,Simplify[Floor[T+t]]]
Assuming[t ∈Reals∧T∈Integers,Simplify[Floor[T-t]]]
Assuming[t ∈Reals∧T∈Integers∧¬(t∈Integers),Simplify[Floor[T-t]]]
Assuming[x ∈Reals∧n∈Integers∧x>0,Simplify[Ceiling[x]-Floor[x]-1]]
Assuming[x ∈Reals∧n∈Integers,n-Ceiling[x]==n-Floor[x]-1]
Plot[-1+Ceiling[x]-Floor[x],{x,-2.5,2.5},PlotStyle->{Red,Thick}]

Hodnocení investic (Investice s pohyblivým výnosem)

Svolatelný dluhopis (vypověditelný, callable bond)

Emitent může dluhopis splatit (odkoupit, svolat) před uplynutím normální doby splatnosti. Zpravidla tak učiní v případě, že má přístup k “levnějším” penězům než musí platit v úrocích emitovaného dluhopisu. Pro držitele dluhopisu (investora) to bývá nevýhodné (emitent obvykle svolává v případě, že tržní ú. m. je nižší než kupónová sazba, investor tedy obvykle na trhu nenajde stejně výhodnou investiční příležitost) , takže emitent musí nabídnout určitou kompenzaci. Ta je obvykle zakotvena ve svolávacím plánu (call schedule).

Je-li T doba do splatnosti, nominální hodnota F, pak emitent může obvykle svolat v okamžicích (Subscript[T, -k])=T-k, k=1,...,K    se splatnými částkami (Subscript[F, -1]),...(Subscript[F, -K]). Z podstaty věci vyplývá, že by mělo platit (Subscript[F, -k])>F. K exaktnímu hodnocení musíme též znát pravděpodobnosti svolání (Subscript[p, -1]),...(Subscript[p, K]) v okamžicích (Subscript[T, -1]),...,(Subscript[T, K]). Je přirozené, že tyto pravděpodobnosti se mění v závislosti na tržní situaci a jsou závislé na hodnotícím okamžiku t: (Subscript[p, -1])(t),...(Subscript[p, K])(t). Struktura CALL opce je tedy poměrně komplikovaná.

V praxi se uvádějí svolávací ceny v procentech: (Subscript[F, 0])=100%,(Subscript[F, -1])=102%,(Subscript[F, -2])=104%,....

Mluví se o též dluhopisu s vnořenou opcí (embedded option). Opci může uplatnit emitent (je v dlouhé pozici), takže

(cena svolatelného dluhopisu) = (cena ekvivalentního dluhopisu bez možnosti svolání) - (cena CALL opce).

***Price of a callable bond is always lower than the price of a straight bond because the call option adds value to an issuer. Yield on a callable bond is higher than the yield on a straight bond.

Viz též [3], str. 11, 90 a dále.

Poznámka (puttable bond)

V tomto případě má držitel právo prodat dluhopis emitentovi, opět za předem dohodnutých podmínek (prodejní opce). Exisují také dluhopisy s oběma opcemi, CALL opce a PUT opce se vzájemně nevylučují.

Amortizované obligace

Emitent nesplatí v okamžiku vypršení nominální hodnotu, ale “amortizuje” ji v konstatních kupónech. Místo standardního peněžního toku pro běžnou kupónovou obligaci {C,C,...,C,C+F} tak investor dostává anuitu {(SuperStar[C]),(SuperStar[C]),...,(SuperStar[C])}. Amortizovaná obligace je, ceteris paribus, méně riskantní (proč?), takže “ekvivalentní” kupón bude nižší než vypočtený z přesné ekvivalence peněžních toků (samozřejmě závislých na hodnotící ú. m.).

Dluhopisy za nejistoty

Simple Bonds under Uncertainty I

Suppose that a zero coupon bond pays F with probability p and pays η,F with probability 1-p at maturity, where η ∈[0, 1) is called the recovery rate (míra pokrytí, míra zotavení), and  λ:=1-η  is called the loss rate (ztrátový poměr). The case η=0  is equivalent to the default (nesplacení). Suppose that the valuation interest rate is r. The fair value of the bond is the expected present value:

(OverBar[PV]) =(1/(1+r))[p,F+(1-p)η,F]

Simple Bonds under Uncertainty 2

Uvažujme pro změnu obligaci s nulovým kuponem splatnou za jeden rok s nominální hodnotou F=1, ale ve skutečnosti vyplaíi X, kde X je náhodná veličina, 0≤X≤1. Nechť r je hodnotici urokova mira. Spravedlivá hodnota obligace je pak

(OverBar[PV]) =(1/(1+r))E,X

Stanovení rizikové přirážky

Podobnou myšlenku můžeme užít i pro hodnoceni půjček, resp. při stanovení prémie z rizika nesplacení (default risk premium). Předpokládejme, že půjčka ve výši PV = 1 je splatná za 1 rok, ale ve skutečnosti dlužník splatí náhodnou částku X, 0≤X≤1, úrok v to nepočítaje. Otázkou je, jaká by měla být prémie za riziko z nesplacení (Subscript[r, default]) účtovaná věřitelem, aby dostal v průměru bezrizikový úrok (Subscript[r, 0]). Jistá budoucí hodnota půjčky je 1+(Subscript[r, 0]), takže věřitel by měl požadovat rizikovou přirážku vyplývajici ze vztahu

1+(Subscript[r, 0])=(1+(Subscript[r, 0]))(1+(Subscript[r, default]))E,X

z čehož

(Subscript[r, default])=(1/(E,X))-1.

Hodnocení opcí a futures

Úvod

Arbitráž a zajišťování (hedging)

All the models treated assume no-arbitrage principle, in other words, the absence of arbitrage opportunities. By an arbitrage opportunity we mean any of the two situations:
(1) At the same time, the same asset is sold at different prices at different places. Nowadays, this can hardly happen in the financial world since the information from one stock exchange is available on the stock exchange on the opposite side of the globe within a second.
(2) With zero investment at time 0 there is no probability of loss but there is a possibility of a riskless profit at time 1. More rigorously, an arbitrage opportunity in this case is a self-financing trading strategy with no initial investment, and a positive probability of positive profit and zero probability of negative profit later on.

Arbitrage opportunity is often characterized as a “money pump” and no-arbitrage
principle by the slogan: “There is no such thing like a free lunch.”.

Velmi často se setkáme s následujicí, poněkud nepřesnou terminologií.
Investor je v krátké pozici, short position, jestliže nějaké aktivum nevlastní, ale má závazky z něj plynoucí. Obvykle se jedná o emitenta dluhopisu nebo prodávajicího opce. V dlouhé pozici, long position je investor, ktery je držitelem (kupujícim) nějakého aktiva, ze kterého pro protistranu plynou nějaké závazky. V připadě opcí investorovi v krátké pozici nezbývá než trpně přihližet, jak se bude trh vyvíjet, a jak se protistrana zachová. V případě racionálně se chovajícího se investora v dlouhé pozici je jeho rozhodnutí determinováno trhem.

Zkráceně se někdy dlouhá pozice značí “+“, krátká “-“.

Příklad arbitráže

Nulová investice v čase 0 a nenulová pravděpodobnost zisku v čase 1 a nulová pravděpodobnost ztráty v čase 1.

Cena akcie v čase t je (Subscript[S, t]), t=0,1. V čase t=0 si půjčím částku B=-(Subscript[S, 0]), (úroková míra r) a za ní  si koupím akcii. Moje bilance (hodnota portfólia) v čase t=0 je (Subscript[S, 0])+B=0. V čase t=1 je hodnota portfólia (Subscript[S, 1])+(1+r)B. Jestliže P((Subscript[S, 1])+(1+r)B>0)>0 a zároveň P((Subscript[S, 1])+(1+r)B<0)=0, jedná se o arbitráž.

Bezriziková úroková míra

Abstraktní pojem, předpokládá se že existuje úroková míra (Subscript[r, 0]), která je stejná pro dlužníky, vypůjčovatele (borrowers) i věřitele (lenders). Investice při této ú. m. poskytují zaručený, jistý výnos. S touto úrokovou mírou se setkáváme v řadě modelů. V praktických výpočtech se obvykle nahražuje (proxy) úrokovou mírou výnosu státních dluhopisů (poukázek). V současnosti při tzv. “kvantitavním uvolňování” (rozuměj tištění nekrytých bankovek) jak v USD tak EUR zóně je možné o bezrizikovosti s úspěchem pochybovat. To také platí při iracionálních zásazích centrální banky.

***Záleží na kontextu, stejná pro dlužníky, vypůjčovatele (borrowers) i věřitele (lenders) je jistě nereálné, navíc transakční náklady.

Evropské a americké opce (vanilla options, obyčejné opce)

r ... bezriziková úr. míra (nekdy značena  (Subscript[r, 0]))
(Subscript[S, t]) ... cena podkladového aktiva (akcie) v čase t
(Subscript[c, t]) resp. (Subscript[p, t]) ... cena evropské CALL resp. PUT opce
K ... realizační cena
T ... čas vypršení evropské opce
τ   ... čas vypršení (realizace) americké opce (τ≤T)

Výplatní funkce (payoff function) evropské opce

v okamžiku vypršení

CALL: (SuperPlus[((Subscript[S, T])-K)])

PUT: (SuperPlus[(K-(Subscript[S, T]))])

Výplatní funkce (payoff function) americké opce

v okamžiku vypršení

CALL: (SuperPlus[((Subscript[S, τ])-K)])

PUT: (SuperPlus[(K-(Subscript[S, τ]))])

PUT - CALL parita (platí pouze pro evropské opce!)

({{({{(Subscript[S, t])+(Subscript[p, t])=(Subscript[c, t])+K,(e^(-r(T-t)))}})}})

Mnemotechnická pomůcka pro zapamatování: státní podnik = císařsko-královské

Důkaz: viz též [1], str. 54. Uvažujme portfolio +PUT +akcie -CALL, vše na stejnou akcii, opce evropské se stejnou dobou vypršení. Hodnota portfolia v čase t≤T je

({{(Subscript[Π, t])=(Subscript[S, t])+(Subscript[p, t])-(Subscript[c, t]).}})

V čase vypršení T je hodnota tohoto portfolia

({{({{(Subscript[Π, T])=(Subscript[S, T])+(SuperPlus[(K-(Subscript[S, T]))])-(SuperPlus[((Subscript[S, T])-K)]).}})}})

V případě (Subscript[S, T])≤K je (Subscript[Π, T])=(Subscript[S, T])+K-(Subscript[S, T])-0=K, v případě (Subscript[S, T])>K je (Subscript[Π, T])=(Subscript[S, T])+0-((Subscript[S, T])-K)=K. To znamená, že portfolio je bezrizikové vedoucí k jistému zisku K. Budoucí hodnota je  (Subscript[Π, T])=K  a současná hodnota je tedy (Subscript[Π, t])=K,(e^(-r(T-t))).

Současná hodnota výplatní funkce (payoff function) evropské opce v čase t≤T

CALL: (SuperPlus[(e^(-r(T-t)))((Subscript[S, T])-K)])

PUT: (SuperPlus[(e^(-r(T-t)))(K-(Subscript[S, T]))])

Black-Scholesův vzorec

Risk Neutral Valuation

We assume that the stochastic process of the prices of an asset  (Subscript[{(Subscript[S, t])}, t≥0]) is goverened by a geometrical Brownian motion, hence

({{({{ℒ((Subscript[S, T])|(Subscript[S, t]))=L,N(ln (Subscript[S, t])+(μ-(1/2)(σ^2))(T-t),(σ^2)(T-t))}})}})

where μ is the rate of return on the underlying asset and σ its volatility.

Rizikově neutrální hodnocení: Investoři se chovají racionálně, čím větší riziko (volatilita), tím vyšší očekávaný výnos požadují. Čím vyšší averze k riziku, tím vyšší očekávaný výnos je požadován. Vyloučením rizikových preferencí dojdou investoři ke shodě na jediném rizikově neutrálním výnosu μ=r. Pozor, v žádném případě to neznamená, že by výnos podkladového aktiva byl roven r !!!

Alternativní princip vedoucí k témuž závěru: Očekávaný výnos z držení akcie v hodnotě (Subscript[S, t])  v období (t,T) by měl být stejný jako bezrizikový výnos z investice  ve výši (Subscript[S, t])  při úrokové míře r:

({{({{(SuperStar[E])((Subscript[S, T])|(Subscript[S, t]))=FV((Subscript[S, t]),r)=(Subscript[S, t])(e^(r(T-t)))}}).}})

Hvězdičkou zde i v dalším značíme skutečnost, že za výnos bereme rizikově-neutrální výnos r.

Neuvažujeme-li žádné rizikové preference investorů, je

({{({{(SuperStar[ℒ])((Subscript[S, T])|(Subscript[S, t]))=L,N(ln (Subscript[S, t])+(r-(1/2)(σ^2))(T-t),(σ^2)(T-t))}}).}})

Then

({{({{(SuperStar[E])((Subscript[S, T])|(Subscript[S, t]))=}})}})

Mean[LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]//Simplify//TraditionalForm

Similarly for the variance:

({{({{(SuperStar[var])((Subscript[S, T])|(Subscript[S, t]))=}})}})

Variance[LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]//Simplify//TraditionalForm

Viz [1], str. 55-56.

Hodnota (cena) evropské opce

Jako přirozené se jeví vzít za hodnotu evropské opce v čase t podmíněnou střední hodnotu současné hodnoty výplatní funkce při dané hodnotě podkladového aktiva (Subscript[S, t]) při čemž střední hodnota je uvažovaná při bezrizikové (tj. rizikově neutrální) úrokové míře r:

({{({{(Subscript[c, t])=(e^(-r(T-t)))(SuperStar[E])((SuperPlus[((Subscript[S, T])-K)])|(Subscript[S, t]))}, {(Subscript[p, t])=(e^(-r(T-t)))(SuperPlus[(SuperStar[E])(K-(Subscript[S, T]))])|(Subscript[S, t]))}})}})

ct=(E^(-r(T-t)))Expectation[Max[0,((Subscript[S, T])-K)],(Subscript[S, T])\[Distributed]LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]

ct[[2,2]]//FullSimplify

Tuto formuli lze převést do běžně uváděného tvaru (Black-Scholes formula)

({{({{(Subscript[c, t])=(Subscript[S, t])Φ((Subscript[d, 1]))-K (e^(-r(T-t)))Φ((Subscript[d, 2])),
(Subscript[d, 1,2])=((log((Subscript[S, t])/K)+(r±(σ^2)/2)(T-t))/(σ(Sqrt[T-t]))).}})}})

Hodnota PUT opce se získá z PUT - CALL parity: ({{({{(Subscript[p, t])=(Subscript[c, t])+K,(e^(-r(T-t)))}})-(Subscript[S, t]).}})

Poznámka (opce na akcie vyplácející dividendu)

Vyplácí-li akcie dividendu s dividendovou intenzitou d, pak se v předchozím vzorci nahradí r→r-d. Vyplácením dividendy se snižuje hodnota firmy a tudíž i kapitálový výnos.

Citlivosti (Comparative Statics, The Greeks)

Statics je sice vžitý, ale asi chybně použitý termín nevystihující podstatu. Greeks: charakteristiky (až na jednu) se označují řeckými písmeny.

Nechť (Subscript[V, t]) označuje hodnotu CALL resp. PUT opce, (Subscript[V, t])=(Subscript[c, t]) resp. (Subscript[V, t])=(Subscript[p, t]). Z Black-Scholesova vzorce je patrné, že (Subscript[V, t]) je funkcí pěti proměnných (parametrů):

({{({{(Subscript[V, t])=(Subscript[V, t])((Subscript[S, t]),K,σ,T-t,r)}}).}})

Derivace podle jednotlivých proměnných se nazývají citlivosti a protože se označují řeckými písmeny, jsou též známé jako “The Greeks”. Jejich výpočet je přímočarý, ale v některých případech technicky dosti komplikovaný. Uvedeme jen jednu míru citlivosti delta, derivaci podle aktuální ceny akcie:

({{({{Δ=((∂(Subscript[V, t]))/(∂(Subscript[S, t])))}}).}})

Pro CALL resp. PUT dostaneme

({{({{(Subscript[Δ, c])=Φ((Subscript[d, 1]))   resp.   (Subscript[Δ, p])=(Subscript[Δ, c])-1=-Φ(}})-(Subscript[d, 1])).}})

Charakteristiky Δ se používá k tzv. delta-zajišťování, delta hedging. Uvažujme portfolio skládající se z dlouhé pozice jedné akcie a krátké pozice v A kusech CALL opcí na tutéž akcii. Hodnota portfolia je tedy (Subscript[Π, t])=(Subscript[S, t])-A,(Subscript[c, t]). Chceme najít A takové, aby hodnota portfolia byla invariantní vůči (malým) změnám ceny akcie, tj.

({{({{((∂,(Subscript[Π, t]))/(∂(Subscript[S, t])))}})=0.}})

Hledané A=1/(Subscript[Δ, c]), nazývané zajišťovací poměr, hedge ratio. Vzhledem k tomu, že se delta mění v čase, musí se portfolio často měnit → dynamické zajišťování, dynamic hedge. To může být nákladné kvůli transakčním nákladům. Tudíž vhodné pro makléře a tvůrce trhu, kteří mají relativně nízké transakční náklady. Všimněme si, že čím nižší (Subscript[S, t]) ve srovnání s K, tím vyšší je zajišťovací poměr. Podobnou mírou citlivosti je elasticita ceny CALL opce vzhledem k ceně akcie definovaná jako (Subscript[E, c])=(Subscript[Δ, c])(Subscript[S, t])/(Subscript[c, t]). Vždy je (Subscript[E, c])>1. (Dokažte za cvičení.) Proto je CALL opce vždy riskantnější než její podkladové aktivum. Analogie k Δ je durace.

**Další míry citlivosti viz [1], str. 60-61.

Implied Volatility (Implikovaná volatilita)

Ve výše uvedeném vzorci pro (Subscript[V, t]) v okamžiku t vždy známe hodnoty (Subscript[S, t]),K,T-t,r. Při aplikaci Black-Scholesova vzorce pro neznámou volatilitu obvykle použijeme výběrovou směrodatnou odchylku z historických (známých) dat logaritmických výnosů ln((Subscript[S, t+1])/(Subscript[S, t])) pro nějaké rozumné historické hodnoty. Sofistikovanější metody jsou založené na modelech volatility typu ARCH, GARCH, jejich zobecněních a modifikacích. Viz zabudované funkce (nezahrnují zdaleka všechny dnes používané modely):

?*ARCH*

?*AR*

Můžeme ale též přistoupit k odhadu volatility jiným způsobem. V daném časovém okamžiku t, (teď, hodnotící časový okamžik), známe nejenom  hodnoty (Subscript[S, t]),K,T-t,r, ale i tržní hodnotu opce (Subscript[V, t]^M). Po substituci známých hodnot do Black-Scholesovy formule dostaneme rovnici pro neznámou σ:

({{(Subscript[V, t]^M)=({{(Subscript[V, t])((Subscript[S, t]),K,σ,T-t,r)}}).}})

Tato rovnice nemusí mít žádné řešení (řešení je nutné hledat numericky), může mít právě jedno (nejpříjemnější situace, i když i tam můžeme býti překvapeni) nebo více řešení - z těch je pak zapotřebí citlivě vybírat.

Důležité! Volatilita a implikovaná volatilita viz [1], str. 61-62.

Portfolia opcí

Příklad v [1], str. 62-63.

SetDirectory[NotebookDirectory[]]

Import["FM1aPortfolia_opci.jpg"]

With[{K=50,B=70},Plot[Max[0,S-K]-Max[0,S-K-B],{S,0,200},PlotTheme->"Business"]]

Forwardy a futures

Na rozdíl od opcí je smlouva mezi stranami závazná. Forwardy jsou individuálně uzavírané kontrakty o budoucím vypořádání, futures standardizované.

4.3.2 Termínové obchody: Forwardy a futures

Připomeňme nejprve mechanismus fungování opcí. U nich investor (držitel, kupující) v dlouhé pozici má právo, nikoli povinnost své právo zakotvené v opční smlouvě uplatnit. To znamená,že podkladové aktivum (underlying) může buď koupit (v případě CALL opce) nebo prodat (v případě PUT opce). Prodávající (pisatel) pak trpně čeká, jak se vyvíjí tržní situace, a jestli držitel své právo uplatní. Ten tak ovšem učiní v případě, že uplatněním opce dosáhne zisku nebo alespoň bude minimalizovat ztrátu vzniklou náklady na pořízení opce.

U kontraktů typu forward a futures není možná volba jako u opcí. Pro obě strany je smlouva závazná, tudíž tady v okamžiku uzavření kontraktu neexistuje cena kontraktu v pravém slova smyslu. Forwardový kontrakt je termínový obchod, smlouva mezi dvěma partnery (řekněme A a B), ve kterém se strana kupující A (v dlouhé pozici) zavazuje koupit od strany prodávající B (v krátké pozici) určitou komoditu v určeném množství za určitou cenu F fixovanou v okamžiku uzavření kontraktu v určitém budoucím termínu T (dodání, delivery). Vše je závazně domluveno dnes, dejme tomu v okamžiku  t = 0, a vlastní transakce proběhne ve sjednaném termínu v budoucnosti T, t<T. Obě strany jsou povinné své závazky splnit. Předpokládejme dále, že aktuální cena podkladového aktiva v okamžiku uzavření kontraktu je (Subscript[S, 0]).

Pozice obou stran v kontraktu je symetrická. V okamžiku vypořádání zisk jedné strany jest roven ztrátě druhé strany. Jestliže  smluvená cena kontraktu v čase vypořádání T je F, pak strana A obdrží v okamžiku T částku (Subscript[S, T])-F a strana B přirozeně obdrží  F-(Subscript[S, T]). To, co se obvykle v teorii neuvažuje, jsou transakční náklady. Pro individuálně uzavřené kontrakty mohou být nezanedbatelné.

Tyto kontrakty mají minimálně tyto dvě funkce. První: ochrana (uhájení) ceny komodity, která je předmětem kontraktu. Druhá: transfer vlastnictví; fixováním ceny dnes (v čase t) je kupující chráněn (jištěn) proti případné vyšší ceně v okamžiku vypořádání kontraktu (tj. okamžité (spotové) ceně na trhu v okamžiku dodání). Prodávající je chráněn (jištěn) proti případné nižší promtní ceně v okamžiku vypořádaní kontraktu (tj. okamžité ceně na trhu v okamžiku dodání).

Obchodování s forwardy není prakticky regulováno, jsou to obchody individuální, takže riziko z nesplacení (default) je nezanedbatelné. V tomto případě se rizikem selhání myslí to, že strana v dlouhé pozici cukne, nebude chtít koupit nebo strana v krátké pozici odmítne prodat. Toto riziko je z velké části eliminováno standardizací. Není možné postihnout všechny individuální obchody a převést je ke globálnímu obchodování, nicméně je mnoho komodit (obilí, ropa, strategické kovy, měny, . . . ), které je možné dovést ke standardizovanému obchodování. Standardizované obchody tohoto typu se provádějí na specializované burze a nazývají se futures.

Futures: Z matematického hlediska jsou forwards a futures prakticky totožné. Proto se na hodnocení futures vztahují stejná kritéria jako na forwardy. Dále budeme mluvit o hodnocení forwardů.

Uvedeme některé přístupy k hodnocení forwardových kontraktů. Nejprve uveďme hodnocení na základě principu neexistence arbitráže. Jako dříve předpokládáme, že cena podkladového aktiva v čase t=0 je (Subscript[S, 0]) a z držení aktiva neplynou žádné závazky např. ve formě dividend. Dále uvažujeme bezrizikovou hodnotící úrokovou míru r.

Strana B, krátká v kontraktu, jest povinnou doručit (deliver) částku (Subscript[S, T]) v okamžiku T. Strana B si vypůjčí částku (Subscript[S, 0]) v čase t=0 (čas uzavření kontraktu), koupí předmětné aktivum a v čase T obdrží F. Touto částkou (F) splatí půjčku, která v čase T je ve výši budoucí honoty (Subscript[S, 0])(e^(r,T)) , takže forwardová cena je

F=(Subscript[S, 0])(e^(r,T))

V okamžiku t=0 si strany nevyměňují žádné peníze, hodnota kontraktu je tudíž nulová.
V libovolném čase 0≤t≤T je však hodnota kontraktu

(Subscript[f, t])=(Subscript[S, t])-F,(e^(-r(,T-t)))

V takovém okamžiku může každá ze stran „uzamknout, lock” svou pozici tak, že uzavře pozici opačnou. Může tak fixovat zisk nebo ztrátu. Je-li (Subscript[S, t])<F,(e^(-r(T-t))), strana B si půjčí (Subscript[S, t]), koupí akcii, v okamžiku T splatí (Subscript[S, t])(e^(r(T-t))) a akcii prodá za F. Je-li naopak (Subscript[S, t])>F,(e^(-r(T-t))), strana A prodá akcii nakrátko, dostane za ni (Subscript[S, t]), tuto částku uloží a v okamžiku T vybere (Subscript[S, t])(e^(r(T-t)))>F. Koupí akcii za F a akcii vrátí.

4.3.9 Poznámka. (Ekvivalentní portfolio) Výplatní funkce forwardu v dlouhé pozici je (Subscript[S, T])-F. Dlouhá pozice ve forwardu je ekvivalentní v dlouhé evropské CALL a krátké pozici v evropské PUT, obě se stejnou dobou vypršení, stejnou realizační cenou K=F jako má forwardový kontrakt. Taková kombinace opcí má stejnou výplatní funkci jako forward, a tedy i v okamžiku uzavření kontraktu musí mít stejnou hodnotu. V čase t=0 (okamžik uzavření kontraktu) je však hodnota kontraktu nulová (nedochází k žádné výměně peněz), jinými slovy (Subscript[c, 0])-(Subscript[p, 0])=0. Ale z PUT-CALL parity (Subscript[c, 0])-(Subscript[p, 0])=(Subscript[S, 0])-F,(e^(-r,T)). Z toho tedy vyplývá vzorec pro F.

With[{K=50},GraphicsRow[{Plot[Max[0,S-K],{S,0,100},PlotStyle->{Thick,Red}],Plot[Max[0,K-S],{S,0,100},PlotStyle->{Thick,Orange}],Plot[Max[0,S-K]-Max[0,K-S],{S,0,100},PlotStyle->{Thick,Blue}]}]]

4.3.10 Poznámka. (Hodnocení pomocí Black–Scholesovy formule) Při rizikově neutrálním
oceňování a předpokladu, že cena akcie se řídí Black–Scholesovým vzorcem, je E((Subscript[S, T])|(Subscript[S, 0]))=(Subscript[S, 0])(e^(r,T)).  Výplatní funkce forwardu je (Subscript[S, T])-F. Střední hodnota této funkce podmíněná známou cenou akcie v okamžiku uzavření kontraktu t=0 a diskontovaná k okamžiku 0 je tedy (Subscript[S, 0])-F,(e^(-r,T)). Tento výraz je však roven nule, neboť v okamžiku uzavření kontraktu je cena nulová.
(WILMOTT Students, p. 99)

FinancialDerivative v systému  Mathematica  (v této verzi (10) zatím omezeno jenom na opce)

FinancialDerivative

Označení: “StrikePrice” realizacni cena K, “Expiration” doba do splatnosti, doba do vyprseni T, pokud se uvede “ReferenceTime” t, pak je to T-t,  “InterestRate” bezrizikova urokova mira (Subscript[r, 0]), “Volatility” volatilita ceny podkladoveho aktiva σ (underlying asset), “CurrentPrice” soucasna cena podkladoveho aktiva (Subscript[S, 0]) resp. (Subscript[S, t]) . “Dividend” je dividendova intenzita q. Vsechny udaje se vztahuji ke stejnemu casovemu obdobi, typicky 1 rok.

(* vsechny zabudovane derivaty, zde zvane "Contracts" *)
FinancialDerivative[](* //Length *)

POZOR NA SYNTAXI!!! PRI RESENI ULOH ZKOPIRUJTE Z HELPU!!! Typicky ma FinancialDerivative 3 az 4 argumenty, kazdy z nich je seznam (list).

1 Priklad (hodnoty opci)

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

2 Priklad (hodnoty opci a jejich citlivosti, The Greeks)

Opce z predchoziho prikladu, vystupem hodnota opce a citlivosti

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

2 Priklad (Graficke znazorneni)

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,40,60},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->{Thick,Red}],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

Manipulate[Plot[FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,45,55},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->Thick],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

3 Priklad (Graficke znazorneni)

Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,30,60}]

Plot[Table[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{t,{0,0.01,0.1,0.5,1}}],{st,30,60}]

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,40,60},PlotRange->{0,15},PlotStyle->Thick],
{{t,0,"Doba do vyprseni"},0,1},SaveDefinitions->True]

Hodnota evropske CALL a citlivosti (Value and all Greeks of a European call option):

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Podle (podle mne pochybne konstrukce, viz DHS)  teorie by mela byt hodnota americke CALL stejna jako evropske. Ejhle, neni!!!

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Hodnocení derivátů typu Cap (strop) a Floor  (dno)

Důvod, proč ve funkci FinancialDerivative není volba Cap resp. Floor (přesněji Caplet a Floorlet) vidím v tom, že tyto pojmy nejsou jednoznačně definovány a možností je celá řada. Obvykle jsou však kombinací elementárních finančních instrumentů (obligací, opcí, apod.)

Uvedeme ilustraci Cap na evropskou CALL opci s dobou vypršení T a realizační cenou K. Chrání investora v krátké pozici před neomezenou ztrátou. V případě, že cena (Subscript[S, T]) podkladového aktiva je v okamžiku vypršení vyšší než B,  vyplácí se B.

vyplataCAPnaCALL[St_,K_,B_]:=Min[Max[St-K,0],B]
Plot[vyplataCAPnaCALL[st,1,2],{st,0,5},PlotStyle->Thick]

Dlouhá pozice v tomto finančním instrumentu je ekvivalentní držení portfolia dvou CALL opcí, obě se stejnou dobou vypršení, jedna v dlouhé pozici s realizační cenou K, druhá v krátké pozici s realizační cenou K+B.

vyplataportfolia[St_,K_,B_]:=Max[St-K,0]-Max[St-K-B,0]
Plot[vyplataportfolia[st,1,2],{st,0,5},PlotStyle->Thick]

Cena tohoto instrumentu podle Black-Scholesova vzorce je tedy (musíme přidat bezrizikovou úrokovou míru r,0, volatilitu σ a dobu do vypršení T,t.

Clear[cenaCAPnaCALL];
cenaCAPnaCALL[St_,K_,B_,r0_,σ_,Tt_]:=FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]-FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K+B, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]

Plot[cenaCAPnaCALL[st,1,2,0.05,0.4,1],{st,0,5},PlotRange->{0,2},PlotStyle->Thick]

Vyzkoušejte si manipulovat s některými parametry:

Manipulate[Plot[cenaCAPnaCALL[st,1,2,0.05,σ,Tt],{st,0,5},PlotRange->{0,2},PlotStyle->Thick],{{σ,0.3},0.1,0.5},{{Tt,1},0.01,2},SaveDefinitions->True]

***Lecture notes

Hodnocení investic (Investice s pevným výnosem)

Zde budeme finanční investice hodnotit současnou hodnotou, případně střední hodnotou současné hodnoty.

Investice s pevným výnosem

Cenné papíry (securities) s pevným výnosem, fixed-income securities jsou obvykle obchodovatelné finanční nástroje, které poskytují jejich vlastníkovi jistým způsobem definovaný příjem (tj.  peněžní tok) během určitého časového období. Pro investory jsou důležité, neboť vlastně definují  peněžní trh, poskytují zpětnou vazbu prostřednictvím informace o ceně peněz a většina investorů se více méně musí na peněžním trhu angažovat.

V minulosti pevný výnos skutečně zaručoval vlastníkovi příslušného ceného papíru pevný výnos, pomineme-li ovšem selhání emitenta (default) (dlužníka). V současnosti je pojem pevný výnos nutno brát s jistou rezervou. Většina emitentů nyní totiž váže výplaty úroků na nějakou obecně dobře kontrolovatelnou veličinu jako je např. depozitní úroková sazba centrální banky, mezibankovní úroková míra typu PRIBOR, LIBOR, případně jiná dohodnutá referenční sazba, méně již míra inflace apod. Obecně však platí, že cenné papíry s pevným výnosem poskytují zafixovaný peněžní tok až na dobře definované náhodné výjimky. Budeme tedy za cenné papíry s pevným výnosem považovat cenné papíry s předem definovanou strukturou posloupnosti plateb s tím, že některé platby jsou závislé na exogenních faktorech, které pravděpodobně žádná ze stran kontraktu nemůže významně ovlivnit.

Kupónové obligace (dluhopisy, bonds)

Označení

Terminologie je nejednotná, často zavádějící. Uvádíme řadu možností. Největší problémy asi činí rozdíl mezi výnosem do splatnosti a výnosem (ve smyslu hodnotící úrokové míry).

Fair = dirty = gross = hrubá = spravedlivá cena, hodnota (price, full value),
clean = pure = čistá cena (clean price, value) 
t ... hodnotící čas, settlement
T ... splatnost (maturita)
i ... hodnotící úroková míra (tržní úroková míra, někdy nazývaná výnos, yield resp. požadovaný výnos, neplést s výnosem do splatnosti!)
v=1/(1+i) ... diskontní faktor
c=C/F... kuponova sazba!!!
n ... počet období do splatnosti n=T-t, invertovaný čas; n=0 je okamžik splatnosti (vypršení, maturity), předpokládáme t<T
A,(Subscript[I, i]) ... alikvótní úrok (alikvótní úrokový výnos, AUV, Accrued Interest, AI) při úrokové míře i (v [1] jsou vzorce pro AI špatně)
YTM ... výnos do splatnosti, yield to maturity, implied yield to maturity

Hodnocení obligací (dluhopisů)

Obligace s maturitou T roků (všude předpokládáme T∈ℕ) a nominální hodnotou F  emitovaná v čase 0 vyplácí kupóny ve výši C v časech 1,...,T. Nominální hodnota je splatná taktéž v čase T. Pro držitele obligace po celou dobu její životnosti je odpovídající peněžní tok:

Import["Cashflowofabond.pdf"]//First

Obligace je však obchodovatelný cenný papír, nutno znát jeho hodnotu v libovolném čase do splatnosti  t<T. Situace je poněkud komplikována administrativními důvody (v tomto případě pochopitelnými, nutno evidovat řádově tisíce držitelů): Emitent stanoví datum ex-kupónu (Subscript[t, ex]), tj. datum, od kterého je dluhopis obchodován bez nejbližšího následujícího kupónu. (The ex coupon date is the first day the bond starts trading without the coupon attached to it.) Datum ex-kupónu je obvykle několik dnů před výplatou kupónu, typicky 14 dnů. Na obrázku je hodnotící čas t∉ℕ, t<(Subscript[t, ex]). Držiteli obligace tedy náleží kupóny v časech ⌊t⌋+1,⌊t⌋+2,...,T-1,T, celkem tedy T-⌊t⌋ kupónů. Od času (Subscript[t, ex])  jsou vypláceny kupóny v časech ⌊t⌋+2,...,T-1,T. V dalším uvedeme spravedlivé ceny obligace ve všech možných případech.

Import["CashflowofabondValuation.eps"]

V dalším užíváme elementární vztahy mezi celou ⌊⌋, zlomkovou částí {} a stropem ⌈⌉, zdůrazněme T celé.

t=⌊t⌋+{t} ,  ⌊T-t⌋=T-⌈t⌉,   ⌊t⌋+1-t=1-{t}.

Spravedlivá cena obligace: t∉ℕ, t<(Subscript[t, ex])

P,V=C,(v^(⌊t⌋+1-t))+C,(v^(⌊t⌋+2-t))+...+(Cv^(T-1-t))+(C+F)(v^(T-t))=
C,(v^(1-{t}))((1-(v^(T-⌊t⌋)))/(1-v))+F,,(v^(T-t))

Spravedlivá cena cena obligace: t∉ℕ, (Subscript[t, ex])≤t≤⌊t⌋+1

P,V=C,(v^(⌊t⌋+2-t))+C,(v^(⌊t⌋+3-t))+...+(Cv^(T-1-t))+(C+F)(v^(T-t))=
C,(v^(2-{t}))((1-(v^(T-⌊t⌋-1)))/(1-v))+F,,(v^(T-t))

Spravedlivá cena cena obligace: t∈ℕ, v čase t se pochopitelně žádný kupón nevyplácí

P,V=C,v+C,(v^2)+...+(Cv^(T-1-t))+(C+F)(v^(T-t))=
C,v((1-(v^(T-t)))/(1-v))+F,,(v^(T-t))

Čistá cena (t=0, kupóny se vyplácejí v okamžicích t=1,2,...,T):

P,(Subscript[V, p])=C,v+C,(v^2)...+(C+F)(v^T)=C,(∑_(j=1)^T)(v^j)+F,(v^T)=((C,,v((v^T)-1))/(v-1))+F,(v^T)=(C/i)+(1/(((1+i))^T))(F-(C/i))

Vzorec pro výpočet čisté ceny (použito v proceduře cleanvalue pro výpočet čisté hodnoty, výsledný vzorec platí i pro necelá n):

{(C(∑_(j=1)^n)(v^j)+F (v^n)/.n->T)//FullSimplify[#,Assumptions->i>-1]&,(C(∑_(j=1)^n)(v^j)+F (v^n)/.v->(1/(1+i))/.n->T)//FullSimplify[#,Assumptions->i>-1]&//Apart}//TraditionalForm

Rozdíl mezi spravedlivou a čistou cenou představuje alikvótní úrok (AI), tj. tu část kupónu, která náleží prodávajícímu v případě, že mu následující kupón nebude vyplacen (prodává po datu ex-kupónu).

Spravedlivá cena = Čistá cena + Alikvótní úrok

S blížící se výplatou kupónu přirozeně (ceteris paribus) roste spravedlivá cena dluhopisu. Protože někteří finanční analytici nejsou schopni z hrubé ceny usoudit, zda se dluhopis vyvíjí dobře či ne, uvádí se (ve finančním tisku) čistá cena dluhopisu a alikvótní úrok zvlášť. Navíc se alikvótní úrok uvádí nediskontovaný.

Problémy také vznikají s různými kalendářovými konvencemi. V různých zemích se používají různé, viz např. [3]. Nejpochopitelnější definice  AI je podle Luenberger, D. p. 51, ale v praxi se musí “počty dnů” adaptovat s ohledem na použitou kalendářní konvenci.

AI=((počet dnů od posledního kupónu)/(počet dnů mezi kupóny)) C

**Ilustrace. (Subscript[t, 1])<(Subscript[t, 2]), PV((Subscript[t, 1]))<PV((Subscript[t, 2])) díky AI, ale kvalita dluhopisu se zhorší.

**Procedury pro hodnocení obligací (dluhopisů)

⚠

V následujících třech procedurách se používá invertovaný čas n=T-t. Vzorec pro výpočet čisté ceny (použito v proceduře cleanvalue pro výpočet čisté hodnoty):

Procedury pro spravedlivou (dirty) cenu, čistou (clean) cenu a alikvótní úrok:

Clear[dirtyvalue,cleanvalue,accruedinterest];
{(dirtyvalue[c_,F_,n_,i_]=Module[{v},
c F  (v^(n-⌊n⌋))(If[⌊n⌋-n==0,0,1]+ (∑_(j=1)^(⌊n⌋))(v^j))+F (v^n)/.v->(1/(1+i))]//FullSimplify[#,Assumptions->i>-1]&),
(cleanvalue[c_,F_,n_,i_]=Module[{v},F ((v^n)+((c v ((v^n)-1))/(v-1)))/.v->(1/(1+i))]//FullSimplify[#,Assumptions->i>-1]&),
(accruedinterest[c_,F_,n_,i_]=
((c F (-1+(((1+i))^(1-n+Floor[n]))))/i))}//TraditionalForm

Skutečně pro alikvótní úrok platí:

dirtyvalue[c,F,n,i]-cleanvalue[c,F,n,i]//FullSimplify[#,Assumptions->i>-1]&//TraditionalForm

Ve finančním tisku se většinou uvádí hodnota A,I(Subscript[,, 0]):=C(1-{n}), nebere se v potaz hodnotící úroková míra. Ve všech případech je 0≤A,(Subscript[I, i])≤1 a 0≤A,(Subscript[I, 0])≤1.

Limit[((c F (-1+(((1+i))^(1-n+Floor[n]))))/i),i->0]//FullSimplify[#1,Assumptions->n≥0]&//TraditionalForm

Rozdíl mezi A,(Subscript[I, i]) a A,(Subscript[I, 0]):

Manipulate[Plot[({c F t,accruedinterest[c,F,1-t,i]}/.{F->1})//Evaluate,{t,0,1},PlotPoints->500,Exclusions->None,AxesLabel->{t,AI},PlotLabel->"AI a (Subscript[AI, 0])",PlotStyle->{{Dashed,Thick},{Orange,Thick}}],
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{i,0.5,"i"},0.01,0.50,0.01,Appearance->"Labeled"},SaveDefinitions->True]

A,(Subscript[I, 0])-A,(Subscript[I, i]); Derivace podle t je pro i>0 záporná, takže ∀0<t<1 je A,(Subscript[I, 0])>A,(Subscript[I, i]). (Srovnejte s analogickým výsledkem pro současnou hodnotu při úročení jednoduchém a složeném a úrokovém období kratší jednoho roku.)

dif=(c F t-accruedinterest[c,F,1-t,i]/.{F->1})//FullSimplify[#,Assumptions->i>0∧c>0∧0<t<1]&
D[dif,t]

Výnos do splatnosti (YTM) je definován jako IRR (vnitřní míra výnosnosti) peněžního toku {-MP,C,...,C,C+F}, kde MP je pořizovací cena (tržní cena, market price).

Clear[YTMdirty];
(* Používá se počáteční aproximace Hawawini & Vora, viz [3], str. 42 *)
YTMdirty[MP_,c_,F_,n_]:=Module[{ytm0=((c F+(F-MP)/n)/(0.6 MP+0.4 F)),ytm},
{ytm0,ytm/.FindRoot[dirtyvalue[c,F,n,ytm]==MP,{ytm,ytm0}]}(*//Last*)]

Manipulate[Plot[YTMdirty[MP,c,F,T-t],{t,0,0.9T},PlotPoints->500,Exclusions->None,AxesLabel->{t,YTM},PlotStyle->Thick,PlotRange->{{0,T},{0,0.2F}}],
{{T,10,"T",Appearance->"Labeled"},1,30,1,Appearance->"Labeled"},
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{F,1,"F"},1,10,Appearance->"Labeled"},
{{MP,F+c F,"MP"},0.4F,1.4F,0.05F,Appearance->"Labeled"},
SaveDefinitions->True]

Clear[YTMclean];
(* Používá se počáteční aproximace Hawawini & Vora, viz [3], str. 42 *)
YTMclean[MP_,c_,F_,n_]:=Module[{ytm0=((c F+(F-MP)/n)/(0.6 MP+0.4 F)),ytm},
{ytm0,ytm/.FindRoot[cleanvalue[c,F,n,ytm]==MP,{ytm,ytm0}]}(*//Last*)]

Manipulate[Plot[YTMclean[MP,c,F,T-t],{t,0,0.9T},PlotPoints->500,Exclusions->None,AxesLabel->{t,YTM},PlotStyle->Thick,PlotRange->{{0,T},{0,0.2F}}],
{{T,10,"T",Appearance->"Labeled"},1,30,1,Appearance->"Labeled"},
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{F,1,"F"},1,10,Appearance->"Labeled"},
{{MP,F+c F,"MP"},0.4F,1.4F,0.05F,Appearance->"Labeled"},
SaveDefinitions->True]

Příklad

Znázornění ve skutečném (a ne invertovaném) čase:

Kuponova obligace s kuponovou sazbou c=0.1, splatnost T=10, nominalni hodnota F=1, hodnotici urokova sazba i=0.15, tj. diskontni obligace.

p12=Plot[{dirtyvalue[0.1,1,10-n,0.15],cleanvalue[0.1,1,10-n,0.15]},{n,0,10},Exclusions->None,PlotPoints->500,PlotStyle->Thick,AxesLabel->{t,PV}]

Kuponova obligace s kuponovou sazbou c=0.1, splatnost T=10, nominalni hodnota F=1, hodnotici urokova sazba i=0.1.

p3=Plot[dirtyvalue[0.1,1,10-n,0.1],{n,0,10},Exclusions->None,PlotStyle->{{Dashing[{0.01,0.01}],Black,Thick}},AxesLabel->{t,PV}]

Kuponova obligace s kuponovou sazbou c=0.1, splatnost T=10, nominalni hodnota F=1, hodnotici urokova sazba i=0.05, tj. premiova obligace.

p45=Plot[{dirtyvalue[0.1,1,10-n,0.05],cleanvalue[0.1,1,10-n,0.05]},{n,0,10},PlotPoints->500,Exclusions->None,PlotStyle->Thick,AxesLabel->{t,PV}]

Show[p12,p3,p45,PlotRange->All]

Obecně

Manipulate[Plot[{dirtyvalue[c,f,T-t,i],cleanvalue[c,f,T-t,i],cleanvalue[c,f,T-t,c]},{t,0,T},PlotPoints->500,Exclusions->None,AxesLabel->{"t","PV"},PlotStyle->Thick,PlotRange->{{0,T},{0,2f}}],
{{T,10,"T",Appearance->"Labeled"},5,30,1,Appearance->"Labeled"},
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{f,1,"F"},1,1000,50,Appearance->"Labeled"},
{{i,0.15,"i"},0.01,0.20,0.01,Appearance->"Labeled"},SaveDefinitions->True]

Alikvótní úrok (Všimněte si, že změny úrokové míry se na grafu neprojeví.)

Manipulate[Plot[{dirtyvalue[c,f,T-t,i]-cleanvalue[c,f,T-t,i]},{t,0,T},PlotPoints->500,Exclusions->None,PlotStyle->Thick,AxesLabel->{t,AI},PlotLabel->"Alikvótní úrok",PlotRange->{{0,T},{0,0.22 f}}],
{{T,10,"T",Appearance->"Labeled"},1,30,1,Appearance->"Labeled"},
{{c,0.1,"c"},0.01,0.20,0.01,Appearance->"Labeled"},
{{f,1,"F"},1,1000,50,Appearance->"Labeled"},
{{i,0.15,"i"},0.01,0.20,0.01,Appearance->"Labeled"},SaveDefinitions->True]

Konec 7. 5. 2014

Duration of a coupon bond

Definice durace kuponove obligace

((c F(∑_(j=1)^n)j (v^j)+F n (v^n))/(c F(∑_(j=1)^n) (v^j)+F  (v^n)))/.v->(1/(1+i))//PowerExpand//FullSimplify

Clear[cleanduration,dirtyduration,v];
(cleanduration[c_,F_,n_,i_]=1+(1/i)-((1+i+c n-i n)/(i+c (-1+(((1+i))^n))))//FullSimplify[#,Assumptions->i>-1]&)//TraditionalForm
(dirtyduration[c_,F_,n_,i_]=((c F (∑_(j=0)^(⌊n⌋)) (n-⌊n⌋+j) (v^(n-⌊n⌋+j))+F n (v^n))/(c F (v^(n-⌊n⌋)) (∑_(j=0)^(⌊n⌋))(v^j)+F (v^n))/.v->(1/(1+i)))//FullSimplify[#,Assumptions->i>-1]&)//TraditionalForm

Plot[{dirtyduration[0.1,1,10-t,0.15],cleanduration[0.1,1,10-t,0.15]},{t,0,10},PlotPoints->500,Exclusions->None]

Plot[{dirtyduration[0.1,1,10-n,0.05],cleanduration[0.1,1,10-n,0.05]},{n,0,10},PlotPoints->500,Exclusions->None]

*FinancialBond (obligace, dluhopis)

Tento odstavec slouží k procvičení.

*Popis zabudované funkce

FinancialBond (* Označte kursorem a stiskněte F1 *)

Označení: “FaceValue” nominální hodnota F, “Coupon” kuponova sazba c, “Maturity” doba do splatnosti od okamziku vydani T, “Settlement” hodnotici okamzik t, “InterestRate” hodnotici urokova mira r, trzni urokova mira pro srovnatelnou investici, cenu kapitalu, “CouponInterval” rocni frekvence vyplaty kuponu 1/f, (f=2 znamena dvakrat rocne), “DayCountBasis” kalendářová konvence, “AccruedInterest” alikvotni urok, “Value” clean value, “FullValue” dirty value.

POZOR NA SYNTAXI!!! PRI RESENI ULOH ZKOPIRUJTE Z HELPU!!!

propertiesFinancialBond=FinancialBond["Properties"]

Poznamka: Properties:

({{"Value", price adjusted for accrued interest}, {"FullValue", unadjusted price}, {"AccruedInterest", accrued interest at settlement}, {"Duration", Macaulay duration}, {"ModifiedDuration", modified duration}, {"Convexity", convexity}, {"CouponPeriodDays", days in coupon period containing the settlement}, {"CouponToSettlementDays", days from previous coupon to settlement}, {"SettlementToCouponDays", days from settlement to next coupon}, {"NextCouponDate", next coupon date}, {"PreviousCouponDate", previous coupon date}, {"RemainingCoupons", remaining coupon payments}})

1 Příklad (numerický)

Současná hodnotící úroková míra je  6%. Jaká je spravedlivá cena kuponové obligace splatné za 30 let s roční kuponovou sazbou 5.75% a nominální hodnotou 1000Kč?

FinancialBond[{"FaceValue"->1000,"Coupon"->0.0575,"Maturity"->30},{"InterestRate"->0.06,"Settlement"->0}]

2 Příklad (numerický)

10 - letá obligace, nominální hodnota 1000Kč, kupon dvakrát ročně, kupon 5.75% p.a., hodnocená 9 měsíců po vydání, hodnotící úr. míra r=5% p.a.:

FinancialBond[{"FaceValue"->1000,"Coupon"->0.0575,"Maturity"->10,"CouponInterval"->(1/2)},{"InterestRate"->0.05,"Settlement"->(9/12)}]

3 Příklad (numerický)

F=1000, c=0.04, kupon ctvrtletni, splatnost 31. 12. 2030, hodnocena ke dni 5. 9. 2013, r=0.06.

FinancialBond[{"FaceValue"->1000,"Coupon"->0.04,"Maturity"->{2030,12,31},"CouponInterval"->(1/4)},{"InterestRate"->.06,"Settlement"->{2013,9,5}}]

Graficky v zavislosti na hodnotici urokove mire:

Plot[FinancialBond[{"FaceValue"->1000,"Coupon"->0.04,"Maturity"->{2030,12,31},"CouponInterval"->(1/4)},{"InterestRate"->r,"Settlement"->{2013,9,5}}],{r,0.03,0.05}]

4 Priklad (alikvótní úrok)

Alikvotni urok pri kalendari "Actual/360". Ostatni je zrejme z predchoziho vykladu.

FinancialBond[{"FaceValue"->1000,"Coupon"->0.07,"Maturity"->{2030,12,31},"CouponInterval"->(1/2)},{"InterestRate"->0.06,"Settlement"->{2010,11,12},"DayCountBasis"->"Actual/360"},"AccruedInterest"]

ListPlot[Table[FinancialBond[{"FaceValue"->1000,"Coupon"->0.07,"Maturity"->{2030,12,31},"CouponInterval"->(1/2)},{"InterestRate"->0.06,"Settlement"->{2010,11,d},"DayCountBasis"->"Actual/360"},"AccruedInterest"],{d,1,30}]]

Cviceni:
Graficky znazornete alikvotni urok jako funkci hodnoticiho data pro obdobi 1.11.2010 az 31.12.2013. Navod: Pouzijte funkci DaysPlus.

5 Příklad (výnos do splatnosti)

Vynos do splatnosti (YTM, Yield To Maturity, zde nazyvany “Implied yield to maturity”) obligace, ktera se 3.5.2013 prodavala za trzni cenu 900.

FindRoot[FinancialBond[{"FaceValue"->1000,"Coupon"->0.05,"Maturity"->{2018,6,31},"CouponInterval"->(1/4)},{"InterestRate"->ytm,"Settlement"->{2013,5,3}}]==900,{ytm,.1}]

6a Příklad (explicitni vzorce)

Je mozne ziskat i explicitni vzorce:

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t}]//Apart//TraditionalForm

Value

(value=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},"Value"])//Apart//FullSimplify//TraditionalForm

FullValue

(fullvalue=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},"FullValue"])//Apart//TraditionalForm

Alikvótní úrok

(accrued=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},"AccruedInterest"])//Apart//TraditionalForm

fullvalue-value//FullSimplify//TraditionalForm

fullvalue-value==accrued//FullSimplify

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->5},{"InterestRate"->r,"Settlement"->0}]
%//Apart//TraditionalForm

6b Příklad (explicitni vzorce pro vsechny vlastnosti)

propertiesFinancialBond

Map[{#,FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},#]//FullSimplify}&,propertiesFinancialBond]//TableForm

7 Příklad (Durace, konvexita)

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->0},"Duration"]//Simplify

Podobně konvexita, místo “Duration” použít “Convexity”.

8 Příklad (Hodnoceni pri uziti urokovych mer ze spotove vynosove krivky)

vynosovakrivka=Thread[Range[5]->Table[(Subscript[R, i]),{i,5}]]

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->5},{"InterestRate"->vynosovakrivka,"Settlement"->0}]
%//Apart//TraditionalForm

***9 Příklad (Nahodna urokova mira)

pricer=FinancialBond[{"FaceValue"->1000,"RedemptionValue"->1100,"Coupon"->0.07`,"Maturity"->5,"CouponInterval"->(1/2)},{"InterestRate"->r,"Settlement"->0}]

Expectation[pricer,r\[Distributed]NormalDistribution[0.05,0.01]]

V teto podobe nefunguje. Ale treba pro dobu do splatnosti funguje:

pricet=FinancialBond[{"FaceValue"->1000,"RedemptionValue"->1100,"Coupon"->0.07`,"Maturity"->t,"CouponInterval"->(1/2)},{"InterestRate"->.09,"Settlement"->0}]
Expectation[pricet,t\[Distributed]NormalDistribution[12.5,1]]

***10 Příklad (Rules)

Je mozne ziskat i explicitni vzorce:

(FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t}]/.f->1)//FullSimplify[#,Assumptions->i>-1]&

Value

(value=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"Value"]/.f->1)//FullSimplify[#,Assumptions->i>-1]&
(%/.i->(1/v)-1)//FullSimplify[#,Assumptions->0<v<1]&

(value=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"Value"]/.{f->1,t->0})//FullSimplify[#,Assumptions->i>-1]&

FullValue

(fullvalue=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"FullValue"]/.f->1)//FullSimplify[#,Assumptions->i>-1]&

FullValue minus value

fullvalue-value//FullSimplify[#,Assumptions->i>0]&

Alikvótní úrok

(accrued=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"AccruedInterest"]/.f->1)//TraditionalForm

Rules

(rules=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->i,"Settlement"->t},"Rules"]/.f->1)//FullSimplify[#,Assumptions->i>-1]&
(%/.i->(1/v)-1)//FullSimplify[#,Assumptions->0<v<1]&

(value+accrued-fullvalue//FullSimplify[#,Assumptions->i>0]&)/.{t->3.4,T->6,i->.05}

fullvalue-value//FullSimplify

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->5},{"InterestRate"->r,"Settlement"->0}]
%//Apart//TraditionalForm

***11 Příklad ([3] Cipra, Matematika cenných papírů, 2013, str. 29 a dále)

Pozor, ve vzorcích zde figuruje kupónová sazba c=C/F!!!

Clear[cipraPV124,cipraVτ126,cipraCτ127];
(* Vzorec 1.2.4 *)
{(cipraPV124[c_,F_,n_,i_]=Module[{v},c F  (∑_(j=1)^n)(v^j)+F (v^n)/.v->(1/(1+i))]//FullSimplify[#,Assumptions->i>-1]&)//Apart//TraditionalForm,
(* Vzorec 1.2.6 *)(cipraVτ126[c_,F_,n_,τ_,i_]=(((1+i))^τ)cipraPV124[c,F,n,i]//FullSimplify[#,Assumptions->i>-1]&)//Apart//TraditionalForm,(cipraCτ127[c_,F_,n_,τ_,i_]=((c F)/i)((((1+i))^τ)-1)//FullSimplify[#,Assumptions->i>-1]&)//Apart//TraditionalForm}
(%[[2]]-%//Last)//FullSimplify[#,Assumptions->i>-1]&

C (v^(-τ))(∑_(j=1)^n)(v^j)+F (v^(n-τ))
(%/.v->(1/(1+i)))//FullSimplify[#,Assumptions->i>-1]&

***12 Příklad ([3] Cipra, Matematika cenných papírů, 2013, str. 100 a dále, Příklad 1.7.1)

Plot[{FinancialBond[{"FaceValue"->10000,"Coupon"->0.1,"Maturity"->3},{"InterestRate"->.05,"Settlement"->0}](1.05^t),
FinancialBond[{"FaceValue"->10000,"Coupon"->0.1,"Maturity"->3},{"InterestRate"->.1,"Settlement"->0}](1.1^t),
FinancialBond[{"FaceValue"->10000,"Coupon"->0.1,"Maturity"->3},{"InterestRate"->.15,"Settlement"->0}](1.15^t)}//Evaluate,{t,2.7,2.8}]

8858.39 (1.15^3)

***Obligace (bonds)

Assuming[t ∈Reals∧T∈Integers∧0<t<T,Simplify[T-Floor[T-t]]]
Assuming[t ∈Reals∧T∈Integers,Simplify[Floor[T+t]]]
Assuming[t ∈Reals∧T∈Integers,Simplify[Floor[T-t]]]
Assuming[t ∈Reals∧T∈Integers∧¬(t∈Integers),Simplify[Floor[T-t]]]
Assuming[x ∈Reals∧n∈Integers∧x>0,Simplify[Ceiling[x]-Floor[x]-1]]
Assuming[x ∈Reals∧n∈Integers,n-Ceiling[x]==n-Floor[x]-1]
Plot[-1+Ceiling[x]-Floor[x],{x,-2.5,2.5},PlotStyle->{Red,Thick}]

Hodnocení investic (Investice s pohyblivým výnosem)

Svolatelný dluhopis (vypověditelný, callable bond)

Emitent může dluhopis splatit (odkoupit, svolat) před uplynutím normální doby splatnosti. Zpravidla tak učiní v případě, že má přístup k “levnějším” penězům než musí platit v úrocích emitovaného dluhopisu. Pro držitele dluhopisu (investora) to bývá nevýhodné (emitent obvykle svolává v případě, že tržní ú. m. je nižší než kupónová sazba, investor tedy obvykle na trhu nenajde stejně výhodnou investiční příležitost) , takže emitent musí nabídnout určitou kompenzaci. Ta je obvykle zakotvena ve svolávacím plánu (call schedule).

Je-li T doba do splatnosti, nominální hodnota F, pak emitent může obvykle svolat v okamžicích (Subscript[T, -k])=T-k, k=1,...,K    se splatnými částkami (Subscript[F, -1]),...(Subscript[F, -K]). Z podstaty věci vyplývá, že by mělo platit (Subscript[F, -k])>F. K exaktnímu hodnocení musíme též znát pravděpodobnosti svolání (Subscript[p, -1]),...(Subscript[p, K]) v okamžicích (Subscript[T, -1]),...,(Subscript[T, K]). Je přirozené, že tyto pravděpodobnosti se mění v závislosti na tržní situaci a jsou závislé na hodnotícím okamžiku t: (Subscript[p, -1])(t),...(Subscript[p, K])(t). Struktura CALL opce je tedy poměrně komplikovaná.

V praxi se uvádějí svolávací ceny v procentech: (Subscript[F, 0])=100%,(Subscript[F, -1])=102%,(Subscript[F, -2])=104%,....

Mluví se o též dluhopisu s vnořenou opcí (embedded option). Opci může uplatnit emitent (je v dlouhé pozici), takže

(cena svolatelného dluhopisu) = (cena ekvivalentního dluhopisu bez možnosti svolání) - (cena CALL opce).

***Price of a callable bond is always lower than the price of a straight bond because the call option adds value to an issuer. Yield on a callable bond is higher than the yield on a straight bond.

Viz též [3], str. 11, 90 a dále.

Poznámka (puttable bond)

V tomto případě má držitel právo prodat dluhopis emitentovi, opět za předem dohodnutých podmínek (prodejní opce). Exisují také dluhopisy s oběma opcemi, CALL opce a PUT opce se vzájemně nevylučují.

Amortizované obligace

Emitent nesplatí v okamžiku vypršení nominální hodnotu, ale “amortizuje” ji v konstatních kupónech. Místo standardního peněžního toku pro běžnou kupónovou obligaci {C,C,...,C,C+F} tak investor dostává anuitu {(SuperStar[C]),(SuperStar[C]),...,(SuperStar[C])}. Amortizovaná obligace je, ceteris paribus, méně riskantní (proč?), takže “ekvivalentní” kupón bude nižší než vypočtený z přesné ekvivalence peněžních toků (samozřejmě závislých na hodnotící ú. m.).

Dluhopisy za nejistoty

Simple Bonds under Uncertainty I

Suppose that a zero coupon bond pays F with probability p and pays η,F with probability 1-p at maturity, where η ∈[0, 1) is called the recovery rate (míra pokrytí, míra zotavení), and  λ:=1-η  is called the loss rate (ztrátový poměr). The case η=0  is equivalent to the default (nesplacení). Suppose that the valuation interest rate is r. The fair value of the bond is the expected present value:

(OverBar[PV]) =(1/(1+r))[p,F+(1-p)η,F]

Simple Bonds under Uncertainty 2

Uvažujme pro změnu obligaci s nulovým kuponem splatnou za jeden rok s nominální hodnotou F=1, ale ve skutečnosti vyplaíi X, kde X je náhodná veličina, 0≤X≤1. Nechť r je hodnotici urokova mira. Spravedlivá hodnota obligace je pak

(OverBar[PV]) =(1/(1+r))E,X

Stanovení rizikové přirážky

Podobnou myšlenku můžeme užít i pro hodnoceni půjček, resp. při stanovení prémie z rizika nesplacení (default risk premium). Předpokládejme, že půjčka ve výši PV = 1 je splatná za 1 rok, ale ve skutečnosti dlužník splatí náhodnou částku X, 0≤X≤1, úrok v to nepočítaje. Otázkou je, jaká by měla být prémie za riziko z nesplacení (Subscript[r, default]) účtovaná věřitelem, aby dostal v průměru bezrizikový úrok (Subscript[r, 0]). Jistá budoucí hodnota půjčky je 1+(Subscript[r, 0]), takže věřitel by měl požadovat rizikovou přirážku vyplývajici ze vztahu

1+(Subscript[r, 0])=(1+(Subscript[r, 0]))(1+(Subscript[r, default]))E,X

z čehož

(Subscript[r, default])=(1/(E,X))-1.

Finanční deriváty: opce

Arbitráž a zajišťování (hedging)

All the models treated assume no-arbitrage principle, in other words, the absence of arbitrage opportunities. By an arbitrage opportunity we mean any of the two situations:
(1) At the same time, the same asset is sold at different prices at different places. Nowadays, this can hardly happen in the financial world since the information from one stock exchange is available on the stock exchange on the opposite side of the globe within a second.
(2) With zero investment at time 0 there is no probability of loss but there is a possibility of a riskless profit at time 1. More rigorously, an arbitrage opportunity in this case is a self-financing trading strategy with no initial investment, and a positive probability of positive profit and zero probability of negative profit later on.

Arbitrage opportunity is often characterized as a “money pump” and no-arbitrage
principle by the slogan: “There is no such thing like a free lunch.”.

Velmi často se setkáme s následujicí, poněkud nepřesnou terminologií.
Investor je v krátké pozici, short position, jestliže nějaké aktivum nevlastní, ale má závazky z něj plynoucí. Obvykle se jedná o emitenta dluhopisu nebo prodávajicího opce. V dlouhé pozici, long position je investor, ktery je držitelem (kupujícim) nějakého aktiva, ze kterého pro protistranu plynou nějaké závazky. V připadě opcí investorovi v krátké pozici nezbývá než trpně přihližet, jak se bude trh vyvíjet, a jak se protistrana zachová. V případě racionálně se chovajícího se investora v dlouhé pozici je jeho rozhodnutí determinováno trhem.

Zkráceně se někdy dlouhá pozice značí “+“, krátká “-“.

Příklad arbitráže

Nulová investice v čase 0 a nenulová pravděpodobnost zisku v čase 1 a nulová pravděpodobnost ztráty v čase 1.

Cena akcie v čase t je (Subscript[S, t]), t=0,1. V čase t=0 si půjčím částku B=-(Subscript[S, 0]), (úroková míra r) a za ní  si koupím akcii. Moje bilance (hodnota portfólia) v čase t=0 je (Subscript[S, 0])+B=0. V čase t=1 je hodnota portfólia (Subscript[S, 1])+(1+r)B. Jestliže P((Subscript[S, 1])+(1+r)B>0)>0 a zároveň P((Subscript[S, 1])+(1+r)B<0)=0, jedná se o arbitráž.

Bezriziková úroková míra

Abstraktní pojem, předpokládá se že existuje úroková míra (Subscript[r, 0]), která je stejná pro dlužníky, vypůjčovatele (borrowers) i věřitele (lenders). Investice při této ú. m. poskytují zaručený, jistý výnos. S touto úrokovou mírou se setkáváme v řadě modelů. V praktických výpočtech se obvykle nahražuje (proxy) úrokovou mírou výnosu státních dluhopisů (poukázek). V současnosti při tzv. “kvantitavním uvolňování” (rozuměj tištění nekrytých bankovek) jak v USD tak EUR zóně je možné o bezrizikovosti s úspěchem pochybovat. To také platí při iracionálních zásazích centrální banky.

***Záleží na kontextu, stejná pro dlužníky, vypůjčovatele (borrowers) i věřitele (lenders) je jistě nereálné, navíc transakční náklady.

Evropské a americké opce (vanilla options)

r ... bezriziková úr. míra (nekdy značena  (Subscript[r, 0]))
(Subscript[S, t]) ... cena podkladového aktiva (akcie) v čase t
(Subscript[c, t]) resp. (Subscript[p, t]) ... cena evropské CALL resp. PUT opce
K ... realizační cena
T ... čas vypršení evropské opce

PUT - CALL parita

Black-Scholesův vzorec

We assume that the stochastic process of the prices  (Subscript[{(Subscript[S, t])}, t≥0]) is goverened by a geometrical Brownian motion, hence

({{({{ℒ((Subscript[S, T])|(Subscript[S, t]))=L,N(ln (Subscript[S, t])+(μ-(1/2)(σ^2))(T-t),(σ^2)(T-t))}})}})

Under the risk neutral valuation μ ⟶ r and

({{({{(SuperStar[ℒ])((Subscript[S, T])|(Subscript[S, t]))=L,N(ln (Subscript[S, t])+(r-(1/2)(σ^2))(T-t),(σ^2)(T-t))}})}})

Then

({{({{(SuperStar[E])((Subscript[S, T])|(Subscript[S, t]))=}})}})

Mean[LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]//Simplify//TraditionalForm

Viz [1], str. 55-56.

and

({{({{(SuperStar[var])((Subscript[S, T])|(Subscript[S, t]))}})}})

Variance[LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]//Simplify//TraditionalForm

Důležité! Volatilita a implikovaná volatilita viz [1], str. 61-62.

Portfolia opcí

Příklad v [1], str. 62-63.

Forwardy a futures

Na rozdíl od opcí je smlouva mezi stranami závazná. Forwardy jsou individuálně uzavírané kontrakty o budoucím vypořádání, futures standardizované).

4.3.2 Termínové obchody: Forwardy a futures

Připomeňme nejprve mechanismus fungování opcí. U nich investor (držitel, kupující) v dlouhé pozici má právo, nikoli povinnost své právo zakotvené v opční smlouvě uplatnit. To znamená,že podkladové aktivum (underlying) může buď koupit (v případě CALL opce) nebo prodat (v případě PUT opce). Prodávající (pisatel) pak trpně čeká, jak se vyvíjí tržní situace, a jestli držitel své právo uplatní. Ten tak ovšem učiní v případě, že uplatněním opce dosáhne zisku nebo alespoň bude minimalizovat ztrátu vzniklou náklady na pořízení opce.

U kontraktů typu forward a futures není možná volba jako u opcí. Pro obě strany je smlouva závazná, tudíž tady v okamžiku uzavření kontraktu neexistuje cena kontraktu v pravém slova smyslu. Forwardový kontrakt je termínový obchod, smlouva mezi dvěma partnery (řekněme A a B), ve kterém se strana kupující A (v dlouhé pozici) zavazuje koupit od strany prodávající B (v krátké pozici) určitou komoditu v určeném množství za určitou cenu F fixovanou v okamžiku uzavření kontraktu v určitém budoucím termínu T (dodání, delivery). Vše je závazně domluveno dnes, dejme tomu v okamžiku  t = 0, a vlastní transakce proběhne ve sjednaném termínu v budoucnosti T, t≤T. Obě strany jsou povinné své závazky splnit. Předpokládejme dále, že aktuální cena podkladového aktiva v okamžiku uzavření kontraktu je (Subscript[S, 0]).

Pozice obou stran v kontraktu je symetrická. V okamžiku vypořádání zisk jedné strany jest roven ztrátě druhé strany. Jestliže  smluvená cena kontraktu v čase vypořádání T je F, pak strana A obdrží v okamžiku T částku (Subscript[S, T])-F a strana B přirozeně obdrží  F-(Subscript[S, T]). To, co se obvykle v teorii neuvažuje, jsou transakční náklady. Pro individuálně uzavřené kontrakty mohou být nezanedbatelné.

Tyto kontrakty mají minimálně tyto dvě funkce. První: ochrana (uhájení) ceny komodity, která je předmětem kontraktu. Druhá: transfer vlastnictví; fixováním ceny dnes (v čase t) je kupující chráněn (jištěn) proti případné vyšší ceně v okamžiku vypořádání kontraktu (tj. okamžité (spotové) ceně na trhu v okamžiku dodání). Prodávající je chráněn (jištěn) proti případné nižší promtní ceně v okamžiku vypořádaní kontraktu (tj. okamžité ceně na trhu v okamžiku dodání).

Obchodování s forwardy není prakticky regulováno, jsou to obchody individuální, takže riziko z nesplacení (default) je nezanedbatelné. V tomto případě se rizikem selhání myslí to, že strana v dlouhé pozici cukne, nebude chtít koupit nebo strana v krátké pozici odmítne prodat. Toto riziko je z velké části eliminováno standardizací. Není možné postihnout všechny individuální obchody a převést je ke globálnímu obchodování, nicméně je mnoho komodit (obilí, ropa, strategické kovy, měny, . . . ), které je možné dovést ke standardizovanému obchodování. Standardizované obchody tohoto typu se provádějí na specializované burze a nazývají se futures.

Futures: Z matematického hlediska jsou forwards a futures prakticky totožné. Proto se na hodnocení futures vztahují stejná kritéria jako na forwardy. Dále budeme mluvit o hodnocení forwardů.

Uvedeme některé přístupy k hodnocení forwardových kontraktů. Nejprve uveďme hodnocení na základě principu neexistence arbitráže. Jako dříve předpokládáme, že cena podkladového aktiva v čase t=0 je (Subscript[S, 0]) a z držení aktiva neplynou žádné závazky např. ve formě dividend. Dále uvažujeme bezrizikovou hodnotící úrokovou míru r.

Strana B, krátká v kontraktu, jest povinnou doručit (deliver) částku (Subscript[S, T]) v okamžiku T. Strana B si vypůjčí částku (Subscript[S, 0]) v čase t=0 (čas uzavření kontraktu), koupí předmětné aktivum a v čase T obdrží F. Touto částkou (F) splatí půjčku, která v čase T je ve výši budoucí honoty (Subscript[S, 0])(e^(r,T)) , takže forwardová cena je

F=(Subscript[S, 0])(e^(r,T))

V okamžiku t=0 si strany nevyměňují žádné peníze, hodnota kontraktu je tudíž nulová.
V libovolném čase 0≤t≤T je však hodnota kontraktu

(Subscript[f, t])=(Subscript[S, t])-F,(e^(-r(,T-t)))

V takovém okamžiku může každá ze stran „uzamknout, lock” svou pozici tak, že uzavře pozici opačnou. Může tak fixovat zisk nebo ztrátu. Je-li (Subscript[S, t])<F,(e^(-r(T-t))), strana B si půjčí (Subscript[S, t]), koupí akcii, v okamžiku T splatí (Subscript[S, t])(e^(r(T-t))) a akcii prodá za F. Je-li naopak (Subscript[S, t])>F,(e^(-r(T-t))), strana A prodá akcii nakrátko, dostane za ni (Subscript[S, t]), tuto částku uloží a v okamžiku T vybere (Subscript[S, t])(e^(r(T-t)))>F. Koupí akcii za F a akcii vrátí.

4.3.9 Poznámka. (Ekvivalentní portfolio) Výplatní funkce forwardu v dlouhé pozici je (Subscript[S, T])-F. Dlouhá pozice ve forwardu je ekvivalentní v dlouhé evropské CALL a krátké pozici v evropské PUT, obě se stejnou dobou vypršení, stejnou realizační cenou K=F jako má forwardový kontrakt. Taková kombinace opcí má stejnou výplatní funkci jako forward, a tedy i v okamžiku uzavření kontraktu musí mít stejnou hodnotu. V čase t=0 (okamžik uzavření kontraktu) je však hodnota kontraktu nulová (nedochází k žádné výměně peněz), jinými slovy (Subscript[c, 0])-(Subscript[p, 0])=0,  takže z PUT-CALL parity vyplývá vzorec pro F.

4.3.10 Poznámka. (Hodnocení pomocí Black–Scholesovy formule) Při rizikově neutrálním
oceňování a předpokladu, že cena akcie se řídí Black–Scholesovým vzorcem, je E((Subscript[S, T])|(Subscript[S, 0]))=(Subscript[S, 0])(e^(r,T)).  Výplatní funkce forwardu je (Subscript[S, T])-F. Střední hodnota této funkce podmíněná známou cenou akcie v okamžiku uzavření kontraktu t=0 a diskontovaná k okamžiku 0 je tedy (Subscript[S, 0])-F,(e^(-r,T)). Tento výraz je však roven nule, neboť v okamžiku uzavření kontraktu je cena nulová.
(WILMOTT Students, p. 99)

**FinancialDerivative v systému  Mathematica  (v této verzi (9) zatím omezeno jenom na opce)

FinancialDerivative

Označení: “StrikePrice” realizacni cena K, “Expiration” doba do splatnosti, doba do vyprseni T, pokud se uvede “ReferenceTime” t, pak je to T-t,  “InterestRate” bezrizikova urokova mira (Subscript[r, 0]), “Volatility” volatilita ceny podkladoveho aktiva σ (underlying asset), “CurrentPrice” soucasna cena podkladoveho aktiva (Subscript[S, 0]) resp. (Subscript[S, t]) . “Dividend” je dividendova intenzita q. Vsechny udaje se vztahuji ke stejnemu casovemu obdobi, typicky 1 rok.

(* vsechny zabudovane derivaty, zde zvane "Contracts" *)
FinancialDerivative[](* //Length *)

POZOR NA SYNTAXI!!! PRI RESENI ULOH ZKOPIRUJTE Z HELPU!!! Typicky ma FinancialDerivative 3 az 4 argumenty, kazdy z nich je seznam (list).

1 Priklad (hodnoty opci)

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

2 Priklad (hodnoty opci a jejich citlivosti, The Greeks)

Opce z predchoziho prikladu, vystupem hodnota opce a citlivosti

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

2 Priklad (Graficke znazorneni)

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,40,60},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->Thick],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

Manipulate[Plot[FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,45,55},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->Thick],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

3 Priklad (Graficke znazorneni)

FinancialDerivative[]//Length

Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,30,60}]

Plot[Table[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{t,{0,0.01,0.1,0.5,1}}],{st,30,60}]

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,40,60},PlotRange->{0,15},PlotStyle->Thick],
{{t,0,"Doba do vyprseni"},0,1},SaveDefinitions->True]

Hodnota evropske CALL a citlivosti (Value and all Greeks of a European call option):

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Podle (podle mne pochybne konstrukce, viz DHS)  teorie by mela byt hodnota americke CALL stejna jako evropske. Ejhle, neni!!!

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Hodnocení derivátů typu Cap (strop) a Floor  (dno)

Důvod, proč ve funkci FinancialDerivative není volba Cap resp. Floor (přesněji Caplet a Floorlet) vidím v tom, že tyto pojmy nejsou jednoznačně definovány a možností je celá řada. Obvykle jsou však kombinací elementárních finančních instrumentů (obligací, opcí, apod.)

Uvedeme ilustraci Cap na evropskou CALL opci s dobou vypršení T a realizační cenou K. Chrání investora v krátké pozici před neomezenou ztrátou. V případě, že cena (Subscript[S, T]) podkladového aktiva je v okamžiku vypršení vyšší než B,  vyplácí se B.

vyplataCAPnaCALL[St_,K_,B_]:=Min[Max[St-K,0],B]
Plot[vyplataCAPnaCALL[st,1,2],{st,0,5},PlotStyle->Thick]

Dlouhá pozice v tomto finančním instrumentu je ekvivalentní držení portfolia dvou CALL opcí, obě se stejnou dobou vypršení, jedna v dlouhé pozici s realizační cenou K, druhá v krátké pozici s realizační cenou K+B.

vyplataportfolia[St_,K_,B_]:=Max[St-K,0]-Max[St-K-B,0]
Plot[vyplataportfolia[st,1,2],{st,0,5},PlotStyle->Thick]

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

Cena tohoto instrumentu podle Black-Scholesova vzorce je tedy (musíme přidat bezrizikovou úrokovou míru r,0, volatilitu σ a dobu do vypršení T,t.

Clear[cenaCAPnaCALL];
cenaCAPnaCALL[St_,K_,B_,r0_,σ_,Tt_]:=FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]-FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K+B, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]

Plot[cenaCAPnaCALL[st,1,2,0.05,0.4,1],{st,0,5},PlotRange->{0,2},PlotStyle->Thick]

Vyzkoušejte si manipulovat s některými parametry:

Manipulate[Plot[cenaCAPnaCALL[st,1,2,0.05,σ,Tt],{st,0,5},PlotRange->{0,2},PlotStyle->Thick],{{σ,0.3},0.1,0.5},{{Tt,1},0.01,2},SaveDefinitions->True]

Hodnocení opcí a futures

Úvod

Arbitráž a zajišťování (hedging)

All the models treated assume no-arbitrage principle, in other words, the absence of arbitrage opportunities. By an arbitrage opportunity we mean any of the two situations:
(1) At the same time, the same asset is sold at different prices at different places. Nowadays, this can hardly happen in the financial world since the information from one stock exchange is available on the stock exchange on the opposite side of the globe within a second.
(2) With zero investment at time 0 there is no probability of loss but there is a possibility of a riskless profit at time 1. More rigorously, an arbitrage opportunity in this case is a self-financing trading strategy with no initial investment, and a positive probability of positive profit and zero probability of negative profit later on.

Arbitrage opportunity is often characterized as a “money pump” and no-arbitrage
principle by the slogan: “There is no such thing like a free lunch.”.

Velmi často se setkáme s následujicí, poněkud nepřesnou terminologií.
Investor je v krátké pozici, short position, jestliže nějaké aktivum nevlastní, ale má závazky z něj plynoucí. Obvykle se jedná o emitenta dluhopisu nebo prodávajicího opce. V dlouhé pozici, long position je investor, ktery je držitelem (kupujícim) nějakého aktiva, ze kterého pro protistranu plynou nějaké závazky. V připadě opcí investorovi v krátké pozici nezbývá než trpně přihližet, jak se bude trh vyvíjet, a jak se protistrana zachová. V případě racionálně se chovajícího se investora v dlouhé pozici je jeho rozhodnutí determinováno trhem.

Zkráceně se někdy dlouhá pozice značí “+“, krátká “-“.

Příklad arbitráže

Nulová investice v čase 0 a nenulová pravděpodobnost zisku v čase 1 a nulová pravděpodobnost ztráty v čase 1.

Cena akcie v čase t je (Subscript[S, t]), t=0,1. V čase t=0 si půjčím částku B=-(Subscript[S, 0]), (úroková míra r) a za ní  si koupím akcii. Moje bilance (hodnota portfólia) v čase t=0 je (Subscript[S, 0])+B=0. V čase t=1 je hodnota portfólia (Subscript[S, 1])+(1+r)B. Jestliže P((Subscript[S, 1])+(1+r)B>0)>0 a zároveň P((Subscript[S, 1])+(1+r)B<0)=0, jedná se o arbitráž.

Bezriziková úroková míra

Abstraktní pojem, předpokládá se že existuje úroková míra (Subscript[r, 0]), která je stejná pro dlužníky, vypůjčovatele (borrowers) i věřitele (lenders). Investice při této ú. m. poskytují zaručený, jistý výnos. S touto úrokovou mírou se setkáváme v řadě modelů. V praktických výpočtech se obvykle nahražuje (proxy) úrokovou mírou výnosu státních dluhopisů (poukázek). V současnosti při tzv. “kvantitavním uvolňování” (rozuměj tištění nekrytých bankovek) jak v USD tak EUR zóně je možné o bezrizikovosti s úspěchem pochybovat. To také platí při iracionálních zásazích centrální banky.

***Záleží na kontextu, stejná pro dlužníky, vypůjčovatele (borrowers) i věřitele (lenders) je jistě nereálné, navíc transakční náklady.

Evropské a americké opce (vanilla options)

r ... bezriziková úr. míra (nekdy značena  (Subscript[r, 0]))
(Subscript[S, t]) ... cena podkladového aktiva (akcie) v čase t
(Subscript[c, t]) resp. (Subscript[p, t]) ... cena evropské CALL resp. PUT opce
K ... realizační cena
T ... čas vypršení evropské opce

Výplatní funkce (payoff function) evropské opce

v okamžiku vypršení

CALL: (SuperPlus[((Subscript[S, T])-K)])

PUT: (SuperPlus[(K-(Subscript[S, T]))])

PUT - CALL parita (platí pouze pro evropské opce!)

({{({{(Subscript[S, t])+(Subscript[p, t])=(Subscript[c, t])+K,(e^(-r(T-t)))}})}})

Mnemotechnická pomůcka pro zapamatování: 
Císařsko-Královský Státní Podnik

Důkaz: viz též [1], str. 54. Uvažujme portfolio +PUT +akcie -CALL, vše na stejnou akcii, opce evropské se stejnou dobou vypršení. Hodnota portfolia v čase t≤T je

({{(Subscript[Π, t])=(Subscript[S, t])+(Subscript[p, t])-(Subscript[c, t]).}})

V čase vypršení T je hodnota tohoto portfolia

({{({{(Subscript[Π, T])=(Subscript[S, T])+(SuperPlus[(K-(Subscript[S, T]))])-(SuperPlus[((Subscript[S, T])-K)]).}})}})

V případě (Subscript[S, T])≤K je (Subscript[Π, T])=(Subscript[S, T])+K-(Subscript[S, T])-0=K, v případě (Subscript[S, T])>K je (Subscript[Π, T])=(Subscript[S, T])+0-((Subscript[S, T])-K)=K. To znamená, že portfolio je bezrizikové vedoucí k jistému zisku K. Budoucí hodnota je  (Subscript[Π, T])=K  a současná hodnota je tedy (Subscript[Π, t])=K,(e^(-r(T-t))).

Současná hodnota výplatní funkce (payoff function) evropské opce v čase t≤T

CALL: (SuperPlus[(e^(-r(T-t)))((Subscript[S, T])-K)])

PUT: (SuperPlus[(e^(-r(T-t)))(K-(Subscript[S, T]))])

Black-Scholesův vzorec

Risk Neutral Valuation

We assume that the stochastic process of the prices of an asset  (Subscript[{(Subscript[S, t])}, t≥0]) is goverened by a geometrical Brownian motion, hence

({{({{ℒ((Subscript[S, T])|(Subscript[S, t]))=L,N(ln (Subscript[S, t])+(μ-(1/2)(σ^2))(T-t),(σ^2)(T-t))}})}})

where μ is the rate of return on the underlying asset and σ its volatility.

Rizikově neutrální hodnocení: Investoři se chovají racionálně, čím větší riziko (volatilita), tím vyšší očekávaný výnos požadují. Čím vyšší averze k riziku, tím vyšší očekávaný výnos je požadován. Vyloučením rizikových preferencí dojdou investoři ke shodě na jediném rizikově neutrálním výnosu μ=r. Pozor, v žádném případě to neznamená, že by výnos podkladového aktiva byl roven r !!!

Alternativní princip vedoucí k témuž závěru: Očekávaný výnos z držení akcie v hodnotě (Subscript[S, t])  v období (t,T) by měl být stejný jako bezrizikový výnos z investice  ve výši (Subscript[S, t])  při úrokové míře r:

({{({{(SuperStar[E])((Subscript[S, T])|(Subscript[S, t]))=FV((Subscript[S, t]),r)=(Subscript[S, t])(e^(r(T-t)))}}).}})

Hvězdičkou zde i v dalším značíme skutečnost, že za výnos bereme rizikově-neutrální výnos r.

Neuvažujeme-li žádné rizikové preference investorů, je

({{({{(SuperStar[ℒ])((Subscript[S, T])|(Subscript[S, t]))=L,N(ln (Subscript[S, t])+(r-(1/2)(σ^2))(T-t),(σ^2)(T-t))}}).}})

Then

({{({{(SuperStar[E])((Subscript[S, T])|(Subscript[S, t]))=}})}})

Mean[LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]//Simplify//TraditionalForm

Similarly for the variance:

({{({{(SuperStar[var])((Subscript[S, T])|(Subscript[S, t]))=}})}})

Variance[LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]//Simplify//TraditionalForm

Viz [1], str. 55-56.

Hodnota (cena) evropské opce

Jako přirozené se jeví vzít za hodnotu evropské opce v čase t podmíněnou střední hodnotu současné hodnoty výplatní funkce při dané hodnotě podkladového aktiva (Subscript[S, t]) při čemž střední hodnota je uvažovaná při bezrizikové (tj. rizikově neutrální) úrokové míře r:

({{({{(Subscript[c, t])=(e^(-r(T-t)))(SuperStar[E])((SuperPlus[((Subscript[S, T])-K)])|(Subscript[S, t]))}, {(Subscript[p, t])=(e^(-r(T-t)))(SuperPlus[(SuperStar[E])(K-(Subscript[S, T]))])|(Subscript[S, t]))}})}})

ct=(E^(-r(T-t)))Expectation[Max[0,((Subscript[S, T])-K)],(Subscript[S, T])\[Distributed]LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]

ct[[2,2]]//FullSimplify

Tuto formuli lze převést do běžně uváděného tvaru (Black-Scholes formula)

({{({{(Subscript[c, t])=(Subscript[S, t])Φ((Subscript[d, 1]))-K (e^(-r(T-t)))Φ((Subscript[d, 2])),
(Subscript[d, 1,2])=((log((Subscript[S, t])/K)+(r±(σ^2)/2)(T-t))/(σ(Sqrt[T-t]))).}})}})

Hodnota PUT opce se získá z PUT - CALL parity: ({{({{(Subscript[p, t])=(Subscript[c, t])+K,(e^(-r(T-t)))}})-(Subscript[S, t]).}})

Poznámka (opce na akcie vyplácející dividendu)

Vyplácí-li akcie dividendu s dividendovou intenzitou d, pak se v předchozím vzorci nahradí r→r-d. Vyplácením dividendy se snižuje hodnota firmy a tudíž i kapitálový výnos.

Citlivosti (Comparative Statics, The Greeks)

Statics je sice vžitý, ale asi chybně použitý termín nevystihující podstatu.

Nechť (Subscript[V, t]) označuje hodnotu CALL resp. PUT opce, (Subscript[V, t])=(Subscript[c, t]) resp. (Subscript[V, t])=(Subscript[p, t]). Z Black-Scholesova vzorce je patrné, že (Subscript[V, t]) je funkcí pěti proměnných (parametrů):

({{({{(Subscript[V, t])=(Subscript[V, t])((Subscript[S, t]),K,σ,T-t,r)}}).}})

Derivace podle jednotlivých proměnných se nazývají citlivosti a protože se označují řeckými písmeny, jsou též známé jako “The Greeks”. Jejich výpočet je přímočarý, ale v některých případech technicky dosti komplikovaný. Uvedeme jen jednu míru citlivosti delta, derivaci podle aktuální ceny akcie:

({{({{Δ=((∂(Subscript[V, t]))/(∂(Subscript[S, t])))}}).}})

Pro CALL resp. PUT dostaneme

({{({{(Subscript[Δ, c])=Φ((Subscript[d, 1]))   resp.   (Subscript[Δ, p])=(Subscript[Δ, c])-1=-Φ(}})-(Subscript[d, 1])).}})

Charakteristiky Δ se používá k tzv. delta-zajišťování, delta hedging. Uvažujme portfolio skládající se z dlouhé pozice jedné akcie a krátké pozice v A kusech CALL opcí na tutéž akcii. Hodnota portfolia je tedy (Subscript[Π, t])=(Subscript[S, t])-A,(Subscript[c, t]). Chceme najít A takové, aby hodnota portfolia byla invariantní vůči (malým) změnám ceny akcie, tj.

({{({{((∂,(Subscript[Π, t]))/(∂(Subscript[S, t])))}})=0.}})

Hledané A=1/(Subscript[Δ, c]), nazývané zajišťovací poměr, hedge ratio. Vzhledem k tomu, že se delta mění v čase, musí se portfolio často měnit → dynamické zajišťování, dynamic hedge. To může být nákladné kvůli transakčním nákladům. Tudíž vhodné pro makléře a tvůrce trhu, kteří mají relativně nízké transakční náklady. Všimněme si, že čím nižší (Subscript[S, t]) ve srovnání s K, tím vyšší je zajišťovací poměr. Podobnou mírou citlivosti je elasticita ceny CALL opce vzhledem k ceně akcie definovaná jako (Subscript[E, c])=(Subscript[Δ, c])(Subscript[S, t])/(Subscript[c, t]). Vždy je (Subscript[E, c])>1. (Dokažte za cvičení.) Proto je CALL opce vždy riskantnější než její podkladové aktivum. Analogie k Δ je durace.

**Další míry citlivosti viz [1], str. 60-61.

Implied Volatility (Implikovaná volatilita)

Ve výše uvedeném vzorci pro (Subscript[V, t]) v okamžiku t vždy známe hodnoty (Subscript[S, t]),K,T-t,r. Při aplikaci Black-Scholesova vzorce pro neznámou volatilitu obvykle použijeme výběrovou směrodatnou odchylku z historických (známých) dat logaritmických výnosů ln((Subscript[S, t+1])/(Subscript[S, t])) pro nějaké rozumné historické hodnoty. Sofistikovanější metody jsou založené na modelech volatility typu ARCH, GARCH, jejich zobecněních a modifikacích. Viz zabudované funkce (nezahrnují zdaleka všechny dnes používané modely):

?*ARCH*

?*AR*

Můžeme ale též přistoupit k odhadu volatility jiným způsobem. V daném časovém okamžiku t, (teď, hodnotící časový okamžik), známe nejenom  hodnoty (Subscript[S, t]),K,T-t,r, ale i tržní hodnotu opce (Subscript[V, t]^M). Po substituci známých hodnot do Black-Scholesovy formule dostaneme rovnici pro neznámou σ:

({{(Subscript[V, t]^M)=({{(Subscript[V, t])((Subscript[S, t]),K,σ,T-t,r)}}).}})

Tato rovnice nemusí mít žádné řešení (řešení je nutné hledat numericky), může mít právě jedno (nejpříjemnější situace, i když i tam můžeme býti překvapeni) nebo více řešení - z těch je pak zapotřebí citlivě vybírat.

Důležité! Volatilita a implikovaná volatilita viz [1], str. 61-62.

Portfolia opcí

Příklad v [1], str. 62-63.

SetDirectory[NotebookDirectory[]]

Import["FM1aPortfolia_opci.jpg"]

With[{K=50,B=70},Plot[Max[0,S-K]-Max[0,S-K-B],{S,0,200},PlotTheme->"Business"]]

Forwardy a futures

Na rozdíl od opcí je smlouva mezi stranami závazná. Forwardy jsou individuálně uzavírané kontrakty o budoucím vypořádání, futures standardizované).

4.3.2 Termínové obchody: Forwardy a futures

Připomeňme nejprve mechanismus fungování opcí. U nich investor (držitel, kupující) v dlouhé pozici má právo, nikoli povinnost své právo zakotvené v opční smlouvě uplatnit. To znamená,že podkladové aktivum (underlying) může buď koupit (v případě CALL opce) nebo prodat (v případě PUT opce). Prodávající (pisatel) pak trpně čeká, jak se vyvíjí tržní situace, a jestli držitel své právo uplatní. Ten tak ovšem učiní v případě, že uplatněním opce dosáhne zisku nebo alespoň bude minimalizovat ztrátu vzniklou náklady na pořízení opce.

U kontraktů typu forward a futures není možná volba jako u opcí. Pro obě strany je smlouva závazná, tudíž tady v okamžiku uzavření kontraktu neexistuje cena kontraktu v pravém slova smyslu. Forwardový kontrakt je termínový obchod, smlouva mezi dvěma partnery (řekněme A a B), ve kterém se strana kupující A (v dlouhé pozici) zavazuje koupit od strany prodávající B (v krátké pozici) určitou komoditu v určeném množství za určitou cenu F fixovanou v okamžiku uzavření kontraktu v určitém budoucím termínu T (dodání, delivery). Vše je závazně domluveno dnes, dejme tomu v okamžiku  t = 0, a vlastní transakce proběhne ve sjednaném termínu v budoucnosti T, t<T. Obě strany jsou povinné své závazky splnit. Předpokládejme dále, že aktuální cena podkladového aktiva v okamžiku uzavření kontraktu je (Subscript[S, 0]).

Pozice obou stran v kontraktu je symetrická. V okamžiku vypořádání zisk jedné strany jest roven ztrátě druhé strany. Jestliže  smluvená cena kontraktu v čase vypořádání T je F, pak strana A obdrží v okamžiku T částku (Subscript[S, T])-F a strana B přirozeně obdrží  F-(Subscript[S, T]). To, co se obvykle v teorii neuvažuje, jsou transakční náklady. Pro individuálně uzavřené kontrakty mohou být nezanedbatelné.

Tyto kontrakty mají minimálně tyto dvě funkce. První: ochrana (uhájení) ceny komodity, která je předmětem kontraktu. Druhá: transfer vlastnictví; fixováním ceny dnes (v čase t) je kupující chráněn (jištěn) proti případné vyšší ceně v okamžiku vypořádání kontraktu (tj. okamžité (spotové) ceně na trhu v okamžiku dodání). Prodávající je chráněn (jištěn) proti případné nižší promtní ceně v okamžiku vypořádaní kontraktu (tj. okamžité ceně na trhu v okamžiku dodání).

Obchodování s forwardy není prakticky regulováno, jsou to obchody individuální, takže riziko z nesplacení (default) je nezanedbatelné. V tomto případě se rizikem selhání myslí to, že strana v dlouhé pozici cukne, nebude chtít koupit nebo strana v krátké pozici odmítne prodat. Toto riziko je z velké části eliminováno standardizací. Není možné postihnout všechny individuální obchody a převést je ke globálnímu obchodování, nicméně je mnoho komodit (obilí, ropa, strategické kovy, měny, . . . ), které je možné dovést ke standardizovanému obchodování. Standardizované obchody tohoto typu se provádějí na specializované burze a nazývají se futures.

Futures: Z matematického hlediska jsou forwards a futures prakticky totožné. Proto se na hodnocení futures vztahují stejná kritéria jako na forwardy. Dále budeme mluvit o hodnocení forwardů.

Uvedeme některé přístupy k hodnocení forwardových kontraktů. Nejprve uveďme hodnocení na základě principu neexistence arbitráže. Jako dříve předpokládáme, že cena podkladového aktiva v čase t=0 je (Subscript[S, 0]) a z držení aktiva neplynou žádné závazky např. ve formě dividend. Dále uvažujeme bezrizikovou hodnotící úrokovou míru r.

Strana B, krátká v kontraktu, jest povinnou doručit (deliver) částku (Subscript[S, T]) v okamžiku T. Strana B si vypůjčí částku (Subscript[S, 0]) v čase t=0 (čas uzavření kontraktu), koupí předmětné aktivum a v čase T obdrží F. Touto částkou (F) splatí půjčku, která v čase T je ve výši budoucí honoty (Subscript[S, 0])(e^(r,T)) , takže forwardová cena je

F=(Subscript[S, 0])(e^(r,T))

V okamžiku t=0 si strany nevyměňují žádné peníze, hodnota kontraktu je tudíž nulová.
V libovolném čase 0≤t≤T je však hodnota kontraktu

(Subscript[f, t])=(Subscript[S, t])-F,(e^(-r(,T-t)))

V takovém okamžiku může každá ze stran „uzamknout, lock” svou pozici tak, že uzavře pozici opačnou. Může tak fixovat zisk nebo ztrátu. Je-li (Subscript[S, t])<F,(e^(-r(T-t))), strana B si půjčí (Subscript[S, t]), koupí akcii, v okamžiku T splatí (Subscript[S, t])(e^(r(T-t))) a akcii prodá za F. Je-li naopak (Subscript[S, t])>F,(e^(-r(T-t))), strana A prodá akcii nakrátko, dostane za ni (Subscript[S, t]), tuto částku uloží a v okamžiku T vybere (Subscript[S, t])(e^(r(T-t)))>F. Koupí akcii za F a akcii vrátí.

4.3.9 Poznámka. (Ekvivalentní portfolio) Výplatní funkce forwardu v dlouhé pozici je (Subscript[S, T])-F. Dlouhá pozice ve forwardu je ekvivalentní v dlouhé evropské CALL a krátké pozici v evropské PUT, obě se stejnou dobou vypršení, stejnou realizační cenou K=F jako má forwardový kontrakt. Taková kombinace opcí má stejnou výplatní funkci jako forward, a tedy i v okamžiku uzavření kontraktu musí mít stejnou hodnotu. V čase t=0 (okamžik uzavření kontraktu) je však hodnota kontraktu nulová (nedochází k žádné výměně peněz), jinými slovy (Subscript[c, 0])-(Subscript[p, 0])=0. Ale z PUT-CALL parity (Subscript[c, 0])-(Subscript[p, 0])=(Subscript[S, 0])-F,(e^(-r,T)). Z toho tedy vyplývá vzorec pro F.

With[{K=50},GraphicsRow[{Plot[Max[0,S-K],{S,0,100},PlotStyle->{Thick,Red}],Plot[Max[0,K-S],{S,0,100},PlotStyle->{Thick,Orange}],Plot[Max[0,S-K]-Max[0,K-S],{S,0,100},PlotStyle->{Thick,Blue}]}]]

4.3.10 Poznámka. (Hodnocení pomocí Black–Scholesovy formule) 
Při rizikově neutrálním
oceňování a předpokladu, že cena akcie se řídí Black–Scholesovým vzorcem, je E((Subscript[S, T])|(Subscript[S, 0]))=(Subscript[S, 0])(e^(r,T)).  Výplatní funkce forwardu je (Subscript[S, T])-F. Střední hodnota této funkce podmíněná známou cenou akcie v okamžiku uzavření kontraktu t=0 a diskontovaná k okamžiku 0 je tedy (Subscript[S, 0])-F,(e^(-r,T)). Tento výraz je však roven nule, neboť v okamžiku uzavření kontraktu je cena nulová.
(WILMOTT Students, p. 99)

FinancialDerivative v systému  Mathematica  (v této verzi (10) zatím omezeno jenom na opce)

FinancialDerivative

Označení: “StrikePrice” realizacni cena K, “Expiration” doba do splatnosti, doba do vyprseni T, pokud se uvede “ReferenceTime” t, pak je to T-t,  “InterestRate” bezrizikova urokova mira (Subscript[r, 0]), “Volatility” volatilita ceny podkladoveho aktiva σ (underlying asset), “CurrentPrice” soucasna cena podkladoveho aktiva (Subscript[S, 0]) resp. (Subscript[S, t]) . “Dividend” je dividendova intenzita q. Vsechny udaje se vztahuji ke stejnemu casovemu obdobi, typicky 1 rok.

(* vsechny zabudovane derivaty, zde zvane "Contracts" *)
FinancialDerivative[](* //Length *)

POZOR NA SYNTAXI!!! PRI RESENI ULOH ZKOPIRUJTE Z HELPU!!! Typicky ma FinancialDerivative 3 az 4 argumenty, kazdy z nich je seznam (list).

1 Priklad (hodnoty opci)

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

2 Priklad (hodnoty opci a jejich citlivosti, The Greeks)

Opce z predchoziho prikladu, vystupem hodnota opce a citlivosti

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

2 Priklad (Graficke znazorneni)

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,40,60},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->{Thick,Red}],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

Manipulate[Plot[FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,45,55},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->Thick],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

3 Priklad (Graficke znazorneni)

Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,30,60}]

Plot[Table[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{t,{0,0.01,0.1,0.5,1}}],{st,30,60}]

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,40,60},PlotRange->{0,15},PlotStyle->Thick],
{{t,0,"Doba do vyprseni"},0,1},SaveDefinitions->True]

Hodnota evropske CALL a citlivosti (Value and all Greeks of a European call option):

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Podle (podle mne pochybne konstrukce, viz DHS)  teorie by mela byt hodnota americke CALL stejna jako evropske. Ejhle, neni!!!

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Hodnocení derivátů typu Cap (strop) a Floor  (dno)

Důvod, proč ve funkci FinancialDerivative není volba Cap resp. Floor (přesněji Caplet a Floorlet) vidím v tom, že tyto pojmy nejsou jednoznačně definovány a možností je celá řada. Obvykle jsou však kombinací elementárních finančních instrumentů (obligací, opcí, apod.)

Uvedeme ilustraci Cap na evropskou CALL opci s dobou vypršení T a realizační cenou K. Chrání investora v krátké pozici před neomezenou ztrátou. V případě, že cena (Subscript[S, T]) podkladového aktiva je v okamžiku vypršení vyšší než B,  vyplácí se B.

vyplataCAPnaCALL[St_,K_,B_]:=Min[Max[St-K,0],B]
Plot[vyplataCAPnaCALL[st,1,2],{st,0,5},PlotStyle->Thick]

Dlouhá pozice v tomto finančním instrumentu je ekvivalentní držení portfolia dvou CALL opcí, obě se stejnou dobou vypršení, jedna v dlouhé pozici s realizační cenou K, druhá v krátké pozici s realizační cenou K+B.

vyplataportfolia[St_,K_,B_]:=Max[St-K,0]-Max[St-K-B,0]
Plot[vyplataportfolia[st,1,2],{st,0,5},PlotStyle->Thick]

Cena tohoto instrumentu podle Black-Scholesova vzorce je tedy (musíme přidat bezrizikovou úrokovou míru r,0, volatilitu σ a dobu do vypršení T,t.

Clear[cenaCAPnaCALL];
cenaCAPnaCALL[St_,K_,B_,r0_,σ_,Tt_]:=FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]-FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K+B, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]

Plot[cenaCAPnaCALL[st,1,2,0.05,0.4,1],{st,0,5},PlotRange->{0,2},PlotStyle->Thick]

Vyzkoušejte si manipulovat s některými parametry:

Manipulate[Plot[cenaCAPnaCALL[st,1,2,0.05,σ,Tt],{st,0,5},PlotRange->{0,2},PlotStyle->Thick],{{σ,0.3},0.1,0.5},{{Tt,1},0.01,2},SaveDefinitions->True]

***Opce

***Portfolia opci

Hodnocení opcí a futures 1

Konec 16. 12. 2014

***Lekce 11 (6. 1. 2015)

FAQ

Hodnocení opcí a futures 2

Evropské a americké opce (vanilla options)

r ... bezriziková úr. míra (nekdy značena  (Subscript[r, 0]))
(Subscript[S, t]) ... cena podkladového aktiva (akcie) v čase t
(Subscript[c, t]) resp. (Subscript[p, t]) ... cena evropské CALL resp. PUT opce
K ... realizační cena
T ... čas vypršení evropské opce

Výplatní funkce (payoff function) evropské opce

v okamžiku vypršení

CALL: (SuperPlus[((Subscript[S, T])-K)])

PUT: (SuperPlus[(K-(Subscript[S, T]))])

PUT - CALL parita (platí pouze pro evropské opce!)

({{({{(Subscript[S, t])+(Subscript[p, t])=(Subscript[c, t])+K,(e^(-r(T-t)))}})}})

Mnemotechnická pomůcka pro zapamatování: státní podnik = císařsko-královské

Důkaz: viz též [1], str. 54. Uvažujme portfolio +PUT +akcie -CALL, vše na stejnou akcii, opce evropské se stejnou dobou vypršení. Hodnota portfolia v čase t≤T je

({{(Subscript[Π, t])=(Subscript[S, t])+(Subscript[p, t])-(Subscript[c, t]).}})

V čase vypršení T je hodnota tohoto portfolia

({{({{(Subscript[Π, T])=(Subscript[S, T])+(SuperPlus[(K-(Subscript[S, T]))])-(SuperPlus[((Subscript[S, T])-K)]).}})}})

V případě (Subscript[S, T])≤K je (Subscript[Π, T])=(Subscript[S, T])+K-(Subscript[S, T])-0=K, v případě (Subscript[S, T])>K je (Subscript[Π, T])=(Subscript[S, T])+0-((Subscript[S, T])-K)=K. To znamená, že portfolio je bezrizikové vedoucí k jistému zisku K. Budoucí hodnota je  (Subscript[Π, T])=K  a současná hodnota je tedy (Subscript[Π, t])=K,(e^(-r(T-t))).

Současná hodnota výplatní funkce (payoff function) evropské opce v čase t≤T

CALL: (SuperPlus[(e^(-r(T-t)))((Subscript[S, T])-K)])

PUT: (SuperPlus[(e^(-r(T-t)))(K-(Subscript[S, T]))])

Black-Scholesův vzorec

Risk Neutral Valuation

We assume that the stochastic process of the prices of an asset  (Subscript[{(Subscript[S, t])}, t≥0]) is goverened by a geometrical Brownian motion, hence

({{({{ℒ((Subscript[S, T])|(Subscript[S, t]))=L,N(ln (Subscript[S, t])+(μ-(1/2)(σ^2))(T-t),(σ^2)(T-t))}})}})

where μ is the rate of return on the underlying asset and σ its volatility.

Rizikově neutrální hodnocení: Investoři se chovají racionálně, čím větší riziko (volatilita), tím vyšší očekávaný výnos požadují. Čím vyšší averze k riziku, tím vyšší očekávaný výnos je požadován. Vyloučením rizikových preferencí dojdou investoři ke shodě na jediném rizikově neutrálním výnosu μ=r. Pozor, v žádném případě to neznamená, že by výnos podkladového aktiva byl roven r !!!

Alternativní princip vedoucí k témuž závěru: Očekávaný výnos z držení akcie v hodnotě (Subscript[S, t])  v období (t,T) by měl být stejný jako bezrizikový výnos z investice  ve výši (Subscript[S, t])  při úrokové míře r:

({{({{(SuperStar[E])((Subscript[S, T])|(Subscript[S, t]))=FV((Subscript[S, t]),r)=(Subscript[S, t])(e^(r(T-t)))}}).}})

Hvězdičkou zde i v dalším značíme skutečnost, že za výnos bereme rizikově-neutrální výnos r.

Neuvažujeme-li žádné rizikové preference investorů, je

({{({{(SuperStar[ℒ])((Subscript[S, T])|(Subscript[S, t]))=L,N(ln (Subscript[S, t])+(r-(1/2)(σ^2))(T-t),(σ^2)(T-t))}}).}})

Then

({{({{(SuperStar[E])((Subscript[S, T])|(Subscript[S, t]))=}})}})

Mean[LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]//Simplify//TraditionalForm

Similarly for the variance:

({{({{(SuperStar[var])((Subscript[S, T])|(Subscript[S, t]))=}})}})

Variance[LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]//Simplify//TraditionalForm

Viz [1], str. 55-56.

Hodnota (cena) evropské opce

Jako přirozené se jeví vzít za hodnotu evropské opce v čase t podmíněnou střední hodnotu současné hodnoty výplatní funkce při dané hodnotě podkladového aktiva (Subscript[S, t]) při čemž střední hodnota je uvažovaná při bezrizikové (tj. rizikově neutrální) úrokové míře r:

({{({{(Subscript[c, t])=(e^(-r(T-t)))(SuperStar[E])((SuperPlus[((Subscript[S, T])-K)])|(Subscript[S, t]))}, {(Subscript[p, t])=(e^(-r(T-t)))(SuperPlus[(SuperStar[E])(K-(Subscript[S, T]))])|(Subscript[S, t]))}})}})

ct=(E^(-r(T-t)))Expectation[Max[0,((Subscript[S, T])-K)],(Subscript[S, T])\[Distributed]LogNormalDistribution[Log[(Subscript[S, t])]+(r-(1/2)(σ^2))(T-t),σ(Sqrt[T-t])]]

ct[[2,2]]//FullSimplify

Tuto formuli lze převést do běžně uváděného tvaru (Black-Scholes formula)

({{({{(Subscript[c, t])=(Subscript[S, t])Φ((Subscript[d, 1]))-K (e^(-r(T-t)))Φ((Subscript[d, 2])),
(Subscript[d, 1,2])=((log((Subscript[S, t])/K)+(r±(σ^2)/2)(T-t))/(σ(Sqrt[T-t]))).}})}})

Hodnota PUT opce se získá z PUT - CALL parity: ({{({{(Subscript[p, t])=(Subscript[c, t])+K,(e^(-r(T-t)))}})-(Subscript[S, t]).}})

Poznámka (opce na akcie vyplácející dividendu)

Vyplácí-li akcie dividendu s dividendovou intenzitou d, pak se v předchozím vzorci nahradí r→r-d. Vyplácením dividendy se snižuje hodnota firmy a tudíž i kapitálový výnos.

Citlivosti (Comparative Statics, The Greeks)

Statics je sice vžitý, ale asi chybně použitý termín nevystihující podstatu.

Nechť (Subscript[V, t]) označuje hodnotu CALL resp. PUT opce, (Subscript[V, t])=(Subscript[c, t]) resp. (Subscript[V, t])=(Subscript[p, t]). Z Black-Scholesova vzorce je patrné, že (Subscript[V, t]) je funkcí pěti proměnných (parametrů):

({{({{(Subscript[V, t])=(Subscript[V, t])((Subscript[S, t]),K,σ,T-t,r)}}).}})

Derivace podle jednotlivých proměnných se nazývají citlivosti a protože se označují řeckými písmeny, jsou též známé jako “The Greeks”. Jejich výpočet je přímočarý, ale v některých případech technicky dosti komplikovaný. Uvedeme jen jednu míru citlivosti delta, derivaci podle aktuální ceny akcie:

({{({{Δ=((∂(Subscript[V, t]))/(∂(Subscript[S, t])))}}).}})

Pro CALL resp. PUT dostaneme

({{({{(Subscript[Δ, c])=Φ((Subscript[d, 1]))   resp.   (Subscript[Δ, p])=(Subscript[Δ, c])-1=-Φ(}})-(Subscript[d, 1])).}})

Charakteristiky Δ se používá k tzv. delta-zajišťování, delta hedging. Uvažujme portfolio skládající se z dlouhé pozice jedné akcie a krátké pozice v A kusech CALL opcí na tutéž akcii. Hodnota portfolia je tedy (Subscript[Π, t])=(Subscript[S, t])-A,(Subscript[c, t]). Chceme najít A takové, aby hodnota portfolia byla invariantní vůči (malým) změnám ceny akcie, tj.

({{({{((∂,(Subscript[Π, t]))/(∂(Subscript[S, t])))}})=0.}})

Hledané A=1/(Subscript[Δ, c]), nazývané zajišťovací poměr, hedge ratio. Vzhledem k tomu, že se delta mění v čase, musí se portfolio často měnit → dynamické zajišťování, dynamic hedge. To může být nákladné kvůli transakčním nákladům. Tudíž vhodné pro makléře a tvůrce trhu, kteří mají relativně nízké transakční náklady. Všimněme si, že čím nižší (Subscript[S, t]) ve srovnání s K, tím vyšší je zajišťovací poměr. Podobnou mírou citlivosti je elasticita ceny CALL opce vzhledem k ceně akcie definovaná jako (Subscript[E, c])=(Subscript[Δ, c])(Subscript[S, t])/(Subscript[c, t]). Vždy je (Subscript[E, c])>1. (Dokažte za cvičení.) Proto je CALL opce vždy riskantnější než její podkladové aktivum. Analogie k Δ je durace.

**Další míry citlivosti viz [1], str. 60-61.

Implied Volatility (Implikovaná volatilita)

Ve výše uvedeném vzorci pro (Subscript[V, t]) v okamžiku t vždy známe hodnoty (Subscript[S, t]),K,T-t,r. Při aplikaci Black-Scholesova vzorce pro neznámou volatilitu obvykle použijeme výběrovou směrodatnou odchylku z historických (známých) dat logaritmických výnosů ln((Subscript[S, t+1])/(Subscript[S, t])) pro nějaké rozumné historické hodnoty. Sofistikovanější metody jsou založené na modelech volatility typu ARCH, GARCH, jejich zobecněních a modifikacích. Viz zabudované funkce (nezahrnují zdaleka všechny dnes používané modely):

?*ARCH*

?*AR*

Můžeme ale též přistoupit k odhadu volatility jiným způsobem. V daném časovém okamžiku t, (teď, hodnotící časový okamžik), známe nejenom  hodnoty (Subscript[S, t]),K,T-t,r, ale i tržní hodnotu opce (Subscript[V, t]^M). Po substituci známých hodnot do Black-Scholesovy formule dostaneme rovnici pro neznámou σ:

({{(Subscript[V, t]^M)=({{(Subscript[V, t])((Subscript[S, t]),K,σ,T-t,r)}}).}})

Tato rovnice nemusí mít žádné řešení (řešení je nutné hledat numericky), může mít právě jedno (nejpříjemnější situace, i když i tam můžeme býti překvapeni) nebo více řešení - z těch je pak zapotřebí citlivě vybírat.

Důležité! Volatilita a implikovaná volatilita viz [1], str. 61-62.

Portfolia opcí

Příklad v [1], str. 62-63.

SetDirectory[NotebookDirectory[]]

Import["FM1aPortfolia_opci.jpg"]

With[{K=50,B=70},Plot[Max[0,S-K]-Max[0,S-K-B],{S,0,200},PlotTheme->"Business"]]

Forwardy a futures

Na rozdíl od opcí je smlouva mezi stranami závazná. Forwardy jsou individuálně uzavírané kontrakty o budoucím vypořádání, futures standardizované).

4.3.2 Termínové obchody: Forwardy a futures

Připomeňme nejprve mechanismus fungování opcí. U nich investor (držitel, kupující) v dlouhé pozici má právo, nikoli povinnost své právo zakotvené v opční smlouvě uplatnit. To znamená,že podkladové aktivum (underlying) může buď koupit (v případě CALL opce) nebo prodat (v případě PUT opce). Prodávající (pisatel) pak trpně čeká, jak se vyvíjí tržní situace, a jestli držitel své právo uplatní. Ten tak ovšem učiní v případě, že uplatněním opce dosáhne zisku nebo alespoň bude minimalizovat ztrátu vzniklou náklady na pořízení opce.

U kontraktů typu forward a futures není možná volba jako u opcí. Pro obě strany je smlouva závazná, tudíž tady v okamžiku uzavření kontraktu neexistuje cena kontraktu v pravém slova smyslu. Forwardový kontrakt je termínový obchod, smlouva mezi dvěma partnery (řekněme A a B), ve kterém se strana kupující A (v dlouhé pozici) zavazuje koupit od strany prodávající B (v krátké pozici) určitou komoditu v určeném množství za určitou cenu F fixovanou v okamžiku uzavření kontraktu v určitém budoucím termínu T (dodání, delivery). Vše je závazně domluveno dnes, dejme tomu v okamžiku  t = 0, a vlastní transakce proběhne ve sjednaném termínu v budoucnosti T, t<T. Obě strany jsou povinné své závazky splnit. Předpokládejme dále, že aktuální cena podkladového aktiva v okamžiku uzavření kontraktu je (Subscript[S, 0]).

Pozice obou stran v kontraktu je symetrická. V okamžiku vypořádání zisk jedné strany jest roven ztrátě druhé strany. Jestliže  smluvená cena kontraktu v čase vypořádání T je F, pak strana A obdrží v okamžiku T částku (Subscript[S, T])-F a strana B přirozeně obdrží  F-(Subscript[S, T]). To, co se obvykle v teorii neuvažuje, jsou transakční náklady. Pro individuálně uzavřené kontrakty mohou být nezanedbatelné.

Tyto kontrakty mají minimálně tyto dvě funkce. První: ochrana (uhájení) ceny komodity, která je předmětem kontraktu. Druhá: transfer vlastnictví; fixováním ceny dnes (v čase t) je kupující chráněn (jištěn) proti případné vyšší ceně v okamžiku vypořádání kontraktu (tj. okamžité (spotové) ceně na trhu v okamžiku dodání). Prodávající je chráněn (jištěn) proti případné nižší promtní ceně v okamžiku vypořádaní kontraktu (tj. okamžité ceně na trhu v okamžiku dodání).

Obchodování s forwardy není prakticky regulováno, jsou to obchody individuální, takže riziko z nesplacení (default) je nezanedbatelné. V tomto případě se rizikem selhání myslí to, že strana v dlouhé pozici cukne, nebude chtít koupit nebo strana v krátké pozici odmítne prodat. Toto riziko je z velké části eliminováno standardizací. Není možné postihnout všechny individuální obchody a převést je ke globálnímu obchodování, nicméně je mnoho komodit (obilí, ropa, strategické kovy, měny, . . . ), které je možné dovést ke standardizovanému obchodování. Standardizované obchody tohoto typu se provádějí na specializované burze a nazývají se futures.

Futures: Z matematického hlediska jsou forwards a futures prakticky totožné. Proto se na hodnocení futures vztahují stejná kritéria jako na forwardy. Dále budeme mluvit o hodnocení forwardů.

Uvedeme některé přístupy k hodnocení forwardových kontraktů. Nejprve uveďme hodnocení na základě principu neexistence arbitráže. Jako dříve předpokládáme, že cena podkladového aktiva v čase t=0 je (Subscript[S, 0]) a z držení aktiva neplynou žádné závazky např. ve formě dividend. Dále uvažujeme bezrizikovou hodnotící úrokovou míru r.

Strana B, krátká v kontraktu, jest povinnou doručit (deliver) částku (Subscript[S, T]) v okamžiku T. Strana B si vypůjčí částku (Subscript[S, 0]) v čase t=0 (čas uzavření kontraktu), koupí předmětné aktivum a v čase T obdrží F. Touto částkou (F) splatí půjčku, která v čase T je ve výši budoucí honoty (Subscript[S, 0])(e^(r,T)) , takže forwardová cena je

F=(Subscript[S, 0])(e^(r,T))

V okamžiku t=0 si strany nevyměňují žádné peníze, hodnota kontraktu je tudíž nulová.
V libovolném čase 0≤t≤T je však hodnota kontraktu

(Subscript[f, t])=(Subscript[S, t])-F,(e^(-r(,T-t)))

V takovém okamžiku může každá ze stran „uzamknout, lock” svou pozici tak, že uzavře pozici opačnou. Může tak fixovat zisk nebo ztrátu. Je-li (Subscript[S, t])<F,(e^(-r(T-t))), strana B si půjčí (Subscript[S, t]), koupí akcii, v okamžiku T splatí (Subscript[S, t])(e^(r(T-t))) a akcii prodá za F. Je-li naopak (Subscript[S, t])>F,(e^(-r(T-t))), strana A prodá akcii nakrátko, dostane za ni (Subscript[S, t]), tuto částku uloží a v okamžiku T vybere (Subscript[S, t])(e^(r(T-t)))>F. Koupí akcii za F a akcii vrátí.

4.3.9 Poznámka. (Ekvivalentní portfolio) Výplatní funkce forwardu v dlouhé pozici je (Subscript[S, T])-F. Dlouhá pozice ve forwardu je ekvivalentní v dlouhé evropské CALL a krátké pozici v evropské PUT, obě se stejnou dobou vypršení, stejnou realizační cenou K=F jako má forwardový kontrakt. Taková kombinace opcí má stejnou výplatní funkci jako forward, a tedy i v okamžiku uzavření kontraktu musí mít stejnou hodnotu. V čase t=0 (okamžik uzavření kontraktu) je však hodnota kontraktu nulová (nedochází k žádné výměně peněz), jinými slovy (Subscript[c, 0])-(Subscript[p, 0])=0. Ale z PUT-CALL parity (Subscript[c, 0])-(Subscript[p, 0])=(Subscript[S, 0])-F,(e^(-r,T)). Z toho tedy vyplývá vzorec pro F.

With[{K=50},GraphicsRow[{Plot[Max[0,S-K],{S,0,100},PlotStyle->{Thick,Red}],Plot[Max[0,K-S],{S,0,100},PlotStyle->{Thick,Orange}],Plot[Max[0,S-K]-Max[0,K-S],{S,0,100},PlotStyle->{Thick,Blue}]}]]

4.3.10 Poznámka. (Hodnocení pomocí Black–Scholesovy formule) Při rizikově neutrálním
oceňování a předpokladu, že cena akcie se řídí Black–Scholesovým vzorcem, je E((Subscript[S, T])|(Subscript[S, 0]))=(Subscript[S, 0])(e^(r,T)).  Výplatní funkce forwardu je (Subscript[S, T])-F. Střední hodnota této funkce podmíněná známou cenou akcie v okamžiku uzavření kontraktu t=0 a diskontovaná k okamžiku 0 je tedy (Subscript[S, 0])-F,(e^(-r,T)). Tento výraz je však roven nule, neboť v okamžiku uzavření kontraktu je cena nulová.
(WILMOTT Students, p. 99)

FinancialDerivative v systému  Mathematica  (v této verzi (10) zatím omezeno jenom na opce)

FinancialDerivative

Označení: “StrikePrice” realizacni cena K, “Expiration” doba do splatnosti, doba do vyprseni T, pokud se uvede “ReferenceTime” t, pak je to T-t,  “InterestRate” bezrizikova urokova mira (Subscript[r, 0]), “Volatility” volatilita ceny podkladoveho aktiva σ (underlying asset), “CurrentPrice” soucasna cena podkladoveho aktiva (Subscript[S, 0]) resp. (Subscript[S, t]) . “Dividend” je dividendova intenzita q. Vsechny udaje se vztahuji ke stejnemu casovemu obdobi, typicky 1 rok.

(* vsechny zabudovane derivaty, zde zvane "Contracts" *)
FinancialDerivative[](* //Length *)

POZOR NA SYNTAXI!!! PRI RESENI ULOH ZKOPIRUJTE Z HELPU!!! Typicky ma FinancialDerivative 3 az 4 argumenty, kazdy z nich je seznam (list).

1 Priklad (hodnoty opci)

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

2 Priklad (hodnoty opci a jejich citlivosti, The Greeks)

Opce z predchoziho prikladu, vystupem hodnota opce a citlivosti

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

2 Priklad (Graficke znazorneni)

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,40,60},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->{Thick,Red}],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

Manipulate[Plot[FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,45,55},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->Thick],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

3 Priklad (Graficke znazorneni)

Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,30,60}]

Plot[Table[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{t,{0,0.01,0.1,0.5,1}}],{st,30,60}]

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,40,60},PlotRange->{0,15},PlotStyle->Thick],
{{t,0,"Doba do vyprseni"},0,1},SaveDefinitions->True]

Hodnota evropske CALL a citlivosti (Value and all Greeks of a European call option):

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Podle (podle mne pochybne konstrukce, viz DHS)  teorie by mela byt hodnota americke CALL stejna jako evropske. Ejhle, neni!!!

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Hodnocení derivátů typu Cap (strop) a Floor  (dno)

Důvod, proč ve funkci FinancialDerivative není volba Cap resp. Floor (přesněji Caplet a Floorlet) vidím v tom, že tyto pojmy nejsou jednoznačně definovány a možností je celá řada. Obvykle jsou však kombinací elementárních finančních instrumentů (obligací, opcí, apod.)

Uvedeme ilustraci Cap na evropskou CALL opci s dobou vypršení T a realizační cenou K. Chrání investora v krátké pozici před neomezenou ztrátou. V případě, že cena (Subscript[S, T]) podkladového aktiva je v okamžiku vypršení vyšší než B,  vyplácí se B.

vyplataCAPnaCALL[St_,K_,B_]:=Min[Max[St-K,0],B]
Plot[vyplataCAPnaCALL[st,1,2],{st,0,5},PlotStyle->Thick]

Dlouhá pozice v tomto finančním instrumentu je ekvivalentní držení portfolia dvou CALL opcí, obě se stejnou dobou vypršení, jedna v dlouhé pozici s realizační cenou K, druhá v krátké pozici s realizační cenou K+B.

vyplataportfolia[St_,K_,B_]:=Max[St-K,0]-Max[St-K-B,0]
Plot[vyplataportfolia[st,1,2],{st,0,5},PlotStyle->Thick]

Cena tohoto instrumentu podle Black-Scholesova vzorce je tedy (musíme přidat bezrizikovou úrokovou míru r,0, volatilitu σ a dobu do vypršení T,t.

Clear[cenaCAPnaCALL];
cenaCAPnaCALL[St_,K_,B_,r0_,σ_,Tt_]:=FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]-FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K+B, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]

Plot[cenaCAPnaCALL[st,1,2,0.05,0.4,1],{st,0,5},PlotRange->{0,2},PlotStyle->Thick]

Vyzkoušejte si manipulovat s některými parametry:

Manipulate[Plot[cenaCAPnaCALL[st,1,2,0.05,σ,Tt],{st,0,5},PlotRange->{0,2},PlotStyle->Thick],{{σ,0.3},0.1,0.5},{{Tt,1},0.01,2},SaveDefinitions->True]

Teorie portfolia

Varování: Některé z následujících příkladů zkolabují při spuštění ve verzi Mathematica 10.0.1!!!

Tržní portfolio, Market portfolio (New Jan 6, 2015)

Zde je mj. matematická formulace tržního portfolia.

Hyperlink[Button[" Tržní portfolio v modelu CAPM "],"http://www.karlin.mff.cuni.cz/~hurt/Market_Portfolio_in_CAPM.pdf"]

Vynechat poznámku 7. 1. 1. na poslední straně.

Úvodní příklady

Výnosy dvou perfektně negativně korelovaných aktiv:

Import["fig3.eps"]

Eficientní hranice portfolia dvou aktiv:

Import["EfficientFrontier.eps"]

Example 9.2.1 from [1], p. 82

Manipulate[ParametricPlot[{(Sqrt[36-72 x1+45 (x1^2)+36 x1 ρ-36 (x1^2) ρ]),14-6 x1},{x1,0,1},AxesOrigin->{0,8},AspectRatio->3/4,AxesLabel->{Style["(Subscript[σ, p])",Italic,16],Style["(Subscript[r, p])",Italic,16]},AxesStyle->Directive[14],PlotPoints->50,PlotStyle->{Black,Thick,Dashing[0.01+0.01ρ]}],{{ρ,0},-1,1,Appearance->"Labeled"},SaveDefinitions->True]

Efficient_Frontier.pdf

Efficient_Frontier.pdf

Eficientní hranice: eficientní portfolia

SetDirectory[NotebookDirectory[]];
Import["Efficient_Frontier.pdf"]

Portfolia s minimálním rizikem:

Import["portfoliorisky2.eps"]

Portfolia s minimálním rizikem při existenci bezrizikového aktiva:

Import["portfolior2riskyplusriskless.eps"]

Sharpe ratio and Markowitz portfolio

SetDirectory[NotebookDirectory[]]

Data (Mesicni vynosy 5 akcii)

SetDirectory[NotebookDirectory[]]

i1=Import["Returns.csv"];
i2=Rest[Rest[i1]]

i3=Map[Rest,i2]
Covariance[i3]

Nemate-li ve svem adresari soubor "Returns.dat", pouzijte "tvrdy vstup":

d1={{(* pocet akcií = *)5},{"Month","AMR","BS","UTX","WX","Z"},{1,11.594`,1.515`,-1.579`,-9.36`,-0.408`},{2,22.078`,5.299`,9.947`,7.578`,0.`},{3,-8.511`,-8.`,9.446`,-16.327`,0.694`},{4,-3.488`,0.395`,5.164`,-8.571`,-3.862`},{5,-9.639`,-9.764`,-3.571`,-18.243`,-10.949`},{6,-12.`,6.195`,-0.943`,-11.57`,-8.197`},{7,-10.606`,-0.417`,-7.619`,-8.441`,-6.786`},{8,-1.695`,-6.276`,11.856`,-8.22`,-13.725`},{9,-12.069`,-9.091`,-3.286`,-10.227`,-2.273`},{10,27.451`,15.`,11.186`,-3.797`,2.791`},{11,-21.538`,-4.465`,6.55`,-4.021`,-8.14`},{12,-19.608`,-6.132`,8.75`,12.676`,-5.063`},{13,48.78`,27.156`,4.215`,12.5`,35.2`},{14,19.672`,-2.372`,7.355`,15.271`,12.121`},{15,1.37`,15.19`,13.889`,18.`,-0.901`},{16,4.054`,15.751`,17.073`,-0.847`,18.548`},{17,-15.584`,-9.81`,1.042`,23.884`,-10.958`},{18,3.077`,4.27`,20.833`,4.196`,14.912`},{19,-4.478`,-6.485`,-7.543`,-4.027`,-5.058`},{20,4.688`,11.679`,3.263`,-6.333`,4.918`},{21,-11.94`,-7.285`,3.189`,-18.939`,-3.125`},{22,-1.695`,-3.214`,-7.506`,-2.856`,27.742`},{23,15.517`,0.369`,-3.58`,5.882`,16.026`},{24,5.97`,-1.866`,-7.25`,-0.926`,-2.762`},{25,11.268`,26.616`,15.903`,16.822`,13.295`}};

Text@Grid[d1,Frame->All]

d1[[{1,2,3,4}]]
d2=Rest[d1];
d3=Rest[d2];
datareturns=Map[Rest,d3];
expected=Mean[datareturns]
(cov=Covariance[datareturns])//MatrixForm
(Correlation[datareturns])//MatrixForm

Pokud mate jiz aktivovane predchozi bunky, nasledujici odstavec neaktivujte!!!

SetDirectory[NotebookDirectory[]];
d1=Import["Returns.dat","Table"]
d1[[{1,2,3,4}]]
d2=Rest[d1];
d3=Rest[d2];
datareturns=Map[Rest,d3];
expected=Mean[datareturns]
(cov=Covariance[datareturns])//MatrixForm
(Correlation[datareturns])//MatrixForm

Sharpe Ratio and Markowitz Mean-Variance Portfolio

We assume that N assets have returns (rates of return)  expected returns given by the N×1 vector r and the covariance matrix of returns V. If the investor possesses the wealth 1, then she/he may distribute it among N tradable assets. The proportions of the invested amounts in the individual assets are expresed by the weights x=((((Subscript[x, 1]),...(Subscript[x, N])))^T) which is called portfolio. We will seek the optimal portfolio in the sense that the Sharpe's ratio (also called Sharpe's measure of portfolio) is maximum:

max(((x^T)r)/(Sqrt[(x^T)Vx]))    subject to conditions    x≥0and(∑_(n=1)^N)(Subscript[x, n])=1,

so that short sales are not allowed.

Example 1 (short sales allowed)

Clear[xx];
xx=Table[Unique[],{Length[expected]}]

Uloha je invariantni vzhledem ke kladnemu nasobku, resime zatim bez omezujici normovaci podminky.

crit1=((xx.expected)/(Sqrt[xx.cov.xx]))//Simplify

?Max*

Maximize (* will always find a global maximum *)

?NMax*

NMaximize

?FindMaximum

sol11=NMaximize[crit1,xx]

Normovani

xa=xx/.sol11[[2]]
xnorm=xa/Total[xa]
Total[xnorm]

Hodnota kriteria

val1=(crit1/.{xx->xnorm//Thread})//First

{First[val1],val1[[1]]}

Example 2 (short sales not allowed)

Warning: The following example does not work under Mathematica 10.0.1!!!

ineq=xx≥0//Thread
ineq=Apply[And,ineq]&&Total[xx]==1

sol2=NMaximize[{crit1,ineq},xx]
Total[xx/.sol2[[2]]]

(xx/.Last[sol2])//Chop

Example 2 (Revisited)

Aktiva nesplnuji predpoklady efektivniho trhu (hned první dvě aktiva, první má menší očekávaný výnos než druhé, ale větší riziko), takze investor nemusi ani vyuzit veskere disponibilni bohatstvi a presto dosahne stejne hodnoty cilove funkce (optimalizacniho kriteria). 1. aktivum ma mensi ocekavany vynos nez 2. aktivum, ale riziko ma vetsi. Aktivum s nejvyšším očekávaným výnosem má nejmenší rozptyl.

expected
Diagonal[cov]
Text@Grid[Prepend[{expected,Diagonal[cov]}//Transpose//Sort,{"Exp. Return","Variance"}],Frame->True,Dividers->{{True,True},{True,True}}]

ineq2=xx≥0//Thread
ineq2=Apply[And,ineq2]&&Total[xx]≤1
sol2r=NMaximize[{crit1,ineq2},xx]
Total[xx/.sol2r[[2]]]

Ale

(xx/.sol2r[[2]]).expected

zatimco v predchozim pripade

(xx/.Last[sol2]).expected

Example 3a (Markowitz) Portfolio with prescribed expected return and minimum risk, short sales not allowed)

expected
Diagonal[cov]

crit3=xx.cov.xx//Simplify
cons3=Apply[And,Thread[xx≥0]]&&Total[xx]==1&&xx.expected==4

sol3=NMinimize[{crit3,cons3},xx]

Total[xx3=xx/.Last[sol3]]

{xx3,expected,(Sqrt[Diagonal[cov]])}//Chop//TableForm

xx3.expected

Example 3b (inequality instead of equality)

crit3b=xx.cov.xx//Simplify;
cons3b=Apply[And,Thread[xx≥0]]&&Total[xx]≤ 1&&xx.expected==4;
sol3b=NMinimize[{crit3b,cons3b},xx]
Total[xx3b=xx/.Last[sol3b]]
xx3b.expected

Example 3c (inequalities instead of equalities)

crit3c=xx.cov.xx//Simplify;
cons3c=Apply[And,Thread[xx≥0]]&&Total[xx]≤ 1&&xx.expected≥4;
sol3c=NMinimize[{crit3c,cons3c},xx]
Total[xx3c=xx/.Last[sol3c]]
xx3c
xx3c.expected

Unfeasible requirement
(Neither of the assets reaches the expected return reaches 4.3.)

crit34=xx.cov.xx//Simplify;
cons34=Apply[And,Thread[xx≥0]]&&Total[xx]==1&&xx.expected≥ 4.3;
sol3=NMinimize[{crit34,cons34},xx]

Example 4

We have 8 assets traded on Prague Stock Exchange with the expected returns

returns={-9.92488533927622*10^-04,5.72524775783378*10^-03,9.04818959590086*10^-03,-1.44968966764537*10^-03,-1.74045537023702*10^-02,5.70188394543127*10^-03,3.33476815091662*10^-03,2.15075479228363*10^-03};

and the covariance matrix of returns

covariancematrix={{1.35640293495777*10^-03,2.56330097904098*10^-04,3.33037161321956*10^-04,1.80223328810003*10^-04,2.81325992644196*10^-04,5.93263545509886*10^-04,7.13610711759175*10^-04,3.20932535820455*10^-04},{2.56330097904098*10^-04,2.35439634554186*10^-03,4.42407197078591*10^-04,6.57567906193998*10^-06,4.01068448708833*10^-04,5.93785356343409*10^-04,1.30961261626908*10^-04,2.93338399396577*10^-04},{3.33037161321956*10^-04,4.42407197078591*10^-04,1.57895651834543*10^-03,-1.16804549527263*10^-04,1.85336104268171*10^-04,.000176059157865,3.41400743910472*10^-04,1.86624552570071*10^-04},{1.80223328810003*10^-04,6.57567906193998*10^-06,-1.16804549527263*10^-04,6.16786555694974*10^-03,4.84828341822248*10^-04,8.50333422445824*10^-04,7.74803938060802*10^-05,4.39412705238888*10^-04},{2.81325992644196*10^-04,4.01068448708833*10^-04,1.85336104268171*10^-04,4.84828341822248*10^-04,9.45147795376653*10^-03,1.78331918975426*10^-03,5.0987274991634*10^-05,1.49823427374484*10^-03},{5.93263545509886*10^-04,5.93785356343409*10^-04,.000176059157865,8.50333422445824*10^-04,1.78331918975426*10^-03,7.38754498647722*10^-03,1.03084013803777*10^-03,9.34434830622224*10^-04},{7.13610711759175*10^-04,1.30961261626908*10^-04,3.41400743910472*10^-04,7.74803938060802*10^-05,5.0987274991634*10^-05,1.03084013803777*10^-03,2.1036055256453*10^-03,2.40818723671803*10^-04},{3.20932535820455*10^-04,2.93338399396577*10^-04,1.86624552570071*10^-04,4.39412705238888*10^-04,1.49823427374484*10^-03,9.34434830622224*10^-04,2.40818723671803*10^-04,2.77726103166242*10^-03}};

We see that the above matrix is badly conditioned:

Det[covariancematrix]

Correlation matrix

((Sqrt[DiagonalMatrix[1/Diagonal[covariancematrix]]]).covariancematrix.(Sqrt[DiagonalMatrix[1/Diagonal[covariancematrix]]]))//MatrixForm

xxPS=Table[(Subscript[x, i]),{i,1,Length[returns]}]

The criterion is given by

criterion=(((xxPS.returns))/(Sqrt[xxPS.covariancematrix.xxPS]))//Simplify;

The constraints are

constraints1=Apply[And,Table[(Subscript[x, i])≥ 0,{i,1,Length[returns]}]];
constraints2=Total[xxPS]==1;
constraints=constraints1&&(constraints2)

Next we solve the problem using the option for the method:

soldif=NMaximize[{criterion,constraints},xxPS](*,Method->"DifferentialEvolution"]*)

soldif=NMaximize[{criterion,constraints},xxPS,Method->"DifferentialEvolution"]

Porovnani metod

Map[{#,NMaximize[{criterion,constraints},xxPS,Method->#]}&,{"DifferentialEvolution","NelderMead","SimulatedAnnealing","RandomSearch"}]//TableForm

Total[xxPS/.soldif[[2]]]
Print["Expected return of the optimal portfolio = ",(xxPS/.soldif[[2]]).returns]

Looking on the criterion, we see that the solution is independent of a nonzero multiple. So we can suspend the second constraint and make the

constraints3=Apply[And,Table[(Subscript[x, i])≥ 0,{i,1,Length[returns]}]]

soldif=NMaximize[{criterion,constraints3},xxPS ]

We see that the optimal value is slightly higher than in the above case. The optimal portfolio together with its expected return (substantially higher than in the previous case) is simply obtained:

sol=xxPS/.soldif[[2]];
sol=sol/Apply[Plus,sol]
sol.returns

Lagrange multipliers

Example 3 (Markowitz, short sales allowed, μ prescribed expected return)

Clear[n,ones,xx,λ1,λ2,μ];
n=Length[expected];
ones=Table[1,{n}];
xx=Table[Unique[],{n}]
lagrange=(1/2)xx.cov.xx+λ1*(1-ones.xx)+λ2*(μ-expected.xx)//Simplify

Map[D[lagrange,#]&,xx]

expected
μ=3;
(* !!!! *)
eq1=Map[D[lagrange,#]&,xxx={xx,λ1,λ2}//Flatten]==0
Take[Flatten[xxx/.Solve[eq1,xxx]],Length[xx]]

Capital Asset Pricing Model (CAPM)

Security Market Line

[3] Cipra, T.: Matematika cenných papírů. Kamil Mařík Professional Publishing. Praha 2013.

Capital Market Line

**Optimalizační funkce systému Mathematica

V optimalizacnich ulohach je mozne volit normy (Subscript[L, 2]), (Subscript[L, 1]), (Subscript[L, ∞]).

Row@{Hyperlink[Button["ConstrainedOptimizationLinearProgramming"],"paclet:tutorial/ConstrainedOptimizationLinearProgramming"],Spacer[20],Hyperlink[Button["ConstrainedOptimization"],"paclet:tutorial/ConstrainedOptimizationOverview"]}

Další odkazy

FindMinimum, FindMaximum, NMinimize, NMaximize, Minimize, and Maximize. LinearProgramming

Práce s databází

**DatabaseLink/tutorial/Overview

Hyperlink[Button[" DatabaseLink "],"paclet:DatabaseLink/tutorial/Overview"]

***Approach in elder versions (you can skip it)

Simulation of a simple insurance database with fields {names, sex (Male, Female), age, insured amount}

c1=CharacterRange["A","Z"]
ToCharacterCode[c1]//Flatten

ToCharacterCode[{"M","F"}]//Flatten

genernames:=FromCharacterCode[RandomInteger[{65,90},5]]

sex2=Table[FromCharacterCode[RandomInteger[] (77-70)+70],{30}];
names2=Table[genernames,{30}];
ages2=RandomInteger[{20,85},30];
insured2=Table[RandomInteger[{20,100}] 1000,{30}];
database=Transpose[{names2,sex2,ages2,insured2}];

database

Find all men elder than 60, insured over 50000. Both of the following constructions give the same result.

Cases[database,_?(And[#[[2]]=="M",#[[3]]>60,#[[4]]>50000]&)]

sele1=Select[database,(And[#[[2]]=="M",#[[3]]>60,#[[4]]>50000]&)]

Sort these selecting records according to the insured amount:

Sort[sele1,#1[[4]]>#2[[4]]&]

Export the database in the Excel format:

SetDirectory[NotebookDirectory[]]
Export["database.xls",database,"XLS"]

Modern approach

SetDirectory[NotebookDirectory[]]

Simulation of a simple insurance database with fields {names, sex (Male, Female), age, insured amount}
Simulace jednoduché databáze pojistek s položkami {jméno, pohlaví, věk, pojistná částka}

n=30; (* The size of the database *)

(* generovaní jmen náhodné délky od 3 do 10 *)genername:=StringJoin[RandomChoice[CharacterRange["A","Z"],RandomInteger[{3,10}]]]
SeedRandom[13131]
names=Table[genername,{n}]

(* pohlaví M muž, F žena*)
sex=RandomChoice[{"M","F"},n]

(* věky náhodné, rovnoměrně rozdělené na intervalu [20,85]*)
ages=RandomInteger[{20,85},n]

(* pojistná částka s rovnoměrným rozdělením na intervalu [20000,100000] *)insuredamount=Table[RandomInteger[{20,100}] 1000,{n}]

(* hlavička databáze *)head={"Name","Sex ","Age ","Insured amount"}

(* vytvoření databáze *)database=Transpose[{names,sex,ages,insuredamount}];
(database=PrependTo[database,head])//TableForm

Úloha

Find all men elder than 60, insured over 50000. Both of the following constructions give the same result.

Vyberte pojistky všech mužů starších 60 let s pojistnou částkou vyšší než 50000. Oba následující postupy jsou ekvivalentní.

Join[{head},Cases[database,_?(And[#[[2]]=="M",#[[3]]>60,#[[4]]>50000]&)]]//TableForm

The equivalent solution

sele=Select[database,(And[#[[2]]=="M",#[[3]]>60,#[[4]]>50000]&)]

Setřídit vybrané položky podle pojistné částky
Sort these selecting records according to the insured amount:

Sort[sele,#1[[4]]>#2[[4]]&]//TableForm

Export ve formátu *.xls
Export the database in the Excel format:

Directory[]

Export["database.xls",database]

***Databáze: Asociovana pole (Associated Arrays) (prvni cast prostudovat, dalsi precist) do verze 9

Clear["names"];

mat=(({{"names", "BC", "EFG", "HIJ", "KLM"}, {"a", 1, 2, 3, 4}, {"b", 5, 6, 7, 8}, {"c", 9, 10, 11, 12}, {"d", 13, 14, 15, 16}}));

Clear[data,firstrow];
firstrow=mat[[1]]
fields=Map[data[#]&,firstrow]
matdrop=Drop[mat,1]//Transpose
MapThread[Set,{fields,matdrop}]

data["KLM"]

Select[mat,#[[2]]>7&]
Select[fields,#[[4]]==16&]

Znat az sem.

??fields

fields//Dimensions

fields

{fields[[1,All]],fields[[All,1]]}

firstrow

{"names","BC","EFG","HIJ","KLM"}

FullForm[firstrow]
ToExpression[firstrow]

List["names","BC","EFG","HIJ","KLM"]

Remove[symbols];
(symbols=ToExpression[firstrow])//FullForm
nnn=Length[symbols]
MapThread[Set,{symbols,Range[nnn]}]
?symbols
symbols

BC

**Databáze: Asociovaná pole od verze 10

Zavedeny nové funkce:

Association

Dataset

Priklady naivniho sifrovani

Julius Caesar (posunuti o jedno pismeno)

abeceda=CharacterRange["a","z"]

(* Šifrování *)
caesarcoderules=Thread[abeceda->RotateLeft[abeceda]]

(* Dešífrování *)caesardecoderules=Thread[abeceda->RotateRight[abeceda]]

text="dominika"
roztext=Characters[text]
codetext=roztext/.caesarcoderules
decodetext=codetext/.caesardecoderules
StringJoin[decodetext]

**Lepsi zpusob sifrovani (precist)

Needs["Combinatorica`"]

SeedRandom[13];
permcoderules=Thread[abeceda->(perm=RandomPermutation[abeceda])]

permc=roztext/.permcoderules

permc/.Thread[perm->abeceda]
%//StringJoin

Zabudované finanční funkce

Opticky zabudovaných finančních funkcí sice není mnoho (asi méně než 20), avšak jak je v systému Mathematica obvyklé, jsou to tzv, superfunkce. Vhodně zvolenými volbami pokryjí finanční funkce poskytované jinými systémy. Navíc je možné je snadno adpatovat a využít k vlastnímu modeplování. Výklad každé jedné z nich by asi vyplnil jeden semestr. Přitom se ještě navíc předpokládá znalost příslušných matematických modelů.

Budeme probírat jen některé finanční funkce, mezi jinými FinancialDerivative. Pomocí F1 se zkuste orientovat, co ta funkce umí, jaká je struktura vstupu, apod. S ohledem na to, že struktura vstupních parametrů je komplikovaná, je vítězná strategie zkopírovat  přilbližný vstup z Help a editovat.

FinancialDerivative[]

Annuity

AnnuityDue

Cashflow

TimeValue

EffectiveInterest

FinancialBond

FinancialDerivative

TradingChart

InteractiveTradingChart

FinancialIndicator
FinancialIndicator[All]//Length

Finanční funkce: efektivní úroková míra, časová hodnota, peněžní tok, anuita polhůtná (Annuity immediate, in arrear), anuita předlhůtná (due, in advance)

EffectiveInterest

{EffectiveInterest[r,f],
EffectiveInterest[r,1/4]}//TraditionalForm

Najit nominalni urokovou miru odpovidajici efektivni urokove mire pri ctvrtletnim uroceni:

FindRoot[EffectiveInterest[r,1/4]==.05,{r,.2}]

Prevod okamzitych (spotovych) urokovych mer (Subscript[R, t]) na forwardove (Subscript[f, t]) spolu s intervaly, na kterych plati:

(Subscript[R, 1])=(Subscript[f, 1])
(((1+(Subscript[R, t])))^t)=(((1+(Subscript[R, t-1])))^(t-1))(1+(Subscript[f, t]))

EffectiveInterest[{1->0.01,2->0.015,3->0.02}]

Pozor! Jak vidíme, u okamžitých úrokových měr se uvádí počet investičních období, u forwardových počátek překlenovacího období.

{((((1+0.015))^2)/((1+0.01)))-1,((((1+0.02))^3)/(((1+0.015))^2))-1}

Nestejně dlouhá období, v praxi nejběžnější případ:

(zz={1/12->.01,3/12->.015,6/12->.02,1->.025,2->.03,3->.032,5->.035,7->.04,10->.045})/.Rule->List

EffectiveInterest[{1/12->.01,3/12->.015,6/12->.02,1->.025,2->.03,3->.032,5->.035,7->.04,10->.045}]
ListPlot[%,Joined->True,PlotStyle->Thick]

TimeValue

Základní použití

Clear[i,v,T,PMT,FV,PV];
{(* FV *) TimeValue[PV,i,T]//TraditionalForm,
(* PV *) TimeValue[FV,i,-T]//TraditionalForm}

Detaily

Cashflow umoznuje zadavat kalendarni data:

Hodnoceni k datu {2009,1,1}, hodnotici urokova mira .08:

TimeValue[Cashflow[cf={{{2010,1,1},-600},{{2011,1,1},300},{{2012,1,1},400}}],.08,{2009,1,1}]
DateListPlot[cf,Joined->True]

Hodnoceni k datu {2008,1,1}, hodnotici urokova mira .08:

TimeValue[Cashflow[{{{2010,1,1},-600},{{2011,1,1},300},{{2012,1,1},400}}],.08,{2008,1,1}]

Profil současné hodnoty k datu {2000,1,1}

Plot[TimeValue[Cashflow[{{{2010,1,1},-600},{{2011,1,1},300},{{2012,1,1},400}}],r,{2000,1,1}],{r,0,0.15},AxesLabel->{"r","PV"}]

Profil současné hodnoty k datu {2010,1,1}

Plot[TimeValue[Cashflow[{{{2010,1,1},-600},{{2011,1,1},300},{{2012,1,1},400}}],r,{2010,1,1}],{r,0,0.15},AxesLabel->{"r","PV"}]

Vnitřní míry výnosnosti ( Proč jsou v obou případech IRR totožná?)

{FindRoot[TimeValue[Cashflow[{{{2010,1,1},-600},{{2011,1,1},300},{{2012,1,1},400}}],r,{2000,1,1}],{r,0.1}],FindRoot[TimeValue[Cashflow[{{{2010,1,1},-600},{{2011,1,1},300},{{2012,1,1},400}}],r,{2010,1,1}],{r,0.1}]}

TimeValue[Cashflow[{{{2010,1,1},-600},{{2011,1,1},300},{{2012,1,1},400}}],r,{2000,1,1}]

NSolve[TimeValue[Cashflow[{{{2010,1,1},-600},{{2011,1,1},300},{{2012,1,1},400}}],r,{2000,1,1}]==0,r]

(400/(((1+r))^12))+(300/(((1+r))^11))-(600/(((1+r))^10))

Ale vnitřní míry výnosnosti pro jiný peněžní tok ({2010,1,1} -> {2010,1,15}) (Proč nejde použít NSolve?)

tv2=TimeValue[Cashflow[{{{2010,1,15},-600},{{2011,1,1},300},{{2012,1,1},400}}],r,{2000,1,1}]
NSolve[tv2==0,r]

FindRoot[tv2==0,{r,0.2}]

Cashflow

Clear[CF];
Print["PV(CF,i) = ",
TimeValue[ccff=Cashflow[ccfftab=Table[(Subscript[CF, i]),{i,0,5}]],i,0]]
Print["FV(CF,i) = ",TimeValue[ccff=Cashflow[ccfftab=Table[(Subscript[CF, i]),{i,0,5}]],i,Length[ccfftab]-1]]

Promenne urokove miry po obdobich

ii=Table[(Subscript[i, j]),{j,1,5}];
Print["PV(CF,i) = ",TimeValue[ccff,ii,0]]
Print["FV(CF,ii) = ",TimeValue[ccff,ii,5]]

Urokove miry ze spotove vynosove krivky

RR=Table[(Subscript[R, j]),{j,1,5}];
rulesRR=Thread[Range[Length[RR]]->RR]
Print["PV(CF,RR) = ",TimeValue[ccff,rulesRR,0]]

Annuity, AnnuityDue

Soucasna hodnota polhutni anuity (Annuity Immediate), T... pocet splatek, PMT... pravidelna splatka, i... hodnotici urokova mira, v=1/(1+i) ... diskontni faktor

{TimeValue[Annuity[PMT,T],i,0]//TraditionalForm,
(pvAnnuityImmediate=TimeValue[Annuity[PMT,T],i,0]//Simplify),(pvAnnuityImmediate/.{i->((1-v)/v)})//FullSimplify[#,Assumptions->{v>0}]&}//TraditionalForm

Budouci hodnota polhutni anuity

TimeValue[Annuity[PMT,T],i,T]//TraditionalForm

Soucasna hodnota predlhutni anuity (Annuity Due)

{pvAnnuityDue=TimeValue[AnnuityDue[PMT,T],i,0]//FullSimplify,pvAnnuityDue/.{i->((1-v)/v)}//Simplify[#,Assumptions->{v>0}]&}//TraditionalForm

(pvAnnuityDue/pvAnnuityImmediate)//Simplify

Budouci hodnota predlhutni anuity (Annuity Due)

TimeValue[AnnuityDue[PMT,T],i,T]//TraditionalForm

Finanční funkce: obligace (bonds) a opce (options)

FinancialBond (obligace, dluhopis)

FinancialBond

Označení: “FaceValue” nominální hodnota F, “Coupon” kuponova sazba c, “Maturity” doba do splatnosti od okamziku vydani T, “Settlement” hodnotici okamzik t, “InterestRate” hodnotici urokova mira r, trzni urokova mira pro srovnatelnou investici, cenu kapitalu, “CouponInterval” rocni frekvence vyplaty kuponu 1/f, (f=2 znamena dvakrat rocne), “DayCountBasis” kalendářová konvence, “AccruedInterest” alikvotni urok, “Value”

POZOR NA SYNTAXI!!! PRI RESENI ULOH ZKOPIRUJTE Z HELPU!!!

Poznamka: Properties:

({{"Value", price adjusted for accrued interest}, {"FullValue", unadjusted price}, {"AccruedInterest", accrued interest at settlement}, {"Duration", Macaulay duration}, {"ModifiedDuration", modified duration}, {"Convexity", convexity}, {"CouponPeriodDays", days in coupon period containing the settlement}, {"CouponToSettlementDays", days from previous coupon to settlement}, {"SettlementToCouponDays", days from settlement to next coupon}, {"NextCouponDate", next coupon date}, {"PreviousCouponDate", previous coupon date}, {"RemainingCoupons", remaining coupon payments}})

1 Priklad

Současná hodnotící úroková míra je  6%. Jaká je spravedlivá cena kuponové obligace splatné za 30 let s roční kuponovou sazbou 5.75% a nominální hodnotou 1000Kč?

FinancialBond[{"FaceValue"->1000,"Coupon"->0.0575,"Maturity"->30},{"InterestRate"->0.06,"Settlement"->0}]

2 Priklad

10 - letá obligace, nominální hodnota 1000Kč, kupon dvakrát ročně, kupon 5.75% p.a., hodnocená 9 měsíců po vydání, hodnotící úr. míra r=5% p.a.:

FinancialBond[{"FaceValue"->1000,"Coupon"->0.0575,"Maturity"->10,"CouponInterval"->(1/2)},{"InterestRate"->0.05,"Settlement"->(9/12)}]

3 Priklad

F=1000, c=0.04, kupon ctvrtletni, splatnost 31. 12. 2030, hodnocena ke dni 5. 9. 2013, r=0.06.

FinancialBond[{"FaceValue"->1000,"Coupon"->0.04,"Maturity"->{2030,12,31},"CouponInterval"->(1/4)},{"InterestRate"->.06,"Settlement"->{2013,9,5}}]

Graficky v zavislosti na hodnotici urokove mire:

Plot[FinancialBond[{"FaceValue"->1000,"Coupon"->0.04,"Maturity"->{2030,12,31},"CouponInterval"->(1/4)},{"InterestRate"->r,"Settlement"->{2013,9,5}}],{r,0.03,0.05}]

4 Priklad (alikvótní úrok)

Alikvotni urok pri kalendari "Actual/360". Ostatni je zrejme z predchoziho vykladu.

FinancialBond[{"FaceValue"->1000,"Coupon"->0.07,"Maturity"->{2030,12,31},"CouponInterval"->(1/2)},{"InterestRate"->0.06,"Settlement"->{2010,11,12},"DayCountBasis"->"Actual/360"},"AccruedInterest"]

ListPlot[Table[FinancialBond[{"FaceValue"->1000,"Coupon"->0.07,"Maturity"->{2030,12,31},"CouponInterval"->(1/2)},{"InterestRate"->0.06,"Settlement"->{2010,11,d},"DayCountBasis"->"Actual/360"},"AccruedInterest"],{d,1,30}]]

Cviceni:
Graficky znazornete alikvotni urok jako funkci hodnoticiho data pro obdobi 1.11.2010 az 31.12.2013. Navod: Pouzijte funkci DaysPlus.

5 Priklad

Vynos do splatnosti (YTM, Yield To Maturity, zde nazyvany “Implied yield to maturity”) obligace, ktera se 3.5.2013 prodavala za trzni cenu 900.

FindRoot[FinancialBond[{"FaceValue"->1000,"Coupon"->0.05,"Maturity"->{2018,6,31},"CouponInterval"->(1/4)},{"InterestRate"->ytm,"Settlement"->{2013,5,3}}]==900,{ytm,.1}]

6 Priklad

Je mozne ziskat i explicitni vzorce:

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t}]//Apart//TraditionalForm

Value

(value=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},"Value"])//Apart//TraditionalForm

FullValue

(fullvalue=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},"FullValue"])//Apart//TraditionalForm

Alikvótní úrok

(accrued=fullvalue=FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->t},"AccruedInterest"])//Apart//TraditionalForm

fullvalue-value//FullSimplify

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->5},{"InterestRate"->r,"Settlement"->0}]
%//Apart//TraditionalForm

7 Priklad (Durace, konvexita)

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->T,"CouponInterval"->(1/f)},{"InterestRate"->r,"Settlement"->0},"Duration"]//Simplify

Podobně konvexita, místo “Duration” použít “Convexity”.

8 Priklad (Hodnoceni pri uziti urokovych mer ze spotove vynosove krivky)

vynosovakrivka=Thread[Range[5]->Table[(Subscript[R, i]),{i,5}]]

FinancialBond[{"FaceValue"->F,"Coupon"->c,"Maturity"->5},{"InterestRate"->vynosovakrivka,"Settlement"->0}]
%//Apart//TraditionalForm

9 Priklad (Nahodna urokova mira)

pricer=FinancialBond[{"FaceValue"->1000,"RedemptionValue"->1100,"Coupon"->0.07`,"Maturity"->5,"CouponInterval"->(1/2)},{"InterestRate"->r,"Settlement"->0}]

Expectation[pricer,r\[Distributed]NormalDistribution[0.05,0.01]]

V teto podobe nefunguje. Ale treba pro dobu do splatnosti funguje:

pricet=FinancialBond[{"FaceValue"->1000,"RedemptionValue"->1100,"Coupon"->0.07`,"Maturity"->t,"CouponInterval"->(1/2)},{"InterestRate"->.09,"Settlement"->0}]
Expectation[pricet,t\[Distributed]NormalDistribution[12.5,1]]

FinancialDerivative (v této verzi (10) zatím omezeno jenom na opce)

FinancialDerivative

Označení: “StrikePrice” realizacni cena K, “Expiration” doba do splatnosti, doba do vyprseni T, pokud se uvede “ReferenceTime” t, pak je to T-t,  “InterestRate” bezrizikova urokova mira (Subscript[r, 0]), “Volatility” volatilita ceny podkladoveho aktiva σ (underlying asset), “CurrentPrice” soucasna cena podkladoveho aktiva (Subscript[S, 0]) resp. (Subscript[S, t]) . “Dividend” je dividendova intenzita q. Vsechny udaje se vztahuji ke stejnemu casovemu obdobi, typicky 1 rok.

(* vsechny zabudovane derivaty, zde zvane "Contracts" *)
FinancialDerivative[](* //Length *)

POZOR NA SYNTAXI!!! PRI RESENI ULOH ZKOPIRUJTE Z HELPU!!! Typicky ma FinancialDerivative 3 az 4 argumenty, kazdy z nich je seznam (list).

1 Priklad (hodnoty opci)

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

2 Priklad (hodnoty opci a jejich citlivosti, The Greeks)

Opce z predchoziho prikladu, vystupem hodnota opce a citlivosti

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

2 Priklad (Graficke znazorneni)

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,40,60},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->Thick],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

Manipulate[Plot[FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->T},  {"InterestRate"-> 0.1, "Volatility" ->σ, "CurrentPrice"-> s, "Dividend"->0.05}],{s,45,55},AxesOrigin->{Automatic,0},PlotRange->{0,25},PlotStyle->Thick],{{T,0.5},0.0001,1},{{σ,0.5},0.01,1},SaveDefinitions->True]

3 Priklad (Graficke znazorneni)

FinancialDerivative[]//Length

Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,30,60}]

Plot[Table[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{t,{0,0.01,0.1,0.5,1}}],{st,30,60}]

Manipulate[Plot[FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->t},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> st, "Dividend"->0.05}],{st,40,60},PlotRange->{0,15},PlotStyle->Thick],
{{t,0,"Doba do vyprseni"},0,1},SaveDefinitions->True]

Hodnota evropske CALL a citlivosti (Value and all Greeks of a European call option):

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Podle (podle mne pochybne konstrukce, viz DHS)  teorie by mela byt hodnota americke CALL stejna jako evropske. Ejhle, neni!!!

FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}, {"Value", "Greeks"}]

Hodnocení derivátů typu Cap (strop) a Floor  (dno)

Důvod, proč ve funkci FinancialDerivative není volba Cap resp. Floor (přesněji Caplet a Floorlet) vidím v tom, že tyto pojmy nejsou jednoznačně definovány a možností je celá řada. Obvykle jsou však kombinací elementárních finančních instrumentů (obligací, opcí, apod.)

Uvedeme ilustraci Cap na evropskou CALL opci s dobou vypršení T a realizační cenou K. Chrání investora v krátké pozici před neomezenou ztrátou. V případě, že cena (Subscript[S, T]) podkladového aktiva je v okamžiku vypršení vyšší než B,  vyplácí se B.

vyplataCAPnaCALL[St_,K_,B_]:=Min[Max[St-K,0],B]
Plot[vyplataCAPnaCALL[st,1,2],{st,0,5},PlotStyle->Thick]

Dlouhá pozice v tomto finančním instrumentu je ekvivalentní držení portfolia dvou CALL opcí, obě se stejnou dobou vypršení, jedna v dlouhé pozici s realizační cenou K, druhá v krátké pozici s realizační cenou K+B.

vyplataportfolia[St_,K_,B_]:=Max[St-K,0]-Max[St-K-B,0]
Plot[vyplataportfolia[st,1,2],{st,0,5},PlotStyle->Thick]

FinancialDerivative[{"European","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05}]

Cena tohoto instrumentu podle Black-Scholesova vzorce je tedy (musíme přidat bezrizikovou úrokovou míru r,0, volatitlitu σ a dobu do vypršení T,t.

Clear[cenaCAPnaCALL];
cenaCAPnaCALL[St_,K_,B_,r0_,σ_,Tt_]:=FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]-FinancialDerivative[{"European","Call"}, {"StrikePrice"-> K+B, "Expiration"->Tt},  {"InterestRate"-> r0, "Volatility" -> σ, "CurrentPrice"-> St}]

Plot[cenaCAPnaCALL[st,1,2,0.05,0.4,1],{st,0,5},PlotRange->{0,2},PlotStyle->Thick]

Vyzkoušejte si manipulovat s některými parametry:

Manipulate[Plot[cenaCAPnaCALL[st,1,2,0.05,σ,Tt],{st,0,5},PlotRange->{0,2},PlotStyle->Thick],{{σ,0.3},0.1,0.5},{{Tt,1},0.01,2},SaveDefinitions->True]

**Finanční funkce: TradingChart a InteractiveTradingChart (jedna z mnohých vizualizací a interaktivního zpracování)

U funkce Covariance je příklad na výpočet kovariance mezi hodnotami indexů DJI a S&P500:

Covariance[FinancialData["^GSPC","Price",{2004,1,1},"Value"],FinancialData["^DJI","Price",{2004,1,1},"Value"]]

FinancialData["^GSPC"]

fGSPC=FinancialData["^GSPC",{2013,1,1},"Value"];
%//Length
fDJI=FinancialData["^DJI",{2013,1,1},"Value"];
%//Length
{Covariance[fGSPC,fDJI],Correlation[fGSPC,fDJI]}

Někdy se stává, že některá data jsou nedostupná, specielně u ^DJI můžeme dostat

FinancialData["^DJI", {2013, 1, 1}, "Value"]
Missing[“NotAvailable”]

FinancialData["^DJI", "Members"]

{"AXP", "BA", "CAT", "CSCO", "CVX", "DD", "DIS", "GE", "GS", "HD", "IBM", "INTC", "JNJ", "JPM", "KO", "MCD", "MMM", "MRK", "MSFT", "NKE", "PFE", "PG", "T", "TRV", "UNH", "UTX", "V", "VZ", "WMT", "XOM"}

Data však můžeme získat použitím Wolfram|Alpha.

U Price history stisknout vpravo křížek, vybrat TimeSeriesData:

djiLastYear=WolframAlpha["^DJI",{{"PriceHistory",1},"TimeSeriesData"}];
DateListPlot[djiLastYear,Joined->True]

Ultimate Oscillator

(Larry Williams)

Velmi nerad dávám odkaz na velmi nespolehlivý zdroj jako je Wikipedia: v tomto konkrétním případě jsem však nenašel chybu.

http://en.wikipedia.org/wiki/Ultimate_oscillator

TradingChart

TradingChart[{"APP",{{2013,1,1},{2013,4,30}}}]

TradingChart[{"APP",{{2013,1,1},{2013,4,30}}},{"UltimateOscillator",FinancialIndicator["SimpleMovingAverage",10]},PlotLabel->"Apple Stock Price — 2013"]

InteractiveTradingChart

Má daleko více možností (v dolní části grafu možnosti “Chart type” a “Indicator”)

({{Candlestick, "Candlestick"}})  ({{OHLC, "OHLC"}})  ({{HLC, "HLC"}})  ({{Line, "Line"}})  ({{, "None"}})

InteractiveTradingChart[{"APP",{{2013,1,1},{2013,4,10}}}]

***Reference

Reference: Dalsi financni temata

In Documentation Center find “financial”.

See also

Financial & Economic Data
Mathematica has immediate built-in access to current and historical financial and economic data.
FinancialData — current and historical stock, fund, index, currency, etc. data
“Price”  ▪  “CumulativeReturn”  ▪  “Volatility50Day”  ▪  “MarketCap”  ▪  “PERatio”  ▪  “EBITDA”  ▪  “DividendYield”  ▪  “SICCode”  ▪  ...
	
CountryData — socioeconomic data and time series for all countries
“GDP”  ▪  “ExportValue”  ▪  “FixedInvestment”  ▪  “ElectricityProduction”  ▪  “OilReserves”  ▪  ...
“CurrencyCode”  ▪  “CurrentUnit”  ▪  “ExchangeRate”  ▪  ...
	
DateListPlot — plot a time series
MovingAverage  ▪  ExponentialMovingAverage  ▪  LinearModelFit

See also

Finance
Mathematica has fully integrated support for many of the tools used in classical and modern finance. These capabilities include financial instrument valuation, advanced time value of money computations, and advanced financial charting with a library of technical indicators. Mathematica also provides immediate access to a large array of financial and economic data, and contains financial import and export tools for working with external data.
Time Value Computations
TimeValue — time value of money computations
EffectiveInterest — effective interest rate conversions
Annuity  ▪  AnnuityDue  ▪  Cashflow
	
Financial Instruments
FinancialDerivative — financial derivatives valuation
FinancialBond — financial bond valuation
	
Financial Visualization »
CandlestickChart — candlestick and OHLC chart of open-high-low-close prices
InteractiveTradingChart — interactive trading chart including financial indicators
TradingChart  ▪  DateListPlot  ▪  RenkoChart  ▪  ...
	
Financial Indicators »
"Open"  ▪  "High"  ▪  "Low"  ▪  "Close"  ▪  "Volume"  ▪  "TypicalPrice"  ▪  "TrueRange"  ▪  "SimpleMovingAverage"  ▪  "ExponentialMovingAverage"  ▪  "BollingerBands"  ▪  "KeltnerChannels"  ▪  "RelativeStrengthIndex"  ▪  "FastStochastic"  ▪  "SlowStochastic"  ▪  "FullStochastic"  ▪  "RateOfChange"  ▪  "UltimateOscillator"  ▪  ...
	
Financial and Economic Data »
FinancialData — current and historical stock, fund, index, currency, etc. data
CountryData — socioeconomic data and time series for all countries
DateListPlot  ▪  MovingAverage  ▪  ExponentialMovingAverage  ▪  LinearModelFit
	
Importing & Exporting External Data »
Import — import from files and URLs
Export — export data, graphics, and expressions to files
"Table"  ▪  "CSV"  ▪  "TSV"  ▪  "XLS"  ▪  "ODS"  ▪  "SXC"  ▪  "MDB"  ▪  "DBF"  ▪  "DIF"  ▪  ...

Financni vizualizace

http://www.wolfram.com/mathematica/new-in-8/financial-visualization/

Ukazky financnich vypoctu na serveru Wolfram

http://www.wolfram.com/mathematica/new-in-8/built-in-financial-computations/

http://www.wolfram.com/solutions/industry/financial-risk-management/

Cviceni a ukol

Prohlednete si
http://www.wolfram.com/solutions/FinancialRiskManagement/

Mentor, přítel Odysseův, rádce jeho syna Telemacha praví:

Poznámka I (obecná): Budete-li kdekoli ve svých pracích užívat poznatky získané z této a jiných přednášek, citujte je. Vyhnete se možným problémům. Kompilace cizích výsledků není trestné. Jejich uvedení bez citace jest postižitelné. Pokud možno, vyhněte se odkazům na webové stránky. Všechny citované zdroje ve Vašich pracích by měly být dohledatelné.  Pokud čerpáte ze Sciencedirect.com, citujte původní prameny, a ne odkaz na www.sciencedirect.com !!!

Poznámka II (obecná, pramenící z nedávné zkušeností ): Absolventi MFF měli dlouho vysoký kredit. Teď jej částečně ztrácejí nejen svými neznalostmi, ale i bezcharakterním jednáním. Dbejte na etiku. Při změně zaměstnání nevynášejte know-how získané u předchozího zaměstnavatele.

Quantitative Risk Management:
Concepts, Techniques, and Tools
Alexander J. McNeil, Rüdiger Frey, & Paul Embrechts

Speak["Hovno"]