Macaulay and Modified Duration

\(D_{mac}\) is the present-value-weighted average time to a bond's payments — literally the balance point of its discounted cash flows along the time axis. Rescale it by the yield and you get \(D_{mod}\), the number that tells you how sharply the bond's price reacts to a small change in yield.

By the end you'll be able to compute \(D_{mac}\) and \(D_{mod}\) for a cash-flow stream and use \(\Delta P/P \approx -D_{mod}\Delta i\) to estimate a price change from a small yield move.

Predict: a longer-maturity bond — higher or lower duration, and so more or less price-sensitive to a yield change? Drag maturity and check the fulcrum and tangent.

Each bar is one payment's PV, sized by \(PV_t = C_t v^t\) and sitting on the time axis at t. The triangle is the fulcrum at \(D_{mac}\) — the point where those PV weights balance. The small inset shows price against yield, with the dashed tangent line at the current yield: its slope is \(-D_{mod}\), the first-order estimate of how price reacts to a yield move. Hover any bar, the fulcrum, or the price point for exact readouts.

D_mac = 2.861 yrs · D_mod = 2.751 · Price P ≈ 102.78

PV weights along the time axis — bars are \(PV_t\), the triangle balances at \(D_{mac}\)
PV of each payment
Price vs. yield — true price curve and the \(D_{mod}\) tangent at the current yield
P(i) tangent, slope −D_mod·P

Bond price moves opposite to yield; duration puts a single number on how sharply — first as a weighted-average time (Macaulay), then rescaled into a direct sensitivity (modified).

Formal

Given cash flows \(C_t\) at times \(t = 1, \dots, n\) and discount factor \(v = 1/(1+i)\), let \(PV_t = C_t v^t\). Macaulay duration is the PV-weighted average payment time: \(D_{mac} = \dfrac{\Sigma\, t \cdot PV_t}{\Sigma\, PV_t}\). The denominator is just the price \(P\), so the weights \(w_t = PV_t/P\) sum to 1 — a genuine weighted average, in years. Differentiating \(P(i) = \Sigma\, C_t(1+i)^{-t}\) with respect to i and dividing by \(-P\) gives \(-\frac{1}{P}\frac{dP}{di} = \frac{D_{mac}}{1+i}\), which defines modified duration \(D_{mod} = D_{mac}/(1+i)\) and the first-order relation \(\Delta P/P \approx -D_{mod}\Delta i\).

Applied

A zero-coupon bond has all its weight at one point, so \(D_{mac}\) equals its maturity exactly — the fulcrum sits right under the single payment. A coupon bond spreads weight across every payment date, so its fulcrum sits earlier than maturity: some of the "money back" arrives before the end. Push yield up and every \(PV_t\) shrinks, but the far-off payments shrink fastest — that's why raising the yield slider pulls the fulcrum slightly toward today, and it's exactly the mechanism the \(-D_{mod}\Delta i\) tangent is estimating.

Worked example

A 3-year annual bond pays coupons 5, 5, 105 at t = 1, 2, 3, yield i = 4% (\(v = 1/1.04\)). \(PV_1 = 4.8077\), \(PV_2 = 4.6228\), \(PV_3 = 93.3439\), so \(P = 102.7744\) and \(\Sigma\, t\cdot PV_t = 294.09\). \(D_{mac} = 294.09/102.7744 \approx\) 2.861 years. \(D_{mod} = 2.861/1.04 \approx\) 2.751. For \(\Delta i = +0.01\): \(\Delta P/P \approx -2.751 \times 0.01 = \) −2.75%.

Your turn

A 2-year annual bond pays coupons 8, 108 at t = 1, 2, yield i = 3% (\(v = 1/1.03\)). \(PV_1 = 8 \times 0.9709 = 7.767\). \(PV_2 = 108 \times 0.9426 = 101.800\), so \(P = 109.567\) and \(\Sigma\, t\cdot PV_t = 7.767 + 2(101.800) = 211.368\). \(D_{mac} = 211.368/109.567 \approx 1.929\) years. Now finish it: \(D_{mod} = D_{mac}/(1+i) = 1.929/1.03 = \) ____

Reveal the answer

\(D_{mod} = 1.929/1.03 \approx\) 1.873. Set the yield slider near 3% and maturity to 2 above, and check that the readout's \(D_{mod}\) lands close to this (the demo's coupon is fixed at 5%, so the exact \(D_{mac}\) will differ slightly — the balance-point idea is the same).

More info — why the slope of P(i) gives modified duration

Each term of the bond-price sum \(C_t(1+i)^{-t}\) differentiates to \(-t\cdot C_t(1+i)^{-t-1}\), so \(dP/di = -\frac{1}{1+i}\Sigma\, t\cdot PV_t\). Dividing by \(-P\) turns that sum into the same PV-weighted average of t that defines \(D_{mac}\), just scaled by \(1/(1+i)\) — which is exactly why \(D_{mod} = D_{mac}/(1+i)\) is the tangent slope you see in the price-vs-yield inset above. The relation \(\Delta P/P \approx -D_{mod}\Delta i\) is only the first-order (tangent-line) piece; the gap between that line and the true curve — visible in the inset for larger yield moves — is what a second-order (curvature) correction accounts for, coming up next in this section.

Check your understanding

Question 1 of 4

A 4-year annual bond pays coupons 6, 6, 6, 106 at t = 1, 2, 3, 4, priced to yield \(i = 5\%\). Which is closest to its Macaulay duration \(D_{mac}\)?

Question 2 of 4

A zero-coupon bond matures at t = 7 with a single payment. What is its Macaulay duration?

Question 3 of 4

A bond priced at \(P = Fr \cdot a_n + C \cdot v^n\) currently trades at \(P = 1050\) with modified duration \(D_{mod} = 6\). About how does its price react to a yield increase of \(\Delta i = 0.005\) (50 bp)?

Question 4 of 4

A 5-year bond has Macaulay duration \(D_{mac} = 4.2\) years at yield \(i = 6\%\). What is its modified duration \(D_{mod}\)?

Recap

  • \(D_{mac} = \Sigma\, t\cdot PV_t / \Sigma\, PV_t\) — the PV-weighted average time to a cash-flow stream's payments, in years; a zero-coupon bond's \(D_{mac}\) equals its maturity exactly.
  • \(D_{mod} = D_{mac}/(1+i)\) — divide by \((1+i)\), never multiply, and never confuse the two: one is in years, the other is a sensitivity.
  • First-order price approximation: \(\Delta P/P \approx -D_{mod}\Delta i\) — a tangent-line estimate, most accurate for small yield moves.
  • Raising yield shrinks every \(PV_t\), but shrinks far-off payments fastest, pulling the PV-weighted balance point (and so \(D_{mac}\)) slightly earlier.

Dive deeper

Sources

  • Macaulay and Modified Duration