Quantitative Finance & Derivatives
Barone-Adesi and Whaley Quadratic American Option Early-Exercise Premium
Calculate the Barone-Adesi-Whaley (1987) quadratic exponent q2, smooth-pasting coefficient A2, and early-exercise premium for American options with carry b < r.
Check Merton’s no-early-exercise rule before adding an American premium
Before computing any American call premium, test cost of carry b_carry against the risk-free rate r_rf: when b_carry >= r_rf (such as a non-dividend-paying stock call with b = r), early exercise forfeits strike interest and insurance value, so the optimal early-exercise premium is strictly 0. When b_carry < r_rf (for example, a futures option with b = 0 or a high-dividend asset), Barone-Adesi and Whaley (1987) approximate the early-exercise premium as A2 * (S / S_star)^q2 below critical boundary S_star.
Set spot S = 98 (B2), strike K = 100 (B3), r_rf = 0.08 (B4), carry b_carry = 0 (B5), volatility sig = 0.20 (B6), maturity T = 0.25 (B7), and critical boundary S_star = 113.02 (B8). Here M_baw = 2*r/sig^2 = 4, N_baw = 2*b/sig^2 = 0, K_h = 1 - EXP(-0.02) = 0.019801, and positive root q2 = (1 + SQRT(1 + 16 / K_h)) / 2 = 14.7217.
| BAW Quantity | Formula Expression | Sample Output |
|---|---|---|
| Scale Parameters M, N, K_h | M = 2*r/sig^2, N = 2*b/sig^2, K_h = 1 - EXP(-r*T) | M = 4, N = 0, K_h = 0.0198 |
| Quadratic Exponent q2 | (-(N - 1) + SQRT((N - 1)^2 + 4*M/K_h)) / 2 | 14.7217 |
| European Call Baseline c_Eur | Generalized Black-Scholes at carry b = 0 | 2.9681 |
| American Call Value C_BAW | IF(b >= r, c_Eur, c_Eur + A2 * (S / S_star)^q2) | 3.0802 (EEP = 0.1121) |
Barone-Adesi-Whaley Quadratic Root q2 Formula
Compute M_baw, N_baw, and horizon factor K_h = 1 - EXP(-r * T) inside LET to obtain the exact positive characteristic exponent q2.
=LET(r_rf, B4, b_car, B5, sig_v, B6, t_yr, B7, IF(OR(r_rf <= 0, sig_v <= 0, t_yr <= 0), "Invalid BAW Input", LET(m_val, 2 * r_rf / (sig_v^2), n_val, 2 * b_car / (sig_v^2), k_hor, 1 - EXP(-r_rf * t_yr), ROUND((-(n_val - 1) + SQRT((n_val - 1)^2 + 4 * m_val / k_hor)) / 2, 4))))American Call Value with Early-Exercise Premium Formula
When b_carry >= r_rf, return European call value directly; when S >= S_star, return immediate exercise S - K; otherwise add A2 * (S / S_star)^q2 where A2 = (S_star / q2) * (1 - EXP((b - r)*T) * N(d1(S_star))).
=LET(s_px, B2, k_str, B3, r_rf, B4, b_car, B5, sig_v, B6, t_yr, B7, s_crit, B8, IF(OR(r_rf <= 0, sig_v <= 0, t_yr <= 0), "Invalid BAW Input", LET(sig_t, sig_v * SQRT(t_yr), d_1, (LN(s_px / k_str) + (b_car + 0.5 * sig_v^2) * t_yr) / sig_t, d_2, d_1 - sig_t, t_1, 1 / (1 + 0.2316419 * ABS(d_1)), p_1, 0.3989422804014327 * EXP(-0.5 * d_1^2) * t_1 * (0.31938153 + t_1 * (-0.356563782 + t_1 * (1.781477937 + t_1 * (-1.821255978 + 1.330274429 * t_1)))), nd_1, IF(d_1 >= 0, 1 - p_1, p_1), t_2, 1 / (1 + 0.2316419 * ABS(d_2)), p_2, 0.3989422804014327 * EXP(-0.5 * d_2^2) * t_2 * (0.31938153 + t_2 * (-0.356563782 + t_2 * (1.781477937 + t_2 * (-1.821255978 + 1.330274429 * t_2)))), nd_2, IF(d_2 >= 0, 1 - p_2, p_2), c_eur, s_px * EXP((b_car - r_rf) * t_yr) * nd_1 - k_str * EXP(-r_rf * t_yr) * nd_2, IF(b_car >= r_rf, ROUND(c_eur, 4), IF(s_px >= s_crit, ROUND(s_px - k_str, 4), LET(m_val, 2 * r_rf / (sig_v^2), n_val, 2 * b_car / (sig_v^2), k_hor, 1 - EXP(-r_rf * t_yr), q_2, (-(n_val - 1) + SQRT((n_val - 1)^2 + 4 * m_val / k_hor)) / 2, d1_s, (LN(s_crit / k_str) + (b_car + 0.5 * sig_v^2) * t_yr) / sig_t, ts, 1 / (1 + 0.2316419 * ABS(d1_s)), ps, 0.3989422804014327 * EXP(-0.5 * d1_s^2) * ts * (0.31938153 + ts * (-0.356563782 + ts * (1.781477937 + ts * (-1.821255978 + 1.330274429 * ts)))), nd1_s, IF(d1_s >= 0, 1 - ps, ps), a2_coef, (s_crit / q_2) * (1 - EXP((b_car - r_rf) * t_yr) * nd1_s), ROUND(c_eur + a2_coef * (s_px / s_crit)^q_2, 4)))))))Try the example
Use the original values or change them to test your understanding.