Use the same forward and payoff in both models
This comparison prices a European call paying max(FT - K, 0) at expiry. F is today's forward for that expiry, K is strike, T is remaining time in years, and D is the discount factor to the payment date. Assume constant volatility and deterministic discounting. The lognormal formula below is Black's forward-price form; with F = S × exp((r - q)T) and D = exp(-rT), it gives the usual Black-Scholes stock formula under a constant continuous dividend yield q.
- A normal rate quote of 50 basis points per √year is 0.005 per √year when rates are decimals. At T = 0.25 year, its terminal standard deviation is 25 basis points. Entering 50 or 50% would use a different scale.
- For a price quoted in dollars per barrel, σN = 10 means $10 per barrel per √year. It is independent of whether F is $100, $5 or -$5. Position dollars require the verified contract multiplier afterward.
- Forward ATM means K = F, which need not equal spot. A chart showing spot at the strike does not establish the ATM condition used in the conversion below.
| Assumption | Bachelier / normal | Black / lognormal |
|---|
| Forward dynamics under the pricing measure | dF = σN dW | dF = σL F dW |
| Terminal forward | F + σN√T Z, with Z standard normal | F × exp(-σL²T/2 + σL√T Z) |
| Price support | Any real value, including zero and negative values | Positive when the initial F is positive |
| Volatility units | Underlying price units / √year | Relative units / √year, commonly quoted as annualized % |
| Change scale | Fixed absolute standard deviation σN√T | Proportional instantaneous scale σL F |
| Vanilla formula here | European exercise, single terminal payoff | European exercise, single terminal payoff |
Calculate a normal call and put from explicit inputs
Let a = σN√T and d = (F - K)/a. Write Φ for the standard normal cumulative distribution and φ(d) = exp(-d²/2)/√(2π) for its density. Then C = D[(F - K)Φ(d) + aφ(d)] and P = D[(K - F)Φ(-d) + aφ(d)]. The premium is per underlying price unit. These formulas do not include early exercise or trading costs.
- At σN = 0, bypass d and return D × max(F - K, 0) for a call or D × max(K - F, 0) for a put. At expiry, use the actual settlement reference and intrinsic payoff. Negative time or volatility and nonfinite inputs are invalid; a negative F or K is permitted by the normal model.
- If payment occurs at expiry, D = exp(-rT) under the assumed constant rate. Other payment dates need the corresponding discount factor. For a swaption, the rate-option formula also needs the applicable annuity and notional; a rate premium alone is not a cash price.
| Hypothetical input or calculation | Value |
|---|
| F; K; T; σN | 100; 105; 0.25 year; 20 price units / √year |
| Continuously compounded r; D | 4%; exp(-0.04 × 0.25) = 0.990049834 |
| a; d | 20 × √0.25 = 10; (100 - 105)/10 = -0.5 |
| Φ(-0.5); φ(-0.5) | 0.308537539; 0.352065327 |
| Call | D × [-5 × 0.308537539 + 10 × 0.352065327] = 1.958284488 |
| Put | D × [5 × 0.691462461 + 10 × 0.352065327] = 6.908533656 |
| Parity check C - P | -4.950249169 = D × (100 - 105) |
Match the ATM premium to convert a lognormal quote
For positive F = K, Black's ATM call is C = D × F × [2Φ(σL√T/2) - 1]. Equating it to the normal ATM formula gives the exact price-matching conversion σN = F√(2π/T) × [2Φ(σL√T/2) - 1]. D cancels only because both premiums use the same discount convention. The familiar σN ≈ FσL is a small-σL√T approximation.
- For a supplied ATM premium C, recover σN = C√(2π)/(D√T). To recover a finite lognormal volatility, use σL = 2Φ⁻¹((1 + C/(DF))/2)/√T with F > 0 and 0 ≤ C < DF. A positive normal premium can exceed DF, in which case no finite unshifted Black volatility matches it.
- At F = 0 or a negative F, multiplying a percentage by F is not a valid conversion to a nonnegative normal volatility. Unshifted Black is outside its positive-price domain. A shifted-lognormal quote requires an explicit shift; its volatility is a separate convention.
| Hypothetical ATM comparison | Value |
|---|
| Inputs | F = K = 100; T = 1 year; D = 1; σL = 0.20 (20%) |
| Black call and put | 100 × [2Φ(0.1) - 1] = 7.965567455 |
| Exact matching normal volatility | 7.965567455 × √(2π) = 19.966716607 price units / √year |
| Normal premium with that volatility | 19.966716607 / √(2π) = 7.965567455 |
| Approximate normal volatility FσL | 20 price units / √year |
| Premium using the approximation | 20 / √(2π) = 7.978845608, about 0.013278153 higher |
Convert off-ATM quotes by solving for the same price
For F > 0 and K > 0, compute d1 = [ln(F/K) + σL²T/2]/(σL√T), d2 = d1 - σL√T, and CBlack = D[FΦ(d1) - KΦ(d2)]. Solve CNormal(σN) = CBlack separately for each strike. A bracketed root search can start at zero normal volatility and expand its upper bound until the target premium is enclosed, then bisect to a chosen price tolerance.
- Every row uses T = 1 year and D = 1. Normal volatilities are price units / √year. Reusing the ATM conversion at K = 110 understates the matched call by about 0.347795281. Matching one option does not match the whole volatility surface.
- For an observed European premium, first require C ≥ D × max(F - K, 0). A lower price has no nonnegative normal implied volatility under these inputs. At the bound, σN = 0; near it, tiny quote changes can make inversion poorly conditioned. Black also has an upper bound C < DF for a finite positive implied volatility.
- Convert bid and ask separately if you need a volatility interval. Use the same forward, timestamp, expiry and payment basis, and reprice the returned volatility. Converting a stale midpoint does not resolve its market-data error.
| Strike, F = 100 | Black call at 20% | Matching normal volatility | Normal call using ATM σN for every strike |
|---|
| 90 | 13.589108116 | 18.950856074 | 13.944215661 |
| 100 | 7.965567455 | 19.966716607 | 7.965567455 |
| 110 | 4.292010941 | 20.949198882 | 3.944215661 |
A negative forward can still have a positive option premium
Consider an invented European option on a forward that is permitted to be negative: F = -5, K = 0, T = 0.25 year, σN = 10 price units / √year, and r = 0 so D = 1. Here a = 5 and d = -1. The example is a model scenario, not a current commodity quote or an ordinary stock-option example.
- The call premium remains positive because some terminal outcomes exceed zero. Its payoff max(FT, 0) is nonnegative even when the current forward is negative. The normal model assigns probability Φ(1), about 84.13%, to FT < 0 in this scenario; that is a pricing-measure probability, not a real-world forecast.
- CME Clearing announced a Bachelier switch effective April 22, 2020 for specified products to accommodate negative underlying futures and negative strikes. That dated notice demonstrates a use case; it does not establish the current model for every CME contract. Check the current specification of the actual contract.
| Calculation | Result in price units |
|---|
| Φ(-1); φ(-1) | 0.158655254; 0.241970725 |
| Call: -5Φ(-1) + 5φ(-1) | 0.416577353 |
| Put: 5Φ(1) + 5φ(-1) | 5.416577353 |
| C - P = F - K | -5.000000000 |
Where the comparison stops being a usable valuation
A model choice must fit the underlying and the contract. Normal dynamics allow prices to move below zero without a floor, bankruptcy event or recovery rule. Ordinary equity has limited liability, so an unrestricted normal price process is not a general economic model for all stock options. Positive prices alone also do not prove that constant lognormal volatility fits observed quotes.
- American exercise, discrete cash dividends, barriers, averaging and path-dependent settlement need treatment beyond the terminal European formulas here. Do not label their difference from a market premium as mispricing without matching the contract.
- One constant volatility does not capture an arbitrary strike smile or term structure. Calibrating separate implied volatilities is a quote representation; it does not by itself define a consistent dynamic model for hedging or exotic payoffs.
- Normal and lognormal models can match one premium yet respond differently when the forward moves. Specify which volatility is held fixed when comparing deltas or scenario charts. Matching price alone does not make the hedge exposures interchangeable.
- The forward must correspond to the option expiry and underlying contract. A continuous futures chart may roll to a different delivery month; a stock spot quote needs a justified carry and dividend treatment before it becomes F.
Check the contract data before using a Pineify calculator
Use the TradingView options chain to identify the underlying, strike, expiration and call or put, then record available bid, ask and IV with their timestamps. If using a scenario chart, record its changed valuation date and underlying input too. Confirm the volatility convention with the data provider or contract documentation; an IV column alone does not establish a normal quote.
- For a supported stock ticker, Pineify AI Stocks & Options Picker has an Options Chain tab with expiration selection and available bid, ask and IV fields. It can help cross-check contract inputs. It does not establish normal volatility, a Bachelier price, or coverage of the negative-forward contract in this example. Leave missing fields unknown.
- The Black-Scholes Option Calculator uses explicit spot, strike, time, percentage volatility, rate and dividend-yield inputs. To reproduce the ATM lognormal benchmark, enter stock 100, strike 100, time 1 Year, volatility 20%, rate 0% and dividend yield 0%. The theoretical call and put are about 7.9656 each.
- That calculator is the lognormal comparison only. It does not calculate the normal examples or accept σN = 19.9667 as a normal-volatility input. Use the formulas above or a separately verified normal-model implementation for those values.