Financial
Bond Convexity & Duration-Convexity second-order price change formula
Estimate a bond’s full-price sensitivity with modified duration and convexity. The second-order calculation remains an approximation, especially for large yield changes.
Add curvature to a local price-change approximation
For a fixed-cash-flow bond, use duration and convexity measured at the starting yield with consistent annual yield units and compounding conventions. Enter a 200-basis-point shock as 0.02, not 2. The formula estimates an instantaneous full (dirty) price change; it does not include elapsed-time carry, coupon receipts or changes in accrued interest.
With modified duration 7.5 and convexity 72, the linear term is ±15% for a ±0.02 shock and the curvature term adds 1.44 percentage points. The estimated full prices are 864.40 and 1164.40 from 1000. These are Taylor approximations, not exact repricing or guaranteed bounds. For large shocks or option-dependent cash flows, use a suitable full pricing model.
| Bond Risk Input / Scenario | Cell | Value | Price Impact |
|---|---|---|---|
| Full (dirty) price & modified duration | B2 = $1,000, B3 = 7.5 | Linear slope = -7.5x | -$150.00 linear drop at +200 bps |
| Convexity & Yield Shock dy | B4 = 72, B5 = +0.02 | 0.5 * 72 * (0.02)^2 | +1.44% (+$14.40 cushion!) |
| +200 bps Selloff (+0.02) | -0.15 + 0.0144 | -13.56% (-0.1356) | New Price = $864.40 |
| -200 bps Rally (-0.02) | +0.15 + 0.0144 | +16.44% (+0.1644) | New Price = $1,164.40 (Asymmetric!) |
Duration + Convexity percentage price change formula
The squared shock is nonnegative and zero at a zero shock. Its price contribution also depends on the sign of convexity. This exercise assumes nonnegative duration and convexity for a conventional fixed-cash-flow bond.
=IF(OR(COUNT(B2:B5)<>4,B2<=0,B3<0,B4<0),"Invalid inputs",ROUND(-B3 * B5 + 0.5 * B4 * (B5 ^ 2), 4))Estimated post-shock bond price P * (1 + dP/P)
Applies the second-order Taylor percentage change to starting bond price B2.
=IF(OR(COUNT(B2:B5)<>4,B2<=0,B3<0,B4<0),"Invalid inputs",ROUND(B2 * (1 + (-B3 * B5 + 0.5 * B4 * (B5 ^ 2))), 2))Try the example
Use the original values or change them to test your understanding.