Teraz sme pripravení na numerické oceňovanie amerických opcií. Postup bude rovnaký ako pri oceňovaní európskych opcií, ale musíme garantovať, že cena neklesne pod payoff – ináč by nastala arbitráž.
Predpokladajme, že úroková miera je kladná. Potom:
(Vedeli by ste tieto tvrdenia dokázať?)
Preto vieme, že cena americkej call opcie bez dividend je rovnaká ako cena príslušnej európskej opcie. V ostatných prípadoch je cena americkej opcie iná ako cena príslušnej európskej opcie. a americkú opciu cenu musíme oceniť numericky.
Postup oceňovania bude podobný ako pri európskej opcii:
Riešme sústavu komplementárnych lineárnych nerovníc: \[ \begin{align*} (Ax - rhs) \odot (x-g) &= 0\\ Ax &\geq rhs\\ x &\geq g\\ \end{align*} \] kde \(A\) je symetrická trojdiagonálna matica: \[ A = \left[\begin{matrix} a & b \\ b & a & b\\ & b & a & b\\ && \ddots & \ddots & \ddots\\ &&& b & a & b\\ &&& & b & a\\ \end{matrix}\right ] \]
Odvoďte predpis jednej iterácie projektovanej Gauss-Seidelovej metódy.
Opravte nasledujúcu funkciu tak, aby riešila sústavu komplementárnych lineárnych nerovníc.
ProjectedGaussSeidelTridiagonal <- function(a, b, rhs, g, x0 = NA, maxiter = 100) {
# Solve:
# A %*% x >= rhs
# x >= g
# (A %*% x - rhs) * (x -g) = 0
# where A is symmetric tridiagonal matrix with
# a's on diagonal and b's on sub- and superdiagonals.
n <- length(rhs)
a_ = 1/a
if(any(is.na(x0))) {
x0 <- rep(0, n)
}
x_k <- x0
for (k in 1:maxiter) {
x_k[1] <- 0 # FIXME
for (j in 2:(n-1)) {
x_k[j] <- 0 #FIXME
}
x_k[n] <- 0 # FIXME
}
return(xk)
}
Oceňte americkú call opciu s exspiračnou cenou \(S=50\), ak má podkladové aktívum volatilitu \(\sigma = 40\%\). Bezriziková úroková miera je \(r = 4\%\).
Ak akcia nevypláca dividendy, cena by mala vyjsť rovnaká ako cena európskej opcie.
E <- 50
r <- 0.04
sigma <- 0.4
q <- 0
# Priestorové delenie
L <- 2
n <- 20 # jemnosť delenia
h <- L/n # veľkosť kroku
# Časové delenie
tau_max <- 1
m <- 12 # jemnosť delenia
k <- tau_max / m # veľkosť kroku
# Počet iterácii G-S metódy
N <- 100
# Pomocné konštanty
alpha <- (r-q)/(sigma^2) - 0.5
beta <- (r+q)/2 + sigma^2 / 8 + (r-q)^2/(2*sigma^2)
a <- -0.5*(sigma^2)*k/(h^2) # na prednáške -gamma, t.j. člen na vedľajších diagonálach
b <- 1 - 2*a # na prednáške 1 + 2*gamma, t.j. člen na diagonále
# Diskretizácia času a priestoru
xx <- seq(-L, L, by=h)
tt <- seq(0, tau_max, k)
# Transformovaný payoff
g <- function(x, tau) E*exp(alpha*x + beta*tau) * pmax(0, exp(x)-1)
# Okrajové podmienky
phi <- function(tau) 0
psi <- function(tau) E*exp(alpha*L + beta*tau)*(exp(L - q*tau) - exp(-r*tau)) # FIXME
# Počiatočná podmienka
u0 <- function(x) E*exp(alpha*x)*pmax(0, exp(x)-1)
# Matica riešení
sol <- matrix(0, nrow=2*n + 1, ncol=m+1)
# Okrajové a počiatočné podmienky
sol[1, ] <- phi(tt)
sol[2*n +1, ] <- psi(tt)
sol[, 1] <- u0(xx)
for (i in 2:(m+1)) { # Ideme naplniť i-ty stĺpec
# TODO
}
Získané riešenie transformujte naspäť do premenných \(S, t\). Vykreslite získané riešenie. Skontrolujte či cena neklesla pod payoff.
# TODO
Ak \(q=0\), môžeme porovnať výsledok s cenou zistenou analyticky.
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))
}
# TODO
Vypracovanú úlohu odovzdajte do stredy 05. 04. 2023
Naprogramujte funkciu, ktorá numericky ocení americkú put
opciu, ak akcia vypláca dividendy. Signatúra funkcie nech má tvar:
PutValueNumeric <- function(s, e, r, sigma, tau, q=0)
Funkcia musí zbehnúť aj ak je argument s
vektor. Pre
nájdenie ceny podľa vstupu bude nutné použiť interpoláciu.
Vyskúšajte vašu funkciu na vstupoch:
s <- (10:20) * 5
e <- 70
q <- 0.01
r <- 0.05
sigma <- 0.2
tau <- 0.5
Ceny by mali vyjsť:
S | V |
---|---|
50 | 20,00 |
55 | 15,00 |
60 | 10,09 |
65 | 6,13 |
70 | 3,37 |
75 | 1,67 |
80 | 0,75 |
85 | 0,31 |
90 | 0,12 |
95 | 0,04 |
100 | 0,01 |
Podrobnosti:
12 bonusových bodov sa rozdelí medzi všetky skupinky ktoré splnili
zadanie domácej úlohy v pomere, v akom sú časy potrebné na zbehnutie
odovzdanej funkcie pre parametre
s <- 10:100; e <- 70; q <- 0.01; r <- 0.05; sigma <- 0.4; tau <- 1
.
Uznané budú iba riešenia s ktoré sa od správnej ceny nelíšia o viac ako
5 centov. Môžete použiť rozličné metódy urýchlenia vašej funkcie,
napríklad PSOR metódu, podmienku na predčasné zastavenie pri riešení
lineárnej sústavy, Crank-Nicolsonovu schému alebo iné.
Dokážte, že cena americkej put opcie v Black-Scholesovom modeli je ostro väčšia ako cena opcie európskeho typu. Predpokladajme že akcia nevypláca dividendy a úroková miera je kladná.
Naprogramujte funkciu, ktorá ocení opciu ktorá:
Transformujte úlohu o ocenení tejto opcie na komplementárnu sústavu lineárnych nerovníc a vyriešte ju.