Arte SheetsLearn. Try. Understand.

Quantitative Finance & Derivatives

Rubinstein Simple Chooser Option Formula: Call-or-Put Decision Date

Price a simple chooser option in Excel and Arte Sheets via Rubinstein’s (1991) put-call parity decomposition into a T-maturity call plus a t_c-maturity shifted-strike put.

Verify why a chooser option sits strictly between a vanilla option and a straddle

A simple chooser option grants the holder the right at intermediate decision date t_c (0 < t_c < T) to declare whether the contract becomes a European call or European put with common strike K and final expiry T. Paying for a full ATM straddle C(K, T) + P(K, T) buys BOTH legs; a chooser buys ONE leg chosen after observing spot at t_c, so its value must satisfy MAX(C, P) <= V_chooser <= C + P.

Using put-call parity at t_c, Rubinstein (1991) decomposed MAX(C_tc, P_tc) = C_tc + MAX(0, K*EXP(-r*(T - t_c)) - S_tc*EXP(-q*(T - t_c))), which prices today as V_chooser = C_BSM(S, K, T) + EXP(-q*(T - t_c)) * P_BSM(S, K*EXP(-(r - q)*(T - t_c)), t_c)! Test S = 50 (B2), K = 50 (B3), r = 0.08 (B4), q = 0 (B5), sig = 0.25 (B6), T = 0.50 (B7), and choice date t_c = 0.25 (B8).

Benchmark / ComponentFormula StructureSample Output
T-Maturity Call Leg C(50, 0.50)Vanilla BSM Call at strike K = 50, expiry T = 0.504.5206
Shifted Put Strike K_adjK * EXP(-(r - q) * (T - t_c)) = 50 * EXP(-0.02)49.0099
Rubinstein Simple ChooserC(S, K, T) + EXP(-q*(T - t_c)) * P(S, K_adj, t_c)6.1071
Full Straddle Ceiling C + PC(50, 0.50) + P(50, 0.50)7.0807 (> 6.1071)

Shifted Decision-Date Put Strike K_adj Formula

Verify that when t_c approaches T, K_adj -> K and the chooser approaches a full T-maturity straddle C + P; when t_c approaches 0, the choice is made immediately so V_chooser -> MAX(C, P).

=IF(OR(B8 <= 0, B8 >= B7), "Invalid Choice Date", ROUND(B3 * EXP(-(B4 - B5) * (B7 - B8)), 4))

Rubinstein Simple Chooser Option Value Formula

Evaluate the T-maturity call leg and the t_c-maturity shifted-strike put leg inside a single self-contained LET formula.

=LET(s_px, B2, k_str, B3, r_rf, B4, q_div, B5, sig_v, B6, t_exp, B7, t_ch, B8, IF(OR(s_px <= 0, k_str <= 0, sig_v <= 0, t_ch <= 0, t_ch >= t_exp), "Invalid Choice Date", LET(st_full, sig_v * SQRT(t_exp), d_1, (LN(s_px / k_str) + (r_rf - q_div + 0.5 * sig_v^2) * t_exp) / st_full, d_2, d_1 - st_full, u_1, 1 / (1 + 0.2316419 * ABS(d_1)), ph_1, 0.3989422804014327 * EXP(-0.5 * d_1^2) * u_1 * (0.31938153 + u_1 * (-0.356563782 + u_1 * (1.781477937 + u_1 * (-1.821255978 + 1.330274429 * u_1)))), nd_1, IF(d_1 >= 0, 1 - ph_1, ph_1), u_2, 1 / (1 + 0.2316419 * ABS(d_2)), ph_2, 0.3989422804014327 * EXP(-0.5 * d_2^2) * u_2 * (0.31938153 + u_2 * (-0.356563782 + u_2 * (1.781477937 + u_2 * (-1.821255978 + 1.330274429 * u_2)))), nd_2, IF(d_2 >= 0, 1 - ph_2, ph_2), c_leg, s_px * EXP(-q_div * t_exp) * nd_1 - k_str * EXP(-r_rf * t_exp) * nd_2, k_adj, k_str * EXP(-(r_rf - q_div) * (t_exp - t_ch)), st_ch, sig_v * SQRT(t_ch), y_1, (LN(s_px / k_adj) + (r_rf - q_div + 0.5 * sig_v^2) * t_ch) / st_ch, y_2, y_1 - st_ch, v_1, 1 / (1 + 0.2316419 * ABS(y_1)), py_1, 0.3989422804014327 * EXP(-0.5 * y_1^2) * v_1 * (0.31938153 + v_1 * (-0.356563782 + v_1 * (1.781477937 + v_1 * (-1.821255978 + 1.330274429 * v_1)))), nmy_1, IF(y_1 >= 0, py_1, 1 - py_1), v_2, 1 / (1 + 0.2316419 * ABS(y_2)), py_2, 0.3989422804014327 * EXP(-0.5 * y_2^2) * v_2 * (0.31938153 + v_2 * (-0.356563782 + v_2 * (1.781477937 + v_2 * (-1.821255978 + 1.330274429 * v_2)))), nmy_2, IF(y_2 >= 0, py_2, 1 - py_2), p_leg, k_adj * EXP(-r_rf * t_ch) * nmy_2 - s_px * EXP(-q_div * t_ch) * nmy_1, ROUND(c_leg + EXP(-q_div * (t_exp - t_ch)) * p_leg, 4))))

Try the example

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

Further reading