---
title: "Cvičenie 1"
author: "Finančné deriváty"
#date: "22. 4. 2021"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```


# Organizácia cvičení

## Cvičiaci

-   Konzultačné hodiny nemajú pevný čas, stanovia sa individuálne
-   Kontaktný mail: [jan.gasper\@fmph.uniba.sk](mailto:jan.gasper@fmph.uniba.sk){.email}


## Hodnotenie

Z cvičení možno dostať maximálne 40 bodov.

-   4 domáce úlohy po 5 – 10 bodov (v skupinkách veľkosti 1 – 3 členov, skupinky medzi sebou nekomunikujú)
-   1 písomka za 15 bodov (samostatne, formou „open book", možnosť opravnej písomky)
-   bonusové body (max. 10) – dobrovoľné domáce úlohy, bonusová aktivita na hodine
-   účasť na cvičeniach sa nehodnotí





## R Markdown

Budeme pracovať v R markdown v prostredí RStudio. Markdown umožňuje jednoduché formátovanie textu, vytváranie nadpisov odrážok atď. Do týchto súborov si môžete dopsiovať vlastné poznámky a postrehy. 

V RStudiu možno vytvoriť nový takýto dokument pomocou: File → New File → R Markdown. Vyplníte základné údaje o dokumente a vyberiete si formát, v ktorom sa má dokument zobraziť (html, pdf, doc). Dokument dokáže spúšťať kód a zobraziť jeho výstupy a zvládne aj $\LaTeX$. Matematický text sa zobrazí v riadku (in-line), ak ho napíšete do dolárikov: $a^2 = b^2 + c^2 - 2bc \cos \alpha$, alebo na somastatný riadok, ak použijete dvojitý dolár: $$f'(x) \overset{def}{=} \lim_{h\to 0} \frac{f(x + h) - f(x)}{h}.$$

Viac o markdowne sa dočítate [v dokumentácii](https://www.markdownguide.org/getting-started/)


Napísaný zdrojový kód treba skompilovať (*uštrikovať*, *knit*) do zvoleného formátu. Kompiláciu začnete tlačítkom s klbkom a ihlicami
  <img src="data:image/png;base64,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" width="20" height="18"> `knit`,
alebo skratkou `Ctrl + Shift + K`. Na správne kompilovanie je potrebný balík `knitr`.

Ak sa kód má spustiť, za apostrofmi treba že kód sa spustí v jazyku R. Výstup z kódu sa zobrazí vo výslednom dokumente.
```{r}
n <- 5
rnorm(n)
```
Takýto blok kódu možno vytvoriť aj pomocou klávesovej skratky `Ctrl + Alt + I`.

Na týchto cvičeniach budú existovať bloky kódu, ktorý treba doplniť. Takéto kódy majú okrem jazyka R vyznačený parameter `eval=FALSE`, ktorý treba po doplnení kódu vymazať.
```{r eval=FALSE}
n <- 5
rnorm(n)
```




## Príručka štýlu

Pri písaní kódu si treba vybrať štýl a držať sa ho. Široko uznávanou príručkou je [tidyverse](https://style.tidyverse.org/). S miernymi modifikáciami ho používa aj [google](https://google.github.io/styleguide/Rguide.html).

Počas týchto cvičení budeme dodržiavať:

-   názvy funkcií sa píšu formou `BigCamelCase`, t.j. každé slovo (vrátane prvého) sa začína veľkým písmenom,
-   pred čiarkou sa medzera napíše nikdy, za čiarkou vždy: `x[, 1]`,
-   pred a za zátvorkami pri `for`, `if`, `while` sa píše medzera: `while (TRUE) {}`,
-   medzera sa píše aj za zátvorkami v ktorých sú argumenty funkcie: `function(x) {}`,
-   operátory `=`, `<-`, `&&`,  sa oddeľujú medzerami z oboch strán,
-   pri viacčlene sa oddeľujú medzerou znaky `+` a `-`:  `2*x^2 + y^2`,
-   vnútro cyklu alebo podmienky sa zarovnáva o dve medzery:
```
if (y < 0) {
  message("y is negative")
}
```
-   Miesto na ktoré treba dopísať kód bude označené komentárom `# TODO`. Po dokončení kódu tento komentár vymažte.
-   Miesto na ktoré treba opraviť časť kódu bude označené komentárom `# FIXME`. Po dokončení kódu tento komentár taktiež vymažte.



# Európske opcie

-   **Európska call opcia** je kontrakt v ktorom majiteľ, opcie získava právo (ale nie povinnosť) kúpiť akciu v presne určenom exspiračnom čase za vopred dohodnutú exspiračnú cenu $E$.
-   **Európska put opcia** je kontrakt, v ktorom majiteľ, opcie získava právo (ale nie povinnosť) predať akciu v presne určenom exspiračnom čase za vopred dohodnutú exspiračnú cenu $E$.
-   **Payoff** je hodnota opcie v čase exspirácie
    -   Call opcia má payoff $\max(S-E,0)$
    -   Put opcia má payoff $\max(E-S,0)$
-   Profit je zisk, t.j. payoff znížený o (odúročenú) cenu opcie


## Reálne ceny opcií

Ceny opcií sa dajú pozrieť online na [yahoo finance](https://finance.yahoo.com), alebo na [google finance](https://www.google.com/finance/). Symboly opcie majú svoj [štandardný tvar](https://help.yahoo.com/kb/SLN13884.html), v ktorom sú uvedené všetky potrebné detaily opcie. Tento tvar je možné použiť aj pri automatizovanom načítavaní dát.


## Payoff

Napíšte funkcie ktoré vrátia payoff *call* a *put* opcie, ak je exspiračná cena rovná `E` a cena podkladového aktíva v čase exspirácie `S`. Funkcia musí zbehnúť aj keď je premenná `S` alebo `E` vektor. Po dokončení tento úlohy vymažte z kódu `eval=FALSE`. Návod: nájdite funkciu pre pozložkové maximum dvoch vektorov.
```{r}
CallPayoff <- function(S, E)
{
  # TODO
}

PutPayoff <- function(S, E)
{
  # TODO
}
```

Vyskúšajte tieto funkcie pre exspiraču cenu $E = 250$ a cenu akcie $S = 200, 201, \ldots , 300$.
```{r}
S <- 200:300
E <- 250

plot(S, PutPayoff(S, E), "l") # "l" znamená čiarový graf
```



## Opčné stratégie

Často portfólio obsahuje viacero opcií. V tom prípade hovoríme o *opčných stratégiách*. Stratégiu volí investor podľa svojich očakávaní o budúcom vývine ceny podkladového aktíva.


### Typy stratégií

- Investori, ktorí očakávajú, že cena podkladového aktíva bude rásť sa v žargóne nazývajú *bulls* (býci). Stratégie, ktoré prinesú profit, ak sa tento predpoklad naplní sa nazývajú *bullish* (býčie).
- Investori, ktorí naopak očakávajú, že cena podkladového aktíva bude klesať sa nazývajú *bears* (medvede). Stratégie, ktoré prinesú profit, ak sa tento predpoklad naplní sa nazývajú *bearish* (medvedie).
- Niektoré stratégie sú postavené na tom, či cena podkladového aktíva sa zmení.
  - Stratégie, pri ktorých sa predpokladá, že sa cena aktíva výrazne zmení, sa nazývajú *short* (krátke). Tento názov je odvodený od tzv. *short pozícií*, pri ktorých má investor záporný počet nejakého cenného papiera.
  - Stratégie, ktoré predpokladajú že sa cena aktíva veľmi nezmení, sa nazývajú *long* (dlhé).
  - Existuje veľa druhov takýchto stratégií.


Viac o stratégiách sa môžete dočítať napríklad na portáli [The Options Guide](https://www.theoptionsguide.com/option-trading-strategies.aspx)

### Úloha: tri stratégie

Zoberieme opčné stratégie zo stránky <http://www.iam.fmph.uniba.sk/institute/stehlikova/fd17/kody/strategie.R>. Interpretujte tieto stratégie: Koľko akých opcií investor kúpil/predal? Koľko stáli jednotlivé opcie? Aké boli očakávania investora o budúcom pohybe ceny akcie?
```{r}
Profit1 <- function(S){
  call1 <- CallPayoff(S,510)
  call2 <- CallPayoff(S,517.5)
  14*((call1-36.4)+(-call2+29.55))
}

Profit2 <- function(S) {
  8*CallPayoff(S,530)-16*CallPayoff(S,550)+8*CallPayoff(S,570)-39.2
}

Profit3 <- function(S){
  call510<-CallPayoff(S,510)
  call550<-CallPayoff(S,550)
  call570<-CallPayoff(S,570)
  5*(call510-36.4 - 2*(call550-12) + call570-6.3)
}
```


Vykreslite profit diagramy, tak ako na obrázku.

![](http://www.iam.fmph.uniba.sk/institute/stehlikova/fd17/cv01_obr/profit_1.png)
```{r eval=FALSE}
# Po dokončení vymažte `eval=FALSE`

# S pôjde od 500 do 600
S <- 500:600

p1 <- Profit1(S)
p2 <- Profit2(S)
p3 <- Profit3(S)

# Vykreslenie profitu jednotlivých stratégií
# TODO

# vodorovná čiara
abline(0, 0)
```

Doplňte výpočet, ktorý do grafu zakreslí, ktorá stratégia prináša pri danej cene akcie najvyšší zisk. Červená farba znamená, že všetci sú v strate, inak farba zodpovedá farbe profit diagramu najziskovejšej stratégie. 

![](http://www.iam.fmph.uniba.sk/institute/stehlikova/fd17/cv01_obr/profit_2.png)
```{r}
# Najziskovejšia stratégia
# TODO

```


### Úloha: butterfly stratégia

Investor očakáva, že cena podkladového aktíva bude v čase exspirácie okolo hodnoty $S = 100$. Od svojej stratégie navyše požaduje aby mala zdola ohraničený profit. Zvolil preto stratégiu *long butterfly*, ktorej profit je znázornený na obrázku:

![](http://davinci.fmph.uniba.sk/~gasper6/FD23/butterfly.png)
- Čo vieme povedať o cenách opcií, ktoré použil?
- Vytvorte portfólio, ktoré má rovnaký profit, požijúc iba call opcie.
- Vytvorte portfólio, ktoré má rovnaký profit, požijúc iba put opcie.

### Úloha: stratégie z obrázka

Nájdite kombinácie call a put opcií, ktoré majú nasledovné payoffy: 
![](http://www.iam.fmph.uniba.sk/institute/stehlikova/fd14/cv/obr1/strategie.png)



## Ohraničenia na ceny a arbitráž

Ak má nejaké portfólio profit, ktorý nadobúda iba nezáporné hodnoty, ide o arbitráž: kúpou tohto portfólia s istotou nič nestratím a prinajlepšom niečo získam.

Podľa princípu *no arbitrage* sa dá napr. ukázať, že cena call opcie musí byť konvexnou funkciou exspiračnej ceny.



### Úloha (zo semestrálnej písomky)

Uvažujme nasledujúce ceny put opcií s rovnakým časom exspirácie a na rovnaké podkladové aktívum:

| exspiračná cena | cena put opcie |
| :-------------: | :------------: |
| 20 | 10 |
| 25 | 12 |
| 40 | 15 |

```{r}
e <- c(20, 25, 40)
price <- c(10, 12, 15)
plot(e, price, pch=19, xlab="Exspiračná cena", ylab="Cena opcie")
```

Nájdite arbitrážnu príležitosť a nakreslite je profit diagram.


# Ďalšie úlohy

Viac úloh na precvičenie môžete nájsť v [archíve cvičení](http://www.iam.fmph.uniba.sk/institute/stehlikova/fd17/cv1.html)

