24

Monte Carlo is most useful when you lack analytic tractability or when you have a highly multidimensional problem. For example, even using simple lognormal and poisson models, there exist path-dependent payoffs or multi-asset computations such that no analytic solution exists and such that any PDE finite difference solution would require 3 or more ...


17

We assume that the short interest rate $r_t$ follows the Hull-White model, that is, the short rate $r$ and the stock price $S$ satisfies a system of SDEs of the form \begin{align*} dr_t &= (\theta_t -a\, r_t)dt + \sigma_0 dW_t^1,\\ dS_t &= S_t\Big[r_t dt + \sigma \Big(\rho dW_t^1 + \sqrt{1-\rho^2} dW_t^2\Big)\Big], \end{align*} where $a$, $\sigma_0$, ...


15

You have the correct approach. (1) The simulation generates sampled portfolio values, $P_1,P_2, \dots, P_n$ at time $t=T$. VaR is specified as a left-tail percentile. Order the sample as $$P_{(1)} \leq P_{(2)} \leq \dots \leq P_{(n)}.$$ If you are considering $VaR_\alpha$ at the $100(1-\alpha) \% $ confidence level , then choose the smallest integer $k$ ...


9

First you need to correct the formula to: $$ W_t^2 = \rho W_t^1 + \sqrt{1-\rho^2} Z_t, $$ where $Z_t$ is a BM independent of $W_t^1$ If you calculate the variance and the covariance, then you see that it is true: $$ V[W_t^1] = t $$ and $$ V[W_t^2] = \rho^2 V[W_t^1] + (1-\rho^2) V[Z_t] = \rho^2 t + (1-\rho^2) t = t, $$ which is the desired variance. For the ...


9

Here is the general approach you can follow to generate two correlated random variables. Let's suppose, X and Y are two random variable, such that: $$X \sim N(\mu_1, \sigma_1^2)$$ $$Y \sim N(\mu_2, \sigma_2^2)$$ and $$cor(X,Y)=\rho$$ Now consider: $y=bx + e_i$, where $x$ $(=\frac{X-\mu_1}{\sigma_1}$) and $y$ $(=\frac{Y-\mu_2}{\sigma_2}$) both follow ...


8

Apart from numerical stability errors, Cholesky and PCA (without dim reduction) shall produce exactly the same distribution, they are two symmetric decomposition of the same covariance matrix and thus are equivalent for transforming a standard normal vector. Of course when doing different things with PCA components, such as in dim reduction or quasi Monte ...


8

LSM is very fiddly. The most important things in my view are 1) don't believe anyone who says that the choice of basis functions doesn't matter. 2) implement an upper bounder, eg Andersen--Broadie (2003) or Joshi-Tang (2014) so you can tell if your prices are good 3) do two passes, one to build the strategy, one to price, if they give very different ...


8

In general these are the two basic approaches to QuantFinance: Sell side (market maker, risk neutral): You use risk-neutral probabilities ("$\mathbb{Q}$") e.g. in option pricing (to e.g. calculate your greeks and hedge your portfolio), so that you live on the spread. Buy side (market/risk taker): You use real-world probabilites ("$\mathbb{P}$") for e.g. ...


8

By definition the fair value of an option is given by an expectation value of the payoff, $\mathbf{E}\left[\textrm{payoff}(\textit{paths})\right]$. The probability distribution of the paths is the risk neutral measure. This is just an integral expression of the form you wrote. This applies to all option prices. Many options are, of course, special in the ...


8

the problem is that the pay-off has discontinuous first derivative. Try a contract with pay-off that is twice differentiable and it will probably work. The problem is that all the value comes from the tiny number of paths within $\Delta S$ of the strike, and these paths have huge value. This is a well-known problem. As the bump size goes to zero, the ...


8

You have the right idea, but it seems you don't know $\mu$, so using it in your error check doesn't seem correct. Also, checking the result every 10,000 iterations may not be optimal for deciding when to stop. To be clear, let $E(X) = \mu$ and $Var(X) = \sigma$. We're invoking the CLT when we write $$ P\left( \left|\frac{\bar{X}_n - \mu}{\sigma/\sqrt{n}}\...


8

The estimation error is a random variable and not a simple scalar. As such, when performing one-shot assessments, you could always end up observing that using $6400$ paths provides a "better" price estimate than using $100$ of them. What matters is to investigate the variance of the estimator rather than looking at pointwise values it can take (*) To get a ...


8

If implemented properly, least-squares Monte Carlo as originally suggested by Longstaff-Schwartz should allow you to identify sub-optimal exercise dates and a lower bound of the true option price. There are many articles out there discussing this non trivial topic. @MarkJoshi can probably shed some more light, see this nice paper. You claim that your LSM ...


8

Yes, the term Brownian Bridge seems to be used loosely. I assume you are talking about continuously monitored barriers by the way, since you mention the probability of the barrier being crossed in between the path time points. If that's the case then "naive" Monte Carlo simulation will have what is called "simulation bias". That's exactly because the ...


8

Yes, it can work. However, keep in mind that: you'll be safer if you don't share any objects between threads; see my answer here, in particular the last point; even if you use different seeds, there's no guarantee that the generated sequences won't overlap. If you're willing to change the engine code so that you can pass the relevant parameters, a safer ...


7

You have the right intuition but the approach is not quite right. The issuer has the right to call back the bond at a pre-defined call price. So your decision criterion is "call when the value of the bond >= contractual call price". We are comparing prices in the decision rule, not the YTM of the callable bond with the coupon of the bond. Note that ...


7

Quasi Random Numbers are more tricky than it might seem, using them as a black box like with PRNGs is risky. E.g. an unscrambled Sobol' sequence is uniform only asymptotically, while for realistic sample sizes there are subvolumes with significantly different densities. You often do not realize that because the convergence graph looks good anyway, it gives ...


7

the LIBOR market model the Heston model -- Euler and Milstein are actually bad for this and much more sophisticated methods are necessary local volatility models


6

I am going to supply an answer that is quite similar to SRKX's (which is very very good) because I want to discuss in more detail a few important things. First, you cannot use a stochastic volatility model for the SDE that you've provided as that's GBM with constant diffusion. However, based on what you've said it's obvious you wish to model a discretized ...


6

You can use empirical distribution and use Mean-CVaR as a target function. CVar ("Expected shortfall") is considered a better risk metrics than VaR if we depart from the light-tailed normal distribution. The code below is in R and is taken from the book "Portfolio Optimization with R/Rmetrics" By Diethelm Wuertz, Yohan Chalabi, William Chen, Andrew Ellis. ...


6

For completeness, let's restate that the discrete case goes like this: $$\Delta S_t = S_{t+\Delta t}- S_t = \mu S_t \Delta t + \sigma S_t \sqrt{\Delta t} Z_t $$ with $Z_t \sim \mathcal{N}(0,1)$ What you are doing in your case is to use the exact solution of the SDE to model the movement between two points of $S$. Essentially, you are doing the same thing ...


6

To keep things simple let's assume you have a perfect random number generator (i.e. I will discuss only the statistics not the numerics of the problem). I will also focus on the practical matter and gloss over some mathematical details. From a practical perspective "convergence" means that you will never get an exact answer from Monte-Carlo but ...


6

importance sampling is well known to be tricky. See the extensive discussion in Glasserman's book. I presume that you are simply meanshifting and multiply by the ratio of normal densities. For this sort of problem, I'd use a more stratified algorithm instead and force every path to end in the money. To do this I'd compute the uniform that goes to the ...


6

It really, really, really depends on your parameters, i.e. $r$, $\sigma$, $K$, $T$, $S_0$. For example, here are some results from implementing the stopping criteria I explain in my answer here. These are the number of iterations requires in order for there to be an approximate 0.95 probability that the MC call price differs from the exact call price by ...


6

By definition, the payoff of a log-contract of maturity $T$ writes $$ \phi(S_T) = \ln\left(\frac{S_T}{S_0}\right) $$ Let $\Pi_t$ denote the $t$-value of such a contingent claim. We are interested in the price at $t=0$, best known as the option premium. Theory tells us that the latter premium can be computed as $$ \Pi_0 = e^{-rT} E^{\mathbb{Q}} \left[ \phi(...


6

I believe that the confusion arises because of the wrong treatment of NIG. The answer to the question you link is misleading, as it simulates under P which is not appropriate for option pricing. None of the NIG parameters under P carries over to Q in general, but especially the drift is the problem here. First use the mom gen function of NIG to find the ...


6

[Short answer] IMHO there is a fundamental problem with wanting to extract a sound implied volatility figure out of a deep ITM option's price. You should use out-of-the-money forward options (OTMF) instead: put options for strikes smaller than the forward price (left wing of the volatility surface) and call options otherwise (right wing of the volatility ...


6

Instead of simulating the spot price, simulate its logarithm since the latter can be simulated exactly for any time step. \begin{equation} \ln S_{t + \Delta t} = \ln S_t + \left( r - \frac{1}{2} \sigma^2 \right) \Delta t + \sigma Z, \end{equation} where $Z \sim \mathcal{N}(0, \Delta t)$. You then just simply take the exponential of the simulated logarithmic ...


6

It is not cheating. It allows you to make your results (e.g. prices, calibrated parameters) 'reproducible' which is good. However, fixing the seed can hide convergence issues. When the variance of your Monte Carlo estimator is large, picking different seeds could yield drastically different results. So be careful. In practice you can obviously solve this by ...


6

Here are at least three mistakes in your code: p += s0 * exp(...) should be p *= exp(...). Your volatility and rates are per annum, so divide the days by 365 (or 255) in your function asset_price. In asset_price you multiply by days inside the loop. However, the loop is already iterating over the days - so you don't take two steps of one day but two steps ...


Only top voted, non community-wiki answers of a minimum length are eligible