Skip to content
← Investigations

Derivatives · Stochastic assumptionsEmpirical finding

Constant-volatility pricing under empirical market behavior

Observed volatility and option prices contradicted the tested constant-volatility dynamics.

The tested constant-volatility model did not match the observed sample. Volatility moved, tails ran fat, and return magnitudes persisted.

Research by Quantitative Markets & Institutions LabRevised 3 sources5 figuresLedger entry

Commit 4806df9Evidence ad24c49Data · 2,892 rowsUniverse 15 instrumentsTests 239 / 239 passed

  • 3.4%Minimum 21-day realised vol of SPY
  • 93%Maximum 21-day realised vol of SPY
  • 27×Max / min realised vol
  • 17.6%Full-sample annualised vol (the 'constant' σ)
  • ≈14Excess kurtosis of SPY daily returns
  • −0.31Skewness of SPY daily returns

The tested Black–Scholes dynamics were inconsistent with the observed sample.

SPY 21-day realized volatility ranged from roughly 3% to 93%. Daily excess kurtosis was about 14. Under a Gaussian yardstick, the worst day sat near a 10σ event. Lag-1 absolute-return autocorrelation was about 0.35. An equity-like, Feller-satisfying Heston specification generated a short-dated implied-volatility skew from roughly 25% to 16% across strikes.

SPY realised volatility: the constant that isn't

% annualised · rolling 21-day · 2015-02 to 2026-07 · notebook 03

Fat tails: SPY daily returns against a matched Gaussian

count · daily return (%) · 120 bins · notebook 03

Histogram of SPY daily returns with the expected counts of a Gaussian of the same mean and volatility; the empirical tails sit far above the Gaussian.
daily return (%)observedGaussian, same mean and vol
-10.85312.22305e-19
-10.674301.06331e-18
-10.495604.95619e-18
-10.316902.25118e-17
-10.138209.9643e-17
-9.9594904.29793e-16
-9.7807901.80654e-15
-9.6020917.39963e-15
-9.4233802.95358e-14
-9.2446801.14885e-13
-9.0659804.35462e-13
-8.8872801.60848e-12
-8.7085705.78968e-12
-8.5298702.03081e-11
-8.3511706.9416e-11
-8.1724702.3122e-10
-7.9937607.50526e-10
-7.8150612.374e-9
-7.6363607.31767e-9
-7.4576602.19806e-8
-7.2789506.43401e-8
-7.1002501.83526e-7
-6.9215505.10142e-7
-6.7428500.00000138184
-6.5641400.00000364756
-6.3854400.00000938255
-6.2067400.0000235188
-6.0280400.0000574491
-5.8493320.00013675
-5.6706300.000317211
-5.4919300.000717039
-5.3132300.00157948
-5.1345210.00339046
-4.9558220.00709217
-4.7771200.0144569
-4.5984200.0287175
-4.4197140.0555896
-4.2410130.104861
-4.0623110.192758
-3.8836110.345291
-3.704920.602745
-3.526231.02531
-3.347551.69964
-3.168832.74555
-2.99009114.32194
-2.8113966.62984
-2.6326989.91067
-2.453991414.437
-2.27528920.4941
-2.096581828.3501
-1.917881838.2169
-1.739183450.2032
-1.560473364.2663
-1.381774880.1697
-1.203075597.4569
-1.0243753115.449
-0.84566497133.273
-0.666961116149.924
-0.488259139164.352
-0.309556230175.571
-0.130854300182.771
0.0478488344185.411
0.226551282183.291
0.405254221176.572
0.583956191165.759
0.762659140151.638
0.941361128135.18
1.1200696117.434
1.298776399.4146
1.477476782.0129
1.656173465.9309
1.834872651.6501
2.013581839.4302
2.192281029.3334
2.370981121.2652
2.549681215.0229
2.72839610.3422
2.9070926.9382
3.0857944.53582
3.2644942.88962
3.443211.79391
3.621901.08527
3.800610.639804
3.979300.367564
4.1580110.205776
4.3367110.112262
4.5154100.0596819
4.6941100.0309193
4.8728200.0156096
5.0515210.00767945
5.2302210.00368166
5.4089220.00172001
5.5876300.000783061
5.7663310.000347404
5.9450300.000150193
6.1237300.0000632759
6.3024400.0000259779
6.4811400.0000103931
6.6598410.0000040519
6.8385400.00000153939
7.0172505.69923e-7
7.1959502.05616e-7
7.3746507.22893e-8
7.5533502.47666e-8
7.7320608.26863e-9
7.9107602.69015e-9
8.0894608.52892e-10
8.2681602.63504e-10
8.4468707.93334e-11
8.6255712.32755e-11
8.8042706.65455e-12
8.9829711.85402e-12
9.1616805.03365e-13
9.3403801.33177e-13
9.5190803.43359e-14
9.6977808.62669e-15
9.8764902.1121e-15
10.055205.0392e-16
10.233901.17161e-16
10.412612.65448e-17

Volatility clustering: |r| remembers, r forgets

autocorrelation · lags 1–60 days · notebook 03

Columns of the autocorrelation of absolute returns and of raw returns by lag, with the 95% confidence band; absolute returns stay significantly autocorrelated past lag fifty.
lag (days)ACF of |returns|ACF of returns
10.350793-0.119417
20.3795370.0636647
30.358562-0.0300619
40.353715-0.0660177
50.3092590.0392595
60.315404-0.0874767
70.2824620.114321
80.298903-0.1
90.2809990.109734
100.264752-0.0361763
110.2468250.0117271
120.2101180.0143202
130.222704-0.0608464
140.19550.0337063
150.192422-0.0760701
160.195550.047978
170.180726-0.0218923
180.1670620.0341693
190.154539-0.0144604
200.181578-0.00224846
210.1301450.0424812
220.150708-0.0774117
230.1421390.0074625
240.137078-0.0134413
250.148417-0.0170784
260.122249-0.0365345
270.1206740.0294181
280.099060.00720756
290.145134-0.0168458
300.124568-0.00260317
310.0744641-0.0370789
320.105607-0.00393642
330.116303-0.0163825
340.0780150.00651955
350.09781770.0026188
360.08236330.0326842
370.0542797-0.0194793
380.08839040.00100462
390.06475430.00360456
400.08494190.000362844
410.0699311-0.0328373
420.07871180.0118665
430.057799-0.0149564
440.065188-0.0227818
450.04620630.0197909
460.0831233-0.0412068
470.05092270.0361634
480.0662325-0.0126705
490.0715224-0.0173184
500.05646240.00416833
510.06389680.00734095
520.0454976-0.0033769
530.0496798-0.00534742
540.03046560.00923129
550.0694845-0.0325855
560.02203270.0122981
570.0543363-0.0206366
580.05162370.00567233
590.05988120.000563717
600.012926-0.0156577

The smile Black–Scholes cannot draw: Heston-implied vols by strike

implied vol (%) · S₀ = 100, r = 3% · Feller-satisfying parameters · notebook 03

Lines of Black–Scholes implied volatility by strike for five maturities generated by a single Heston specification, against the flat twenty percent line a constant-volatility model implies.
strike KT = 0.083yT = 0.25yT = 0.5yT = 1yT = 2y
7028.298227.63626.759625.457124.0149
72.527.639526.996226.175324.972123.6735
7526.962826.358525.595224.494523.3407
77.526.283825.72225.018624.023923.016
8025.602825.085524.444723.559922.699
82.524.918424.44823.87323.102422.3896
8524.229623.808623.303122.651322.0875
87.523.534923.166522.734622.206521.7923
9022.833322.52122.167621.768221.5041
92.522.12421.871921.602221.336621.2225
9521.406721.219221.039220.912120.9474
97.520.682320.56420.479820.495120.6789
10019.953419.908719.925820.086220.4167
102.519.22619.257719.3819.686320.1608
10518.511718.618718.846219.296119.9111
107.517.829818.003118.329418.916719.6677
11017.207917.426417.835518.549319.4306
112.516.674616.905917.371318.195219.1997
11516.248616.456916.943817.855618.975
117.515.931816.088416.55917.53218.7566
12015.712415.800716.221617.225718.5445
122.515.573215.587315.93416.937918.3388
12515.496815.437915.695816.669818.1395
127.515.468315.341215.504516.422117.9466
13015.476115.286815.355816.195517.7602

Six-month call prices across strikes: flat Black–Scholes against Heston

call price · S₀ = 100, r = 2%, T = 0.5y · BS σ = 19.2% · case study

Two lines of six-month European call prices by strike: Heston with the case-study parameters and Black–Scholes at the flat at-the-money volatility; the wings disagree.
StrikeHeston callHeston implied volBS call (flat σ)IV residualBS − Heston
7030.9860.29799430.7084-0.105994-0.277559
7526.24670.28079525.8045-0.0887952-0.442204
8021.62990.26348421.0075-0.0714839-0.622452
8517.19190.24593616.4481-0.0539357-0.743881
9013.01080.2280712.3036-0.0360702-0.707134
959.194610.2099228.74905-0.0179224-0.445562
1005.891970.1918125.897230.0001881550.00525485
1053.289710.1746863.764850.0173140.475138
1101.547240.1604882.278560.03151220.731317
1150.6244450.1513941.310160.04060580.685711
1200.2338360.1475890.7178270.0444110.483991
1250.08691320.1473510.3760320.04464930.289119
1300.03297630.1490170.1890120.04298260.156035

Validation

Asset pricing · Numerical verification · Numerical validation

Black–Scholes, CRR, PDE, and Monte Carlo prices agreed within declared numerical tolerances.

Cross-method option-pricing validation

The tree and PDE land within roughly 10⁻³ of closed form; Monte Carlo prices are statistically consistent with it; implied volatility returns to about 10⁻⁸. Monte Carlo uncertainty is reported as estimator standard error. Tree and PDE errors remain discretization-dependent.

Absolute pricing error against the closed form · six benchmark contracts

|price − Black–Scholes| · log scale · notebook 01

Dots of the absolute pricing error of the CRR tree, the Crank–Nicolson solver and Monte Carlo for calls and puts at three strikes; tree and PDE errors sit near one thousandth, Monte Carlo errors inside their standard errors.
contract|CRR(1000) − BS||Crank–Nicolson − BS||Monte Carlo − BS|Monte Carlo std err
K = 90 call0.0009331070.00009844140.03140670.0390336
K = 90 put0.0009331070.00009977340.01637540.012038
K = 100 call0.001999470.0001366850.02570090.0330895
K = 100 put0.001999470.0001352050.01066970.0194382
K = 110 call0.00152390.00001063220.0282680.0262107
K = 110 put0.00152390.00001226030.01323670.0268729

CRR binomial convergence to Black–Scholes (ATM call)

|CRR(n) − BS| · n from 10 to 2000 · notebook 01

Line of the absolute CRR pricing error against the number of tree steps on logarithmic axes, oscillating inside a one-over-n envelope.
tree steps n (log scale)|CRR(n) − BS|O(1/n) reference
100.1971750.197175
110.1606170.17925
130.1357660.151673
150.117570.13145
170.1036720.115985
190.09271070.103776
220.09035160.0896248
250.07038210.0788698
290.06064370.0679912
330.05327220.0597499
380.05244560.051888
440.04531560.0448124
510.03443490.0386617
580.03440210.0339956
660.03024040.0298749
760.02626820.025944
870.02016970.0226637
1000.01997190.0197175
1150.01525450.0171456
1320.01513490.0149375
1510.01161520.0130579
1730.01013720.0113974
1980.01009320.00995831
2270.007724630.0086861
2600.007687510.00758364
2980.006707640.00661659
3410.005141420.00578224
3910.004483770.00504283
4480.004462410.00440122
5140.003889560.00383608
5880.003400160.00335331
6740.002966390.00292544
7720.002589890.00255407
8850.001980670.00222796
1,0130.001730370.00194644
1,1610.001509770.00169832
1,3300.001503410.00148252
1,5240.001312040.0012938
1,7450.001004460.00112994
2,0000.0009997970.000985873

Four roads to one price · S₀ = 100, r = 5%, σ = 20%, T = 1

ContractMethodPrice|error| vs closed formMC std err|error| / SEToleranceVerdict
K = 90 callBlack-Scholes16.69940referencepass
K = 90 callBinomial(1000)16.70040.0009331070.01 abspass
K = 90 callCrank-Nicolson16.69950.00009844140.01 abspass
K = 90 callMonte Carlo16.73090.03140670.03903360.8046053.0 × SEpass
K = 90 putBlack-Scholes2.31010referencepass
K = 90 putBinomial(1000)2.311030.0009331070.01 abspass
K = 90 putCrank-Nicolson2.31020.00009977340.01 abspass
K = 90 putMonte Carlo2.326470.01637540.0120381.360313.0 × SEpass
K = 100 callBlack-Scholes10.45060referencepass
K = 100 callBinomial(1000)10.44860.001999470.01 abspass
K = 100 callCrank-Nicolson10.45040.0001366850.01 abspass
K = 100 callMonte Carlo10.47630.02570090.03308950.776713.0 × SEpass
K = 100 putBlack-Scholes5.573530referencepass
K = 100 putBinomial(1000)5.571530.001999470.01 abspass
K = 100 putCrank-Nicolson5.573390.0001352050.01 abspass
K = 100 putMonte Carlo5.58420.01066970.01943820.5489033.0 × SEpass
K = 110 callBlack-Scholes6.040090referencepass
K = 110 callBinomial(1000)6.041610.00152390.01 abspass
K = 110 callCrank-Nicolson6.04010.00001063220.01 abspass
K = 110 callMonte Carlo6.068360.0282680.02621071.078493.0 × SEpass
K = 110 putBlack-Scholes10.67530referencepass
K = 110 putBinomial(1000)10.67680.00152390.01 abspass
K = 110 putCrank-Nicolson10.67530.00001226030.01 abspass
K = 110 putMonte Carlo10.68860.01323670.02687290.4925693.0 × SEpass

Cross-method option-pricing validation in the ledger →

Return moments of SPY daily returns

StatisticValue
Observations2,891
Mean (daily)0.000576715
Std (daily)0.0111157
Annualised vol0.176456
Skewness-0.308628
Excess kurtosis14.0107
Worst day-0.109424
Worst day date2020-03-16
Worst day in σ-9.84408
Gaussian probability of worst day3.6349e-23
Lag-1 ACF of |r|0.350793
Lag-1 ACF of r-0.119417
Min 21-day realised vol0.0342058
Max 21-day realised vol0.929687

Heston parameters used

SpecificationS₀rv₀κθξρ2κθξ²Feller satisfied
Smile by maturity (notebook 03)1000.030.0420.0450.35-0.70.180.1225yes
Six-month price comparison (case study)1000.020.0420.050.6-0.70.20.36no

The case-study specification violates Feller by design; its prices come from the semi-analytic characteristic-function integral, not simulation.

Heston-implied volatility by strike and maturity

StrikeT = 0.083yT = 0.25yT = 0.5yT = 1yT = 2y
700.2829820.276360.2675960.2545710.240149
72.50.2763950.2699620.2617530.2497210.236735
750.2696280.2635850.2559520.2449450.233407
77.50.2628380.257220.2501860.2402390.23016
800.2560280.2508550.2444470.2355990.22699
82.50.2491840.244480.238730.2310240.223896
850.2422960.2380860.2330310.2265130.220875
87.50.2353490.2316650.2273460.2220650.217923
900.2283330.225210.2216760.2176820.215041
92.50.221240.2187190.2160220.2133660.212225
950.2140670.2121920.2103920.2091210.209474
97.50.2068230.205640.2047980.2049510.206789
1000.1995340.1990870.1992580.2008620.204167
102.50.192260.1925770.19380.1968630.201608
1050.1851170.1861870.1884620.1929610.199111
107.50.1782980.1800310.1832940.1891670.196677
1100.1720790.1742640.1783550.1854930.194306
112.50.1667460.1690590.1737130.1819520.191997
1150.1624860.1645690.1694380.1785560.18975
117.50.1593180.1608840.165590.175320.187566
1200.1571240.1580070.1622160.1722570.185445
122.50.1557320.1558730.159340.1693790.183388
1250.1549680.1543790.1569580.1666980.181395
127.50.1546830.1534120.1550450.1642210.179466
1300.1547610.1528680.1535580.1619550.177602

Heston − Black-Scholes price difference (per S₀ = 100), BS calibrated to σ_ATM(3m)

T (years)7085100115130
0.250.01476420.212366-5.26583e-11-0.25433-0.0177802
0.50.1312180.4437740.0047503-0.560496-0.204758
10.4236120.6554460.0686548-0.727161-0.720844
20.753180.8209830.269291-0.520643-0.995346

Same gap in implied-vol points

T (years)7085100115130
0.257.727313.899980-3.45174-4.62187
0.56.850973.39440.017105-2.96491-4.5529
15.548392.742620.177555-2.05302-3.71318
24.106232.178810.507991-0.93365-2.1485

Audience and decision

Research significance

Derivatives users, risk teams, and model validators

The result matters wherever one volatility estimate drives option prices, Greeks, hedges, scenario losses, or claims about the likelihood of extreme market moves.

Decision context

Criteria for replacing a flat-volatility baseline

Use Black–Scholes for the job it can do, while making strike, maturity, tail, and volatility-dynamics risk visible. A precise price under a rejected dynamic assumption is not the same as a reliable decision.

The rejection came from several independent fingerprints

The study measured a frozen SPY adjusted-close sample from January 2015 through July 2026. Constant-volatility geometric Brownian motion leaves three fingerprints. Rolling volatility should fluctuate around a stable level. Standardized returns should be approximately Gaussian. Return magnitudes should not stay autocorrelated. The sample contradicted each one.

Direction stayed hard to predict, but magnitude persisted. Lag-1 autocorrelation of absolute returns was about 0.35, and it survived at longer lags. Fat tails ran alongside a nearly thirty-fold realized-volatility range. A single constant parameter describes that observed return process poorly.

The Heston result demonstrates a mechanism. Negative price–volatility correlation and stochastic variance can generate an equity-like strike skew. A single Black–Scholes volatility cannot. The parameters were illustrative, not calibrated to a dated live option chain.

Separate a useful quoting convention from a claim about market dynamics

  • Read implied volatility across strike and maturity instead of applying one number everywhere.
  • Monitor realized volatility and return-magnitude persistence as state variables rather than constants.
  • Stress hedge and valuation outputs to skew, term structure, jumps, and volatility-of-volatility.
  • Validate a richer model against a dated option surface before treating its calibration as empirical evidence.
  • Attach model-risk language to Greeks and prices. Parameter precision does not remove specification error.

From closed-form valuation to empirical rejection

Constant-volatility model implications

The 1973 model makes one structural bet: that a single number, \(\sigma\), describes the randomness of an asset for the life of an option. Assume geometric Brownian motion with constant volatility, continuous frictionless hedging, and a constant rate. Then every European option on the same underlying and expiry must price off the same \(\sigma\). This is not a minor implication — it is the testable implication. Invert the formula on market prices and the implied volatility should come back flat across strikes:

$$\sigma_{\text{imp}}(K, T) = \text{const} \quad \text{for all } K.$$

The relevant historical claim is narrower than “the smile began in 1987.” Rubinstein’s S&P 500 option study documents a pronounced, persistent post-crash skew in the 1987–1992 sample. It emphasizes that the observed surface is inconsistent with the constant- volatility model.2

Observed departures from constant-volatility assumptions

Take the model's assumptions in order and hold them against an ordinary day of market data. Returns are not Gaussian: daily index returns show excess kurtosis and negative skew. Moves the model rates as once-in-millennia arrive within careers (the arithmetic is in Note VI). Volatility is not constant: it clusters, with quiet weeks following quiet weeks and violent days following violent days. It also moves inversely with price, the leverage effect. Prices jump: earnings, policy surprises, and liquidity spirals produce discontinuities no continuous diffusion generates. Each violation leaves a fingerprint in option prices. The market prices repricing risk whether or not the model does, and it records every fingerprint in one curve:

Out-of-the-money puts trade at implied volatilities several points above at-the-money. Out-of-the-money calls trade below. Traders are paying up for crash protection. The market quotes that premium through the Black-Scholes formula, using implied volatility as the unit. The smile is the market's standing annotation on the model: the Gaussian tail is too thin on the left, and the constant σ is not constant.

Stochastic variance as an endogenous state variable

Heston (1993) promotes variance from parameter to process:1

$$dS_t = \mu S_t\,dt + \sqrt{v_t}\,S_t\,dW_t^S, \qquad dv_t = \kappa(\theta - v_t)\,dt + \xi\sqrt{v_t}\,dW_t^v, \qquad d\langle W^S, W^v \rangle_t = \rho\,dt.$$

Three mechanisms do the work. Mean reversion (\(\kappa\), \(\theta\)): variance is pulled toward a long-run level, so volatility shocks decay. That produces clustering, and it makes long-dated smiles flatter than short-dated ones, as observed. Vol-of-vol (\(\xi\)): variance itself is risky. That fattens both tails of the return distribution and gives the smile its curvature. Correlation (\(\rho < 0\)): the leverage effect, wired in explicitly. Negative return shocks arrive with rising variance, which skews the distribution left and tilts the smile downward toward high strikes. With \(\rho\) near \(-0.7\), the model generates the equity index skew almost as a matter of course. The model also has a closed-form characteristic function, so whole volatility surfaces calibrate quickly. That speed contributed to its broad use in derivatives practice.

Black-Scholes vs. Heston, strike by strike

Below, the flat-σ model meets Heston-generated target prices. The Heston call values are precomputed offline from the Heston characteristic function (Heston 1993, "little trap" formulation, Simpson-rule integration of the P₁/P₂ integrals; parameters in the table note). The Black-Scholes prices are computed live at the selected flat volatility. No single σ reconciles the two columns — that is the entire point.

Scope boundary No dated option chain, bid–ask spread, or observed implied-volatility surface enters this example. The fixed Heston grid is the target and flat Black–Scholes is the candidate.

Objective and residual definition

For the displayed one-parameter comparison, the diagnostic objective is the vega-weighted implied-volatility root-mean-square error

$$J(\sigma)=\sqrt{\frac{\sum_i \nu_i\,[\sigma-\sigma_i^{H}]^2}{\sum_i \nu_i}}, \qquad \nu_i=\operatorname{Vega}_{BS}(K_i,\sigma_i^{H}).$$

A genuine market calibration would replace the generated targets with timestamped option quotes. It should also weight residuals by measurement quality such as bid–ask spread. Exposing the objective is essential. Without it the parameter vector cannot be interpreted or reproduced.

Heston parameters: S₀ = 100, r = 2%, q = 0, T = 0.5y, v₀ = 0.04, κ = 2.0, θ = 0.05, ξ = 0.6, ρ = −0.7. Values computed offline in Python (Simpson rule, 4,000 nodes on [0, 200]) and hardcoded; implied vols recovered by bisection. Inspect the Heston implementation at commit ad24c499958 and the derivatives notebook at the same commit.

Residual omissions under stochastic volatility

Heston is a better description, not a true one. Its diffusive variance cannot move fast enough to explain the steep smiles of short-dated options. A market pricing overnight jump risk needs jumps. Practice therefore moved to Bates (Heston plus Merton jumps) and beyond. Its single variance factor forces the whole term structure of skew to move in lockstep, while real surfaces twist. Its calibrated parameters, re-fit each morning, drift in ways the model says they should not. That drift indicates residual misspecification. The modern frontier (rough volatility, with Hurst exponents near 0.1) suggests volatility's memory is structurally unlike anything a Markovian diffusion can produce. These limitations motivate jump-diffusion, multifactor, and rough-volatility alternatives.

Model-risk interpretation

Black–Scholes remains useful as a quoting convention even though its literal market dynamics are rejected. Implied volatility expresses observed prices relative to the constant-volatility baseline and makes deviations across strike and maturity comparable.

The distinction is operational. The formula can organize prices and sensitivities without establishing that returns are Gaussian, volatility is constant, or hedging is continuous. Those assumptions require separate empirical tests, monitoring, and model-risk controls. Model output stays conditional on the assumptions, calibration data, numerical method, and market regime behind it.

Numbers

StatementValueAs statedNote
Minimum 21-day realised vol of SPY3.4%≈3% (README: 3.4%)
Maximum 21-day realised vol of SPY93%93%
Max / min realised vol27×nearly thirty-fold
Full-sample annualised vol (the 'constant' σ)17.6%
Excess kurtosis of SPY daily returns≈14about 14
Skewness of SPY daily returns−0.31
Worst daily return−10.9%-10.9% (March 2020)
Worst day under a Gaussian yardstick≈10σ≈10σUnrounded 9.84σ; Gaussian single-day probability 3.63e-23.
Gaussian probability of the worst day3.63e-23around 10^-23
Lag-1 autocorrelation of absolute returns0.35about 0.35
Lag-1 autocorrelation of returns−0.12≈ -0.12
Heston implied vol at K/S₀ = 0.8, three months≈25%25%
Heston implied vol at K/S₀ = 1.2, three months≈16%16%
Feller condition 2κθ0.1800.180
Feller condition ξ²0.1220.122
Heston ATM implied vol at three months (BS calibration point)19.91%19.91%
ATM implied vol of the case-study Heston surface (flat BS σ)19.2%19.2%
SPY daily observations2,891≈2,900
First SPY return2015-01-05January 2015
Last SPY return2026-07-06July 2026

Notes

Itô's Lemma

4 min · Prerequisites: multivariable calculus and Brownian motion

Ordinary calculus fails for Brownian motion because WtW_t accumulates quadratic variation: over a partition of [0,t][0,t], (ΔW)2t\sum (\Delta W)^2 \to t, not zero. The squared increments of a Brownian path are not negligible — they behave, in the limit, like time itself.1 The heuristic multiplication table is

(dW)2=dt,dWdt=0,(dt)2=0.(dW)^2 = dt, \qquad dW\,dt = 0, \qquad (dt)^2 = 0.

Take an Itô process dXt=μtdt+σtdWtdX_t = \mu_t\,dt + \sigma_t\,dW_t and a smooth function f(t,x)f(t, x). A second-order Taylor expansion gives

df=ftdt+fxdX+122fx2(dX)2+df = \frac{\partial f}{\partial t}\,dt + \frac{\partial f}{\partial x}\,dX + \tfrac{1}{2}\frac{\partial^2 f}{\partial x^2}\,(dX)^2 + \cdots

In ordinary calculus the (dX)2(dX)^2 term would vanish. Here (dX)2=σt2(dW)2+O(dt3/2)=σt2dt(dX)^2 = \sigma_t^2\,(dW)^2 + O(dt^{3/2}) = \sigma_t^2\,dt, so a second-order term survives into the first-order differential:

df=(ft+μtfx+12σt22fx2)dt+σtfxdWt.df = \left(\frac{\partial f}{\partial t} + \mu_t\frac{\partial f}{\partial x} + \tfrac{1}{2}\sigma_t^2 \frac{\partial^2 f}{\partial x^2}\right) dt + \sigma_t \frac{\partial f}{\partial x}\,dW_t.

That extra 12σ2fxxdt\tfrac{1}{2}\sigma^2 f_{xx}\,dt — the Itô correction — is the single most consequential term in mathematical finance. It is why convexity has a price, why hedged option books bleed or earn theta, and why the drift of a log-price is not the drift of the price. Whenever a payoff is curved and the underlying is volatile, the correction term is where the money is.

Footnotes

  1. Øksendal, B. (2003), Stochastic Differential Equations: An Introduction with Applications , 6th ed., Springer, pp. 21–84 (Itô integrals, Itô formula, and SDEs). doi:10.1007/978-3-642-14394-6

Solving Geometric Brownian Motion

3 min · Prerequisite: Note 01, Itô's Lemma

The SDE dSt=μStdt+σStdWtdS_t = \mu S_t\,dt + \sigma S_t\,dW_t is solved by applying Itô's lemma to f(S)=lnSf(S) = \ln S, for which f=1/Sf' = 1/S and f=1/S2f'' = -1/S^2:

d(lnSt)=1StdSt121St2(dSt)2=(μ12σ2)dt+σdWt.d(\ln S_t) = \frac{1}{S_t}\,dS_t - \frac{1}{2}\frac{1}{S_t^2}(dS_t)^2 = \left(\mu - \tfrac{1}{2}\sigma^2\right)dt + \sigma\,dW_t.

The right-hand side no longer involves StS_t; it integrates directly:

St=S0exp ⁣[(μ12σ2)t+σWt].S_t = S_0\,\exp\!\left[\left(\mu - \tfrac{1}{2}\sigma^2\right)t + \sigma W_t\right].

Log-prices are Gaussian; prices are lognormal; prices stay positive. Two readings of the 12σ2-\tfrac{1}{2}\sigma^2 term repay attention. First, E[St]=S0eμt\mathbb{E}[S_t] = S_0 e^{\mu t} — the correction exactly offsets the convexity of the exponential, by design. Second, the median path grows at μ12σ2\mu - \tfrac{1}{2}\sigma^2, strictly less than the mean growth rate. A volatile asset's average outcome is dragged upward by a shrinking minority of enormous paths while the typical path does worse. This "volatility drag" is not a market imperfection; it is arithmetic, and it is the quantitative core of why compounding punishes variance.

Risk-Neutral Pricing: Assumptions and Derivation

4 min · Prerequisites: discounting, replication, and binomial trees

Consider one period and two assets: a bond growing at rr, and a stock worth SS that moves to uSuS or dSdS with d<erΔt<ud < e^{r\Delta t} < u. To price a claim paying VuV_u or VdV_d, build a portfolio of Δ\Delta shares and BB in bonds that replicates it in both states:

Δ=VuVd(ud)S,V=ΔS+B=erΔt[pVu+(1p)Vd],p=erΔtdud.\Delta = \frac{V_u - V_d}{(u-d)S}, \qquad V = \Delta S + B = e^{-r\Delta t}\left[\,p^* V_u + (1-p^*) V_d\,\right], \qquad p^* = \frac{e^{r\Delta t} - d}{u - d}.

The real-world probability of the up-move never entered. The price is a discounted expectation under an artificial probability pp^* — the unique one that makes the discounted stock a martingale.1 This is the whole content of risk-neutral pricing: no arbitrage plus replication implies prices are expectations under a measure Q\mathbb{Q} constructed for accounting convenience, not belief. In continuous time Girsanov's theorem plays the same role, shifting the drift of WtW_t so that dSt=rStdt+σStdWtQdS_t = r S_t\,dt + \sigma S_t\,dW_t^{\mathbb{Q}}, and

V0=erTEQ ⁣[payoff(ST)].V_0 = e^{-rT}\,\mathbb{E}^{\mathbb{Q}}\!\left[\,\text{payoff}(S_T)\,\right].

The derivation requires that the payoff can be replicated under complete markets with continuous frictionless trading. With jumps, stochastic volatility, or transaction costs, replication is imperfect, Q\mathbb{Q} is no longer unique, and the arbitrage-free price can become an interval. The selected measure then depends on market prices for non-replicable risk.

Footnotes

  1. Shreve, S. E. (2004), Stochastic Calculus for Finance II: Continuous-Time Models , 1st ed., Springer, chs. 4–6, pp. 131–339 (stochastic calculus, risk-neutral pricing, and PDE connections), ISBN 978-0-387-40101-0. publisher record

Feynman-Kac and the Black-Scholes PDE

4 min · Prerequisites: Note 01, Note 03, and PDE basics

The Feynman-Kac theorem is the bridge between expectations and differential equations. If

V(t,x)=E ⁣[er(Tt)φ(XT)Xt=x],dXs=a(Xs)ds+b(Xs)dWs,V(t,x) = \mathbb{E}\!\left[\left. e^{-r(T-t)}\,\varphi(X_T)\,\right|\, X_t = x\right], \qquad dX_s = a(X_s)\,ds + b(X_s)\,dW_s,

then VV solves

Vt+a(x)Vx+12b(x)22Vx2rV=0,V(T,x)=φ(x).\frac{\partial V}{\partial t} + a(x)\frac{\partial V}{\partial x} + \tfrac{1}{2}b(x)^2\frac{\partial^2 V}{\partial x^2} - rV = 0, \qquad V(T,x) = \varphi(x).

The proof idea is one line of Itô: apply the lemma to ertV(t,Xt)e^{-rt}V(t, X_t); since a conditional expectation of a fixed terminal payoff is a martingale, its dtdt term must vanish, and that vanishing is the PDE. Now specialize to the risk-neutral stock a=rSa = rS, b=σSb = \sigma S:

Vt+rSVS+12σ2S22VS2rV=0.\frac{\partial V}{\partial t} + rS\frac{\partial V}{\partial S} + \tfrac{1}{2}\sigma^2 S^2 \frac{\partial^2 V}{\partial S^2} - rV = 0.

This is the Black-Scholes equation, and Feynman-Kac explains why it and the risk-neutral expectation of Note 03 are the same object viewed from opposite sides: the expectation is the PDE's stochastic representation; the PDE is the expectation's infinitesimal description. Solving it with the call payoff boundary condition yields the closed form in the pricing laboratory. The same bridge carries the physics intuition: the equation is a heat equation in disguise (substitute x=lnSx = \ln S and rescale time), so option value diffuses — kinks in payoffs get smoothed exactly the way heat smooths a temperature spike.

Limitations

  • The empirical study covers one underlying and one historical window.
  • Close-to-close returns omit intraday price and volatility structure.
  • The Heston parameters are illustrative rather than calibrated to contemporaneous market quotes.
  • Heston still treats parameters as constants and omits jumps and rough-volatility effects.
  • Simulated stochastic-volatility paths carry discretization bias that must be budgeted separately from sampling error.

Sources

  1. 1Heston, S. L. (1993), “A Closed-Form Solution for Options with Stochastic Volatility,” Review of Financial Studies 6(2), 327–343. doi:10.1093/rfs/6.2.327
  2. 2Rubinstein, M. (1994), “Implied Binomial Trees,” Journal of Finance 49(3), 771–818, especially pp. 771–775 on the post-1987 S&P 500 pattern. doi:10.1111/j.1540-6261.1994.tb00079.x
  3. 3Black, F., and M. Scholes (1973), “The Pricing of Options and Corporate Liabilities,” Journal of Political Economy 81(3), 637–654. doi:10.1086/260062

Cite this

Wisniewski, K. (2026, August 8). Constant-volatility pricing under empirical market behavior. Quantitative Markets & Institutions Lab. https://www.kylewisniewski.com/lab/volatility

@misc{wisniewski2026volatility,
  author = {Wisniewski, Kyle},
  title = {Constant-volatility pricing under empirical market behavior},
  year = {2026},
  month = {aug},
  howpublished = {\url{https://www.kylewisniewski.com/lab/volatility}},
  note = {Empirical finding · Quantitative Markets & Institutions Lab · commit 4806df9}
}