Why a European Put Can Trade Below Intrinsic Value
Summary
The document explains why a European put’s Black–Scholes–Merton value can fall below its immediate exercise payoff. A European option cannot be exercised before expiration, so when the underlying price is far below the strike, the eventual payoff is discounted for the time remaining and prevailing interest rates. The American put differs because early exercise is available; its value can reflect that choice.
The accompanying example uses a high positive interest rate and a half-year term, with a put payoff compared against the model price. It also identifies two coding clarity issues: the maturity was entered directly in the formula instead of referencing the maturity variable, and the input prices were described as expiration prices despite being used as current underlying prices in the model. The explanation assumes standard Black–Scholes–Merton conditions and does not discuss dividends, transaction costs, or other model limitations.
Key ideas
- A European put may be worth less than its immediate exercise payoff because exercise must wait until expiration.
- The time value of the strike is discounted at the risk-free rate in the model.
- An American put can be exercised early, unlike a European put.
- Use the current underlying price as the Black–Scholes–Merton input and reference the maturity variable consistently.
Tags
Full text
# Why is my put intrinsic value greater than my actual put value in BSM? Python code
# Why is my put intrinsic value greater than my actual put value in BSM? Python code
I have been creating a class for determining put/call values based on the Black Scholes Merton model and have run into a weird problem. For some reason my put values end up being less than the intrinsic value of the option which simply doesn't make sense to me. I've scoured my code, rewritten it, and tried using someone else's code for determining the value of a put using BSM. Is there and error in my code, or am I missing some logic in BSM?
I'm using the most up to date version of python, NumPy, and scipy for this.
```
from numpy import exp, log, sqrt
from scipy.stats import norm
```
#### basic inputs
```
K = 40
T = 0.5 # 1/2 year
r = 0.1
sigma = 0.2
o_t = 'p' # type of option
std_T = sqrt(T)
pv_factor = exp(-r * T)
start = 1
stop = 50
```
#### sample data generation
```
st = np.linspace(start, stop, stop - start).astype(int) # potential prices at maturity
intrinsic = np.maximum(K - st, 0)
d1 = (log(st / K) + (r + 0.5 * sigma ** 2) * 0.5) / (sigma * sqrt(T))
d2 = d1 - sigma * sqrt(T)
nd1 = norm.cdf(-d1, 0.0, 1.0)
nd2 = norm.cdf(-d2, 0.0, 1.0)
puts = K * exp(-r * T) * nd2 - st * nd1
```
#### simple plotting of intrinsic and extrinsic value
```
plt.figure(figsize=(10, 6))
plt.plot(st, intrinsic, 'b-.', lw=2.5, label='intrinsic value')
```
#### plot inner value at maturity
```
plt.plot(st, puts, 'r', lw=2.5, label='present value')
```
#### plot option present value
```
plt.grid(True)
plt.legend(loc=0)
plt.xlabel('index level $S_0$')
plt.ylabel('present value $C(t=0)$')
```
## Answer by nbbo2 (score 5)
https://quant.stackexchange.com/a/71676
The answer to your question: A European put option can be priced below intrinsic value in a high interest rate environment (such as r=0.1) when stock price is low enough. That is due to time value of money. The american put would be immediately exercised, but the european one cannot and you just have to wait patiently until maturity to get your payoff. Until then the market value will be approximately $e^{-r T} (K-S)$ rather than $K-S$ where $S \ll K$.
Two cosmetic comments about your code: (1) in d1 you hardwired the maturity 0.5 it would avoid later problems if you would use the variable T (2) you refer to st as the price at maturity, but the BS formula uses the current price of the stock usually written s0. No harm done, but confusing to the reader.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.