Black-Scholesov model

Úloha 1: Ocenenie call opcie

Podľa Black-Scholesovho modelu môžeme oceniť call opciu pomocou vzťahu \[ S \cdot \Phi(d_1) - E e^{-r \tau}\cdot\Phi(d_2) \] kde \[ d_{1,2} = \frac{\ln\left(\frac S E\right) + \left(r \pm \frac{\sigma^2}{2}\right)\cdot\tau}{\sigma \sqrt \tau} \]

CallValue <- function(s, e, r, sigma, tau) {
  d1 <- (log(s/e) + (r + 0.5*sigma^2)*tau)/(sigma * sqrt(tau))
  d2 <- (log(s/e) + (r - 0.5*sigma^2)*tau)/(sigma * sqrt(tau))
  return(s*pnorm(d1) - e*exp(-r*tau)*pnorm(d2))
}

Vypočítajte cenu európskej call opcie s exspiráciou o rok, ak jej exspiračná cena je 50 USD, súčasná cena akcie je 41 USD a jej volatilita je 0.3. Úroková miera je 0.5 percenta.

s <- 41
e <- 50
r <- 0.005
sigma <- 0.3
tau <- 1

# TODO

Úloha 2: Rôzne časy do exspirácie

Nakreslite graf, ktorý má na zvislej osi cenu akcie a zobrazuje ceny call opcie pre niekoľko rôznych časov do exspirácie.

s <- seq(40, 160, length.out = 1001)
e <- 100
sigma <- 0.3
r <- 0.005

taus <- c(1/12, 1/4, 1/2, 1, 2, 5)

# Vykreslíme aj payoff
plot(s, pmax(s - e, 0), "l", lwd = 2,
     main = "Porovnanie ceny call opcie pre rôzne časy do exspirácie",
     xlab = "Cena podkladového aktíva",
     ylab = "Cena opcie")

# TODO

Zdôvodnite prečo by sme mali intuitívne očakávať takýto výsledok.

Úloha 3: Ocenenie put opcie

Napíšte funkciu, ktorá počíta Black-Scholesovu cenu put opcie pomocou put-call parity. \[ Call - Put = S - E e^{-r\tau}, \] teda \[ Put = Call + E e^{-r\tau} - S \]

PutValue <- function(s, e, r, sigma, tau){
  # TODO
}

Vypočítajte cenu put opcie s exspiračnou cenou 105 USD a exspiráciou o pol roka, ak je aktuálna cena opcie 100 USD a jej volatilita je 0,3. Úroková miera je znovu 0,5 percenta.

# TODO

Úloha 4: Ocenenie chooser opcie

Jednou z exotických opcií je aj chooser. Táto opcia má payoff buď ako call opcia, alebo put opcia. O tom ktorý payoff sa uplatní rozhodne držiteľ opcie v čase \(T_c\). Nájdite replikačné portfólio k tejto opcii a napíšte funkciu, ktorá nájde jej cenu.

ChooserValue <- function(s, e, r, sigma, tau, tc){
  # TODO
}
s <- seq(40, 160, length.out = 1001)
e <- 100
r <- 0.005
sigma <- 0.3
tau <- 1

Úloha 5: Implikovaná volatilita

Implementuje výpočet implikovanej volatility call opcie na akciu, ktorá nevypláca dividendy. Tento výpočet budeme potrebovať pri nelineárnom Lelandovom modeli, ktorý berie do úvahy transakčné náklady.

V R-ku využite funkciu hľadania koreňov uniroot. Jej signatúru si môžete pozrieť v nápovede.

ImpliedVolatility <- function(s, e, r, tau, real_value, ModelValue=CallValue){
  # TODO
}

Použite túto funkciu na riešenie z úlohy 1. Vyšla volatilita \(0,\!3\)?

Úloha 6: Dividendy

Predpokladajme, že akcia vypláca dividendy so spojitou dividendovou mierou \(q\). Naprogramujte funkciu, ktorá vypočíta hodnotu call opcie:

CallValue <- function(s, e, r, sigma, tau, q = 0){
  # TODO
}

Put-call parita má pri dividendách tvar: \[ Call - Put = Se^{-q \tau} - Ee^{-r\tau} \]

Naprogramujte funkciu, ktorá ocení put opciu na podkladové aktívum, ktoré vypláca dividendy:

PutValue <- function(S, E, r, sigma, tau, q = 0){
  # TODO
}

Porovnajte ceny opcie v prípade že podkladové aktívum nevypláca dividendy a v prípade že ich vypláca:

s <- seq(40, 160, length.out = 1001)
e <- 100
r <- 0.005
sigma <- 0.3
tau <- 1


# Vykreslíme payoff pre lepšiu orientáciu
plot(s, pmax(s - e, 0), "l", lwd = 2,
     main = "Porovnanie ceny call opcie s dividendami a bez nich",
     xlab = "Cena podkladového aktíva",
     ylab = "Cena opcie")

lines(s, CallValue(s, e, r, sigma, tau),
      lwd = 2, col = rgb(.7, .3, .3, .7))

lines(s, CallValue(s, e, r, sigma, tau, q = 0.1),
      lwd = 2, col = rgb(.3, .7, .3, .7))

legend("topleft", col = c(rgb(.7, .3, .3, .7), rgb(.3, .7, .3, .7)),
       lwd = 2, legend = c("Bez dividend", "S dividendami"))

Urobte podobný obrázok pre put opcie:

# TODO