Arte SheetsLearn. Try. Understand.

Quantitative Finance & Derivatives

Down-and-Out Barrier Call Formula and Knock-In/Knock-Out Parity

Price continuous zero-rebate Down-and-Out Calls (H < K, S > H) via the Merton / Reiner-Rubinstein reflection principle and verify exact Down-and-In + Down-and-Out = Vanilla parity.

Enforce Knock-In + Knock-Out = Vanilla Call parity on every barrier sheet

A continuous zero-rebate Down-and-Out Call (DOC) pays MAX(S_T - K, 0) at maturity T only if spot S_t never touches or crosses knock-out barrier H < S; its twin Down-and-In Call (DIC) activates ONLY if S_t hits H. Holding one DOC plus one DIC guarantees a vanilla European call regardless of path, so C_DOC + C_DIC = C_Vanilla identically!

When barrier H <= K and S > H, Merton (1973) and Reiner-Rubinstein (1991) price the knock-in rebate reflection term as C_DIC = S * EXP(-q*T) * (H / S)^(2*lam_b) * N(y_1) - K * EXP(-r*T) * (H / S)^(2*lam_b - 2) * N(y_2), where lam_b = (r - q + 0.5*sig^2) / sig^2 and y_1 = LN(H^2 / (S*K)) / (sig*SQRT(T)) + lam_b*sig*SQRT(T) — simply a reflected vanilla call evaluated at image spot H^2 / S scaled by (H / S)^(2*lam_b - 2)!

Barrier Quantity (S=100, K=100, H=90)Closed-Form StructureSample Output
Vanilla Call Ceiling C_BSMStandard European Call (H -> 0 limit)8.2600
Reflected Image Spot H^2 / S90^2 / 10081.0000
Down-and-In Knock-In Call C_DIC(H / S)^(2*lam_b - 2) * C_BSM(H^2 / S, K)1.1122
Down-and-Out Call C_DOCC_BSM(S, K) - C_DIC (0 if S <= H)7.1478 (Parity sum = 8.2600)

Down-and-In Reflection Call C_DIC (H <= K) Formula

Evaluate the reflected Black-Scholes call at image spot s_img = H^2 / S and scale by (H / S)^(2 * mu_b), where mu_b = (r - q - 0.5*sig^2) / sig^2 = lam_b - 1.

=LET(s_px, B2, k_str, B3, h_bar, B4, r_rf, B5, q_div, B6, sig_v, B7, t_yr, B8, IF(OR(h_bar <= 0, h_bar > k_str, sig_v <= 0, t_yr <= 0), "Require 0 < H <= K", IF(s_px <= h_bar, "Already Knocked In", LET(mu_b, (r_rf - q_div - 0.5 * sig_v^2) / (sig_v^2), s_img, (h_bar^2) / s_px, sig_t, sig_v * SQRT(t_yr), y_1, (LN(s_img / k_str) + (r_rf - q_div + 0.5 * sig_v^2) * t_yr) / sig_t, y_2, y_1 - sig_t, u_1, 1 / (1 + 0.2316419 * ABS(y_1)), ph_1, 0.3989422804014327 * EXP(-0.5 * y_1^2) * u_1 * (0.31938153 + u_1 * (-0.356563782 + u_1 * (1.781477937 + u_1 * (-1.821255978 + 1.330274429 * u_1)))), ny_1, IF(y_1 >= 0, 1 - ph_1, ph_1), u_2, 1 / (1 + 0.2316419 * ABS(y_2)), ph_2, 0.3989422804014327 * EXP(-0.5 * y_2^2) * u_2 * (0.31938153 + u_2 * (-0.356563782 + u_2 * (1.781477937 + u_2 * (-1.821255978 + 1.330274429 * u_2)))), ny_2, IF(y_2 >= 0, 1 - ph_2, ph_2), c_img, s_img * EXP(-q_div * t_yr) * ny_1 - k_str * EXP(-r_rf * t_yr) * ny_2, ROUND(((h_bar / s_px)^(2 * mu_b)) * c_img, 4)))))

Down-and-Out Call Value C_DOC Formula & Knock-Out Check

When S <= H, the option is knocked out immediately with value 0; when S > H (with H <= K), subtract C_DIC from C_Vanilla. Test lowering S to 90 (touching barrier H = 90): C_DOC hits 0 cleanly!

=IF(OR(B4 <= 0, B4 > B3, B7 <= 0, B8 <= 0), "Require 0 < H <= K", IF(B2 <= B4, 0, ROUND(E2 - E3, 4)))

Try the example

Use the original values or change them to test your understanding.

Further reading