Duration and convexity price one bond. A portfolio needs a duration too, and there are two standard ways to compute one. They are not two roundings of the same quantity. They rest on different assumptions, they return different numbers, and quoting one while thinking of the other is a recurring source of hedge sizing that is quietly wrong.
The first is the market-value-weighted average. Compute each holding's modified duration, weight by its share of the portfolio's market value, and sum:
D_portfolio = Σ wᵢ Dᵢ , wᵢ = MVᵢ / Σ MVⱼ
Weight by market value, never by face or by par: a premium bond carries more of the portfolio's money than its face suggests, and a discount bond less. The assumption underneath is that every holding's own yield moves by the same Δy, which is a parallel shift in yields rather than in the curve, and those are not the same thing when the holdings sit at different maturities.
The second is the cash-flow-yield method. Ignore the individual bonds. Aggregate every cash flow the portfolio will pay into one dated stream, solve for the single internal rate that discounts that stream back to the portfolio's market value (that rate is the cash-flow yield), and compute Macaulay and modified duration on the aggregate exactly as you would for one bond. The assumption is that the whole portfolio can be treated as one synthetic bond discounted at one rate, and it needs the cash flows to be known, so a callable or a mortgage holding breaks it.
Advertisement
Worked example: a three-bond G-Sec portfolio
Take three synthetic annual-coupon G-Secs held at face amounts of ₹40, ₹35 and ₹25 crore: a 2-year 6.00% at a 6.20% yield, a 5-year 7.00% at 6.80%, and a 10-year 7.18% at 7.10%.
| Bond | Price (₹/100) | Modified duration | Market value (₹ cr) | Weight |
|---|---|---|---|---|
| 2y 6.00% @ 6.20% | 99.634347 | 1.829845 | 39.853739 | 0.397416 |
| 5y 7.00% @ 6.80% | 100.824450 | 4.110504 | 35.288557 | 0.351893 |
| 10y 7.18% @ 7.10% | 100.559298 | 6.977992 | 25.139825 | 0.250691 |
| Total | 100.282121 | 1.000000 |
The market-value-weighted modified duration is 0.397416 × 1.829845 + 0.351893 × 4.110504 + 0.250691 × 6.977992 = **3.922987 years**. Aggregating the same holdings' cash flows into one stream (₹6.6450 crore at year 1, ₹46.6450 crore at year 2, and so on to ₹26.7950 crore at year 10) and solving for the rate that prices that stream at ₹100.282121 crore gives a cash-flow yield of 6.825131% and a modified duration of 3.953426 years.
How do the two durations compare, and what do they share?
The gap is 0.030440 years, small here and not always small. It widens with the spread of maturities and with the dispersion of yields across holdings, because the cash-flow-yield method discounts a two-year coupon and a ten-year coupon at the same single rate while the weighted average lets each bond keep its own. Neither number is wrong. The weighted average is what a risk system reports and what a DV01 hedge is normally sized from; the cash-flow yield is the portfolio's duration as an instrument, which is what a liability match wants, and it is the one that ties out against a single-bond immunisation.
Both share one assumption and one limitation. Estimate the effect of a 100 bp rise on this portfolio and the weighted average predicts −3.9230%, the cash-flow yield −3.9534%, while fully repricing every bond at its own yield plus 100 bp gives −3.7971%. Both first-order estimates over-state the loss by roughly 13 to 16 bp, which is convexity, exactly as the bond convexity page said it would be. And both assume the 100 bp arrived everywhere at once. That second assumption is the one the key-rate durations section exists to take apart.