Should an uncertain volatility model option be priced higher or lower than a constant volatility model option?

Should an uncertain volatility model option be priced higher or lower than a constant volatility model option?

Manage alerts

Loading saved threads...

jahrongi · External communityPost link
External question — Quantitative Finance Stack Exchange Author: jahrongi Original post: https://quant.stackexchange.com/questions/85669 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. These are quite simple models, so forgive me If my question is basic. I am implementing Monte Carlo simulation for European call option pricing under two setups: Constant volatility (GBM with σ = 0.2) Uncertain volatility where σ is sampled from a lognormal distribution per path. The mean is 0.2 and standard deviation 0.05. In theory, I expected the uncertain volatility case to produce a higher option price due to increased dispersion and convexity of the payoff. However, my results show: Constant volatility price: ~10.43 Uncertain volatility price: ~10.40 A marginal difference but still prompts me to inquire. I even tried later using the Heston model and got a price of 8.89. If someone could please explain theoretically what it should be and why I am getting these numbers I would appreciate it. Here is my code: import numpy as np import matplotlib.pyplot as plt # ----------------------------- # PARAMETERS # ----------------------------- S0 = 100 K = 100 r = 0.05 T = 1.0 N = 100000 steps = 252 dt = T / steps sigma = 0.2 np.random.seed(42) # ----------------------------- # CONSTANT VOLATILITY MODEL # ----------------------------- def monte_carlo_constant_vol(): S = np.full(N, S0) for _ in range(steps): Z = np.random.normal(0, 1, N) S = S * np.exp((r - 0.5 * sigma**2) * dt + sigma * np.sqrt(dt) * Z) payoff = np.maximum(S - K, 0) price = np.exp(-r * T) * np.mean(payoff) return price, payoff # ----------------------------- # UNCERTAIN VOLATILITY MODEL # ----------------------------- def monte_carlo_uncertain_vol(): S = np.full(N, S0) sigma_mean = 0.2 sigma_std = 0.05 sigma_paths = np.random.lognormal( mean=np.log(sigma_mean**2 / np.sqrt(sigma_std**2 + sigma_mean**2)), sigma=np.sqrt(np.log(1 + (sigma_std**2 / sigma_mean**2))), size=N ) for _ in range(steps): Z = np.random.normal(0, 1, N) S = S * np.exp((r - 0.5 * sigma_paths**2) * dt + sigma_paths * np.sqrt(dt) * Z) payoff = np.maximum(S - K, 0) price = np.exp(-r * T) * np.mean(payoff) return price, payoff, sigma_paths # ----------------------------- # RUN SIMULATIONS # ----------------------------- const_price, const_payoffs = monte_carlo_constant_vol() uncertain_price, uncertain_payoffs, sigma_paths = monte_carlo_uncertain_vol() print("Constant Volatility Price:", const_price) print("Uncertain Volatility Price:", uncertain_price) # -----------------------------
Quote
Report
Rylan · External communityPost link
External answer — Quantitative Finance Stack Exchange Author: Rylan Original post: https://quant.stackexchange.com/a/85670 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. I've only skimmed this but it seems related: Option Price vs. Implied Volatility Option prices being a concave function of IV for ATM/ITM (yours is arguably ITM as the forward price is above the strike price) would imply that variance in IV decreases price (by a Jensen's inequality type argument.)
Quote
Report
Max Michlits · External communityPost link
External answer — Quantitative Finance Stack Exchange Author: Max Michlits Original post: https://quant.stackexchange.com/a/85717 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. Look at this plot. As you can see, the price function is convex. Your log odds distribution has a fat tail (which "penalized" linearly) while closer to 0 the curve flattens. While the historgram fails to show this perfectly, the smallest sigma in sigma_paths I got wass 0.677 which is already borderline in the less penalized zone. After that its all linear, so the only time where you favour one over the other is when sigma is super low which you get in the uncertain model. A Monte Carlo Simulation of a price is not a model capable of learning anything uncertainty related, its simply an average of price paths. I'm sure if you dig through the math Jensen's inequality will show up and give you the inequality.
Quote
Report

Post Reply

Quoted from Forex.com.bd-Editorial External answer — Quantitative Finance Stack Exchange Author: Max Michlits Source score (net votes, not local likes): 0 Original post: https://quant.stackexchange.com/a/85717 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. Look at this plot. As you can see, the price function is convex. Your log odds distribution has a fat tail (which "penalized" linearly) while closer to 0 the curve flattens. While the historgram fails to show this perfectly, the smallest sigma in sigma_paths I got wass 0.677 which is already borderline in the less penalized zone. After that its all linear, so the only time where you favour one over the other is when sigma is super low which you get in the uncertain model. A Monte Carlo Simulation of a price is not a model capable of learning anything uncertainty related, its simply an average of price paths. I'm sure if you dig through the math Jensen's inequality will show up and give you the inequality.

Cancel quote

Checking account access…