---
title: "Estimation du prix d'un call Européen"
output: html_notebook
---

## Méthodologie

Je mets le texte qui va bien ici. Les formules théoriques sont faciles à coder en R. Pour preuve
```{r}
##set.seed(123)
S0 <- 100
K <- 100
sigma <- 0.15
r <- 0.05
T <- 1  

## Calcul theorique : la verite quoi!!!!
dplus <- (log(S0 / K) + (r + 0.5 * sigma^2) * T) / (sigma * sqrt(T))
dminus <- (log(S0 / K) + (r - 0.5 * sigma^2) * T) / (sigma * sqrt(T))
call.theo <- S0 * pnorm(dplus) - exp(-r * T) * K * pnorm(dminus)

print(call.theo)
```

## Estimation par Monte Carlo simple

L'estimateur classique par Monte Carlo s'écrit
$$
\hat I_n = \frac{1}{n} \sum_{i=1}^n Y_i, \qquad Y_i \stackrel{\text{iid}}{\sim} Y,
$$
avec
$$
Y = \exp(-r T) \mathbb{E} \left[\max\left\{S_T - K, 0\right\}\right].
$$
```{r}
## Calcul par Monte Carlo
n.sim <- 10^4
Z <- rnorm(n.sim)
ST <- S0 * exp((r - 0.5 * sigma^2) * T + sigma * sqrt(T) * Z)

payoff.sim <- pmax(ST - K, 0)
call.mc <- mean(payoff.sim) * exp(-r * T)
precision <- 1.96 * sqrt(var(payoff.sim) / n.sim)
print(c(theo = call.theo, MC = call.mc))

```


## Estimation par variable antithétiques

```{r}

## Version antithetique
Z2 <- Z[1:(n.sim/2)]
ST2 <- S0 * exp((r - 0.5 * sigma^2) * T + sigma * sqrt(T) * Z2)
ST2.anti <- S0 * exp((r - 0.5 * sigma^2) * T - sigma * sqrt(T) * Z2)
payoff2.sim <- pmax(ST2 - K, 0)
payoff2.sim.anti <- pmax(ST2.anti - K, 0)
call.anti <- exp(-r * T) * mean(c(payoff2.sim, payoff2.sim.anti))
precision.anti <- 1.96 * sqrt(0.5 * var(payoff2.sim) / (n.sim / 2) * 
                                (1 + cor(payoff2.sim, payoff2.sim.anti)))

print(c(theo = call.theo, MC = call.mc, anti = call.anti,
        eff = precision.anti / precision * 100))
```

## En passant

```{r}
data(iris)
head(iris)
plot(iris[,1], iris[,2], pch = 15, col = iris[,5])
```

