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áž.

Opakovanie

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:

Projektovaná Gauss-Seidelova metóda pre trojdigonálnu maticu

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

Úloha

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

Ocenenie americkej call opcie

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
}

Spätná transformácia

Získané riešenie transformujte naspäť do premenných \(S, t\). Vykreslite získané riešenie. Skontrolujte či cena neklesla pod payoff.

# TODO

Porovnanie s analytickým riešením

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

Domáca úloha (10b)

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:

Bonus za rýchlosť (max. 12b)

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

Bonusová domáca úloha (2b)

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

Bonusová domáca úloha (5b)

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.