Finanční management LS 2018/19

NMFM201 Financial Management

$LicenseExpirationDate

Úvod

Zkoušky

NMFM201 Finanční management LS 2018/19

NMFM201 2019-05-28, 2019-05-31, 2019-06-28: v 09: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.

[10] Hull, J. C.: Options, Futures, and Other Derivatives. Prentice Hall. Boston 2012.

[11]  Cipra, T.: Riziko ve financích a pojišťovnictví: Basel III a Solvency II. Ekopress. Praha 2015.

[12] Cipra, T.: Financial and Insurance Formulas. Springer. Berlin 2010.

[13] Witzany, J.: Credit Risk Management. Springer International Publishing AG 2017.

[14] Cipra, T.: Praktický průvodce finanční a pojistnou matematikou. Ekopress. Praha 2005. Obsah:
http://www.karlin.mff.cuni.cz/~cipra/Cipra_web_pdf/Prakticky%20 pruvodce %20 financni %20 a %20 pojistnou %20 matematikou.pdf

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.

NMFM201 Financial Management Syllabus

Porovnání investičních projektů (profil současné hodnoty, durace, konvexita, vnitřní míry výnosnosti, index ziskovosti, metoda návratnosti, hodnota firmy). Úroké míry a výnosové křivky (dekompozice úrokové míry, termínová struktura úrokových měr, konstrukce výnosových křivek, numerické a statistické metody). Hodnocení investic (modely vývoje cen, akcie, obligace, opce, forwardy, futures). Výnos, očekávaný výnos, riziko (optimální portfolio, míry rizika, hodnota v riziku, podmíněná hodnota v riziku). Model oceňování kapitálových statků (CAPM).

2019-02-20 Lekce 1

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

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 notesu *)cashFlowDiagram[{{2,100},{5,200},{7.5,-200},{10,500}}]

Konstatní úroková míra

?*alue

Clear[i,T];
(* Současná hodnota *)
TimeValue[Cashflow[cashflow],i,0]

(* Budoucí hodnota *)
TimeValue[Cashflow[cashflow],i,Length[cashflow]-1]

Proměnné úrokové míry

Clear[i];
ii=Array[(Subscript[i, #])&,Length[cashflow]-1]

(* Současná hodnota *)
TimeValue[Cashflow[cashflow],ii,0]

(* Budoucí hodnota *)
TimeValue[Cashflow[cashflow],ii,Length[cashflow]-1]

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

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

(* Současná hodnota *)
TimeValue[Cashflow[cashflow],RR,0]

(**)(* Budoucí hodnota *)
TimeValue[Cashflow[cashflow],RR,Length[cashflow]-1]//TraditionalForm

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]

Danger of the additive form (Nebezpečí aditivní formy)

We have already seen that the only correct average of the interest rates over several periods is  the geometric mean. Here we give a brutal example showing that the arithmetic mean may lead to a nonsense.

Suppose the price development in times 0,1,2 is (Subscript[P, 0])=100,(Subscript[P, 1])=50,(Subscript[P, 2])=100. Then, according to the definition of  returns (Subscript[R, t]), (Subscript[R, 1])=((Subscript[P, 1])-(Subscript[P, 0]))/(Subscript[P, 0])=-1/2, (Subscript[R, 2])=((Subscript[P, 2])-(Subscript[P, 1]))/(Subscript[P, 1])=1. The arithmetic mean (Subscript[(OverBar[R]), A])=((Subscript[R, 1])+(Subscript[R, 2]))/2=1/4 or 25 per cent and the geometric mean calculated from (((1+(Subscript[(OverBar[R]), G])))^2)=(1+(Subscript[R, 1]))(1+(Subscript[R, 2])) is (Subscript[(OverBar[R]), G])=0 which sounds more realistic.

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]

Taylorův rozvoj funkce ln

ln (((1+(OverBar[(Subscript[i, g])])))^T)=(∑_(t=1)^T)ln (1+(Subscript[i, t]))≐(∑_(t=1)^T)(Subscript[i, t]):

Využití zabudované funkce Series;

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

Kalendářní konvence

Vysvětlivky (bez záruky):

https://en.wikipedia.org/wiki/Day_count_convention

F1 ... nápověda při poklepnutí na příslušnou funkci

(* Rozdíl mezi dvěma daty, dle volby ve dnech, týdnech, rocích, ... *)DateDifference

DayCountConvention (* Day count basis *)

(* Kalendář Actual/Actual je implicitní *)DateDifference[{2004,1,1},{2016,2,24},"Year"]

Ukázka pro různé konvence:

Text@Grid[Table[{i,Map[DateDifference[{2008,1,29},{2016,3,31},#,DayCountConvention->i]&, {"Day","Year"}]},{i, {"ActualActual","Thirty360US","Thirty360","ThirtyE360","ThirtyE360ISDA","ThirtyEPlus360","Actual365","Actual360","Actual365L","ActualActualISDA","ActualActualICMA"}}],Frame->All]

U funkce FinancialBond (obligace) jsou s ohledem na kalendáře užívané u tohoto finančního instrumentu jiné názvy a mírné modifikace kalendářových konvencí. Používají se s volbou DayCountBasis. Kalendář Actual/Actual je opět implicitní:

dayCountBasis={"30/360","30E/360","30E/360German","30E+/360","ActualICMA","ActualISDA","Actual/365","Actual/360","Actual/365L","ActualAFB"}

FinancialBond

Příklad

Současná hodnota při složeném úročení, různé kalendářové konvence. 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]) je vyjádřeno v rocích. Nejdříve vytvoříme penežní tok, kde data (datumy) budou kalendářní:

cashFlowJH1=1000{-90,-15.2,45,60,25,22,27};
datescashFlowActualActualJH1=Table[{2018+j,1+j,3+2j},{j,1,7}];
(exampleActualActualJH1=Transpose[{datescashFlowActualActualJH1,cashFlowJH1}])//Dataset

Dále pro účely grafického znázornění transformujeme časové okamžiky plateb na roky:

yearscashFlowActualActualJH1=Map[DateDifference[{2019,2,5},#,"Year",DayCountConvention->"ActualActual"]&,datescashFlowActualActualJH1]/.Quantity[x_,y_]->x

cashFlowDiagram[{yearscashFlowActualActualJH1,cashFlowJH1}//Transpose]

Současná hodnota, kalendář Actual/Actual ke dni 2019-02-05

(pvcashFlowActualActualJH1=TimeValue[Cashflow[exampleActualActualJH1],i,{2019,2,5}])

Profil současné hodnoty Actual/Actual ke dni 2019-02-05

Plot[pvcashFlowActualActualJH1,{i,0,0.3}, PlotLabel->"Profil současné hodnoty Actual/Actual",PlotTheme->"Business"]

Současná hodnota, kalendář  “Actual360” ke dni 2019-02-05

Nejprve vyjádříme okamžiky plateb v rocích:

yearscashFlowActual360JH1=Map[DateDifference[{2019,2,5},#,"Year",DayCountConvention->"Actual360"]&,datescashFlowActualActualJH1]/.Quantity[x_,y_]->x

(exampleActual360JH1=Transpose[{yearscashFlowActual360JH1,cashFlowJH1}])//Dataset

Současná hodnota, kalendář Actual/360 ke dni 2019-02-05

pvcashFlowActual360JH1=TimeValue[Cashflow[exampleActual360JH1],i,0]

Profil současné hodnoty Actual/360 ke dni 2019-02-05

Plot[pvcashFlowActual360JH1,{i,0,0.3}, PlotLabel->"Profil současné hodnoty Actual/360",PlotTheme->"Business"]

Rozdíl mezi profily současné hodnoty pro oba kalendáře:

Plot[pvcashFlowActual360JH1-pvcashFlowActualActualJH1,{i,0,0.3}, PlotLabel->"Rozdíl současných hodnot při kalendářích Actual/360 a Actual/Actual",PlotTheme->"Business"]

***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]

Konec 2019-02-20

2019-02-27 Lekce 2

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

Anuity

Anuita polhůtní (dekurzivní, annuity immediate, in arrears)

Clear[T,i,PMT,v]
(* polhůtní ve výši 1 a PMT *)
{aT=TimeValue[Annuity[1,T,1],i]//Simplify,
aT=TimeValue[Annuity[PMT,T,1],i]//Simplify}

Anuita předlhůtní (anticipativní, annuity due, in advance)

(* předlhůtní ve výši 1 a PMT *)
{aTdue=TimeValue[AnnuityDue[1,T,1],i]//Simplify,
aTdue=TimeValue[AnnuityDue[PMT,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)

Vyjadřuje závislost mezi  PMT,PV,FV,T,i:

Clear[PMT,PV,FV,T,i]
(* Anuita polhůtní *)
eq=TimeValue[Annuity[{PMT,{PV,FV}},T],i,0]==0//Simplify
(* Anuita předlhůtní *)
eqDue=TimeValue[AnnuityDue[{PMT,{PV,FV}},T],i,0]==0//Simplify

Jsou-li 4 z 5 proměnných známé, je možné neznámou dopočítat:

Grid[Map[Flatten,Map[{#,#/.Solve[eq,#]}&,{PMT,PV,FV,T,i}]//Simplify],Frame->All]//TraditionalForm//Quiet

Pro neznámou i nutné řešit numericky pro konkrétní numerické hodnoty (FindRoot). Analogicky pro předlhůtní anuity.

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]

Při srážkové dani 15% aplikované na úrokový výnos je

(* Reálná úroková míra je *)0.036(1-0.15)

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

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

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

Solve[eqDue/.{PV->0,i->0.036/12,T->36,PMT->-5000},FV]

***Přesnost na 20 desetinných míst

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

Clear[pmt,T,i,timeValueInstallmentSavings]
timeValueInstallmentSavings[pmt_,T_,i_]= TimeValue[AnnuityDue[pmt,T],((i/100)/12),T]//Simplify
Manipulate[Plot[timeValueInstallmentSavings[pmt,T,i]//Evaluate,{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)]

Solve[eq/.{FV->0,i->0.072/12,T->36,PMT->-5000},PV]

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}
TimeValue[PV,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]

Při ú. m. 7% p.a. se vklad zdvojnásobí za 10 let, při ú. m. 10% se zdvojnásobí za 7 let.

Příklad (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.

Date[]

(t1=Map[{DateString[#,{"DayName", "    ","Day",". ","Month",". ","Year"}],TimeValue[1,0.04,{Date[][[1;;3]],#}]}&,{{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ž 9 miliard Kč!"}}]

Příklad (Spořící plán jedné české banky)

Analyze the profitability of the following product of a Czech bank called “Private Account Saving Plan”. In the following table you see the interest rates for various balances (zůstatky) of the account. The amounts are in thousands CZK.

Monthly fee is CZK 188. The interest is added to the principal every month so that the
interest may change accordingly the above schedule. Moreover, take into account that the acquired interest is subject to tax 15% p. a.

schedulePrivateAccount={{50,100,250,500,500},{2.5,0.3,0.4,0.5,0.6}};
tableschedulePrivateAccount=Map[ToString,schedulePrivateAccount,{2}]

Text@Grid[{{"Částka na účtu:","< 50","< 100","< 250","< 500","≥ 500"},{"Úr. míra (% p.a.","2.5","0.3","0.4","0.5","0.6"}},Frame->All]

Clear[payOffFunctionPrivateAccountInterest](* výplatní funkce  *)
payOffFunctionPrivateAccountInterest[actulamount_]:=Module[{},
Which[actulamount<50,2.5,
	50≤ actulamount<100,0.3,
	100≤ actulamount<250,0.4,
	250≤ actulamount<500,0.5,
	500≤ actulamount,0.6,
	True,0]
		]

Plot[payOffFunctionPrivateAccountInterest[amount],{amount,0,1000},PlotRange->{0,2.5},PlotStyle->Thick]

Konec 2019-02-27

2019-03-06 Lekce 3

Doplněn příklad v předchozí lekci!!!

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

Příklad

(* T=6 *)

cfjh1={-90000,-15200,45000,60000,25000,22000,27000};
cashFlowDiagram[{Range[Length[cfjh1]]-1,cfjh1}//Transpose,"CASH FLOW cfjh1"]

(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]

Plot[pv[cfjh1,i],{i,0,0.2},AxesLabel->{"i","PV"} , PlotLabel->"PV profile cfjh1"]

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

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

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

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

Vnitřní míry výnosnosti

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

Příklad (dluhopis, bond)

Dluhopis zakoupen v čase 0 za nominále 10 s ročním kupónem 10% splatný za 10 let.

cfbond=Cashflow[cfraw={-10,Table[1,{9}],11}//Flatten]
Plot[TimeValue[cfbond,i]//Evaluate,{i,0.04,0.16},PlotLabel->"Profil současné hodnoty",AxesLabel->{i,PV}]
Text["Vnitřní výnosová procenta:"]
vnitrnivynosovaprocenta=i/.NSolve[TimeValue[cfbond,i]==0,i]
Text["Kladná vnitřní výnosová procenta:"]
kladna=Select[vnitrnivynosovaprocenta,(Re[#]>0∧Im[#]==0)&]

RPSN

Roční procentní sazba nákladů.

V České republice je v případě spotřebních úvěrů, půjček, leasingu aj. povinné ze zákona uvádět charakteristiku odpovídajícího finančního produktu, která se nazývá roční procentní sazba nákladů, zkráceně RPSN. RPSN není nic jiného, než vnitřní výnosové procento peněžního toku vztahujícího se ke všem platbám, které s příslušným finančním produktem souvisí. Poskytovatel spotřebního úvěru obvykle uvede roční úrokovou sazbu, ale neuvede poplatek za sjednání smlouvy a typicky měsíční poplatky z této smlouvy plynoucí.

Příklad (Splátkový prodej)

Některé obchody nabízejí následující produkt. Zakoupíte u nás výrobek, teď zaplatíte 10% z ceny c a pak po dalších 10 měsíců každý měsíc také 10% z ceny. Jaká je RPSN? (Neuvažujeme pro jednoduchost žádné další poplatky.) V tomto případě se vlastně jedná o vnitřní výnosové procento (to znamená, že RPSN=IRR peněžního toku).

Formalizace

Clear[c]
cfRPSN={c-0.1c,-0.1c,-0.1c,-0.1c,-0.1c,-0.1c,-0.1c,-0.1c,-0.1c,-0.1c,-0.1c};

kde c je cena zboží. První položka výše uvedeného peněžního toku c-0.1c znamená, že náš okamžitý příjem je zboží v ceně c a okamžitě zaplatíme 1. splátku ve výši 0.1c. Následuje 10 splátek ve výši 0.1c. Zřejmě IRR tohoto toku nezávisí na c a ekvivalentní peněžní tok je {100-10,-10,...,-10}.

Okamžiky plateb (v rocích) a konkrétní peněžní tok jsou:

timesRPSN=(1/12)(Range[11]-1)
cfRPSN100=cfRPSN/.c->100

cashflowRPSN=Transpose[{timesRPSN,cfRPSN100}]

cashFlowDiagram[cashflowRPSN=Transpose[{timesRPSN,cfRPSN100}],"Peněžní tok splátkového prodeje"]

Plot[TimeValue[Cashflow[cashflowRPSN]//Evaluate,i,0],{i,0,0.35}, PlotLabel->"Profil současné hodnoty splátkového prodeje",AxesLabel->{"i","PV"}]

Odpovídající IRR=1.963% měsíčně, takže roční efektivní IRR=(((1+0.01963))^12)-1=0.262732, neboli 26.27% p. a., což vypadá na první pohled neuvěřitelně (zaplatíme celkem ”jenom” 110% ), ale je tomu tak:

NSolve[TimeValue[Cashflow[cashflowRPSN],i,0]==0,i,Reals]

Závěr: Pokud Vám tedy někdo půjčí za úrok menší než 26.27% p.a., pak je to výhodnější než přistoupit na splátkový prodej.

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ů *)
cfvprijmy=cf/.{_?(#<0&)->0}

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

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

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

Plot[pv[cf,i],{i,0,0.3}]

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

Konec 2019-03-06

2019-03-13 Lekce 4

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]

Derivace současné hodnoty:

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

Alternativně:

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

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]

Vnitřní hodnota peněžního toku (Internal Value, HIV)

HIV(i)

Swap (Theory)

Swap = výměna peněžních toků

Pozor na nepřesný, ale v české literatuře téměř výhradně se vyskytující překlad pojmu notional amount: nominální hodnota. Specielně však u úrokového swapu se jedná o pomyslnou, hypotetickou hodnotu. Lépe použít kapitálová částka (Cipra), pomyslná jistina nebo objem swapu, což má oporu i v anglickém výrazu swap volume.

“Security may also be an agreement between two parties (often called Party and Counterparty) on a financial or real transaction between the two. This is the case of swaps.”

Swaps, like forwards,  are mostly individual contracts between two highly rated, reliable parties which well fit the needs of both. Although the swaps are individual contracts, in practise they often follow the recommendations of the International Swaps and Derivatives Association (ISDA). A l swap may be briefly characterized as an agreement on exchange of cash flows in future times with a prescribed schedule. There are two main categories of swaps; interest rate swaps and currency
swaps. In practise, the two are often combined. Swaps are used to manage interest rate exposure or uncertainty concerning the future exchange rates.

An  interest rate swap is a contract between two parties to exchange interest streams with different characteristics based on a principal, notional amount, sometimes called the volume of a swap. The interest rates may be either fixed or floating in the same or different currencies.

A pure  currency swap is a forward contract on the exchange of different currencies on some future date (maturity) in amounts fixed today. Another type of a currency swap is a  cross-currency swap that consists of the initial exchange of fixed amounts of currencies and reverse final exchange of the same amounts at maturity. One or both parties may pay interest during the lifetime of the swap.

💡 Příklad  (Swap, Cross-Currency swap, Hull 8th ed., pp. 165-166)

Měnový úrokový swap (Cross currency swap)

5-letý měnový úrokový swap mezi IBM a British Petroleum (BP).

Počáteční výměna:  1.2.2011 IBM ⟶ BP 18 mil. USD, 1.2.2011 BP ⟶ IBM 10 mil. GBP
Koncová výměna:    1.2.2016 IBM ⟶ BP 10 mil. GBP, 1.2.2016 BP ⟶ IBM 18 mil. USD
Pevné částky:  ve dnech 1.2.2012, 1.2.2013, 1.2.2014, 1.2.2015, 1.2.2016:
		 IBM ⟶ BP 5% z objemu swapu 10 mil. GBP, tj. 0.5 mil. GBP
		 BP ⟶ IBM 6% z objemu swapu 18 mil. USD, tj. 1.08 mil. USD

Poznamenejme, že v příkladu uvedené hodnoty jsou z hlediska pozdějších znalostí vývoje směnného kursu  nereálné. Počáteční výměna se v praxi děje na základě aktuálního kursu, a ten 1.2.2011 byl GBP 1 = USD 1.6258. Kurs uvedený v příkladu byl přibližně k datu 1.9.2008: GBP 1 = USD 1.8007. Autor měl připravené hodnoty pravděpodobné v době psaní rukopisu, do vydání knihy však uplynula jistá doba.

cashFlowIBMUSD=Cashflow[{-18,1.08,1.08,1.08,1.08,18+1.08}];
cashFlowIBMGBP=Cashflow[{10,-0.50,-0.50,-0.50,-0.50,-10-0.50}];

Profily současných hodnot v závislosti na hodnotící úrokové míře:

Plot[{TimeValue[cashFlowIBMUSD,i,0],TimeValue[cashFlowIBMGBP,i,0]},{i,0,0.15},PlotTheme->  "Detailed",AxesLabel->{"i","NPV"},PlotLegends->{"USD","GBP"},PlotLabel->"NPV IBM in USD and GBP"]

(* Actual exchange rate, FX *)
FinancialData["GBP/USD"]

2017

WolframAlpha["GBP/USD",{{"History",1},"ComputableData"}]

Skutečné historické směnné kursy:

(fxGBPUSDreal={{{2011,2,1},1.6258`},{{2012,2,1},1.5917`},{{2013,2,1},1.5162`},{{2014,2,1},1.6745`},{{2015,2,1},1.5434`},{{2016,2,1},1.3916`}})//Dataset

Abychom mohli použít výše uvedené peněžní toky a přiblížili se aspoň trochu realitě, provedeme lineární transformaci směnných kursů tak, aby v okamžiku počáteční výměny odpovídala skutečnosti:

fxGBPUSDexample=Map[Last,fxGBPUSDreal](1.8/(1.6258`))

cashFlowIBMGBP=Cashflow[{10,-0.50,-0.50,-0.50,-0.50,-10-0.50}]

Peněžní tok IBM v GBP konvertovaný na USD dle fxGBPUSDexample:

cashFlowIBMGBPinUSD=Cashflow[cashFlowIBMGBP[[1]]*fxGBPUSDexample]

(totalcashFlowIBMinUSD=TimeValue[cashFlowIBMUSD,i,0]+TimeValue[cashFlowIBMGBPinUSD,i,0])//TraditionalForm

Profil současné hodnoty v dolarovém vyjádření v závislosti na hodnotící úrokové míře :

Plot[totalcashFlowIBMinUSD,{i,0,0.2},PlotTheme->"Business",PlotLegends->{"USD","GBP"},PlotLabel->"NPV IBM in USD as a function of i",AxesLabel->{"i","NPV"}]

Ex post vidíme, že IBM by na takovém swapu jednoznačně vydělalo. V okamžiku uzavření swapu však známe jen aktuální kurs a aktuální tržní (hodnotící) úrokovou míru. Pro představu o budoucím vývoji použijeme HIV (vnitřní hodnotu peněžního toku). Pro jednoduchost budeme předpokládat, že směnný kurs je konstantní pro období 1,...,5, označme jej FX. Pak peněžní tok IBM v GBP konvertovaný na USD je:

Clear[FX];
cashFlowIBMGBPinUSDvariableFX=Cashflow[cashFlowIBMGBP[[1]]*{1.8,FX,FX,FX,FX,FX}]

(totalcashFlowIBMinUSDvariableFX=TimeValue[cashFlowIBMUSD,i,0]+TimeValue[cashFlowIBMGBPinUSDvariableFX,i,0])//TraditionalForm

Plot3D[totalcashFlowIBMinUSDvariableFX,{i,0.04,0.07},{FX,1.4,2}]

Text@Column[{"PV v USD v závislosti na FX a i",totalcashFlowIBMinUSDvariableFX//TraditionalForm,"PV v USD v závislosti na i a FX = 1.85",
(totalcashFlowIBMinUSDvariableFX/.FX->1.85)//TraditionalForm},Background->{{LightBlue,None}},Frame->True,Alignment->{{Left}}]

Manipulate[Plot[(totalcashFlowIBMinUSDvariableFX/.FX->fx)//Evaluate,{i,0.00,0.1},AxesLabel->{"i","PV"}],{{fx,1.85},1.2,2.3,Appearance->"Labeled"},SaveDefinitions->True]

HIV(i)

solHIV=Solve[totalcashFlowIBMinUSDvariableFX==0,FX]

Plot[FX/.solHIV,{i,0,0.2},PlotLabel->"HIV",AxesLabel->{"i","HIV"},PlotStyle->Thick]

Tak např. při i=0.05 je odpovídající HIV (Subscript[FX, 5%])=1.87793. Z následujícícho grafu je zřejmé, že při této úrokové míře je pro IBM je výhodný směnný kurs FX<(Subscript[FX, 5%]). Pro FX>(Subscript[FX, 5%]) je swap pro IBM nevýhodný.

Plot[totalcashFlowIBMinUSDvariableFX/.i->0.05,{FX,1.85,1.9},PlotLabel->"NPV IBM in USD for i = 5 per cent",AxesLabel->{"FX","NPV"},PlotStyle->Thick]

solHIV/.i->0.05

***Zobecnění: geometrický pokles nebo růst FX, (Subscript[FX, t])=((FX(1+g))^t), g dáno, t<0 znamená pokles, t>0 růst.

***Example (Combined swap)

Notional amount: CZK 34 500 000

Fixed amounts:

        Initial exchange: Party A pays EUR 1,000,000 to party B, party B pays CZK 34,500,000 to party A. Maturity 10 years.

        Final exchange (after 10 years): Party B pays EUR 1,000,000 to party A, party A pays CZK 34,500,000 to party B.

Floating amounts:

        Party A pays to party B semiannually E6M-3.5 per cent (3.5 is the spread or margin) from notional amount based on the floating rate day count fraction Actual/360, i.e., approximately  CZK ((E6M-3.5)/100)×(182/360)×34500000 . Here E6M stands for LIBOR interest rate on EUR with maturity 6 months.

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

Hodnocení investičních projektů (příležitostí ) 1

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

** Test whether the project cf is a Class I (Type 1) project

(* Test whether the project cf is a Class I (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}]}

IRR

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

Profitability Index (PI, Index ziskovosti)

Clear[profitability];
profitability[cf_,i_]:=Module[{},	If[Not[typeI[cf]],Return[Print["    The project\n ",cf,  "\n    is not of type I (outflows do not precede inflows).   "]]];
-(1/(First[cf]))  TimeValue[Cashflow[{0,Rest[cf]}//Flatten],i]//N]

Discounted Payback Method (PB, Diskontovaná doba návratnosti)

(* 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)]]]

Konec 2019-03-13

2019-03-20 Lekce 5

Hodnocení investičních projektů (příležitostí ) 2

Příklad (Porovnání 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"};

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

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

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]

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},AxesLabel->{"i","NPV"},PlotLabel->"NPV Detailed"],Plot[PVcfZ,{i,0,1.5},PlotRange->All,PlotStyle->Thick,
AxesOrigin->{0,0},AxesLabel->{"i","NPV"},PlotLabel->"NPV"]}]

IRR, durace, konvexita, grafy (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)]

(* Plots of Present Value,Duration,and Convexity *)
Clear[plotsPVDC]
plotsPVDC[cf_]:=Module[{plotPV,plotD,plotC,IRR,pv,durace,konvexita,i},
pv[cashflow_,i_]:=(1/(((1+i))^(Range[Length[cashflow]]-1))).cashflow;
IRR[cashflow_]:=Select[i/.NSolve[TimeValue[Cashflow[cashflow],i,0]==0,i],(Re[#]>0∧Im[#]==0)&]//Flatten//First;
durace[cashflow_,i_]:=TimeValue[Cashflow[cashflow*(Range[Length[cashflow]]-1)],i,0]/TimeValue[Cashflow[cashflow],i,0];
konvexita[cashflow_,i_]:=Module[{citatel,jmenovatel,T},
T=Length[cashflow];
citatel=TimeValue[Cashflow[(Range[T]-1)*Range[T]*cashflow],i,0]//Simplify//Expand;
jmenovatel=TimeValue[Cashflow[cashflow],i]//Simplify//Expand;
(citatel/jmenovatel)];
(* Output *)
GraphicsRow[{Plot[pv[cf,i],{i,0,2IRR[cf]},AxesLabel->{"i","PV"},PlotLabel->"Present Value",PlotStyle->{Thick,Black}],Plot[durace[cf,i],{i,0,2IRR[cf]},AxesLabel->{"i","Duration"},PlotLabel->"Duration",PlotStyle->{Thick,Blue},Exclusions->None],Plot[konvexita[cf,i],{i,0,2IRR[cf]},AxesLabel->{"i","Convexity"},PlotLabel->"Convexity",PlotStyle->{Thick,Red},Exclusions->None]},ImageSize->Full]]

Příklad (Porovnání investičních projektů, dokončení)

(* 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[Prepend[Map[{#[[1]],IRR[#[[2]]]}&,{cfarraystring,cfarray}//Transpose],{"Projekt","IRR"}],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,AxesLabel->{"i","Duration"},Exclusions->False]

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,AxesLabel->{"i","Duration"},Exclusions->None]

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}},PlotTheme->"Classic"]

**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

Vnitřní míry výnosnosti

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

Rozdíly C-A (IRR, 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]

Column@Map[Row@{Text[(#[[1]])<>"\n"],plotsPVDC[#[[2]]]}&,{cfarraystring,cfarray}//Transpose]

***Příklad (Aproximace relativního přírůstku současné hodnoty)

TimeValue[Cashflow[cfa],i]//Simplify
durace[cfa,v]/.v->1/(1+i)//Simplify
konvexita[cfa,v]/.v->1/(1+i)//Simplify
relativeIncrement[cf_,i_,Δi_]:=(TimeValue[Cashflow[cf],i+Δi]-TimeValue[Cashflow[cf],i])/TimeValue[Cashflow[cf],i]

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

Dekompozice úrokové míry

Hyperlink[Button[" Úrokové míry "],"http://www.karlin.mff.cuni.cz/~hurt/20170321_Urokove_miry_45_47_Template_mfpress_1.pdf"]

r ... nominální (kótovaná) úroková míra

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

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

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

V aditivním tvaru:

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

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

Nominální úroková míra 1+r=(1+(Subscript[r, 0 infl]))(1+(Subscript[r, default]))

Clear[r,r0infl,rdefault]
Solve[1+r==(1+r0infl)(1+rdefault),rdefault]//First//First

(* Percentuální vyjádření *)
Clear[r,r0infl,rdefault]
Solve[100(100+r)==(100+r0infl)(100+rdefault),rdefault]//First//First

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]

Rating

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 (t⟶t+3)

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

MatrixPower[transitionmatrix,3]//MatrixForm

Konec 2019-03-20

2019-03-27 Lekce 6

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

Intro

textHamlet=ExampleData[{"Text","Hamlet"}]

Speak["To be, or not to be,--that is the question:-- Whether 'tis nobler in the mind to suffer The slings and arrows of outrageous fortune Or to take arms against a sea of troubles, And by opposing end them?--To die,--to sleep,-- No more;"]

Příklad 1

Reálná ú. m. při inflaci

Reálná ú. m. při inflaci a zdanění výnosu

Příklad 2

Stejný čistý výnos dvou investic s rozdílným zdaněním zisku

Č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 .

Vidíme, že 1+(Subscript[R, t]) je geometrický průměr hodnot 1+(Subscript[f, 1]),...,1+(Subscript[f, t]). Pro logaritmus je to aritmetický průměr:

ln (1+(Subscript[R, t]))=(1/t)(∑_(j=1)^t)ln (1+(Subscript[f, j])) .

Tento vztah je inspirativní pro spojitý případ, ve kterém R(t) je integrální průměr:

(Subscript[R, t])=(1/t)(∫_( 0)^(, t))f(τ)dτ.

Neekvidistantní časové intervaly

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

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

Hyperlink[Button[" Výnosové křivky "],"http://www.karlin.mff.cuni.cz/~hurt/20170328_Vynosove_krivky_Template_mfpress_1.pdf"]

Příklad (Porovnání výnosových křivek v různých referenčních časech, Treasury YC USA)

December 15, 2014:

January 5, 2015:

Dec 10, 2015:

Dec 6, 2016:

Mar 23, 2017:

Mar 26, 2018:

Mar 25, 2019:

***Zpracování dat z předchozího příkladu (Treasury YC USA)

yieldCurveUSA20170323={WolframAlpha["yield curves",{{"TreasuryYieldCurve:EconomicData",1},"ComputableData"},PodStates->{"TreasuryYieldCurve:EconomicData__More"}],WolframAlpha["yield curves",{{"TreasuryYieldCurve:EconomicData",2},"ComputableData"},PodStates->{"TreasuryYieldCurve:EconomicData__More"}],WolframAlpha["yield curves",{{"TreasuryYieldCurve:EconomicData",3},"ComputableData"},PodStates->{"TreasuryYieldCurve:EconomicData__More"}]}

yieldCurveUSA20170323mod=Flatten[Rest@Most@yieldCurveUSA20170323,1]
yieldCurveUSA20170323modmod=Map[{StringTake[#[[1]],4],#[[2,1]]}&,yieldCurveUSA20170323mod]
Map[{StringReplace[#[[1]],{"\[Hyphen]mo"->"M","\[Hyphen]ye"->"Y","\[Hyphen]y"->"Y"}],#[[2]]}&,yieldCurveUSA20170323modmod]

Notes:

Rest[yieldCurveUSA20170323]//First

Rest[yieldCurveUSA20170323]//First//First//FullForm
(aux1=Rest[yieldCurveUSA20170323]//First//Last)//FullForm

Map[{StringTake[#[[1]],4],#[[2,1]]}&,{aux1}]

***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 v tomto případě 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 nezávisle na hodnotící úrokové míře . 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

***Remark 1: 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

***Remark 2:

The Vasicek’s example may have a weak point: the maturity premium is not considered.

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

Nechť T≠ (Subscript[T, n]) , n=1,...,N. To znamená, že v čase T není kótovaný výnos  předmětného aktiva, např. příslušné aktivum není v čase T obchodováno.

***
Pro účely finančního řízení je zapotřebí znát také výnosy pro nepozorovatelné, tj. nekótované doby do splatnosti přinejmenším v intervalu [(Subscript[T, 1]),(Subscript[T, N])]. (For the financial decision making it is necessary to know also yields for non-observable maturities (different of quoted ones) at least in the interval  [(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])]. Pro tento účel se sestrojuje spojitá funkce g(t), která splňuje určitá kritéria. Kritéria se obvykle týkají toho, jak přesně má sestrojená g(t) aproximovat data. Rozumní finanční analytici se většinou spokojí s nějakým vyrovnáním (vyhlazením, fitting), vrcholoví manažéři požadují, aby v kótovaných časech (skutečně dostupných dat)  byly kótované a aproximované úrokové míry shodné (numerický přístup -> interpolace).

Sestrojená výnosová křivka by měla co nejlépe vystihovat realitu (pozorované, kótované úrokové míry).

Numerický přístup (interpolace)

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

Numerický přístup spočívající v interpolaci má mj. velkou nevýhodu v tom, že nedokáže eliminovat chybná rozhodnutí obchodníka s cennými papíry (dealera). Stačí se podívat na empirické výnosové křivky, kde často můžeme pozorovat “úlety”. Jest pravdou, že hrubou chybu obchodníka slušné finanční insituce automat zastaví během zlomků vteřiny. I tak mohou být ztráty v desítkách miliónů. Ale ty se pak v interpolované křivce projeví a při interpolaci podají zkreslený dojem. To se ovšem částečně může stát i při statistickém přístupu při nevhodné volbě odhadovací procedury, např. pro data, která vykazují těžké chvosty (heavy tails) se použije normální rozdělení jako základní.

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šší (a 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

Příklad (varovný, interpolace polynomem)

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.

Konec 2019-03-27

2019-04-03 Lekce 7

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

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

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]}]

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])}

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

!Vyrovnání kubickými spliny (Fitting by Cubic Splines)

Viz přednáška

***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τ

D[nelsonsiegelspot[b0,b1,b2,c,t],t] t +nelsonsiegelspot[b0,b1,b2,c,t]//FullSimplify

(* 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.

?*Fit

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]

***Datasets

Recall datasets:

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]}]

!Příklad (Swensson)

Zobecňuje předchozí, obsahuje navíc dva parametry. Začneme s jednodušším tvarem forwardové křivky:

(Subscript[f, S,w])(t;(Subscript[β, 0]),(Subscript[β, 1]),(Subscript[β, 2]),(Subscript[β, 3]),(Subscript[γ, 1]),(Subscript[γ, 2]))= (Subscript[β, 0])+(Subscript[β, 1])(e^(-t/(Subscript[γ, 1])))+(Subscript[β, 2]) (t/(Subscript[γ, 1]))(e^(-t/(Subscript[γ, 1])))+(Subscript[β, 3]) (t/(Subscript[γ, 2]))(e^(-t/(Subscript[γ, 2])))

Ve níže používaných vstupech β≈b, γ≈c:

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:

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

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

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; possible local extremes are determined by the parameter c,1 a c,2.

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 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->{{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.4,"b2"},-5,-1,0.2,Appearance->"Labeled"},
{{b3,-4.6,"b3"},-5,-1,0.2,Appearance->"Labeled"},
{{c1,150,"c1"},100,1000,10,Appearance->"Labeled"},
{{c2,3200,"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]

***Příklad: 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

http://demonstrations.wolfram.com/EstimatingTheLocalMeanFunction/

Pokračujte na Download Author Code.

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

Based on the present value of the cash flow CF=((Subscript[CF, 0]),...,(Subscript[CF, T]))  using spot rates R=((Subscript[R, 1]),...(Subscript[R, T]))  taken from the yield curve:

({{({{PV(CF,R)}})=(∑_(t=0)^T)((Subscript[CF, t])/(((1+(Subscript[R, t])))^t))}})

***Příklad

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

(Subscript[P, 0]),(Subscript[P, 1]),... ceny aktiva (prices of an 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 minus 1)

Pravděpodobnost

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/ms1/doc/pravdepodobnost_ms1.pdf

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

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 (při daném B, given 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)=((∂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 2019-04-03

2019-04-10 Lekce 8

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

Rekapitulace

(Subscript[P, 0]),(Subscript[P, 1]),... ceny aktiva (prices of an asset) nezáporné, princip omezeného ručení (limited liability)
(Subscript[p, t])=ln (Subscript[P, t]) ... logaritmická cena, znaménko libovolné

(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), znaménko libovolné

alternativně

(Subscript[R, t])=(Subscript[p, t+1])-(Subscript[p, t]) ...rozdíl logritmických cen

1+(Subscript[R, t])=((Subscript[P, t+1])/(Subscript[P, t])) ... nezáporné

(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 minus 1)

Model vývoje cen: náhodné procházky, hypotéza náhodné procházky
(Random Walk Hypothesis)

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

Pro ceny se používá se zřídka.

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

μ ... drift (musí být dostatečně velké - jinak by mohly klesnout pod nulu), trend, (Subscript[ε, t]) ... nezávislé  (ve slabé verzi nekorelované) stejně rozdělené náhodné veličiny (iid, indpendent identically distributed, poruchy, disturbances, innovations) s nulovou střední hodnotou, E,(Subscript[ε, t]),=0, a stejným konečným nenulovým rozptylem, var (Subscript[ε, t])=(σ^2) . Autoregresní posloupnost 1. řádu, AR(1).

V níže uvedeném příkladě čas běží ve dnech. Jsou znázorněny 4 trajektorie ((Subscript[ω, 1]),(Subscript[ω, 2]),(Subscript[ω, 3]),(Subscript[ω, 4]))  pro vývoj ceny s těmito parametry:  μ=(((Subscript[P, 0])(1+0.05))^(1/250)) (odpovídá ročnímu výnosu přibližně 5%), (Subscript[P, 0])=100, (Subscript[ε, t]) iid s rozdělením N(0,4×(10^(-6))= rozptyl ), T=1000 [dnů]. Pro účely reprodukovatelnosti je při všech aktivacích zajištěno stejné počáteční náhodné číslo (SeedRandom[113333], všechny simulace je možné kdykoli kompletně zrekonstruovat). Užívejte vždy při publikaci (Bc práce, DP práce i ostatní publikace)!!

SeedRandom[113333];ListLinePlot[pricesP=Table[NestList[(100×((((1+0.05))^(1/250))-1)+#+100RandomReal[NormalDistribution[0,0.002]])&,100,1000],{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,1001},All},PlotLabel->Style["4 možné vývoje ceny akcie (Subscript[P, t]) v období 1000 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

Nejčastější použití:

(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.00003, (Subscript[p, 0])=4.6, (Subscript[ε, t]) iid s rozdělením N(0,(0.0004^2)), T=1000 [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[logpricesP=Table[NestList[(0.00003+#+4.6RandomReal[NormalDistribution[0,0.0004]])&,4.6,1000],{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,1001},All},PlotLabel->Style["4 možné vývoje logaritmické ceny akcie (Subscript[p, t]) v období 1000 dnů\n při počáteční ceně akcie \!\(\*SubscriptBox[\(p\), \(\(0\)\(\\ \)\)]\)=Log[100]=4.6",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 increments).

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

Viz také (správnost ověřil autor)  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) (volatilitou σ).

Standardní Wienerův proces

(* Marginální rozdělení *)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[113333];
wp30simulaci=RandomFunction[wp=WienerProcess[],{0,1000,1},30];
ListLinePlot[%,Filling->Axis,PlotStyle->{Thick}]

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, přibližně 1000 dnů): 
μ = 0.05, σ =1. Počáteční cena (Subscript[P, 0])=100.

SeedRandom[113333];
wpμσ30simulaci=100+RandomFunction[wpμσ=WienerProcess[μ,σ]/.{μ->0.05,σ->1},{0,1000,1},30];
ListLinePlot[%,PlotStyle->{Thick}]

Model vývoje cen: Geometrický Brownův pohyb

(* Marginální rozdělení *)SliceDistribution[GeometricBrownianMotionProcess[μ,σ,(Subscript[P, 0])],t]

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]//TraditionalForm

(* 100 trajektorií, 100 simulací *)
SeedRandom[113333];
wpBμσ100simulaci=RandomFunction[wpμσ=GeometricBrownianMotionProcess[μ,σ,100]/.{μ->0.001,σ->0.006},{0,1000,1},100];
ListLinePlot[%]

Teoretická střední hodnota E,P(1000):

Mean[GeometricBrownianMotionProcess[μ,σ,(Subscript[P, 0])][t]]/.{(Subscript[P, 0])->100,μ->0.001,σ->0.006,t->1000}

Aritmetický průměr a výběrová směrodatná odchylka dosažených cen v čase t=1000 z výše uvedených simulací, tj. odhad střední hodnoty E,P(1000):

With[{data=Map[Last[Last[#]]&,wpBμσ100simulaci//Normal]},Text@Row@{"Průměr = ",Mean[data],"     Směr. odchylka = ",StandardDeviation[data]}]

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

Frakcionální Brownův pohyb: Příklady

SliceDistribution[FractionalBrownianMotionProcess[μ,σ,h],t]

Grid[{{"Mean", Mean[FractionalBrownianMotionProcess[μ,σ,h][t]]},{"Variance",Variance[FractionalBrownianMotionProcess[μ,σ,h][t]]//TraditionalForm},{"CovarianceFunction",CovarianceFunction[FractionalBrownianMotionProcess[μ,σ,h],s,t]//TraditionalForm},
{"CorrelationFunction",CorrelationFunction[FractionalBrownianMotionProcess[μ,σ,h],s,t]}},Frame->All]

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[%]

Konec 2019-04-10

2019-04-17 Lekce 9

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

Těžké chvosty (heavy tails)

Chvosty jsou “vzdálenější” oblasti rozdělení. Mají-li tyto oblasti “nezanedbatelné” pravděpodobnosti, mluvíme o těžkých chvostech. Je-li nosičem rozdělení n. v. X celá přímka, pak se pravdědobnosti chvostů vyjadřují jako P(|X|>k), pro nosič [0,∞) pak P(X>k), k>0 “velké”.  Rozdělení s těžšími chvosty jsou obvykle “špičatější”. V případě, že existuje čtvrtý moment, pak se špičatost měří pomocí číselné charakteristiky zvané špičatost (kurtosis). Pozor, jsou dvě definice špičatosti, (Subscript[β, 2])=((E(X-E,X))^4)/(((var X))^2) a (Subscript[γ, 2])=((E(X-E,X))^4)/(((var X))^2)-3. Pro N(μ,(σ^2)) je (Subscript[β, 2])=3, (Subscript[γ, 2])=0. Momenty některých rozdělení s těžkými chvosty však neexistují. Rozdělení s těžkými chvosty se také nazývají leptokurtická. Někdy se používá klasifikace: rozdělení s (Subscript[β, 2])>3, ((Subscript[β, 2])=3, (Subscript[β, 2])<3) se nazývá leptokurtické (mesokurtické, platykurtické).

Procedury (nutno spustit před dalšími výpočty)

SD ... směrodatná odchylka

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

Empirické rozdělení

Referenční náhodná veličina X, náhodný výběr rozsahu (Subscript[X, 1]),....,(Subscript[X, n]) tvoří n “kopií” této náhodné veličiny, považujeme je za nezávislé stejně rozdělené náhodné veličiny (iid, independent identically distributed).

Za empirické rozdělení se považuje rozdělení, kde se každé z pozorovaných hodnot připisuje stejná  pravděpodobnost 1/n. Empirická distribuční funkce je definována (při daných (Subscript[X, 1]),...,(Subscript[X, n]) jakožto funkce x) takto:

(Subscript[F, n])(x)=(1/n)(∑_(i=1)^n)I{(Subscript[X, i])≤x}

Příklad: (simulovaná data z rozdělení N(0,1), rozsah výběru n=100)

SeedRandom[13];
empiricalDataN01Size100=RandomVariate[NormalDistribution[],100];
empiricalDistribution100=EmpiricalDistribution[empiricalDataN01Size100]
GraphicsRow@{Plot[CDF[empiricalDistribution100,x],{x,-4,4},PlotLabel->"Empirická distribuční funkce"],Plot[CDF[empiricalDistribution100,x],{x,-0.5,0.5},PlotLabel->"Empirická distribuční funkce (detail)"]}

Příklad: (simulovaná data z rozdělení N(0,1), rozsah výběru n=1000)

SeedRandom[13];
empiricalDataN01Size1000=RandomVariate[NormalDistribution[],1000];
empiricalDistributionempiricalDataN01Size1000=EmpiricalDistribution[empiricalDataN01Size1000]

GraphicsRow@{Plot[CDF[empiricalDistributionempiricalDataN01Size1000,x],{x,-3,3},PlotStyle->Thick,PlotLabel->"Empirical distribution function"],Histogram[empiricalDataN01Size1000,15,"PDF",PlotLabel->"Histogram"],SmoothHistogram[empiricalDataN01Size1000,PlotLabel->"Smoothed density",PlotRange->Full]}

Číselné charakteristiky:

moments[empiricalDistributionempiricalDataN01Size1000]

Normální rozdělení N(μ,(σ^2))

𝒟normal=NormalDistribution[μ,σ];
(* Nosič rozdělení angl. též support: *)
DistributionDomain[𝒟normal]
moments[𝒟normal]

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

Pravidlo 3σ

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

Pravidlo 2σ

{Probability[Abs[X-μ]>2σ,X\[Distributed]NormalDistribution[μ,σ]]//N,Probability[Abs[X-μ]<2σ,X\[Distributed]NormalDistribution[μ,σ]]//N}

Logaritmicko-normální rozdělení L,N(μ,(σ^2))

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

Parametry: μ∈ℝ, σ>0

Nosič: X∈(0,∞)

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

𝒟LN=LogNormalDistribution[μ,σ];
DistributionDomain[𝒟LN]
moments[𝒟LN]

Hustota:

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

Manipulate[Column[{
Text@Style[Row[{"Mean:        ",Mean[LogNormalDistribution[μ,σ]],"        Variance: ",Variance[LogNormalDistribution[μ,σ]]}],Bold,14],
Text@Style[Row[{"Skewness: ",Skewness[LogNormalDistribution[μ,σ]],"     Kurtosis: ",Kurtosis[LogNormalDistribution[μ,σ]]}],Bold,14],
Show[Plot[PDF[LogNormalDistribution[μ,σ],x],{x,0,17},AxesOrigin->{0,0},PlotStyle->{Black,Thick},PlotRange->All,ImageSize->Large,PlotLabel->"Červeně je vyznačena hustota N(μ,σ) se stejnými parametry."],Plot[PDF[NormalDistribution[μ,σ]/.{μ->Mean[LogNormalDistribution[μ,σ]],σ->StandardDeviation[LogNormalDistribution[μ,σ]]},x]//Evaluate,{x,0,17},PlotStyle->{Red,Thick}]]}],
{{μ,1.5},-1,3,Appearance->"Labeled"},{{σ,0.32},0.1,1.5,Appearance->"Labeled"},SaveDefinitions->True]

Poznámka (ke geometrickému Brownově pohybu)

{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

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

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

Parametr σ nemá význam směrodatné odchylky.

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

⟹ Špičatost je nezávislá na parametrech. Je dvakrát vyšší než u normálního rozdělení.

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

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

Manipulate[Column[{
Text@Style[Row[{"Mean:        ",Mean[LaplaceDistribution[μ,σ]],"        Variance: ",Variance[LaplaceDistribution[μ,σ]]}],Bold,14],
Text@Style[Row[{"Skewness: ",Skewness[LaplaceDistribution[μ,σ]],"     Kurtosis: ",Kurtosis[LaplaceDistribution[μ,σ]]}],Bold,14],
Show[Plot[PDF[LaplaceDistribution[μ,σ],x],{x,-4,4},AxesOrigin->{0,0},PlotStyle->{Black,Thick},PlotRange->All,ImageSize->Large,PlotLabel->"Červeně je vyznačena hustota N(μ,σ) se stejnými parametry."],Plot[PDF[NormalDistribution[μ,σ]/.{μ->Mean[LaplaceDistribution[μ,σ]],σ->StandardDeviation[LaplaceDistribution[μ,σ]]},x]//Evaluate,{x,-4,4},PlotStyle->{Red,Thick}]]}],
{{μ,0},-1,3,Appearance->"Labeled"},{{σ,1},0.1,1.5,Appearance->"Labeled"},SaveDefinitions->True]

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

𝒟Cauchy=CauchyDistribution[μ,σ];
DistributionDomain[𝒟Cauchy]
moments[𝒟Cauchy]
Text@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])(μ,σ). Počet stupňů volnosti k může být libovolné reálné k≥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,2.01]],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,{1.959963984540054`,2,3,4,5}}],TableHeadings->{None,{"k","C(0,1)","(Subscript[t, 2.01])(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])

Text@TableForm[Table[{k,((3 (-2+k))/(-4+k))},{k,{4.01,4.5,5,10,100}}]//N,TableHeadings->{None,{"k","Kurtosis"}}]

Manipulate[Column[{
Text@Style[Row[{"Mean:        ",Mean[StudentTDistribution[0,1,k]],"        Variance: ",Variance[StudentTDistribution[0,1,k]]}],Bold,14],
Text@Style[Row[{"Skewness: ",Skewness[StudentTDistribution[0,1,k]],"     Kurtosis: ",Kurtosis[StudentTDistribution[0,1,k]]}],Bold,14],
Show[Plot[PDF[StudentTDistribution[0,1,k],x],{x,-4,4},AxesOrigin->{0,0},PlotStyle->{Black,Thick},PlotRange->All,ImageSize->Large,PlotLabel->"Červeně je vyznačena hustota N(μ,σ) se stejnými parametry."],Plot[PDF[NormalDistribution[μ,σ]/.{μ->Mean[StudentTDistribution[0,1,k]],σ->StandardDeviation[StudentTDistribution[0,1,k]]},x]//Evaluate,{x,-4,4},PlotStyle->{Red,Thick}]]}],
{{k,5},2.1,30,Appearance->"Labeled"},SaveDefinitions->True]

*Logistické rozdělení

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

(* Distribucni funkce *)
CDF[𝒟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->{"κ"," "},PlotTheme->"Scientific",PlotStyle->Thick]

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-μ)/σ), kde Φ je distribuční funkce normovaného (standardního) normálního rozdělení N(0,1). 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)). Rozdělení směsi symetrických rozdělení není obecně není symetrické!

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.5},0.1,3,Appearance->"Labeled"},
{{σ2,0.5},0.1,3,Appearance->"Labeled"},
{{σ3,0.7},0.1,3,Appearance->"Labeled"},
{{ε,0.05},0.001,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.00001,0.4,Appearance->"Labeled"},SaveDefinitions->True]

**Meixnerovo rozdělení (za cvičení)

?*Distr*

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

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"},SaveDefinitions->True]

**Příklad (rozdělení výnosů DJI - Mathematica demonstration za cvičení)

http://demonstrations.wolfram.com/ModelingReturnDistributions/

Příklad: Reálná data:

**Erste (2019-04-09 data not available)

**Manipulace s daty

SetDirectory[NotebookDirectory[]];ersteceny=FinancialData["Vienna:EBS",{{2011,1,1},{2019,1,10}}] ;
Text@Row@{"Number of observations:   ",Length[%]}
erstevynosy=FinancialData["Vienna:EBS","Return",{{2011,1,1},{2019,1,10}}] ;
Export["ersteceny.xls",ersteceny,"XLS"];
Export["erstevynosy.xls",erstevynosy,"XLS"];
ersteceny[[1;;4]]
GraphicsRow@{DateListPlot[ersteceny,Joined->True,PlotStyle->Thick,PlotLabel->"Prices Erste"],DateListPlot[erstevynosy,Joined->True,PlotRange->All,PlotLabel->"Returns Erste"]}

erstecenyread=Import["ersteceny.xls","XLS"];
Dimensions[erstecenyread]
erstecenyread=erstecenyread//First;
Take[erstecenyread,-10]

Ilustrace

Výnosy Erste:

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

Vidíme dva vedlejší vrcholky.

Charakteristiky

moments[EmpiricalDistribution[erstehodnotyvynosu]]

VW

Kotace Frankfurt: “F:VOW”

Ceny a výnosy VW

vwceny20190410=FinancialData["F:VOW",{{2011,1,1},{2019,4,10}}] ;
DateListPlot[%,"VW prices (Frankfurt)"]

SetDirectory[NotebookDirectory[]];vwceny=FinancialData["F:VOW",{{2011,1,1},{2019,1,10}}] ;
Text@Row@{"Number of observations:   ",lengthVW=Length[%]}
vwvynosy=FinancialData["F:VOW","Return",{{2011,1,1},{2019,1,10}}] ;
Export["vwceny.xls",vwceny,"XLS"];
Export["vwvynosy.xls",vwvynosy,"XLS"];
GraphicsRow@{DateListPlot[vwceny,Joined->True,PlotStyle->Thick,PlotLabel->"VW prices"],DateListPlot[vwvynosy,Joined->True,PlotLabel->"VW returns",PlotRange->All]}

Krize VW: Ceny od 2015-09-01:

positionVWceny201509=Position[vwceny,{{2015,9,_},_}]

positionVWceny201509//First//First

vwceny[[positionVWceny201509//First//First]]

DateListPlot[vwceny[[positionVWceny201509[[1,1]];;lengthVW]],Joined->True,PlotStyle->Thick,PlotLabel->"VW prices"]

Výnosy

(* Odstranění data *)
vwhodnotyvynosu=Map[Last,vwvynosy];
GraphicsRow@{Histogram[vwhodnotyvynosu,Automatic,"PDF",PlotLabel->"VW returns"],SmoothHistogram[vwhodnotyvynosu,PlotLabel->"VW returns",PlotRange->Full]}

Krize VW: Vynosy od 2015-09-01 do 2015-10-31:

vwhodnotyvynosuodzari2015=Map[Last,vwvynosy[[positionVWceny201509[[1,1]];;positionVWceny201509[[1,1]]+60-1]]];
GraphicsRow@{Histogram[vwhodnotyvynosuodzari2015,Automatic,"PDF",PlotLabel->"VW returns from 2015-09-01 to 2015-10-31"],SmoothHistogram[vwhodnotyvynosuodzari2015,PlotLabel->"VW returns from 2015-09-01 to 2015-10-31",PlotRange->Full]}

Charakteristiky VW

Pro celé období (od 2011-01-01):

moments[EmpiricalDistribution[vwhodnotyvynosu]]

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

Krize VW: Vynosy od 2015-09-01 do 2015-10-31:

moments[EmpiricalDistribution[vwhodnotyvynosuodzari2015]]

Row@{"p-hodnota testu dobré shody s normálním rozdělením:  "  ,DistributionFitTest[vwhodnotyvynosu]}

**General Motors a Apple

Ceny

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

Výnosy

GMvynosy=FinancialData["GM","Return",{{2011,1,1},{2018,3,26}}] ;
Applevynosy=FinancialData["AAPL","Return",{{2011,1,1},{2018,3,26}}] ;
(* 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",PlotRange->All]}

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]}

**Cvičení

Proveďte podobnou analýzu pro General Electric (ticker “GE”).

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

***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[Table[data,10],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[Table[data,10],InterpolationOrder->0,Filling->Axis]

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

Míry rizika 1

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]), (Subscript[R, 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.

Rozptylové míry rizika

Směrodatná odchylka, volatilita (Standard Deviation, S. D., volatility)

Je nejjednodušší mírou rizika. V teorii portfolia se přímo rizikem nazývá.

σ=(Sqrt[var ρ])=(Sqrt[var L]).

Nevýhoda: citlivá na “velké” odchylky, chyby pozorování.

Střední absolutní odchylka (mean absolute deviation, MAD)

MAD(ρ)=MAD(L)=E|ρ-E,ρ|=E|L-E,L|.

Robustní vůči chybám a velkým odchylkám.

Example

The assets A and B possess returns dependent on the state of economy in the following way:

Text@Grid[{{"State of Economy","Probability","Return A [%]","Return B [%]"},
{"Boom",0.3,100,20},
{"Normal",0.4`,15,15},
{"Recession",0.3`,-70,10}},Frame->All]

𝒟assetA=EmpiricalDistribution[{0.3,0.4,0.3}->{100,15,-70}];
𝒟assetB=EmpiricalDistribution[{0.3,0.4,0.3}->{20,15,10}];
Text@Grid[{{" ","Asset A","Asset B"},
{"Mean",Mean[𝒟assetA],Mean[𝒟assetB]},
{"Variance",Variance[𝒟assetA],Variance[𝒟assetB]},
{"S. D.",StandardDeviation[𝒟assetA],StandardDeviation[𝒟assetB]},
{"MAD",Expectation[Abs[x-Mean[𝒟assetA]],x\[Distributed]𝒟assetA],Expectation[Abs[x-Mean[𝒟assetB]],x\[Distributed]𝒟assetB]}},Frame->All]

Hodnota v riziku (Value at Risk, VaR)

Value at Risk at (confidence) level 1-α (VaR)

Hodnota v riziku na úrovni spolehlivosti 1-α:

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

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

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, one week, or one month but often longer time horizons are of interest. These need a special care, however. For the sake of simplicity of some calculations we often suppose (1/2)<α<1.

Interpretace: Ztráta překročí hodnotu (Subscript[VaR, α])(L) s (malou) pravděpodobností 1-α. Typické hodnoty α=0.95, 0.99, v některých extrémních případech α=0.999. V praxi používané časové horizonty jsou jeden den, jeden týden, jeden měsíc. Někdy je však nutné použít i delší časové horizonty. Pro zjednodušení některých výpočtů se často předpokládá (1/2)<α<1.

Hullova interpretace hodnoty v riziku V na úrovni splehlivosti 1-X s časovým horizontem N dnů:

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, α]).

Ještě jiná slovní interpretace: Hodnota v riziku je mez, nad kterou se ztráta dostane jen s velmi malou předepsanou pravděpodobností.

*Poznámka

Pozor na nejednoznačnost! Někdy se v literatuře místo úrovně spolehlivost 1-α uvažuje úroveň spolehlivosti α. Smysl ale zůstává týž: Ztráta překročí VaR s malou pravděpodobností.

Konec 2019-04-17

2019-04-24 Lekce 10

Míry rizika 2

**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 L,(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",{{2012,1,1},{2019,4,15}}],Joined->True,PlotStyle->Thick,PlotLabel->"Apple Prices" ]
Applevynosy=FinancialData["AAPL","Return",{{2012,1,1},{2019,4,15}},"Value"] ;
Appleztraty=-Applevynosy;
𝒟EmpiricaltApple=EmpiricalDistribution[Appleztraty]
(* V případě, že by se nepodařilo načíst data výše uvedenými příkazy: *)
(* SetDirectory[NotebookDirectory[]]; *)
(* Export["Appleztraty.txt",Appleztraty,"Table"]; *)

Charakteristiky ztrát (Apple)

Row@{"Mean = ",Mean[Appleztraty]," SD = ",StandardDeviation[Appleztraty]," (Subscript[γ, 1]) = ",Skewness[Appleztraty]," (Subscript[γ, 2]) = ",Kurtosis[Appleztraty]}
Text@Row@{"Sample size = ",Length[Appleztraty],"   Min = ",Min[Appleztraty],"   Max =  ",Max[Appleztraty]}
Text@TableForm[Table[{1-α,Quantile[Appleztraty,α]},{α,{0.9,0.95,0.99}}],TableHeadings->{None,{"1 - α","VaR"}}]
SmoothHistogram[Appleztraty,PlotStyle->Thick,PlotLabel->"Apple Losses (Smooth Histogram)\n",PlotRange->All]

Parametrická hodnota v riziku

text

Příklad

StudentTDistribution//Information

distr=StudentTDistribution[μ,σ,ν];
{Mean[distr],StandardDeviation[distr]}

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 (ve třetím sloupci jsou uvedeny výběrové kvantily):

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

Interpretace (z výběrových dat, sample): Pravděpodobnost, že denní ztráta překročí 4.15% je  přibližně 0.01.

VaR na T dnů na konfidenční úrovni 1-α= 0.01 pro konstantní střední hodnotu a rozptyl lineárně závislý na čase: (Subscript[σ, T]^2)=T,(σ^2).

Text@TableForm[Table[{T,Quantile[NormalDistribution[Mean[𝒟normalApple],StandardDeviation[𝒟normalApple](Sqrt[T])],0.99]},{T,{1,2,5,10,252}}],TableHeadings->{None,{"T","(Subscript[VaR, 0.99])"}}]

VaR na T dnů na konfidenční úrovni 1-α= 0.01 pro střední hodnotu lineárně závislou na čase: (Subscript[μ, T])=T,μ a rozptyl také lineárně závislý na čase: (Subscript[σ, T]^2)=T,(σ^2).

Text@TableForm[Table[{T,Quantile[NormalDistribution[Mean[𝒟normalApple] T,StandardDeviation[𝒟normalApple](Sqrt[T])],0.99]},{T,{1,2,5,10,252}}],TableHeadings->{None,{"T","(Subscript[VaR, 0.99])"}}]

t-rozdělení

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

Příklad (pokračování, použita data z období {{2011,1,1}, {2018,4,16}})

Poznámka. Každé empirické rozdělení má všechny momenty konečné. (Konečný počet pozorování.)

Charakteristiky empirického rozdělení a jeho charakteristiky:

Plot[CDF[𝒟EmpiricaltApple,x],{x,Min[Appleztraty],Max[Appleztraty]},PlotStyle->Thick, PlotLabel->"Empirical distribution function of Apple losses - whole range"]
Plot[CDF[𝒟EmpiricaltApple,x],{x,-.0002,0.0002},PlotStyle->Thick, PlotLabel->"\nEmpirical distribution function of Apple losses - narrow window",Exclusions->True]

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

V tomto případě (odhad (OverHat[ν]) >3) existují první 3 momenty.

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 (ve třetím sloupci pro porovnání výběrové kvantily):

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:  (odhadnuté Studentovo rozdělení): Pravděpodobnost, že denní ztráta překročí 4.22% je 0.01.

Vidíme, že volba Studentova rozdělení vede k výsledkům srovnatelným s empirickým rozdělením.

Neparametrická hodnota v riziku

text

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ě uspořádaného náhodného výběru. (Nemusí dávat totožné výsledky s výše uvedenými neboť v reálných datech se vyskytují shody i u spojitých rozdělení (třeba v důsledku zaokrouhlovaní) a definice výběrových kvantilů se liší.)

Pozorované ztráty (náhodný výběr) (Subscript[L, 1]),...(Subscript[L, T]), uspořádaný náhodný výběr (Subscript[L, (1)])≤...≤(Subscript[L, (T)]). Odhad α-kvantilu je (Subscript[L, (⌊T,α⌋+1)]) , jestliže T,α není přirozené číslo a (1/2)[(Subscript[L, (T,α)])+(Subscript[L, (Tα+1)])], jestliže T,α je přirozené číslo.

Setříděné hodnoty:

AppleztratySorted=Sort[Appleztraty];
T=Length[%]

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

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,PlotLabel->"Apple kernel density estimator"]

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 (in case of continuous distributions 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 with the distribution function F(y) and density f(y) we have

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

or alternatively (after substitution F(y)=z, y=(F^(-1))(z), dz=f(y)dy)

(Subscript[CVaR, α])(L)=(1/(1-α))(∫_( α)^( 1))(F^(-1))(z)dz.

Poznámka (nejednoznačná terminologie)

V některých pramenech se v poslední době uvádí (podle mně nesprávně) poslední vzorec jako definice podmíněné hodnoty v riziku. Pro rozdělení, která nejsou absolutně spojitá (specielně diskrétní rozdělení) se mohou obě vyjádření lišit.

Procedury pro výpočet VaR a CVaR

** VaR, CVaR

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

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

Example 1:

CVaR[NormalDistribution[],α]
Assuming[0<α<1,CVaR[NormalDistribution[],α]]

el

Assuming[0<α<1∧μ∈Reals∧σ>0,CVaR[NormalDistribution[μ,σ],α]]

Example 2:

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.0421, (4.21% 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 2019-04-24

2019-05-15 Lekce 12

Teorie portfolia 1

Portfolio: diverzifikace, eficientní trh

Portfolio: diverzifikace, eficientní trh

SetDirectory[NotebookDirectory[]];
Import["FM1a113.png"]

Cvičení. Zjistěte, které z výše uvedených předpokladů jsou realistické (splnitelné), mírně omezující, silně omezující a nerealistické (nesplnitelné).

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

Teorie portfolia

Hyperlink[Button[" Teorie_portfolia "],"http://www.karlin.mff.cuni.cz/~hurt/20190513_Teorie_portfolia_Template_mfpress_1.pdf"]

Poznámky k předchozímu textu

Z následujícího textu je možné věnovat menší pozornost  těmto pasážím (případně je vynechat):

1.1 Efficient market, pouze alternative definition - vynechat

1.2.2 Optimal Portfolio from the Point of View of Utility - vynechat

1.3.5 Remark. (Alternative Form of the Minimum-Variance Portfolio)

1.3.9 Remark. (Orthogonal Minimum-Variance Portfolios)

1.3.10 Remark.

1.3.15 Remark.

1.4 Things to think about - vynechat

2.1.2 Market Portfolio - v obrysech porozumět pasáži týkající se matematické definice  tržního portfolia (mimochodem zde uvedená definice je originální).  Od vzorce 2.5 je již zapotřebí text sledovat.

2.1.1 Remark. - vynechat

2.1.2 Remark. (A pricing formula, Luenberger, p. 187)  - vynechat

2.2 Security Market Line
Estimation of Betas - informativní
Jensen Measure - vynechat

Příklad perfektně negativně korelovaných aktiv (akademický)

Example

Časové řady očekávaných výnosů A a B [%]

Let us consider two assets A and B in the period of nine years with the corresponding returns (in per cent): 17, 13, 15, 20, 10, 16, 14, 12, 18 for the asset A and 13, 17, 15, 10, 20, 14, 16, 18, 12 for the asset B. The mean returns for both the assets based on these historical data are the same and equal to 15. The risks are also the same, 3.1225:

returnsA={17,13,15,20,10,16,14,12,18};
returnsB=(* = 30 - returnsA *){13,17,15,10,20,14,16,18,12};
Text@Grid[{{"Mean A  ",Mean[returnsA],"   Mean B  ",Mean[returnsB]},{"Risk A  ",StandardDeviation[returnsA],"   Risk B  ",StandardDeviation[returnsB]}}//N,Frame->All]

If we invest all the unit wealth to any of the assets, we can expect a risky return 15 per cent. If we divide our unit wealth equally between the two assets, we have certain return 15 per cent over the given time interval with no risk. This is the case if the returns are perfectly negatively correlated, see the following Figure:

ListLinePlot[{returnsA,returnsB,(1/2)(returnsA+returnsB)},PlotTheme->"Detailed",PlotLabel->"Returns of the assets A, B, and the portfolio",PlotRange->{10,20}]

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

Text@Grid[{{"Očekávaný výnos:  ",{(Subscript[r, A]),(Subscript[r, B])}=Map[Mean,{returnsA,returnsB}]},
{"Rozptyl:  ",Map[Variance,{returnsA,returnsB}]},
{"Riziko:  ",(Sqrt[Map[Variance,{returnsA,returnsB}]])//N}},Frame->All]

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

Framed@Text@Row@{"(Subscript[corr, AB]):  ",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])

Rozptylová (kovarianční) a korelační matice výnosů (obě jsou samozřejmě singulární) :

Row@{(covAB=Covariance[{returnsA,returnsB}//Transpose])//MatrixForm,"        ",(covAB=Correlation[{returnsA,returnsB}//Transpose])//MatrixForm}

Rozptyl výnosu portfolia:

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

Tržní a eficientní portfolio (market and efficient portfolio, MP, EP)

Konstrukce optimálních portfolií a separační věty

Example 9.2.1 from [1], p. 82

N=2, (Subscript[x, 2])=1-(Subscript[x, 1]), očekávané výnosy r=(((8,14))^T), rozptylová matice V=(({{9, 18ϱ}, {18ϱ, 36}})), 
korelační koeficient mezi výnosy ϱ=corr((Subscript[ρ, 1]),(Subscript[ρ, 2])) (Pozor na různé fonty: ρ a ϱ!)

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

Graphical representation

Dependence between the expected return and risk are usually plotted in
(závislost mezi očekávaným výnosem a rizikem se obvykle znázorňuje v)

risk-expected return plane (rovina riziko - očekávaný výnos)
variance-expected return (rovina rozptyl - očekávaný výnos)
standard-deviation - expected return-plane (směrodatná odchylka - očekávaný výnos)
the corresponding curve: minimum variance portfolios
upper part of 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,-1,2},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->"Minimum Variance Portfolios"],{{ϱ,0},-1,1,Appearance->"Labeled"},SaveDefinitions->True]

Eficientní hranice portfolia dvou aktiv (porfolia s minimálním rozptylem (MVP), horní část křivky znázorňující eficientní porfolia s minimálním rozptylem):

V tomto příppadě jsou prodeje nakrátko zakázány, tj. (Subscript[x, 1])∈[0,1].

(* SetDirectory[NotebookDirectory[]];
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]//FullSimplify)//TraditionalForm

Globální portfolio s minimálním rozptylem
Optimal GMVP (Subscript[x, G]^✶)=((((Subscript[x, 1]^✶),(Subscript[x, 2]^✶)))^T):

Text@Row@{"((Subscript[x, 1]^✶),(Subscript[x, 2]^✶)) = ",xxGMVP={x1GMVP,x2GMVP}={x1GMVP=(x1/.Solve[derivative==0,x1])//First,1-x1GMVP}//Simplify}

The corresponding expected return and variance

Text@Grid[{{"Expected return","Variance"},{rGMVP=xxGMVP.rr,(σ2GMVP=varp[x1GMVP,ϱ])//TraditionalForm}//Simplify},Frame->All]

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,PlotStyle->Thick,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. Such a portfolio is also riskless.

Eficientní hranice: eficientní portfolia

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

Portfolia s minimálním rizikem: Obecné řešení (Grafické znázornění)

SetDirectory[NotebookDirectory[]];
Import["portfoliorisky2.eps"]

***Asymptotes

Find a linear asymptote:

f[x_]:=(x^2+3)/(2 x+1)
{a=Limit[f[x]/x,x->Infinity],
b=Limit[f[x]-a x,x->Infinity]}
Plot[{f[x],a x+b},{x,0,20}]

Cvičení

Analyzujte současnou YC USA  (státní dluhopisy duben 2019),  porovnejte ji  s YC z ledna 2019. Komentář se zdůvodněním změny, lépe řečeno s Vaším názorem mi prosím zašlete do 15. 5. 2019 na adresu

hurt@karlin.mff.cuni.cz

Portfolia s minimálním rizikem: Obecné řešení při existenci bezrizikového aktiva (Grafické znázornění)

SetDirectory[NotebookDirectory[]];
Import["portfolior2riskyplusriskless.eps"]

***Asymptotes

Find a linear asymptote:

f[x_]:=(x^2+3)/(2 x+1)
{a=Limit[f[x]/x,x->Infinity],
b=Limit[f[x]-a x,x->Infinity]}
Plot[{f[x],a x+b},{x,0,20}]

Sharpe ratio and Markowitz portfolio

Konec 2019-05-15 (viz ale také 2019-05-22)

2019-05-22 Lekce 13

Teorie portfolia 2

Example 1 (7 companies selected from the members of DJI)

***Data Download and Export

SetDirectory[NotebookDirectory[]];

companies={"AAPL","BA","KO","DIS","MCD","PFE","WMT","^DJI"};
companiesWithNames=Map[{#,FinancialData[#,"Name"]}&,companies];
Grid[%,Frame->All]

Export["companiesWithNames.XLSX",companiesWithNames];

returns2019=FinancialData[companies,"Return",{{2017,1,1},{2019,5,18}},"Value"];
Map[Length,returns2019]
Dimensions[returns2019]

returnsWithTickers2019=MapThread[Prepend,{returns2019,companies}];
SetDirectory[NotebookDirectory[]];
Export["returnsWithTickers2019",returnsWithTickers2019,"Table"]; 
imp2019=Import["returnsWithTickers2019","Table"];

(* returnsWithTickers2019//FullForm *)

membersOfDJI=FinancialData["^DJI","Members"]

dji2019=FinancialData["^DJI",{{2017,1,1},{2019,5,18}}];
DateListPlot[%]
Length[%%]

Data Import

SetDirectory[NotebookDirectory[]];companiesWithNames=Import["companiesWithNames.XLSX"][[1]];
Grid[%,Frame->All]
returnsWithTickers2019=Import["returnsWithTickers2019","Table"];
returnsWithoutTickers2019=Map[Rest,returnsWithTickers2019];
returns1=Most[returnsWithoutTickers2019];
names=companiesWithNames[[All,1]];
names1=Most[names]

Expected returns and covariances

rr=Map[Mean,returns1];
vv=Covariance[Transpose[returns1]];
rizika=(Sqrt[Diagonal[vv]]);
vynosyRizika={names1,rr,rizika}//Transpose; 
(* Text["Setříděno podle očekávaných výnosů:" ] *)
TableForm[Sort[%,#1[[2]]>#2[[2]]&],TableHeadings->{None,{"Firma","Očekávaný výnos","Riziko"}}]
Text@Row@{"Determinant rozptylové matice =  ",Det[vv]}
Text@Style["Korelační matice",18]
Text@names1
(corr=Correlation[Transpose[returns1]])//MatrixForm

Markowitz Mean-Variance Portfolio (Lagrange Multipliers)

ones=ConstantArray[1,Length[rr]];
a=ones.Inverse[vv].ones;
b=ones.Inverse[vv].rr;
Text@Grid[{{"GMVP ",Inverse[vv].ones/a},{"Expected return of the Global Minimum-Variance Portfolio ", expectedGMVP=b/a},{"And its risk ",riskGMVP=1/(Sqrt[a])}},Frame->All]

Clear[optimalPortfolioMarkowitz]
optimalPortfolioMarkowitz[rr_(* expectedReturns *),vv_(* covarianceMatrix *),μ_(* prescribed return *)]:=Module[{xx,x,n=Length[rr],λ1,λ2,lagrangeFunction,xxλ,lagrangian,equations,solution,optimalPortfolio},
xx=Array[(Subscript[x, #])&,n];
lagrangeFunction=(1/2)xx.vv.xx+λ1(1-Total[xx])+λ2(μ-rr.xx);
xxλ={xx,λ1,λ2}//Flatten;
lagrangian=Map[D[lagrangeFunction,#]&,xxλ];
equations=lagrangian==0;
solution=NSolve[equations,xxλ];
optimalPortfolio=xx/.solution//Flatten;
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",(Sqrt[optimalPortfolio.vv.optimalPortfolio])}},Frame->All]
]

optimalPortfolioMarkowitz[rr,vv,0.00160537(* = return of Boeing *)]

optimalPortfolioMarkowitz[rr,vv,0.00043818(* = return of Coca-Cola *)]

Očekávaný výnos Coca-Cola je menší než očekávaný výnos GMVP. Existuje eficientní portfolio se stejným rizikem, ale vyšším očekávaným výnosem.  Požadovaný očekávaný výnos 2B/A-μ:

μmirror=2b/a-0.00043817799437174146`

optimalPortfolioMarkowitz[rr,vv,μmirror(* = 2B/A minus return of Coca-Cola *)]

Play with another prescribed expected returns &c.

Markowitz Mean-Variance Portfolio 
(Explicit solution, Efficient frontier, short sales  allowed)

ones=ConstantArray[1,Length[rr]];
vvinv=Inverse[vv];
a=ones.vvinv.ones; b= ones.vvinv.rr;c=rr.vvinv.rr;
Δ=a c-(b^2);
(* 1. bázické portfolio *)
xx1=vvinv.ones/a;
(* 2. bázické portfolio *)
xx2=vvinv.rr/b;
δ[μ_]=((a(c-μ b))/Δ);
(* Optimální portfolio *)xxstar[μ_]=δ[μ] xx1+(1-δ[μ])xx2;

Grid[{{"A","B","C","Δ"},{a,b,c,Δ}},Frame->All]
Row[{Style[(x^("1")),Bold]," = ",xx1}]
Row[{Style[(x^2),Bold]," = ",xx2}]

Global Minimum Variance Portfolio (GMVP)

(* Připomeňme, že GMVP je 1. bázické portfolio, xx1 *)
globalMinimumVariancePortfolio=xx1
globalMinimumVariancePortfolioReturn=b/a

optimalPortfolioMarkowitz[rr,vv,0.0004353784863160212`(* = return of the GMVP *)]

Clear[efficientFrontier]
efficientFrontier[rr_(* expectedReturns *),vv_(* covarianceMatrix *),interval_(* of prescribed return *)]:=Module[{n=Length[rr],ones,a,b,c,Δ,vvinv=Inverse[vv],xx1,xx2,δ,μ,μaux,xxstar (* optimalPortfolio *),iterator},
ones=ConstantArray[1,n];
a=ones.vvinv.ones; b= ones.vvinv.rr;c=rr.vvinv.rr;
Δ=a c-(b^2);
xx1=vvinv.ones/a;xx2=vvinv.rr/b;
δ[μ_]=((a(c-μ b))/Δ);
xxstar[μ_]=δ[μ] xx1+(1-δ[μ])xx2;
iterator={μ,interval}//Flatten;
Plot[(Sqrt[xxstar[μ].vv.xxstar[μ]]),iterator,PlotLabel->Style["\nEfficient frontier in expected return-risk plane",Bold],AxesLabel->{"(Subscript[μ, p])",(Subscript[σ, p])}]
	]

efficientFrontier[rr,vv,{-0.002,.003}]

Markowitz Mean-Variance Portfolio 
(Numerical using NMinimize, short sales  allowed)

Clear[optimalPortfolioMarkowitzNumericalAllowed]
(* General enough for other purposes *)
optimalPortfolioMarkowitzNumericalAllowed[rr_(* expectedReturns *),vv_(* covarianceMatrix *),μ_(* prescribed return *)]:=Module[{xx,x,n=Length[rr],solution,optimalPortfolio,risk},
xx=Array[(Subscript[x, #])&,n];
solution=NMinimize[{(* cilova, účelová funkce, objective function = *)xx.vv.xx,Total[xx]==1,rr.xx==μ},xx];
risk=(Sqrt[solution[[1]]]);
optimalPortfolio=xx/.solution[[2]];
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]
		]

optimalPortfolioMarkowitzNumericalAllowed[rr,vv,0.0016053769918319388`(* = return of Boeing *)]

optimalPortfolioMarkowitzNumericalAllowed[rr,vv,0.00043817799437174146` (* = return of Coca-Cola *)]

optimalPortfolioMarkowitzNumericalAllowed[rr,vv,0.0006474368907457979`(* = return of the GMVP *)]

Markowitz Mean-Variance Portfolio 
(Numerical using NMinimize, short sales not allowed)

Clear[optimalPortfolioMarkowitzNumericalNotAllowed]
(* General enough for other purposes *)
optimalPortfolioMarkowitzNumericalNotAllowed[rr_(* expectedReturns *),vv_(* covarianceMatrix *),μ_(* prescribed return *)]:=Module[{xx,x,n=Length[rr],solution,optimalPortfolio,risk},
xx=Array[(Subscript[x, #])&,n];
solution=NMinimize[{(* cilova, účelová funkce, objective function = *)xx.vv.xx,Total[xx]==1,rr.xx==μ,Thread[xx≥0]},xx];
risk=(Sqrt[solution[[1]]]);
optimalPortfolio=xx/.solution[[2]];
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]
		]

optimalPortfolioMarkowitzNumericalNotAllowed[rr,vv,0.0016053769918319388`(* = return of Boeing *)]

optimalPortfolioMarkowitzNumericalNotAllowed[rr,vv,0.00043817799437174146` (* = return of Coca-Cola *)]

optimalPortfolioMarkowitzNumericalNotAllowed[rr,vv,0.0006474368907457979`(* = return of the GMVP *)]

Sharpe Ratio

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)V,x]))    subject to conditions    x≥0   and   (∑_(n=1)^N)(Subscript[x, n])=1,

so that short sales are not allowed.

Řešení je invariantní vůči kladnému násobku, takže je možné ji řešit bez normovací podmínky a teprve poté normovat:  (∑_(n=1)^N)(Subscript[x, n])=1.

Sharpe Ratio (short sales allowed)

Clear[optimalPortfolioSharpeNumericalAllowed]
(* General enough for other purposes *)
optimalPortfolioSharpeNumericalAllowed[rr_(* expectedReturns *),vv_(* covarianceMatrix *)]:=Module[{xx,x,n=Length[rr],solution,optimalPortfolio,risk},
xx=Array[(Subscript[x, #])&,n];
solution=NMinimize[{(* cilova, účelová funkce, objective function = *)((rr.xx)/(Sqrt[xx.vv.xx]))},xx];
optimalPortfolio=xx/.solution[[2]];
optimalPortfolio=optimalPortfolio/Total[optimalPortfolio];
risk=(Sqrt[optimalPortfolio.vv.optimalPortfolio]);
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]
		]

optimalPortfolioSharpeNumericalAllowed[rr,vv]

Sharpe Ratio (short sales not allowed)

Clear[optimalPortfolioSharpeNumericalNotAllowed]
optimalPortfolioSharpeNumericalNotAllowed[rr_(* expectedReturns *),vv_(* covarianceMatrix *)]:=Module[{xx,x,n=Length[rr],solution,optimalPortfolio,risk},
xx=Array[(Subscript[x, #])&,n];
solution=NMinimize[{(* cilova, účelová funkce, objective function = *)((rr.xx)/(Sqrt[xx.vv.xx])),Thread[xx≥0]},xx];
optimalPortfolio=xx/.solution[[2]];
optimalPortfolio=optimalPortfolio/Total[optimalPortfolio];
risk=(Sqrt[optimalPortfolio.vv.optimalPortfolio]);
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]
		]

optimalPortfolioSharpeNumericalNotAllowed[rr,vv]

**Example 2

Data (Mesicni vynosy 5 akcii, zdroj: “Returns.dat” resp. “Returns.csv”)

Text@Grid[monthlyReturns5={{"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`}},Frame->All]

(* Výnosy bez prvního řádku *)
monthlyReturns51=Rest[monthlyReturns5];
(* Výnosy bez prvního řádku a prvního sloupce *)
monthlyReturns52=Map[Rest,monthlyReturns51];

Očekávané výnosy, rizika a rozptylová matice

expectedReturns5=Mean[monthlyReturns52];
risk5=StandardDeviation[monthlyReturns52];
vv5=Covariance[monthlyReturns52];

Text@Grid[{{"Asset",Range[Length[risk5]]}//Flatten,Prepend[expectedReturns5," Expected returns "],Prepend[risk5," Standard errors "]}//Transpose,Frame->All]

Vidíme, že např. (Subscript[μ, 3])>(Subscript[μ, 5]), ale (Subscript[σ, 3])<(Subscript[σ, 5]). Odporuje předpokladu eficientního trhu, vyšší riziko musí být kompenzováno vyšším očekávaným výnosem.

Dále vidíme, že výnosy jsou kladně korelovány:

Text@Column[{"Correlations of returns",(Correlation[monthlyReturns52])//MatrixForm},Center]

Markowitz Mean-Variance Portfolio (Lagrange Multipliers)

Clear[optimalPortfolioMarkowitz]
optimalPortfolioMarkowitz[rr_(* expectedReturns *),vv_(* covarianceMatrix *),μ_(* prescribed return *)]:=Module[{xx,x,n=Length[rr],λ1,λ2,lagrangeFunction,xxλ,lagrangian,equations,solution,optimalPortfolio},
xx=Array[(Subscript[x, #])&,n];
lagrangeFunction=(1/2)xx.vv.xx+λ1(1-Total[xx])+λ2(μ-rr.xx);
xxλ={xx,λ1,λ2}//Flatten;
lagrangian=Map[D[lagrangeFunction,#]&,xxλ];
equations=lagrangian==0;
solution=Solve[equations,xxλ];
optimalPortfolio=xx/.solution//Flatten;
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",(Sqrt[optimalPortfolio.vv.optimalPortfolio])}},Frame->All]
]

optimalPortfolioMarkowitz[expectedReturns5,vv5,3.7]

Play with a prescribed expected return: 2.7, 4, 4.4, 7.0 &c.

Markowitz Mean-Variance Portfolio (Numerical using NMinimize, short sales  allowed)

xx=Array[(Subscript[x, #])&,Length[expectedReturns5]];
solution5=NMinimize[{(* cilova, účelová funkce = *)xx.vv5.xx,(*  2 omezeni = *) expectedReturns5.xx==3.7,Total[xx]==1},xx];
risk=(Sqrt[solution5[[1]]]);
optimalPortfolio=xx/.solution5[[2]];
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",expectedReturns5.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]

Markowitz Mean-Variance Portfolio 
(Numerical using NMinimize, short sales not allowed)

xx=Array[(Subscript[x, #])&,Length[expectedReturns5]];
solution5=NMinimize[{(* cilova, účelová funkce = *)xx.vv5.xx,(*  2 + 5 = 7 omezeni = *) expectedReturns5.xx==3.7,Total[xx]==1,Thread[xx≥0]},xx];
risk=(Sqrt[solution5[[1]]]);
optimalPortfolio=xx/.solution5[[2]];
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",expectedReturns5.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]

Sharpe Ratio

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)V,x]))    subject to conditions    x≥0   and   (∑_(n=1)^N)(Subscript[x, n])=1,

so that short sales are not allowed.

Řešení je invariantní vůči kladnému násobku, takže je možné ji řešit bez normovací podmínky a teprve poté normovat:  (∑_(n=1)^N)(Subscript[x, n])=1.

Sharpe Ratio (short sales allowed)

xx=Array[(Subscript[x, #])&,Length[expectedReturns5]];
solution5Sharpe=Maximize[((xx.expectedReturns5)/(Sqrt[xx.vv5.xx])),xx]

optimalPortfolio=(xx/.solution5Sharpe[[2]]);
optimalPortfolio=(optimalPortfolio/(Total[optimalPortfolio]));
risk=(Sqrt[optimalPortfolio.vv5.optimalPortfolio]);
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",expectedReturns5.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]

Sharpe Ratio (short sales not allowed)

xx=Array[(Subscript[x, #])&,Length[expectedReturns5]];
solution5Sharpe=Maximize[{((xx.expectedReturns5)/(Sqrt[xx.vv5.xx])),Thread[xx≥0]},xx]

optimalPortfolio=(xx/.solution5Sharpe[[2]]);
optimalPortfolio=(optimalPortfolio/(Total[optimalPortfolio]))//Chop[#,(10^(-9))]&;
risk=(Sqrt[optimalPortfolio.vv5.optimalPortfolio]);
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",expectedReturns5.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]

***Example 1 (Sharpe, short sales allowed)

Clear[xx];
(* xx=Table[Unique[],{Length[expected]}] *)
xx={x1,x2,x3,x4,x5};

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]

Normování:

xa=xx/.sol11[[2]]
Text@Column[{" Optimal portfolio ",xnorm=xa/Total[xa]},Center,Frame->All]
Total[xnorm]

V praxi je takové portfolio stěží realizovatelné. Aktivum 4 má záporný výnos, prodej nakrátko znamená, že by si jej někdo musel koupit. Zde uvažujeme časový horizont jedno období, racionální investor by nikdy aktivum 4 nekoupil.

Hodnota kritéria (Sharpeova poměru):

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

***Example 1 (Sharpe, 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]
Text@Column[{" Optimal portfolio ",xx/.sol2[[2]]//Chop},Center,Frame->All]
Total[xx/.sol2[[2]]]

Hodnota kritéria (Sharpeova poměru):

sol2[[1]]

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

Požadovaný očekávaný výnos (Target, prescribed expected return) μ=4

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

sol3=NMinimize[{crit3,cons3},xx]//Quiet
Text@Column[{" Optimal portfolio ",xx/.sol3[[2]]//Chop},Center,Frame->All]
Total[xx/.sol3[[2]]]

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

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

xx3.expected

***Example 3b (inequalities instead of equalities)

crit3b=xx.cov.xx//Simplify;
cons3b=Apply[And,Thread[xx≥0]]&&Total[xx]≤ 1&&xx.expected≥4;
sol3b=NMinimize[{crit3b,cons3b},xx]//Quiet
Text@Column[{" Optimal portfolio ",xx/.sol3b[[2]]//Chop},Center,Frame->All]
Total[xx3b=xx/.Last[sol3b]]
xx3b
xx3b.expected

Unfeasible requirement
(Neither of the assets reaches the expected return  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 3d (Markowitz) Portfolio with prescribed expected return and minimum risk, short sales allowed)

Požadovaný očekávaný výnos (Target, prescribed expected return) μ=4

crit3d=xx.cov.xx//Simplify
cons3d=Total[xx]==1&&xx.expected==4

sol3d=NMinimize[{crit3d,cons3d},xx](*//Quiet*)
Text@Column[{" Optimal portfolio ",xx/.sol3d[[2]]//Chop},Center,Frame->All]
Total[xx/.sol3d[[2]]]

Total[xx3d=xx/.Last[sol3d]]

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

{Total[xx3d],xx3d.expected,xx3d.cov.xx3}

***Example 3 (Prague Stock Exchange)

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 (špatně podmíněná):

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 Sharpe 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 ]

sol=xxPS/.soldif[[2]];
(* normalize *)
sol=sol/Total[sol]
sol.returns

***Example 5 (Lagrange multipliers)

Markowitz, short sales allowed, μ prescribed expected return

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

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

expected
μ=4;
(* !!!! *)
eq1=Map[D[lagrange,#]&,xxx={xx,λ1,λ2}//Flatten]==0
xx5=Take[Flatten[xxx/.Solve[eq1,xxx]],Length[xx]];
Text@Column[{" Optimal portfolio ",xx5//Chop},Center,Frame->All]

{Total[xx5],xx5.expected,xx5.cov.xx5}

Capital Asset Pricing Model (CAPM)

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

Připomeňme grafickou representaci MVP (Minimum Variance Portfolio) při existenci bezrizikového aktiva. Racionální investoři s ohledem na svou rizikovou averzi si volí portfolia reprezentované body na přímce spojující body {0,(Subscript[r, 0])} a {(Subscript[σ, t]),(r^t)} v rovině (Subscript[σ, p])-(Subscript[r, p]).

SetDirectory[NotebookDirectory[]];
Import["portfolior2riskyplusriskless.eps"]

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

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

Security Market Line

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

Platné pro libovolné portfolio, libovolné aktivum.

Capital Market Line

Platné pouze pro eficientní portfolia!!! Rozdíl od SML!

Odhad parametrů v CAPM

Bezriziková úroková míra

({{"1-year treasury bill", 2.32"%"}})

Za bezrizikový výnos vezmeme výnos jednoročních státních pokladničních poukázek přepočtené na jeden den:

r0=2.32/100/365

Data Import

SetDirectory[NotebookDirectory[]];companiesWithNames=Import["companiesWithNames.XLSX"][[1]];
Grid[%,Frame->All]
returnsWithTickers2019=Import["returnsWithTickers2019","Table"];
returnsWithoutTickers2019=Map[Rest,returnsWithTickers2019];
names=companiesWithNames[[All,1]];

Expected returns and covariances

rr=Map[Mean,returnsWithoutTickers2019];
vv=Covariance[Transpose[returnsWithoutTickers2019]];
rizika=(Sqrt[Diagonal[vv]]);
vynosyRizika={names,rr,rizika}//Transpose; 
(* Text["Setříděno podle očekávaných výnosů:" ] *)
TableForm[Sort[%,#1[[2]]>#2[[2]]&],TableHeadings->{None,{"Firma","Očekávaný výnos","Riziko"}}]
Text@Row@{"Determinant rozptylové matice =  ",Det[vv]}
Text@Style["Korelační matice",18]
Text@names
(corr=Correlation[Transpose[returnsWithoutTickers2019]])//MatrixForm

Betas

TableForm[Table[{names[[n]],Fit[{returnsWithoutTickers2019[[n]]-r0,returnsWithoutTickers2019[[8]]-r0}//Transpose,{x},x]//First},{n,8}],TableHeadings->{None,{"Firma","Beta"}}]

Konec 2019-05-22

2019-05-22 Doplněk: Hodnocení investic

Pro obor Bc FM bude vyloženo v rámci přednášky VPFPM ZS 2019/20.

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]

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 one year , 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 (riskless, riskfree)

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 nahrazuje (proxy) úrokovou mírou výnosu státních dluhopisů (poukázek) pro srovnatelnou dobu splatnosti. 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 (někdy 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 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 realizace τ

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 (rizikově neutrální ptostředí, rizikově neutrální svět)

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)

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

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"]

Illustration of a cap:

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í hodnoty (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},PlotLabel->"CALL",AxesLabel->{"(Subscript[S, T])","(Subscript[c, T])"}],
Plot[Max[0,K-S],{S,0,100},PlotStyle->{Thick,Orange},PlotLabel->"PUT",AxesLabel->{"(Subscript[S, T])","(Subscript[p, T])"}],
Plot[Max[0,S-K]-Max[0,K-S],{S,0,100},PlotStyle->{Thick,Blue},PlotLabel->"Forward",AxesLabel->{"(Subscript[S, T])","(Subscript[f, T])"}]}]]

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 (11) 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}],FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05},Method->"Binomial","Steps"->5000],FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05},"GridSize"->{250,250}],FinancialDerivative[{"American","Call"}, {"StrikePrice"-> 50.00, "Expiration"->1},  {"InterestRate"-> 0.1, "Volatility" -> 0.5, "CurrentPrice"-> 50, "Dividend"->0.05},"GridSize"->{1000,1250}]}

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"}]

3 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,Appearance->"Labeled"},{{σ,0.5},0.01,1,Appearance->"Labeled"},SaveDefinitions->True]

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

4 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" *)"Put"}, {"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,Appearance->"Labeled"},SaveDefinitions->True]

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}]

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.4},0.01,1,Appearance->"Labeled"},
{{Tt,0.5,"T-t"},0.001,1,Appearance->"Labeled"}]

***Rests

2018-03-07 Lekce 3

Konec 2017-03-08

2017-03-15 Lekce 4

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]

Derivace současné hodnoty:

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]

**Převod Mathematica notesu (notebook) na PDF

⚠ *.nb ⟶ *.pdf

File ⟶ Save As ... ⟶ vybrat PDF a můžete číst v tramvaji na tabletu ...

Je možné tisknout jen části notesu: označit požadované buňky, pak File ⟶ Print ⟶ Selection (Výběr)

Vnitřní hodnota peněžního toku

HIV(i)

Swap (Theory)

Swap = výměna peněžních toků

Pozor na nepřesný, ale v české literatuře téměř výhradně se vyskytující překlad pojmu notional amount: nominální hodnota. Specielně však u úrokového swapu se jedná o pomyslnou, hypotetickou hodnotu. Lépe použít kapitálová částka (Cipra) nebo objem swapu (což má oporu i v anglickém výrazu swap volume.

Security may also be an agreement between two parties (often called Party and Counterparty) on a financial or real transaction between the two. This is the case of swaps.

Swaps, like forwards,  are mostly individual contracts between two highly rated, reliable parties which well fit the needs of both. Although the swaps are individual contracts, in practise they often follow the recommendations of the International Swaps and Derivatives Association (ISDA). A l swap may be briefly characterized as an agreement on exchange of cash flows in future times with a prescribed schedule. There are two main categories of swaps; interest rate swaps and currency
swaps. In practise, the two are often combined. Swaps are used to manage interest rate exposure or uncertainty concerning the future exchange rates.

An  interest rate swap is a contract between two parties to exchange interest streams with different characteristics based on a principal, notional amount, sometimes called the volume of a swap. The interest rates may be either fixed or floating in the same or different currencies.

A pure  currency swap is a forward contract on the exchange of different currencies on some future date (maturity) in amounts fixed today. Another type of a currency swap is a  cross-currency swap that consists of the initial exchange of fixed amounts of currencies and reverse final exchange of the same amounts at maturity. One or both parties may pay interest during the lifetime of the swap.

Example (Combined swap)

Notional amount: CZK 34 500 000

Fixed amounts:

        Initial exchange: Party A pays EUR 1,000,000 to party B, party B pays CZK 34,500,000 to party A. Maturity 10 years.

        Final exchange (after 10 years): Party B pays EUR 1,000,000 to party A, party A pays CZK 34,500,000 to party B.

Floating amounts:

        Party A pays to party B semiannually E6M-3.5 per cent (3.5 is the spread or margin) from notional amount based on the floating rate day count fraction Actual/360, i.e., approximately  CZK ((E6M-3.5)/100)×(182/360)×34500000 . Here E6M stands for LIBOR interest rate on EUR with maturity 6 months.

💡 Příklad  (Swap, Cross-Currency swap, Hull 8th ed., pp. 165-166)

Měnový úrokový swap (Cross currency swap)

5-letý měnový úrokový swap mezi IBM a British Petroleum (BP).

Počáteční výměna:  1.2.2011 IBM ⟶ BP 18 mil. USD, 1.2.2011 BP ⟶ IBM 10 mil. GBP
Koncová výměna:    1.2.2016 IBM ⟶ BP 10 mil. GBP, 1.2.2016 BP ⟶ IBM 18 mil. USD
Pevné částky:  ve dnech 1.2.2012, 1.2.2013, 1.2.2014, 1.2.2015, 1.2.2016:
		 IBM ⟶ BP 5% z objemu swapu 10 mil. GBP, tj. 0.5 mil. GBP
		 BP ⟶ IBM 6% z objemu swapu 18 mil. USD, tj. 1.08 mil. USD

Poznamenejme, že v příkladu uvedené hodnoty jsou nereálné. Počáteční výměna se v praxi děje na základě aktuálního kursu, a ten 1.2.2011 byl GBP 1 = USD 1.6258. Kurs uvedený v příkladu byl přibližně 1.9.2008: GBP 1 = USD 1.8007. Autor měl připravené hodnoty pravděpodobné v době psaní rukopisu, ale do vydání knihy však uplynula jistá doba.

cashFlowIBMUSD=Cashflow[{-18,1.08,1.08,1.08,1.08,18+1.08}]
cashFlowIBMGBP=Cashflow[{10,-0.50,-0.50,-0.50,-0.50,-10-0.50}]

Profily současných hodnot v závislosti na hodnotící úrokové míře:

Plot[{TimeValue[cashFlowIBMUSD,i,0],TimeValue[cashFlowIBMGBP,i,0]},{i,0,0.15},PlotTheme->  "Detailed",AxesLabel->{"i","NPV"},PlotLegends->{"USD","GBP"},PlotLabel->"NPV IBM in USD and GBP"]

(* Actual exchange rate, FX *)
FinancialData["GBP/USD"]

WolframAlpha["GBP/USD",{{"History",1},"ComputableData"}]

Skutečné historické směnné kursy:

(fxGBPUSDreal={{{2011,2,1},1.6258`},{{2012,2,1},1.5917`},{{2013,2,1},1.5162`},{{2014,2,1},1.6745`},{{2015,2,1},1.5434`},{{2016,2,1},1.3916`}})//Dataset

Abychom mohli použít výše uvedené peněžní toky a přiblížili se aspoň trochu realitě, provedeme lineární transformaci směnných kursů tak, aby v okamžiku počáteční výměny odpovídala skutečnosti:

fxGBPUSDexample=Map[Last,fxGBPUSDreal](1.8/(1.6258`))

cashFlowIBMGBP=Cashflow[{10,-0.50,-0.50,-0.50,-0.50,-10-0.50}]

Peněžní tok IBM v GBP konvertovaný na USD dle fxGBPUSDexample:

cashFlowIBMGBPinUSD=Cashflow[cashFlowIBMGBP[[1]]*fxGBPUSDexample]

(totalcashFlowIBMinUSD=TimeValue[cashFlowIBMUSD,i,0]+TimeValue[cashFlowIBMGBPinUSD,i,0])//TraditionalForm

Profil současné hodnoty v dolarovém vyjádření v závislosti na hodnotící úrokové míře :

Plot[totalcashFlowIBMinUSD,{i,0,0.2},PlotTheme->"Business",PlotLegends->{"USD","GBP"},PlotLabel->"NPV IBM in USD"]

Ex post vidíme, že IBM by na takovém swapu jednoznačně vydělalo. V okamžiku uzavření swapu však známe jen aktuální kurs a aktuální tržní (hodnotící) úrokovou míru. Pro představu o budoucím vývoji použijeme HIV (vnitřní hodnotu peněžního toku). Pro jednoduchost budeme předpokládat, že směnný kurs je konstatní pro období 1,...,5, označme jej FX. Pak peněžní tok IBM v GBP konvertovaný na USD je:

Clear[FX];
cashFlowIBMGBPinUSDvariableFX=Cashflow[cashFlowIBMGBP[[1]]*{1.8,FX,FX,FX,FX,FX}]

(totalcashFlowIBMinUSDvariableFX=TimeValue[cashFlowIBMUSD,i,0]+TimeValue[cashFlowIBMGBPinUSDvariableFX,i,0])//TraditionalForm

Plot3D[totalcashFlowIBMinUSDvariableFX,{i,0.04,0.07},{FX,1.4,2}]

Text@Column[{"PV v USD v závislosti na FX a i",totalcashFlowIBMinUSDvariableFX//TraditionalForm,"PV v USD v závislosti na i a FX = 1.85",
(totalcashFlowIBMinUSDvariableFX/.FX->1.85)//TraditionalForm},Background->{{LightBlue,None}},Frame->True,Alignment->{{Left}}]

Manipulate[Plot[(totalcashFlowIBMinUSDvariableFX/.FX->fx)//Evaluate,{i,0.00,0.1},AxesLabel->{"i","PV"}],{{fx,1.85},1.2,2.3,Appearance->"Labeled"}]

HIV(i)

solHIV=Solve[totalcashFlowIBMinUSDvariableFX==0,FX]

Plot[FX/.solHIV,{i,0,0.2},PlotLabel->"HIV",AxesLabel->{"i","HIV"},PlotStyle->Thick]

Tak např. při i=0.05 je odpovídající HIV (Subscript[FX, 5%])=1.87793. Z následujícícho grafu je zřejmé, že při této úrokové míře je pro IBM je výhodný směnný kurs FX<(Subscript[FX, 5%]). Pro FX>(Subscript[FX, 5%]) je swap pro IBM nevýhodný.

Plot[totalcashFlowIBMinUSDvariableFX/.i->0.05,{FX,1.85,1.9},PlotLabel->"NPV IBM in USD for i = 5 per cent",AxesLabel->{"FX","NPV"},PlotStyle->Thick]

solHIV/.i->0.05

***Zobecnění: geometrický pokles nebo růst FX, (Subscript[FX, t])=((FX(1+g))^t), g dáno, t<0 ... pokles, t>0 růst.

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

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

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

** Test whether the project cf is a Class I (Type 1) project

(* Test whether the project cf is a Class I (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}]}

IRR

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

Profitability Index (PI, Index ziskovosti)

Clear[profitability];
profitability[cf_,i_]:=Module[{},	If[Not[typeI[cf]],Return[Print["    The project\n ",cf,  "\n    is not of type I (outflows do not precede inflows).   "]]];
-(1/(First[cf]))  TimeValue[Cashflow[{0,Rest[cf]}//Flatten],i]//N]

Discounted Payback Method (PB, Diskontovaná doba návratnosti)

(* 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 (Porovnání 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"};

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

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

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]

Konec 2017-03-15

2017-03-22 Lekce 5

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

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},AxesLabel->{"i","NPV"},PlotLabel->"NPV Detailed"],Plot[PVcfZ,{i,0,1.5},PlotRange->All,PlotStyle->Thick,
AxesOrigin->{0,0},AxesLabel->{"i","NPV"},PlotLabel->"NPV"]}]

IRR, durace, konvexita, grafy (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)]

(* Plots of Present Value,Duration,and Convexity *)
Clear[plotsPVDC]
plotsPVDC[cf_]:=Module[{plotPV,plotD,plotC,IRR,pv,durace,konvexita,i},
pv[cashflow_,i_]:=(1/(((1+i))^(Range[Length[cashflow]]-1))).cashflow;
IRR[cashflow_]:=Select[i/.NSolve[TimeValue[Cashflow[cashflow],i,0]==0,i],(Re[#]>0∧Im[#]==0)&]//Flatten//First;
durace[cashflow_,i_]:=TimeValue[Cashflow[cashflow*(Range[Length[cashflow]]-1)],i,0]/TimeValue[Cashflow[cashflow],i,0];
konvexita[cashflow_,i_]:=Module[{citatel,jmenovatel,T},
T=Length[cashflow];
citatel=TimeValue[Cashflow[(Range[T]-1)*Range[T]*cashflow],i,0]//Simplify//Expand;
jmenovatel=TimeValue[Cashflow[cashflow],i]//Simplify//Expand;
(citatel/jmenovatel)];
(* Output *)
GraphicsRow[{Plot[pv[cf,i],{i,0,2IRR[cf]},AxesLabel->{"i","PV"},PlotLabel->"Present Value",PlotStyle->{Thick,Black}],Plot[durace[cf,i],{i,0,2IRR[cf]},AxesLabel->{"i","Duration"},PlotLabel->"Duration",PlotStyle->{Thick,Blue},Exclusions->None],Plot[konvexita[cf,i],{i,0,2IRR[cf]},AxesLabel->{"i","Convexity"},PlotLabel->"Convexity",PlotStyle->{Thick,Red},Exclusions->None]},ImageSize->Full]]

Příklad (Porovnání investičních projektů, dokončení)

(* 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[Prepend[Map[{#[[1]],IRR[#[[2]]]}&,{cfarraystring,cfarray}//Transpose],{"Projekt","IRR"}],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,AxesLabel->{"i","Duration"},Exclusions->False]

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,AxesLabel->{"i","Duration"},Exclusions->None]

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}},PlotTheme->"Classic"]

**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

Vnitřní míry výnosnosti

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

Rozdíly C-A (IRR, 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]

Column@Map[Row@{Text[(#[[1]])<>"\n"],plotsPVDC[#[[2]]]}&,{cfarraystring,cfarray}//Transpose]

***Příklad (Aproximace relativního přírůstku současné hodnoty)

TimeValue[Cashflow[cfa],i]//Simplify
durace[cfa,v]/.v->1/(1+i)//Simplify
konvexita[cfa,v]/.v->1/(1+i)//Simplify
relativeIncrement[cf_,i_,Δi_]:=((TimeValue[Cashflow[cf],i+Δi]-TimeValue[Cashflow[cf],i])/(TimeValue[Cashflow[cf],i]))

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

Dekompozice úrokové míry

Hyperlink[Button[" Úrokové míry "],"http://www.karlin.mff.cuni.cz/~hurt/20170321_Urokove_miry_45_47_Template_mfpress_1.pdf"]

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

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

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

V aditivním tvaru:

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

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

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

Clear[r,r0infl,rdefault]
Solve[1+r==(1+r0infl)(1+rdefault),rdefault]//First//First

(* Percentuální vyjádření *)
Clear[r,r0infl,rdefault]
Solve[100(100+r)==(100+r0infl)(100+rdefault),rdefault]//First//First

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]

Rating

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 (t⟶t+3)

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

MatrixPower[transitionmatrix,3]//MatrixForm

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

Č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 .

Vidíme, že 1+(Subscript[R, t]) je geometrický průměr hodnot 1+(Subscript[f, 1]),...,1+(Subscript[f, t]). Pro logaritmus je to aritmetický průměr:

ln (1+(Subscript[R, t]))=(1/t)(∑_(j=1)^t)ln (1+(Subscript[f, j])) .

Tento vztah je inspirativní pro spojitý případ, ve kterém R(t) je integrální průměr:

(Subscript[R, t])=(1/t)(∫_( 0)^(, t))f(τ)dτ.

Konec 2017-03-22

2017-03-29 Lekce 6

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

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

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

Hyperlink[Button[" Výnosové křivky "],"http://www.karlin.mff.cuni.cz/~hurt/20170328_Vynosove_krivky_Template_mfpress_1.pdf"]

Příklad (Porovnání výnosových křivek v různých referenčních časech, Treasury YC USA)

December 15, 2014:

January 5, 2015:

Dec 10, 2015:

Dec 6, 2016:

Mar 23, 2017:

***Zpracování dat z předchozího příkladu (Treasury YC USA)

yieldCurveUSA20170323={WolframAlpha["yield curves",{{"TreasuryYieldCurve:EconomicData",1},"ComputableData"},PodStates->{"TreasuryYieldCurve:EconomicData__More"}],WolframAlpha["yield curves",{{"TreasuryYieldCurve:EconomicData",2},"ComputableData"},PodStates->{"TreasuryYieldCurve:EconomicData__More"}],WolframAlpha["yield curves",{{"TreasuryYieldCurve:EconomicData",3},"ComputableData"},PodStates->{"TreasuryYieldCurve:EconomicData__More"}]}

yieldCurveUSA20170323mod=Flatten[Rest@Most@yieldCurveUSA20170323,1]
yieldCurveUSA20170323modmod=Map[{StringTake[#[[1]],4],#[[2,1]]}&,yieldCurveUSA20170323mod]
Map[{StringReplace[#[[1]],{"\[Hyphen]mo"->"M","\[Hyphen]ye"->"Y","\[Hyphen]y"->"Y"}],#[[2]]}&,yieldCurveUSA20170323modmod]

Notes:

Rest[yieldCurveUSA20170323]//First

Rest[yieldCurveUSA20170323]//First//First//FullForm
(aux1=Rest[yieldCurveUSA20170323]//First//Last)//FullForm

Map[{StringTake[#[[1]],4],#[[2,1]]}&,{aux1}]

***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 v tomto případě 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 nezávisle na hodnotící úrokové míře . 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

***Remark 1: 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

***Remark 2:

The Vasicek’s example may have a weak point: the maturity premium is not considered.

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])]. Pro tento účel se sestrojuje spojitá funkce g(t), která splňuje určitá kritéria. Kritéria se obvykle týkají toho, jak přesně má sestrojená g(t) aproximovat data. Rozumní finanční analytici se většinou spokojí s nějakým vyrovnáním (fitting), vrcholoví manažéři požadují, aby v kótovaných časech (skutečně dostupných dat)  byly kótované a aproximované úrokové míry shodné (numerický přístup -> interpolace).

Sestrojená výnosová křivka by měla co nejlépe vystihovat realitu (pozorované, kótované úrokové míry).

Numerický přístup (interpolace)

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

Numerický přístup spočívající v interpolaci má mj. velkou nevýhodu v tom, že nedokáže eliminovat chybná rozhodnutí obchodníka s cennými papíry (dealera). Stačí se podívat na empirické výnosové křivky, kde často můžeme pozorovat “úlety”. Jest pravdou, že hrubou chybu obchodníka slušné finanční insituce automat zastaví během zlomků vteřiny. I tak mohou být ztráty v desítkách miliónů. Ale ty se pak v interpolované křivce projeví a při interpolaci podají zkreslený dojem. To se ovšem částečně může stát i při statistickém přístupu při nevhodné volbě odhadovací procedury, např. při datech, která vykazují těžké chvosty (heavy tails) se použije normální rozdělení jako základní.

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

Příklad (varovný, interpolace polynomem)

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 (varovný, 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]]]}]]

!Vyrovnání kubickými spliny (Fitting by Cubic Splines)

Viz přednáška

***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τ

D[nelsonsiegelspot[b0,b1,b2,c,t],t] t +nelsonsiegelspot[b0,b1,b2,c,t]//FullSimplify

(* 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.

?*Fit

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]

Konec 2018-03-28

2017-04-05 Lekce 7

Upřesnění z předchozích lekcí

Výpočet rizika nesplacení: percentuální vyjádření (oprava)

viz    (Subscript[r, default])

Interpolace výnosových křivek (YC) polynomy (doplnění)

viz interpolace

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

Datasets

Recall datasets:

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]}]

!Příklad (Swensson)

Zobecňuje předchozí, obsahuje navíc dva parametry. Začneme s jednodušším tvarem forwardové křivky:

(Subscript[f, S,w])(t;(Subscript[β, 0]),(Subscript[β, 1]),(Subscript[β, 2]),(Subscript[β, 3]),(Subscript[γ, 1]),(Subscript[γ, 2]))= (Subscript[β, 0])+(Subscript[β, 1])(e^(-t/(Subscript[γ, 1])))+(Subscript[β, 2]) (t/(Subscript[γ, 1]))(e^(-t/(Subscript[γ, 1])))+(Subscript[β, 3]) (t/(Subscript[γ, 2]))(e^(-t/(Subscript[γ, 2])))

Ve níže používaných vstupech β≈b, γ≈c:

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:

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

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

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; possible local extremes are determined by the parameter c,1 a c,2.

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 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->{{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.4,"b2"},-5,-1,0.2,Appearance->"Labeled"},
{{b3,-4.6,"b3"},-5,-1,0.2,Appearance->"Labeled"},
{{c1,150,"c1"},100,1000,10,Appearance->"Labeled"},
{{c2,3200,"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]

**Příklad: 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

http://demonstrations.wolfram.com/EstimatingTheLocalMeanFunction/

Pokračujte na Download Author Code.

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

Based on the present value of the cash flow CF using spot rates R=((Subscript[R, 1]),...(Subscript[R, T]))  taken from the yield curve:

({{({{PV(CF,R)}})=(∑_(t=0)^T)((Subscript[CF, t])/(((1+(Subscript[R, t])))^t))}})

***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 variables)

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 (při daném B, given 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)=((∂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.

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

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 ((Subscript[ω, 1]),(Subscript[ω, 2]),(Subscript[ω, 3]),(Subscript[ω, 4]))  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))= rozptyl ), T=800 [dnů]. Pro účely reprodukovatelnosti je při všech aktivacích zajištěno stejné počáteční náhodné číslo (SeedRandom[113333], všechny simulace je možné kdykoli kompletně zrekonstruovat). Užívejte vždy při publikaci (Bc práce, DP práce i ostatní publikace)!!

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 increments).

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

SliceDistribution[GeometricBrownianMotionProcess[μ,σ,(Subscript[P, 0])],t]

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)

Frakcionální Brownův pohyb: Příklady

SliceDistribution[FractionalBrownianMotionProcess[μ,σ,h],t]

Grid[{{"Mean", Mean[FractionalBrownianMotionProcess[μ,σ,h][t]]},{"Variance",Variance[FractionalBrownianMotionProcess[μ,σ,h][t]]//TraditionalForm},{"CovarianceFunction",CovarianceFunction[FractionalBrownianMotionProcess[μ,σ,h],s,t]//TraditionalForm},
{"CorrelationFunction",CorrelationFunction[FractionalBrownianMotionProcess[μ,σ,h],s,t]}},Frame->All]

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[%]

Konec 2017-04-05

2017-04-12 Lekce 8

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

*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[Table[data,10],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[Table[data,10],InterpolationOrder->0,Filling->Axis]

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

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

Procedury

SD ... směrodatná odchylka

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

Reálná data:

Erste

Manipulace s daty

SetDirectory[NotebookDirectory[]];ersteceny=FinancialData["Vienna:EBS",{{2011,1,1},{2017,4,10}}] ;
Text@Row@{"Number of observations:   ",Length[%]}
erstevynosy=FinancialData["Vienna:EBS","Return",{{2011,1,1},{2017,4,10}}] ;
Export["ersteceny.xls",ersteceny,"XLS"];
Export["erstevynosy.xls",erstevynosy,"XLS"];
ersteceny[[1;;4]]
GraphicsRow@{DateListPlot[ersteceny,Joined->True,PlotStyle->Thick,PlotLabel->"Prices Erste"],DateListPlot[erstevynosy,Joined->True,PlotRange->All,PlotLabel->"Returns Erste"]}

erstecenyread=Import["ersteceny.xls","XLS"];
Dimensions[erstecenyread]
erstecenyread=erstecenyread//First;
Take[erstecenyread,-10]

Ilustrace

Výnosy Erste:

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

Vidíme dva vedlejší vrcholky.

Charakteristiky

moments[EmpiricalDistribution[erstehodnotyvynosu]]

VW

Kotace Frankfurt: “F:VOW”

Ceny a výnosy VW

SetDirectory[NotebookDirectory[]];vwceny=FinancialData["F:VOW",{{2011,1,1},{2017,4,10}}] ;
Text@Row@{"Number of observations:   ",lengthVW=Length[%]}
vwvynosy=FinancialData["F:VOW","Return",{{2011,1,1},{2017,4,10}}] ;
Export["vwceny.xls",vwceny,"XLS"];
Export["vwvynosy.xls",vwvynosy,"XLS"];
GraphicsRow@{DateListPlot[vwceny,Joined->True,PlotStyle->Thick,PlotLabel->"VW prices"],DateListPlot[vwvynosy,Joined->True,PlotLabel->"VW returns",PlotRange->All]}

Krize VW: Ceny od 2015-09-01:

positionVWceny201509=Position[vwceny,{{2015,9,_},_}]

positionVWceny201509//First//First

vwceny[[positionVWceny201509//First//First]]

DateListPlot[vwceny[[positionVWceny201509[[1,1]];;lengthVW]],Joined->True,PlotStyle->Thick,PlotLabel->"VW prices"]

Výnosy

(* Odstranění data *)
vwhodnotyvynosu=Map[Last,vwvynosy];
GraphicsRow@{Histogram[vwhodnotyvynosu,Automatic,"PDF",PlotLabel->"VW returns"],SmoothHistogram[vwhodnotyvynosu,PlotLabel->"VW returns",PlotRange->Full]}

vwhodnotyvynosuodzari2015=Map[Last,vwvynosy[[positionVWceny201509[[1,1]];;lengthVW-1]]];
GraphicsRow@{Histogram[vwhodnotyvynosuodzari2015,Automatic,"PDF",PlotLabel->"VW returns from September 2015"],SmoothHistogram[vwhodnotyvynosuodzari2015,PlotLabel->"VW returns from September 2015",PlotRange->Full]}

Charakteristiky VW

moments[EmpiricalDistribution[vwhodnotyvynosu]]

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

moments[EmpiricalDistribution[vwhodnotyvynosuodzari2015]]

DistributionFitTest[vwhodnotyvynosu]

**General Motors a Apple

Ceny

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

Výnosy

GMvynosy=FinancialData["GM","Return",{{2011,1,1},{2017,4,10}}] ;
Applevynosy=FinancialData["AAPL","Return",{{2011,1,1},{2017,4,10}}] ;
(* 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]}

Cvičení

Proveďte podobnou analýzu pro General Electric (ticker “GE”).

Normální rozdělení

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

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

Pravidlo 3σ

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

Pravidlo 2σ

{Probability[Abs[X-μ]>2σ,X\[Distributed]NormalDistribution[μ,σ]]//N,Probability[Abs[X-μ]<2σ,X\[Distributed]NormalDistribution[μ,σ]]//N}

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

𝒟Cauchy=CauchyDistribution[μ,σ];
Text@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,2.01]],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,2.01,3,4,5}}],TableHeadings->{None,{"k","C(0,1)","(Subscript[t, 2.01])(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])

Text@TableForm[Table[{k,((3 (-2+k))/(-4+k))},{k,{4.01,4.5,5,10,100}}]//N,TableHeadings->{None,{"k","Kurtosis"}}]

Manipulate[Show[Plot[PDF[StudentTDistribution[0,1,k],x],{x,-4,4},PlotRange->All,PlotStyle->Thick,PlotLabel->"Density of Student t-distribution on k degrees of freedom",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[μ,σ];
DistributionDomain[𝒟Laplace]
Text@Row@{"Hustota  f(x;μ,σ) = ",PDF[𝒟Laplace,x]//FullSimplify//TraditionalForm}

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

⟹ Špičatost je nezávislá na parametrech. Je dvakrát vyšší než u normálního rozdělení.

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

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

*Logistické rozdělení

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

(* Distribucni funkce *)
CDF[𝒟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->{"κ"," "},PlotTheme->"Scientific",PlotStyle->Thick]

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.5},0.1,3,Appearance->"Labeled"},
{{σ2,0.5},0.1,3,Appearance->"Labeled"},
{{σ3,0.7},0.1,3,Appearance->"Labeled"},
{{ε,0.05},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í (za cvičení)

?*Distr*

DistributionDomain

𝒟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"}]

**Příklad (rozdělení výnosů DJI - Mathematica demonstration za cvičení)

http://demonstrations.wolfram.com/ModelingReturnDistributions/

Konec 2017-04-12

2017-04-19 Lekce 9

Doplněn příklad na konci předchozí lekce.

Míry rizika 1

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

Je nejjednodušší mírou rizika. V teorii portfolia se přímo rizikem nazývá.

σ=(Sqrt[var ρ])=(Sqrt[var L]).

Střední absolutní odchylka (mean absolute deviation, MAD)

MAD(ρ)=MAD(L)=E|ρ-E,ρ|=E|L-E,L|.

Example

The assets A and B possess returns dependent on the state of economy in the following way:

Text@Grid[{{"State of Economy","Probability","Return A [%]","Return B [%]"},
{"Boom",0.3,100,20},
{"Normal",0.4`,15,15},
{"Recession",0.3`,-70,10}},Frame->All]

𝒟assetA=EmpiricalDistribution[{0.3,0.4,0.3}->{100,15,-70}];
𝒟assetB=EmpiricalDistribution[{0.3,0.4,0.3}->{20,15,10}];
Text@Grid[{{" ","Asset A","Asset B"},
{"Mean",Mean[𝒟assetA],Mean[𝒟assetB]},
{"Variance",Variance[𝒟assetA],Variance[𝒟assetB]},
{"S. D.",StandardDeviation[𝒟assetA],StandardDeviation[𝒟assetB]},
{"MAD",Expectation[Abs[x-Mean[𝒟assetA]],x\[Distributed]𝒟assetA],Expectation[Abs[x-Mean[𝒟assetB]],x\[Distributed]𝒟assetB]}},Frame->All]

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 L,(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},{2017,4,25}}],Joined->True,PlotStyle->Thick,PlotLabel->"Apple Prices" ]
Applevynosy=FinancialData["AAPL","Return",{{2011,1,1},{2017,4,25}},"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",PlotRange->All]

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.0009138062867373701`:

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

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.0009138062867373701 T:

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

t-rozdělení

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

Příklad (pokračování, použita data z období {{2011,1,1},{2016,4,25}})

Neaktivovat!!! Data z období {{2011,1,1},{2016,4,25}}

𝒟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 (pokračování, použita data z aktuálního období {{2011,1,1},{2017,4,25}})

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

V tomto případě ((OverHat[ν]) <4) neexistuje 4. moment. Odhad špičatosti neexistuje.

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"]

Konec 2017-04-19

2017-04-26 Lekce 10

1. Doplněna literatura

2. Doplnění v předchozí lekci

Míry rizika 2

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

Conditional value at risk (in case of continuous distributions 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, CVaR

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

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

Example 1:

CVaR[NormalDistribution[],α]
Assuming[0<α<1,CVaR[NormalDistribution[],α]]

el

Assuming[0<α<1∧μ∈Reals∧σ>0,CVaR[NormalDistribution[μ,σ],α]]

Example 2:

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.0421, (4.21% 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)

Teorie portfolia 1

Portfolio: diverzifikace, eficientní trh

Portfolio: diverzifikace, eficientní trh

SetDirectory[NotebookDirectory[]];
Import["FM1a113.png"]

Cvičení. Zjistěte, které z výše uvedených předpokladů jsou realistické (splnitelné), mírně omezující, silně omezující a nerealistické (nesplnitelné).

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

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

Časové řady očekávaných 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):

Text@Grid[{{"Očekávaný výnos:  ",{(Subscript[r, A]),(Subscript[r, B])}=Map[Mean,{returnsA,returnsB}]},
{"Rozptyl:  ",Map[Variance,{returnsA,returnsB}]},
{"Riziko:  ",(Sqrt[Map[Variance,{returnsA,returnsB}]])//N}},Frame->All]

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

Text@Row@{"(Subscript[corr, AB]):  ",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í a korelační matice výnosů:

Row@{(covAB=Covariance[{returnsA,returnsB}//Transpose])//MatrixForm,"        ",(covAB=Correlation[{returnsA,returnsB}//Transpose])//MatrixForm}

Rozptyl výnosu portfolia:

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

Konec 2017-04-26

2017-05-03 Lekce 11

***Kurs EUR/CZK

WolframAlpha["EUR/CZK",{{"History",1},"ComputableData"}]

WolframAlpha["EUR/CZK",{{"History",1},"FormattedData"}]

FinancialData["EUR/CZK"]

FinancialData["EUR/CZK"]

Tržní a eficientní portfolio (market and efficient portfolio, MP, EP)

Konstrukce optimálních portfolií a separační věty

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 (*[((%)^2)]*) *)
(* ρ=correlation between the returns of the assets 1, 2 *)
vv[ρ_]:=(({{9, 18 ρ}, {18 ρ, 36}}))
(* expected return on the portfolio *)
rp[x1_]=rr.xx//Simplify
Text@Row[{"Expected return (Subscript[r, p]):",Spacer[10],rp[x1]}]
(* variance of the portfolio return: two equivalent expressions *)
varp[x1_,ρ_]=xx.vv[ρ].xx//Simplify
Text@Row[{"Variance of the portfolio return (two equivalent expressions):\n",
varp[x1,ρ],"\n   or\n",
varp[x1,ρ]//Expand//Apart//TraditionalForm}]

Graphical representation

Dependence between the expected return and risk are usually plotted in

risk-expected return plane (rovina riziko - očekávaný výnos)
variance-expected return (rovina rozptyl - očekávaný výnos)
standard-deviation - expected return-plane (směrodatná odchylka - očekávaný výnos)
the corresponding curve: minimum variance portfolios
upper part of 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,-1,2},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->"Minimum Variance Portfolios"],{{ρ,0},-1,1,Appearance->"Labeled"},SaveDefinitions->True]

Eficientní hranice portfolia dvou aktiv (horní část křivky znázorňující porfolia s minimálním rozptylem):

(* SetDirectory[NotebookDirectory[]];
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]//FullSimplify)//TraditionalForm

Globální portfolio s minimálním rozptylem
Optimal GMVP (Subscript[x, G]^✶)=((((Subscript[x, 1]^✶),(Subscript[x, 2]^✶)))^T):

Text@Row@{"((Subscript[x, 1]^✶),(Subscript[x, 2]^✶)) = ",xxGMVP={x1GMVP,x2GMVP}={x1GMVP=(x1/.Solve[derivative==0,x1])//First,1-x1GMVP}//Simplify}

The corresponding expected return and variance

Text@Grid[{{"Expected return","Variance"},{rGMVP=xxGMVP.rr,(σ2GMVP=varp[x1GMVP,ρ])//TraditionalForm}//Simplify},Frame->All]

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,PlotStyle->Thick,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. Such a portfolio is also riskless.

Eficientní hranice: eficientní portfolia

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

Konec 2017-05-03

2017-05-10 Lekce 12

Teorie portfolia 2

Portfolia s minimálním rizikem: Obecné řešení (Grafické znázornění)

SetDirectory[NotebookDirectory[]];
Import["portfoliorisky2.eps"]

Portfolia s minimálním rizikem: Obecné řešení při existenci bezrizikového aktiva (Grafické znázornění)

SetDirectory[NotebookDirectory[]];
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;
Text@Grid[{Prepend[expected," Expected returns "],Prepend[(Sqrt[Diagonal[cov]])," Standard errors "]}//Transpose,Frame->All]
Text@Column[{"Correlations of returns",(Correlation[datareturns])//MatrixForm},Center]

Vidíme, že např. (Subscript[μ, 3])>(Subscript[μ, 5]), ale (Subscript[σ, 3])<(Subscript[σ, 5]). Odporuje předpokladu eficientního trhu, vyšší riziko musí být kompenzováno vyšším očekávaným výnosem.

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

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)V,x]))    subject to conditions    x≥0   and   (∑_(n=1)^N)(Subscript[x, n])=1,

so that short sales are not allowed.

Example 1 (Sharpe, short sales allowed)

Clear[xx];
(* xx=Table[Unique[],{Length[expected]}] *)
xx={x1,x2,x3,x4,x5};

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]

Normování:

xa=xx/.sol11[[2]]
Text@Column[{" Optimal portfolio ",xnorm=xa/Total[xa]},Center,Frame->All]
Total[xnorm]

V praxi je takové portfolio stěží realizovatelné. Aktivum 4 má záporný výnos, prodej nakrátko znamená, že by si jej někdo musel koupit. Zde uvažujeme časový horizont jedno období, racionální investor by nikdy aktivum 4 nekoupil.

Hodnota kritéria (Sharpeova poměru):

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

Example 2 (Sharpe, 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]
Text@Column[{" Optimal portfolio ",xx/.sol2[[2]]//Chop},Center,Frame->All]
Total[xx/.sol2[[2]]]

Hodnota kritéria (Sharpeova poměru):

sol2[[1]]

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

Požadovaný očekávaný výnos (Target, prescribed expected return) μ=4

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

sol3=NMinimize[{crit3,cons3},xx]//Quiet
Text@Column[{" Optimal portfolio ",xx/.sol3[[2]]//Chop},Center,Frame->All]
Total[xx/.sol3[[2]]]

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

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

xx3.expected

Example 3b (inequalities instead of equalities)

crit3b=xx.cov.xx//Simplify;
cons3b=Apply[And,Thread[xx≥0]]&&Total[xx]≤ 1&&xx.expected≥4;
sol3b=NMinimize[{crit3b,cons3b},xx]//Quiet
Text@Column[{" Optimal portfolio ",xx/.sol3b[[2]]//Chop},Center,Frame->All]
Total[xx3b=xx/.Last[sol3b]]
xx3b
xx3b.expected

Unfeasible requirement
(Neither of the assets reaches the expected return  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 3d (Markowitz) Portfolio with prescribed expected return and minimum risk, short sales allowed)

Požadovaný očekávaný výnos (Target, prescribed expected return) μ=4

crit3d=xx.cov.xx//Simplify
cons3d=Total[xx]==1&&xx.expected==4

sol3d=NMinimize[{crit3d,cons3d},xx](*//Quiet*)
Text@Column[{" Optimal portfolio ",xx/.sol3d[[2]]//Chop},Center,Frame->All]
Total[xx/.sol3d[[2]]]

Total[xx3d=xx/.Last[sol3d]]

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

{Total[xx3d],xx3d.expected,xx3d.cov.xx3}

Example 4 (Prague Stock Exchange)

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 Sharpe 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 ]

sol=xxPS/.soldif[[2]];
(* normalize *)
sol=sol/Total[sol]
sol.returns

Example 5 (Lagrange multipliers)

Markowitz, short sales allowed, μ prescribed expected return

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

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

expected
μ=4;
(* !!!! *)
eq1=Map[D[lagrange,#]&,xxx={xx,λ1,λ2}//Flatten]==0
xx5=Take[Flatten[xxx/.Solve[eq1,xxx]],Length[xx]];
Text@Column[{" Optimal portfolio ",xx5//Chop},Center,Frame->All]

{Total[xx5],xx5.expected,xx5.cov.xx5}

Konec 2017-05-10

2017-05-17 Lekce 13 odpadá, rektorský den

2017-05-24 Lekce 14

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_CAPM2.pdf"]

Security Market Line

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

Capital Market Line

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 2017-05-24

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ě (specielně pak v CZK) 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]))])

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

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 governed 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.

Black-Scholesův vzorec

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]

***Různé

***Data prednasek

dataprednasek=Map[DateString[#,"ISODate"]&,Table[DayPlus[{2017,2,22},7j],{j,0,13}]]

lekce=Table[" Lekce "<>ToString[j],{j,1,14}]

Map[StringJoin,{dataprednasek,lekce}//Transpose]

***Příklad 1 (Swap, Cross-Currency swap)

Cross currency and interest rate swap

Česká společnost (klient, counterparty) dostane 1999-10-20 půjčku od evropské banky (banka)  EUR 27107617.24, smění na CZK a vrátit ji musí 2006-10-20 v EUR. Jistí se swapem:

Pevné částky: 
Počáteční výměna:  
Koncová výměna:

Pohyblivé částky:

1999-10-20 CZK/EUR = 36.890

notionalAmmountCZK=1000000000 ; (* objem swapu v CZK *)
notionalAmmountEUR=27107617.24;   (* objem swapu v EUR *)
fxCZKEUR19991010=36.89; (* aktuální kurs k datu 1999-10-20 *)
spread=3.4 (* % *);
notionalAmmountCZK/notionalAmmountEUR

DateRange["1999-10-20","2006-10-20","Quarter"];
datesOfTransactions=Select[%,#[[2]]==10||#[[2]]==4&]
(* vybere pouze odpovídající půlroční *)

Map[(DateDifference[First[#],Last[#],"Year",DayCountConvention->"Actual360"]//First)&,{Most[datesOfTransactions],Rest[datesOfTransactions]}//Transpose]

Times in years with reference date

timesOfTransactionsInYears=Map[(DateDifference[First[datesOfTransactions],#,"Year",DayCountConvention->"Actual360"]//First)&,datesOfTransactions]

Euro LIBOR - 6 months (Meaning: the interest rate for the future 6 months!!!

e6mrate={3.454,4.083,5.101,4.565,3.459,3.537,3.165,2.466,2.171,2.060,2.191,2.172,2.272,2.951};
e6mrateMinusSpread=e6mrate-spread
payments=Join[{0},notionalAmmountCZK (e6mrateMinusSpread/100)]
(cashFlow=Cashflow[{timesOfTransactionsInYears,payments}//Transpose])//First//Dataset

Plot[TimeValue[cashFlow,i,{1999,10,20}],{i,0,0.3}]

***Příklad 2 (Swap, Cross-Currency swap, Hull 8th ed., p. 165-166)

Cross currency and interest rate swap.

5-letý měnový swap mezi IBM a British Petroleum (BP).

Počáteční výměna:  1.2.2011 IBM ⟶ BP 18 mil. USD, 1.2.2011 BP ⟶ IBM 10 mil. GBP
Koncová výměna:    1.2.2016 IBM ⟶ BP 10 mil. GBP, 1.2.2016 BP ⟶ IBM 18 mil. USD
Pevné částky:  ve dnech 1.2.2012, 1.2.2013, 1.2.2014, 1.2.2015, 1.2.2016:
		 IBM ⟶ BP 5% z objemu swapu 10 mil. GBP, tj. 0.5 mil. GBP
		 BP ⟶ IBM 6% z objemu swapu 18 mil. USD, tj. 1.08 mil. USD

Poznamenejme, že v příkladu uvedené hodnoty jsou nereálné. Počáteční výměna se v praxi děje na základě akruálního kursu, a ten 1.2.2011 byl GBP 1 = USD 1.6258. Kurs uvedený v příkladu byl přibližně 1.9.2008: GBP 1 = USD 1.8007.

cashFlowIBMUSD=Cashflow[{-18,1.08,1.08,1.08,1.08,18+1.08}]
cashFlowIBMGBP=Cashflow[{10,-0.50,-0.50,-0.50,-0.50,-10-0.50}]

Profily současných hodnot v závislosti na hodnotící úrokové míře:

Plot[{TimeValue[cashFlowIBMUSD,i,0],TimeValue[cashFlowIBMGBP,i,0]},{i,0,0.15},PlotTheme->"Business",PlotLegends->{"USD","GBP"},PlotLabel->"NPV IBM in USD and GBP"]

(* Actual exchange rate, FX *)
FinancialData["GBP/USD"]

Skutečné historické směnné kursy:

(fxGBPUSDreal={{{2011,2,1},1.6258`},{{2012,2,1},1.5917`},{{2013,2,1},1.5162`},{{2014,2,1},1.6745`},{{2015,2,1},1.5434`},{{2016,2,1},1.3916`}})//Dataset

Abychom mohli použít výše uvedené peněžní toky a přiblížili se aspoň trochu realitě, provedeme lineární transformaci směnných kursů tak, aby v okamžiku počáteční výměny odpovídala skutečnosti:

fxGBPUSDexample=Map[Last,fxGBPUSDreal](1.8/(1.6258`))

cashFlowIBMGBP=Cashflow[{10,-0.50,-0.50,-0.50,-0.50,-10-0.50}]

Peněžní tok IBM v GBP konvertovaný na USD dle fxGBPUSDexample:

cashFlowIBMGBPinUSD=Cashflow[cashFlowIBMGBP[[1]]*fxGBPUSDexample]

(totalcashFlowIBMinUSD=TimeValue[cashFlowIBMUSD,i,0]+TimeValue[cashFlowIBMGBPinUSD,i,0])//TraditionalForm

Profil současné hodnoty v dolarovém vyjádření v závislosti na hodnotící úrokové míře :

Plot[totalcashFlowIBMinUSD,{i,0,0.2},PlotTheme->"Business",PlotLegends->{"USD","GBP"},PlotLabel->"NPV IBM in USD"]

Ex post vidíme, že IBM by na takovém swapu jednoznačně vydělalo. V okamžiku uzavření swapu však známe jen aktuální kurs a aktuální tržní (hodnotící) úrokovou míru. Pro představu o budoucím vývoji použijeme HIV (vnitřní hodnotu peněžního toku). Pro jednoduchost budeme předpokládat, že směnný kurs je konstatní pro období 1,...,5, označme jej FX. Pak peněžní tok IBM v GBP konvertovaný na USD je:

Clear[FX];
cashFlowIBMGBPinUSDvariableFX=Cashflow[cashFlowIBMGBP[[1]]*{1.8,FX,FX,FX,FX,FX}]

(totalcashFlowIBMinUSDvariableFX=TimeValue[cashFlowIBMUSD,i,0]+TimeValue[cashFlowIBMGBPinUSDvariableFX,i,0])//TraditionalForm

Plot3D[totalcashFlowIBMinUSDvariableFX,{i,0.04,0.07},{FX,1.4,2}]

Text@Column[{"PV v USD v závislosti na FX a i",totalcashFlowIBMinUSDvariableFX//TraditionalForm,"PV v USD v závislosti na i a FX = 1.85",
(totalcashFlowIBMinUSDvariableFX/.FX->1.85)//TraditionalForm},Background->{{LightBlue,None}},Frame->True,Alignment->{{Left}}]

Manipulate[Plot[(totalcashFlowIBMinUSDvariableFX/.FX->fx)//Evaluate,{i,0,0.1},AxesLabel->{"i","PV"}],{{fx,1.85},1.3,2.3,Appearance->"Labeled"}]

***Zobecnění: geometrický pokles nebo růst FX, (Subscript[FX, t])=((FX(1+g))^t), g dáno, t<0 ... pokles, t>0 růst.

***Cash Flow Diagram

(* i ... valuation interest *)
(* cf  {(Subscript[time, 1]),(Subscript[c, 1])},{(Subscript[time, 2]),(Subscript[c, 2])},…} *)
Clear[cashFlowDiagram];
cashFlowDiagram[cf_,plotLabel_:"Cash Flow"]:=
	Module[{PVprofile,tmin,tmax,cfmin,cfmax},
tmin=Min[cf//Transpose//First];
tmax=Max[cf//Transpose//First];
cfmin=Min[cf//Transpose//Last];
cfmax=Max[cf//Transpose//Last];
PVprofile=Plot[(* (x^2)*)(* Null *)0,{x,tmin,tmax},AxesOrigin->{0,0},PlotStyle->{Thin,Black},PlotRange->{Min[cfmin,0],Max[cfmax,0]}, Axes->True,AxesLabel->{"t","CF"},LabelStyle->Directive[Italic],PlotLabel->plotLabel];
Show[PVprofile,
Map[Graphics[{Thick,If[#[[2]]<0,Red,Black],Arrow[{{#[[1]],0},{#[[1]],#[[2]]}}]}]&,cf]]]

(* cashFlowDiagram[{{2,100},{5,200},{7.5,-200},{10,500}}] *)
cashFlowDiagram[{{2,100},{5,200},{7.5,-200},{10,500}}]

Teorie portfolia 4

Example 1 (7 companies selected from the members of DJI)

***Data Download and Export

SetDirectory[NotebookDirectory[]];

companies={"AAPL","BA","KO","DIS","MCD","PFE","WMT","^DJI"};
companiesWithNames=Map[{#,FinancialData[#,"Name"]}&,companies];
Grid[%,Frame->All]

Export["companiesWithNames.XLSX",companiesWithNames];

returns2017=FinancialData[companies,"Return",{{2017,1,1},{2018,5,18}},"Value"];
Map[Length,returns2017]
Dimensions[returns2017]

returnsWithTickers2017=MapThread[Prepend,{returns2017,companies}];
SetDirectory[NotebookDirectory[]];
Export["returnsWithTickers2017",returnsWithTickers2017,"Table"]; 
imp2017=Import["returnsWithTickers2017","Table"];

returnsWithTickers2017//FullForm

membersOfDJI=FinancialData["^DJI","Members"]

dji2017=FinancialData["^DJI",{{2017,1,1},{2018,5,18}}];
DateListPlot[%]
Length[%%]

Data Import

SetDirectory[NotebookDirectory[]];companiesWithNames=Import["companiesWithNames.XLSX"][[1]];
Grid[%,Frame->All]
returnsWithTickers2017=Import["returnsWithTickers2017","Table"];
returnsWithoutTickers2017=Map[Rest,returnsWithTickers2017];
returns1=Most[returnsWithoutTickers2017];
names=companiesWithNames[[All,1]];
names1=Most[names]

Expected returns and covariances

rr=Map[Mean,returns1];
vv=Covariance[Transpose[returns1]];
rizika=(Sqrt[Diagonal[vv]]);
vynosyRizika={names1,rr,rizika}//Transpose; 
(* Text["Setříděno podle očekávaných výnosů:" ] *)
TableForm[Sort[%,#1[[2]]>#2[[2]]&],TableHeadings->{None,{"Firma","Očekávaný výnos","Riziko"}}]
Text@Row@{"Determinant rozptylové matice =  ",Det[vv]}
Text@Style["Korelační matice",18]
Text@names1
(corr=Correlation[Transpose[returns1]])//MatrixForm

Markowitz Mean-Variance Portfolio (Lagrange Multipliers)

Clear[optimalPortfolioMarkowitz]
optimalPortfolioMarkowitz[rr_(* expectedReturns *),vv_(* covarianceMatrix *),μ_(* prescribed return *)]:=Module[{xx,x,n=Length[rr],λ1,λ2,lagrangeFunction,xxλ,lagrangian,equations,solution,optimalPortfolio},
xx=Array[(Subscript[x, #])&,n];
lagrangeFunction=(1/2)xx.vv.xx+λ1(1-Total[xx])+λ2(μ-rr.xx);
xxλ={xx,λ1,λ2}//Flatten;
lagrangian=Map[D[lagrangeFunction,#]&,xxλ];
equations=lagrangian==0;
solution=NSolve[equations,xxλ];
optimalPortfolio=xx/.solution//Flatten;
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",(Sqrt[optimalPortfolio.vv.optimalPortfolio])}},Frame->All]
]

optimalPortfolioMarkowitz[rr,vv,.00254402 (* = return of Boeing *)]

optimalPortfolioMarkowitz[rr,vv,.000173616 (* = return of Coca-Cola *)]

optimalPortfolioMarkowitz[rr,vv,0.0004353784863160212`(* = return of the GMVP *)]

Play with another prescribed expected returns &c.

Markowitz Mean-Variance Portfolio 
(Explicit solution, Efficient frontier, short sales  allowed)

ones=ConstantArray[1,Length[rr]];
vvinv=Inverse[vv];
a=ones.vvinv.ones; b= ones.vvinv.rr;c=rr.vvinv.rr;
Δ=a c-(b^2);
(* 1. bázické portfolio *)
xx1=vvinv.ones/a;
(* 2. bázické portfolio *)
xx2=vvinv.rr/b;
δ[μ_]=((a(c-μ b))/Δ);
(* Optimální portfolio *)xxstar[μ_]=δ[μ] xx1+(1-δ[μ])xx2;

Grid[{{"A","B","C","Δ"},{a,b,c,Δ}},Frame->All]
Row[{Style[(x^("1")),Bold]," = ",xx1}]
Row[{Style[(x^2),Bold]," = ",xx2}]
Row[{Style[(x^( 1)),Bold]," = ",xx1}]

Global Minimum Variance Portfolio (GMVP)

(* Připomeňme, že GMVP je 1. bázické portfolio, xx1 *)
globalMinimumVariancePortfolio=xx1
globalMinimumVariancePortfolioReturn=b/a

optimalPortfolioMarkowitz[rr,vv,0.0004353784863160212`(* = return of the GMVP *)]

Clear[efficientFrontier]
efficientFrontier[rr_(* expectedReturns *),vv_(* covarianceMatrix *),interval_(* of prescribed return *)]:=Module[{n=Length[rr],ones,a,b,c,Δ,vvinv=Inverse[vv],xx1,xx2,δ,μ,μaux,xxstar (* optimalPortfolio *),iterator},
ones=ConstantArray[1,n];
a=ones.vvinv.ones; b= ones.vvinv.rr;c=rr.vvinv.rr;
Δ=a c-(b^2);
xx1=vvinv.ones/a;xx2=vvinv.rr/b;
δ[μ_]=((a(c-μ b))/Δ);
xxstar[μ_]=δ[μ] xx1+(1-δ[μ])xx2;
iterator={μ,interval}//Flatten;
Plot[(Sqrt[xxstar[μ].vv.xxstar[μ]]),iterator,PlotLabel->Style["\nEfficient frontier in expected return-risk plane",Bold],AxesLabel->{"(Subscript[μ, p])",(Subscript[σ, p])}]
	]

efficientFrontier[rr,vv,{-0.002,.003}]

Markowitz Mean-Variance Portfolio 
(Numerical using NMinimize, short sales  allowed)

Clear[optimalPortfolioMarkowitzNumericalAllowed]
(* General enough for other purposes *)
optimalPortfolioMarkowitzNumericalAllowed[rr_(* expectedReturns *),vv_(* covarianceMatrix *),μ_(* prescribed return *)]:=Module[{xx,x,n=Length[rr],solution,optimalPortfolio,risk},
xx=Array[(Subscript[x, #])&,n];
solution=NMinimize[{(* cilova, účelová funkce, objective function = *)xx.vv.xx,Total[xx]==1,rr.xx==μ},xx];
risk=(Sqrt[solution[[1]]]);
optimalPortfolio=xx/.solution[[2]];
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]
		]

optimalPortfolioMarkowitzNumericalAllowed[rr,vv,0.00254402(* = return of Boeing *)]

optimalPortfolioMarkowitzNumericalAllowed[rr,vv,0.000173616 (* = return of Coca-Cola *)]

optimalPortfolioMarkowitzNumericalAllowed[rr,vv,0.0004353784863160212`(* = return of the GMVP *)]

Markowitz Mean-Variance Portfolio 
(Numerical using NMinimize, short sales not allowed)

Clear[optimalPortfolioMarkowitzNumericalNotAllowed]
(* General enough for other purposes *)
optimalPortfolioMarkowitzNumericalNotAllowed[rr_(* expectedReturns *),vv_(* covarianceMatrix *),μ_(* prescribed return *)]:=Module[{xx,x,n=Length[rr],solution,optimalPortfolio,risk},
xx=Array[(Subscript[x, #])&,n];
solution=NMinimize[{(* cilova, účelová funkce, objective function = *)xx.vv.xx,Total[xx]==1,rr.xx==μ,Thread[xx≥0]},xx];
risk=(Sqrt[solution[[1]]]);
optimalPortfolio=xx/.solution[[2]];
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]
		]

optimalPortfolioMarkowitzNumericalNotAllowed[rr,vv,0.00254402(* = return of Boeing *)]

optimalPortfolioMarkowitzNumericalNotAllowed[rr,vv,0.000173616 (* = return of Coca-Cola *)]

optimalPortfolioMarkowitzNumericalNotAllowed[rr,vv,0.0004353784863160212`(* = return of the GMVP *)]

Sharpe Ratio

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)V,x]))    subject to conditions    x≥0   and   (∑_(n=1)^N)(Subscript[x, n])=1,

so that short sales are not allowed.

Řešení je invariantní vůči kladnému násobku, takže je možné ji řešit bez normovací podmínky a teprve poté normovat:  (∑_(n=1)^N)(Subscript[x, n])=1.

Sharpe Ratio (short sales allowed)

Clear[optimalPortfolioSharpeNumericalAllowed]
(* General enough for other purposes *)
optimalPortfolioSharpeNumericalAllowed[rr_(* expectedReturns *),vv_(* covarianceMatrix *)]:=Module[{xx,x,n=Length[rr],solution,optimalPortfolio,risk},
xx=Array[(Subscript[x, #])&,n];
solution=NMinimize[{(* cilova, účelová funkce, objective function = *)((rr.xx)/(Sqrt[xx.vv.xx]))},xx];
optimalPortfolio=xx/.solution[[2]];
optimalPortfolio=optimalPortfolio/Total[optimalPortfolio];
risk=(Sqrt[optimalPortfolio.vv.optimalPortfolio]);
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]
		]

optimalPortfolioSharpeNumericalAllowed[rr,vv]

Sharpe Ratio (short sales allowed)

Clear[optimalPortfolioSharpeNumericalNotAllowed]
optimalPortfolioSharpeNumericalNotAllowed[rr_(* expectedReturns *),vv_(* covarianceMatrix *)]:=Module[{xx,x,n=Length[rr],solution,optimalPortfolio,risk},
xx=Array[(Subscript[x, #])&,n];
solution=NMinimize[{(* cilova, účelová funkce, objective function = *)((rr.xx)/(Sqrt[xx.vv.xx])),Thread[xx≥0]},xx];
optimalPortfolio=xx/.solution[[2]];
optimalPortfolio=optimalPortfolio/Total[optimalPortfolio];
risk=(Sqrt[optimalPortfolio.vv.optimalPortfolio]);
Text@Grid[{{"Companies",names1},{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]
		]

optimalPortfolioSharpeNumericalNotAllowed[rr,vv]

**Example 2

Data (Mesicni vynosy 5 akcii, zdroj: “Returns.dat” resp. “Returns.csv”)

Text@Grid[monthlyReturns5={{"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`}},Frame->All]

(* Výnosy bez prvního řádku *)
monthlyReturns51=Rest[monthlyReturns5];
(* Výnosy bez prvního řádku a prvního sloupce *)
monthlyReturns52=Map[Rest,monthlyReturns51];

Očekávané výnosy, rizika a rozptylová matice

expectedReturns5=Mean[monthlyReturns52];
risk5=StandardDeviation[monthlyReturns52];
vv5=Covariance[monthlyReturns52];

Text@Grid[{{"Asset",Range[Length[risk5]]}//Flatten,Prepend[expectedReturns5," Expected returns "],Prepend[risk5," Standard errors "]}//Transpose,Frame->All]

Vidíme, že např. (Subscript[μ, 3])>(Subscript[μ, 5]), ale (Subscript[σ, 3])<(Subscript[σ, 5]). Odporuje předpokladu eficientního trhu, vyšší riziko musí být kompenzováno vyšším očekávaným výnosem.

Dále vidíme, že výnosy jsou kladně korelovány:

Text@Column[{"Correlations of returns",(Correlation[monthlyReturns52])//MatrixForm},Center]

Markowitz Mean-Variance Portfolio (Lagrange Multipliers)

Clear[optimalPortfolioMarkowitz]
optimalPortfolioMarkowitz[rr_(* expectedReturns *),vv_(* covarianceMatrix *),μ_(* prescribed return *)]:=Module[{xx,x,n=Length[rr],λ1,λ2,lagrangeFunction,xxλ,lagrangian,equations,solution,optimalPortfolio},
xx=Array[(Subscript[x, #])&,n];
lagrangeFunction=(1/2)xx.vv.xx+λ1(1-Total[xx])+λ2(μ-rr.xx);
xxλ={xx,λ1,λ2}//Flatten;
lagrangian=Map[D[lagrangeFunction,#]&,xxλ];
equations=lagrangian==0;
solution=Solve[equations,xxλ];
optimalPortfolio=xx/.solution//Flatten;
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",rr.optimalPortfolio},{"Risk of the portfolio",(Sqrt[optimalPortfolio.vv.optimalPortfolio])}},Frame->All]
]

optimalPortfolioMarkowitz[expectedReturns5,vv5,3.7]

Play with a prescribed expected return: 2.7, 4, 4.4, 7.0 &c.

Markowitz Mean-Variance Portfolio (Numerical using NMinimize, short sales  allowed)

xx=Array[(Subscript[x, #])&,Length[expectedReturns5]];
solution5=NMinimize[{(* cilova, účelová funkce = *)xx.vv5.xx,(*  2 omezeni = *) expectedReturns5.xx==3.7,Total[xx]==1},xx];
risk=(Sqrt[solution5[[1]]]);
optimalPortfolio=xx/.solution5[[2]];
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",expectedReturns5.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]

Markowitz Mean-Variance Portfolio 
(Numerical using NMinimize, short sales not allowed)

xx=Array[(Subscript[x, #])&,Length[expectedReturns5]];
solution5=NMinimize[{(* cilova, účelová funkce = *)xx.vv5.xx,(*  2 + 5 = 7 omezeni = *) expectedReturns5.xx==3.7,Total[xx]==1,Thread[xx≥0]},xx];
risk=(Sqrt[solution5[[1]]]);
optimalPortfolio=xx/.solution5[[2]];
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",expectedReturns5.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]

Sharpe Ratio

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)V,x]))    subject to conditions    x≥0   and   (∑_(n=1)^N)(Subscript[x, n])=1,

so that short sales are not allowed.

Řešení je invariantní vůči kladnému násobku, takže je možné ji řešit bez normovací podmínky a teprve poté normovat:  (∑_(n=1)^N)(Subscript[x, n])=1.

Sharpe Ratio (short sales allowed)

xx=Array[(Subscript[x, #])&,Length[expectedReturns5]];
solution5Sharpe=Maximize[((xx.expectedReturns5)/(Sqrt[xx.vv5.xx])),xx]

optimalPortfolio=(xx/.solution5Sharpe[[2]]);
optimalPortfolio=(optimalPortfolio/(Total[optimalPortfolio]));
risk=(Sqrt[optimalPortfolio.vv5.optimalPortfolio]);
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",expectedReturns5.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]

Sharpe Ratio (short sales not allowed)

xx=Array[(Subscript[x, #])&,Length[expectedReturns5]];
solution5Sharpe=Maximize[{((xx.expectedReturns5)/(Sqrt[xx.vv5.xx])),Thread[xx≥0]},xx]

optimalPortfolio=(xx/.solution5Sharpe[[2]]);
optimalPortfolio=(optimalPortfolio/(Total[optimalPortfolio]))//Chop[#,(10^(-9))]&;
risk=(Sqrt[optimalPortfolio.vv5.optimalPortfolio]);
Text@Grid[{{"Optimal portfolio",optimalPortfolio},
{"Expected return",expectedReturns5.optimalPortfolio},{"Risk of the portfolio",risk}},Frame->All]

***Example 1 (Sharpe, short sales allowed)

Clear[xx];
(* xx=Table[Unique[],{Length[expected]}] *)
xx={x1,x2,x3,x4,x5};

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]

Normování:

xa=xx/.sol11[[2]]
Text@Column[{" Optimal portfolio ",xnorm=xa/Total[xa]},Center,Frame->All]
Total[xnorm]

V praxi je takové portfolio stěží realizovatelné. Aktivum 4 má záporný výnos, prodej nakrátko znamená, že by si jej někdo musel koupit. Zde uvažujeme časový horizont jedno období, racionální investor by nikdy aktivum 4 nekoupil.

Hodnota kritéria (Sharpeova poměru):

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

***Example 1 (Sharpe, 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]
Text@Column[{" Optimal portfolio ",xx/.sol2[[2]]//Chop},Center,Frame->All]
Total[xx/.sol2[[2]]]

Hodnota kritéria (Sharpeova poměru):

sol2[[1]]

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

Požadovaný očekávaný výnos (Target, prescribed expected return) μ=4

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

sol3=NMinimize[{crit3,cons3},xx]//Quiet
Text@Column[{" Optimal portfolio ",xx/.sol3[[2]]//Chop},Center,Frame->All]
Total[xx/.sol3[[2]]]

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

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

xx3.expected

***Example 3b (inequalities instead of equalities)

crit3b=xx.cov.xx//Simplify;
cons3b=Apply[And,Thread[xx≥0]]&&Total[xx]≤ 1&&xx.expected≥4;
sol3b=NMinimize[{crit3b,cons3b},xx]//Quiet
Text@Column[{" Optimal portfolio ",xx/.sol3b[[2]]//Chop},Center,Frame->All]
Total[xx3b=xx/.Last[sol3b]]
xx3b
xx3b.expected

Unfeasible requirement
(Neither of the assets reaches the expected return  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 3d (Markowitz) Portfolio with prescribed expected return and minimum risk, short sales allowed)

Požadovaný očekávaný výnos (Target, prescribed expected return) μ=4

crit3d=xx.cov.xx//Simplify
cons3d=Total[xx]==1&&xx.expected==4

sol3d=NMinimize[{crit3d,cons3d},xx](*//Quiet*)
Text@Column[{" Optimal portfolio ",xx/.sol3d[[2]]//Chop},Center,Frame->All]
Total[xx/.sol3d[[2]]]

Total[xx3d=xx/.Last[sol3d]]

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

{Total[xx3d],xx3d.expected,xx3d.cov.xx3}

***Example 3 (Prague Stock Exchange)

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 (špatně podmíněná):

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 Sharpe 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 ]

sol=xxPS/.soldif[[2]];
(* normalize *)
sol=sol/Total[sol]
sol.returns

***Example 5 (Lagrange multipliers)

Markowitz, short sales allowed, μ prescribed expected return

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

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

expected
μ=4;
(* !!!! *)
eq1=Map[D[lagrange,#]&,xxx={xx,λ1,λ2}//Flatten]==0
xx5=Take[Flatten[xxx/.Solve[eq1,xxx]],Length[xx]];
Text@Column[{" Optimal portfolio ",xx5//Chop},Center,Frame->All]

{Total[xx5],xx5.expected,xx5.cov.xx5}

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_CAPM2.pdf"]

Security Market Line

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

Capital Market Line

Probability distributions (old)

Manipulate[Plot[PDF[LogNormalDistribution[μ,σ],x],{x,0,17},PlotStyle->Thick,PlotRange->All,PlotLabel->Evaluate[Text@Row@{"Šikmost (Skewness) = ",Skewness[LogNormalDistribution[μ,σ]],"     Špičatost (Kurtosis) = ",Kurtosis[LogNormalDistribution[μ,σ]]}]],
{{μ,2},-1,3,Appearance->"Labeled"},{{σ,0.75},0.1,1.5,Appearance->"Labeled"},SaveDefinitions->True]

***Kurs EUR/CZK

WolframAlpha["EUR/CZK",{{"History",1},"ComputableData"}]

WolframAlpha["EUR/CZK",{{"History",1},"FormattedData"}]

FinancialData["EUR/CZK"]

FinancialData["EUR/CZK"]