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