{
 "site": "fixed-income.wiki",
 "section": "Risk measures",
 "url": "https://fixed-income.wiki/risk/",
 "reviewed": "2026-08-27",
 "license": "CC BY 4.0",
 "changes": "https://fixed-income.wiki/changes.json",
 "tables": [
  {
   "title": "Duration and convexity on the reference bond",
   "intro": "Settlement 2026-08-27, quoted price 98.750, full price 100.021739, yield 4.684070 percent nominal semiannual. The last two rows are for scale: modified duration is 81.5 percent of the bond's remaining life, because the redemption payment dominates the present value. The bumped and analytic figures agree to five decimal places, which is the check that the closed forms are right.",
   "columns": [
    "Measure",
    "Definition",
    "Value",
    "Units"
   ],
   "rows": [
    [
     "Macaulay duration",
     "PV-weighted average time to the cash flows",
     "6.863229",
     "years"
    ],
    [
     "Modified duration",
     "Macaulay / (1 + y/f)",
     "6.706168",
     "percent price change per 100 percent yield change"
    ],
    [
     "Money duration",
     "Modified duration * full price",
     "670.762576",
     "price units per unit of yield, per 100 of par"
    ],
    [
     "DV01 (PVBP)",
     "Money duration * 0.0001",
     "0.067076",
     "price units per basis point, per 100 of par"
    ],
    [
     "DV01 on 10,000,000 par",
     "DV01 * par / 100",
     "6,707.63",
     "currency per basis point"
    ],
    [
     "Convexity",
     "Second derivative of price scaled by price",
     "53.827761",
     "per unit of yield squared"
    ],
    [
     "Effective duration, 1bp bump",
     "(P_minus - P_plus) / (2 * P * 0.0001)",
     "6.706169",
     "years"
    ],
    [
     "Effective convexity, 1bp bump",
     "(P_minus + P_plus - 2P) / (P * 0.0001^2)",
     "53.827765",
     "per unit of yield squared"
    ],
    [
     "Spread duration",
     "Sensitivity to a parallel shift in the Z-spread",
     "6.698219",
     "years"
    ],
    [
     "Years to maturity",
     "Actual days / 365",
     "8.224658",
     "years"
    ]
   ]
  },
  {
   "title": "The second-order approximation against an exact reprice",
   "intro": "First order is -D_mod * dy. Second order adds 0.5 * Cx * dy^2, with D_mod = 6.706168 and Cx = 53.827761. All figures are percentages of the full price of 100.021739. Note the asymmetry in the first-order column: it is symmetric by construction, while the exact reprice is not, and the entire difference is what convexity measures.",
   "columns": [
    "Yield shift, basis points",
    "Exact full price",
    "Exact percent change",
    "First order only",
    "First plus second order",
    "Error of the second-order estimate"
   ],
   "rows": [
    [
     "-200",
     "114.579572",
     "+14.554669",
     "+13.412336",
     "+14.488891",
     "+0.065778"
    ],
    [
     "-100",
     "107.006592",
     "+6.983335",
     "+6.706168",
     "+6.975307",
     "+0.008028"
    ],
    [
     "-50",
     "103.443843",
     "+3.421360",
     "+3.353084",
     "+3.420369",
     "+0.000992"
    ],
    [
     "-25",
     "101.715594",
     "+1.693486",
     "+1.676542",
     "+1.693363",
     "+0.000123"
    ],
    [
     "-10",
     "100.695202",
     "+0.673316",
     "+0.670617",
     "+0.673308",
     "+0.000008"
    ],
    [
     "-1",
     "100.088842",
     "+0.067089",
     "+0.067062",
     "+0.067089",
     "+0.000000"
    ],
    [
     "+1",
     "99.954690",
     "-0.067035",
     "-0.067062",
     "-0.067035",
     "-0.000000"
    ],
    [
     "+10",
     "99.353661",
     "-0.667933",
     "-0.670617",
     "-0.667925",
     "-0.000008"
    ],
    [
     "+25",
     "98.361536",
     "-1.659843",
     "-1.676542",
     "-1.659721",
     "-0.000122"
    ],
    [
     "+50",
     "96.734256",
     "-3.286768",
     "-3.353084",
     "-3.285799",
     "-0.000969"
    ],
    [
     "+100",
     "93.575647",
     "-6.444691",
     "-6.706168",
     "-6.437029",
     "-0.007662"
    ],
    [
     "+200",
     "87.623344",
     "-12.395700",
     "-13.412336",
     "-12.335781",
     "-0.059919"
    ]
   ]
  },
  {
   "title": "Key-rate durations of the reference bond",
   "intro": "Computed on a flat zero curve at 4.684070 percent, which by construction reproduces the bond's full price of 100.021739 exactly. Each key rate is shocked by one basis point with a triangular weighting that is 1 at its own maturity and falls linearly to 0 at the neighbouring key rates, extended flat below 2 years and above 10. Because the weights sum to 1 at every maturity, the key-rate durations sum to the parallel-shift duration, and they do: 6.706168 against 6.706168.",
   "columns": [
    "Key rate",
    "Key-rate duration",
    "Partial DV01 per 100 of par",
    "Partial DV01 on 10,000,000 par",
    "Share of total"
   ],
   "rows": [
    [
     "2 years",
     "0.254369",
     "0.002544",
     "254.42",
     "3.793 percent"
    ],
    [
     "5 years",
     "2.646749",
     "0.026473",
     "2,647.32",
     "39.467 percent"
    ],
    [
     "10 years",
     "3.805051",
     "0.038059",
     "3,805.88",
     "56.740 percent"
    ],
    [
     "Sum",
     "6.706168",
     "0.067076",
     "6,707.63",
     "100.000 percent"
    ],
    [
     "Modified duration for comparison",
     "6.706168",
     "0.067076",
     "6,707.63",
     ""
    ]
   ]
  },
  {
   "title": "A DV01-neutral hedge, and what it leaves behind",
   "intro": "Long 10,000,000 par of the reference bond against a short of 27,425,126 par of the hedge instrument, an illustrative 2.750 percent bond maturing 2029-05-15 quoted at 95.000, yielding 4.730886 percent with a DV01 of 0.024458 per 100 of par. The ratio is 2.742513, set so the two DV01s match at 6,707.63 each. Both legs are shifted by the same amount in yield. The net column is not zero away from the origin because the reference bond has convexity of 53.827761 against the hedge's 7.940756, and the residual is long convexity in both directions.",
   "columns": [
    "Yield shift, basis points",
    "Reference bond leg, 10,000,000 par long",
    "Hedge leg, short",
    "Net profit and loss"
   ],
   "rows": [
    [
     "-200",
     "1,455,783.29",
     "-1,384,266.81",
     "71,516.48"
    ],
    [
     "-100",
     "698,485.30",
     "-681,318.46",
     "17,166.84"
    ],
    [
     "-50",
     "342,210.42",
     "-338,004.32",
     "4,206.10"
    ],
    [
     "-25",
     "169,385.45",
     "-168,344.42",
     "1,041.03"
    ],
    [
     "-10",
     "67,346.24",
     "-67,180.67",
     "165.57"
    ],
    [
     "-1",
     "6,710.32",
     "-6,708.67",
     "1.65"
    ],
    [
     "+1",
     "-6,704.93",
     "6,706.58",
     "1.65"
    ],
    [
     "+10",
     "-66,807.84",
     "66,972.09",
     "164.25"
    ],
    [
     "+25",
     "-166,020.34",
     "167,040.79",
     "1,020.44"
    ],
    [
     "+50",
     "-328,748.27",
     "332,789.66",
     "4,041.39"
    ],
    [
     "+100",
     "-644,609.25",
     "660,457.88",
     "15,848.64"
    ],
    [
     "+200",
     "-1,239,839.47",
     "1,300,793.57",
     "60,954.10"
    ]
   ]
  },
  {
   "title": "Portfolio aggregation, 60 percent reference bond and 40 percent hedge instrument by market value",
   "intro": "Duration and convexity aggregate linearly in market-value weights; yield does not. The weighted-average yield in the third row is a convention, not the portfolio's internal rate of return, and the two differ whenever the holdings differ in maturity.",
   "columns": [
    "Quantity",
    "Reference bond",
    "Hedge instrument",
    "Portfolio"
   ],
   "rows": [
    [
     "Weight by full-price market value",
     "0.60",
     "0.40",
     "1.00"
    ],
    [
     "Full price per 100 of par",
     "100.021739",
     "95.777174",
     ""
    ],
    [
     "Yield, nominal semiannual",
     "4.684070 percent",
     "4.730886 percent",
     "4.702797 percent as a weighted average"
    ],
    [
     "Modified duration",
     "6.706168",
     "2.553631",
     "5.045153"
    ],
    [
     "Convexity",
     "53.827761",
     "7.940756",
     "35.472959"
    ],
    [
     "DV01 per 1 of market value",
     "0.000670617",
     "0.000255363",
     "0.000504515"
    ],
    [
     "DV01 on 1,000,000 of market value",
     "670.62",
     "255.36",
     "504.52"
    ],
    [
     "Contribution to portfolio duration",
     "4.023701",
     "1.021452",
     "5.045153"
    ]
   ]
  }
 ],
 "entries": [
  {
   "id": "macaulay-duration",
   "term": "Macaulay duration",
   "definition": "The present-value-weighted average time to a bond's cash flows, in years. It is a property of the schedule and the discount rate, not a sensitivity, and it becomes one only after the modification in the next entry.",
   "formula": "D_mac = sum over k of (n_k/f) * PV_k / P_full, where PV_k = CF_k * (1 + y/f)^-n_k",
   "fields": [
    {
     "label": "Worked",
     "value": "Sum of (n_k/2)*PV_k over the 17 flows = 686.472072, divided by P_full = 100.021739, gives 6.863229 years",
     "mono": true
    },
    {
     "label": "Largest single contribution",
     "value": "The redemption flow: ((16.434783/2) * 69.891957) / 100.021739 = 5.742047 years of the total",
     "mono": true
    },
    {
     "label": "Coupons together",
     "value": "1.121181 years",
     "mono": true
    },
    {
     "label": "Against maturity",
     "value": "6.863229 years against 8.224658 years to maturity, or 83.45 percent of remaining life",
     "mono": true
    }
   ],
   "notes": [
    "On this bond 83.7 percent of the duration comes from the single redemption payment. That is why duration is insensitive to the coupon schedule and highly sensitive to maturity, and why a strip and a coupon bond of the same maturity have such different numbers.",
    "Macaulay duration is measured in years and is the horizon at which a bond is immunised against a one-off parallel yield shift: the price loss and the reinvestment gain offset exactly, to first order. That is its original meaning and it is a different statement from the sensitivity interpretation.",
    "It falls as yield rises, because higher discounting weights the near flows more heavily. Quoting a duration without the yield it was computed at is quoting an incomplete number.",
    "The n_k/f conversion from periods to years is where frequency errors enter. A duration computed in periods and reported as years will be out by a factor of f, which on a semiannual bond is a factor of two and therefore usually noticed."
   ],
   "sameAs": [
    "https://www.wikidata.org/wiki/Q579128",
    "https://en.wikipedia.org/wiki/Duration_(finance)"
   ],
   "citations": []
  },
  {
   "id": "modified-duration",
   "term": "Modified duration",
   "definition": "The percentage change in full price for a one-unit change in yield, taken with the opposite sign. It is Macaulay duration divided by one plus the periodic yield, and the division is the entire content of the word modified.",
   "formula": "D_mod = -(1/P_full) * dP/dy = D_mac / (1 + y/f)",
   "fields": [
    {
     "label": "Worked",
     "value": "6.863229 / (1 + 0.023420352) = 6.706168",
     "mono": true
    },
    {
     "label": "Interpretation",
     "value": "A 1 basis point rise in yield reduces the full price by about 0.067062 percent",
     "mono": true
    },
    {
     "label": "Check against a reprice",
     "value": "Exact reprice at +1 bp gives -0.067035 percent against the first-order estimate of -0.067062 percent",
     "mono": true
    },
    {
     "label": "Check at +100 bp",
     "value": "Exact -6.444691 percent against the first-order estimate of -6.706168 percent, an error of +0.261476 percentage points",
     "mono": true
    }
   ],
   "notes": [
    "Modified duration is a percentage sensitivity of the full price, not of the quoted price. Applying it to a quoted price is a small error here, roughly the ratio of accrued to price, and a large one on a bond deep into a coupon period.",
    "The linear estimate always overstates the loss from a rise and understates the gain from a fall, because the true price function is convex. The error is second order, so it is negligible at one basis point and material at one hundred, exactly as the comparison table shows.",
    "The divisor (1 + y/f) makes modified duration smaller than Macaulay, so a portfolio matched on one is not matched on the other unless the yields are equal. Mixing the two across a hedge introduces a bias of roughly y/f, which is over two percent of the duration at these levels.",
    "For a bond with embedded options this quantity is still computable and no longer answers the question, because the cash flows themselves move with yield. Effective duration is the replacement."
   ],
   "sameAs": [
    "https://www.wikidata.org/wiki/Q579128",
    "https://en.wikipedia.org/wiki/Duration_(finance)"
   ],
   "citations": []
  },
  {
   "id": "money-duration-dv01",
   "term": "Money duration, DV01 and PVBP",
   "definition": "The same sensitivity expressed in currency rather than percent. Money duration is the price change per unit of yield; DV01, also written PVBP or dollar value of a basis point, is the price change per basis point. These are the numbers a risk limit is set in.",
   "formula": "Money duration = D_mod * P_full. DV01 = money duration * 0.0001. On a notional N: DV01_position = DV01 * N/100",
   "fields": [
    {
     "label": "Worked, money duration",
     "value": "6.706168 * 100.021739 = 670.762576 per 100 of par",
     "mono": true
    },
    {
     "label": "Worked, DV01",
     "value": "670.762576 * 0.0001 = 0.067076 per 100 of par",
     "mono": true
    },
    {
     "label": "On 10,000,000 par",
     "value": "0.067076 * 10,000,000/100 = 6,707.63 per basis point",
     "mono": true
    },
    {
     "label": "Money duration on 10,000,000",
     "value": "6.706168 * 10,002,173.91 = 67,076,257.61",
     "mono": true
    },
    {
     "label": "In thirty-seconds",
     "value": "One basis point is 2.1464 thirty-seconds of a point on this bond, and one thirty-second is 0.4659 basis points",
     "mono": true
    }
   ],
   "notes": [
    "DV01 is the only one of these measures that is additive across instruments without a weighting scheme, which is why risk systems carry DV01 by bucket and derive duration from it rather than the other way round.",
    "The last field is the practical conversion on a Treasury desk: the bond ticks in thirty-seconds and risk is run in basis points, and on this bond a tick is a little under half a basis point. The ratio changes with duration, so it is instrument-specific and worth knowing per line.",
    "DV01 quoted per 100 of par and DV01 quoted per million of par differ by a factor of 10,000, and both appear in production systems. The units are the most common source of a hedge that is out by four orders of magnitude, which at least fails loudly.",
    "Because DV01 is proportional to full price, a position's DV01 changes as the market moves even with the notional held constant. A hedge set once and not rebalanced drifts, and the drift is second order in the move, which is the same quantity convexity measures."
   ],
   "sameAs": [
    "https://www.wikidata.org/wiki/Q4867573",
    "https://en.wikipedia.org/wiki/Basis_point_value"
   ],
   "citations": []
  },
  {
   "id": "convexity",
   "term": "Convexity",
   "definition": "The second derivative of price with respect to yield, scaled by price. It measures how much duration itself changes as yield moves, and therefore how far the linear estimate will be wrong over a given shift.",
   "formula": "Cx = (1/P_full) * d2P/dy2 = sum over k of n_k*(n_k+1)*PV_k / (f^2 * (1+y/f)^2 * P_full)",
   "fields": [
    {
     "label": "Worked, numerator",
     "value": "Sum of n_k*(n_k+1)*PV_k = 22556.349247",
     "mono": true
    },
    {
     "label": "Worked",
     "value": "22556.349247 / (4 * 1.047389217 * 100.021739) = 53.827761",
     "mono": true
    },
    {
     "label": "Check by bumping",
     "value": "(P_minus + P_plus - 2P)/(P * dy^2) at 1 basis point = 53.827765",
     "mono": true
    },
    {
     "label": "Value at 100 bp",
     "value": "0.5 * 53.827761 * 0.01^2 = 0.269139 percent of price, recovered in either direction",
     "mono": true
    },
    {
     "label": "Value at 200 bp",
     "value": "0.5 * 53.827761 * 0.02^2 = 1.076555 percent",
     "mono": true
    }
   ],
   "notes": [
    "Convexity is a second-order term, so its contribution scales with the square of the move. It is worth nothing at one basis point and over one percent of price at two hundred, which is why it is invisible in daily marks and decisive in a repricing.",
    "For an option-free bond convexity is always positive: the holder gains more from a fall in yields than they lose from an equal rise. That asymmetry is worth paying for, and the price paid is a lower yield, which is why a convexity comparison is only meaningful at equal yield.",
    "Convexity rises with maturity and falls with coupon, so among bonds of equal duration the long low-coupon one has the most. That is the basis of a barbell against a bullet: match duration, harvest the convexity difference, pay for it in yield.",
    "The scaling convention varies. Some systems report the raw second derivative, some divide by 100, and some report convexity in years squared. A convexity number of 53.8 and one of 0.538 may be the same quantity, and the only way to know is to reprice."
   ],
   "sameAs": [
    "https://www.wikidata.org/wiki/Q1783548",
    "https://en.wikipedia.org/wiki/Bond_convexity"
   ],
   "citations": []
  },
  {
   "id": "second-order-approximation",
   "term": "The second-order price approximation, and where it fails",
   "definition": "The standard Taylor expansion of price in yield. Two terms are enough for almost any move a risk system needs to represent, and the residual error is a precise, computable quantity rather than a mystery.",
   "formula": "dP/P = -D_mod * dy + 0.5 * Cx * dy^2, plus terms of order dy^3",
   "fields": [
    {
     "label": "Worked at +100 bp",
     "value": "-6.706168 * 0.01 + 0.5 * 53.827761 * 0.0001 = -6.706168 + +0.269139 = -6.437029 percent",
     "mono": true
    },
    {
     "label": "Exact at +100 bp",
     "value": "-6.444691 percent, so the residual is -0.007662 percentage points",
     "mono": true
    },
    {
     "label": "Worked at -200 bp",
     "value": "+14.488891 percent against an exact +14.554669 percent",
     "mono": true
    },
    {
     "label": "First order alone at -200 bp",
     "value": "+13.412336 percent, an error of +1.142333 percentage points",
     "mono": true
    },
    {
     "label": "Ratio",
     "value": "Adding the convexity term cuts the 200 basis point error by a factor of about 17",
     "mono": true
    }
   ],
   "notes": [
    "The third-order residual is around six hundredths of a percentage point at two hundred basis points on this bond. For any purpose short of pricing a large option book, two terms is the right stopping point and the third term is noise against the uncertainty in the inputs.",
    "The approximation is a function of yield, so it is a single-instrument statement. Applied to a portfolio it silently assumes every yield moves by the same dy, which is a parallel-shift assumption and the reason key-rate durations exist.",
    "Sign conventions bite here. dy in decimal against dy in basis points changes the second term by a factor of a hundred million, and the resulting number is either absurdly large or indistinguishable from zero, which makes the error easy to spot and easy to introduce.",
    "Reprice rather than approximate whenever the exact function is available and cheap, which for a fixed-rate bond it always is. The approximation exists for aggregation across a book and for attribution, not for pricing a single line."
   ]
  },
  {
   "id": "effective-duration",
   "term": "Effective duration",
   "definition": "Duration measured by shifting the whole yield curve, revaluing with a model that lets the cash flows respond, and taking the symmetric difference. For an option-free bond it reproduces modified duration; for a callable or putable bond it is the only meaningful duration.",
   "formula": "Effective duration = (P_minus - P_plus) / (2 * P_0 * dr), where P_minus and P_plus are model revaluations under a downward and upward curve shift of dr",
   "fields": [
    {
     "label": "Check on the option-free reference bond, 25 bp",
     "value": "P_minus = 101.715594, P_plus = 98.361536, so effective duration = 6.706658 against an analytic 6.706168",
     "mono": true
    },
    {
     "label": "Same check at 1 bp",
     "value": "6.706169, converging on the analytic value",
     "mono": true
    },
    {
     "label": "Illustrative callable case, inputs",
     "value": "Assume an option model returns P_minus = 101.365 and P_plus = 98.615 at a 25 basis point curve shift, against P_0 = 100.021739. These two prices are supplied as inputs and are not computed anywhere in this corpus",
     "mono": true
    },
    {
     "label": "Worked, illustrative callable case",
     "value": "(101.365 - 98.615) / (2 * 100.021739 * 0.0025) = 2.750000 / 0.500108696 = 5.498805",
     "mono": true
    },
    {
     "label": "Comparison",
     "value": "5.498805 against the option-free 6.706168, so the embedded call removes about 18.0 percent of the duration",
     "mono": true
    },
    {
     "label": "Effective DV01",
     "value": "5.498805 * 100.021739 * 0.0001 = 0.055000 against 0.067076 option-free",
     "mono": true
    }
   ],
   "notes": [
    "The first two fields are the test that a bumping implementation is correct: on an option-free bond effective duration must converge on modified duration as the shift shrinks. If it does not, the bug is in the revaluation, not in the concept.",
    "The size of the shift is a real choice. Too small and model noise dominates; too large and the measure averages over a region where the option's behaviour changes. 25 to 50 basis points is the usual compromise and the number should be disclosed alongside the duration.",
    "Effective duration for a callable is always below its option-free duration, because the call truncates the upside as rates fall. For a putable bond the inequality reverses. Neither statement needs a model to establish; only the magnitude does.",
    "The two model prices are model output, and a duration built on them inherits every assumption in the model, notably the volatility surface and the assumed exercise rule. Two vendors will report materially different effective durations for the same callable and both will be internally consistent.",
    "The 101.365 and 98.615 used above are illustrative inputs chosen to make the arithmetic legible. They are not a valuation of anything."
   ],
   "sameAs": [
    "https://www.wikidata.org/wiki/Q579128",
    "https://en.wikipedia.org/wiki/Duration_(finance)"
   ],
   "citations": []
  },
  {
   "id": "effective-convexity",
   "term": "Effective convexity and negative convexity",
   "definition": "The same bumping applied to the second difference. Its distinguishing feature is that it can be negative, which no option-free bond's convexity can be: a callable bond gains less from a rally than it loses in a selloff.",
   "formula": "Effective convexity = (P_minus + P_plus - 2*P_0) / (P_0 * dr^2)",
   "fields": [
    {
     "label": "Check on the option-free reference bond, 25 bp",
     "value": "(101.715594 + 98.361536 - 2*100.021739) / (100.021739 * 0.0025^2) = 53.830047 against an analytic 53.827761",
     "mono": true
    },
    {
     "label": "Worked, illustrative callable case",
     "value": "(101.365 + 98.615 - 2*100.021739) = -0.063478, divided by 100.021739 * 0.0025^2 = 0.000625136",
     "mono": true
    },
    {
     "label": "Result",
     "value": "-101.5431, negative",
     "mono": true
    },
    {
     "label": "What that costs at 100 bp",
     "value": "0.5 * -101.5431 * 0.01^2 = -0.507716 percent of price, a loss in both directions",
     "mono": true
    },
    {
     "label": "Against the option-free bond",
     "value": "+0.269139 percent, a gain in both directions, so the swing is 0.776855 percentage points",
     "mono": true
    }
   ],
   "notes": [
    "Negative convexity means the position loses on a large move whichever way it goes. It is the arithmetic signature of being short an option, and it is why a callable bond's yield premium is not free money.",
    "The numerator is a difference of large, nearly-equal numbers, so effective convexity is numerically delicate. A model with pricing noise of a few hundredths of a point produces a convexity that is wrong by tens of units at a 25 basis point shift. Widening the shift stabilises the estimate and biases it.",
    "A duration-matched swap of a callable for an option-free bond is a short convexity position with no duration signature at all. It looks flat on a duration report and is not flat.",
    "Mortgage pass-throughs are the largest population of negatively convex instruments and their negative convexity comes from prepayment rather than from a stated call schedule, so it is a behavioural model output rather than a contractual one.",
    "The two model prices used here are illustrative inputs. They are not derived from any model in this corpus and should not be read as a valuation."
   ],
   "sameAs": [
    "https://www.wikidata.org/wiki/Q1783548",
    "https://en.wikipedia.org/wiki/Bond_convexity"
   ],
   "citations": []
  },
  {
   "id": "key-rate-duration",
   "term": "Key-rate duration",
   "definition": "The partial sensitivity of price to a shift in one point of the curve, holding every other point fixed. It decomposes a single duration figure into where on the curve the exposure actually sits, which a parallel-shift duration cannot express at all.",
   "formula": "KRD_i = -(1/P) * dP/dz_i, computed by shocking key rate i by one basis point with a triangular weight that is 1 at maturity t_i and falls linearly to 0 at t_(i-1) and t_(i+1). Because the weights sum to 1 at every maturity, sum of KRD_i = parallel-shift duration",
   "fields": [
    {
     "label": "Worked, 2-year key rate",
     "value": "KRD = 0.254369, partial DV01 0.002544 per 100 of par",
     "mono": true
    },
    {
     "label": "Worked, 5-year key rate",
     "value": "KRD = 2.646749, partial DV01 0.026473",
     "mono": true
    },
    {
     "label": "Worked, 10-year key rate",
     "value": "KRD = 3.805051, partial DV01 0.038059",
     "mono": true
    },
    {
     "label": "Sum",
     "value": "0.254369 + 2.646749 + 3.805051 = 6.706168, against a modified duration of 6.706168",
     "mono": true
    },
    {
     "label": "Concentration",
     "value": "56.74 percent of the exposure sits on the 10-year key rate and only 3.79 percent on the 2-year, for a bond maturing in 8.22 years",
     "mono": true
    }
   ],
   "notes": [
    "The sum identity is the correctness test, and it holds only if the triangular weights partition unity across every maturity where the bond has a cash flow. A key-rate set that stops short of the bond's maturity leaks exposure and the sum comes out below the parallel duration.",
    "The concentration in the last field is the reason a duration-matched hedge can lose money on a curve move. A 8.2-year bond hedged with a 2-year note has the same total duration and almost none of the same key-rate profile.",
    "Key rates are a choice, not a property of the bond. Two systems using different key-rate sets report different decompositions of the same identical total, and neither is wrong. Compare decompositions only within one framework.",
    "The triangular weighting is the standard construction but not the only one. Shocking a single zero rate in isolation, with no interpolation spillover, gives partial durations that do not sum to the parallel duration, and that discrepancy is sometimes mistaken for a modelling error."
   ]
  },
  {
   "id": "spread-duration",
   "term": "Spread duration",
   "definition": "Sensitivity of price to a parallel shift in the credit spread, holding the underlying curve fixed. For a fixed-rate bond it is numerically close to modified duration; for a floating-rate note the two are entirely different numbers, and that is the point of keeping them separate.",
   "formula": "Spread duration = -(1/P_full) * dP/ds, where s is the constant spread added to every zero rate. Spread DV01 = spread duration * P_full * 0.0001",
   "fields": [
    {
     "label": "Worked",
     "value": "Reference bond at a Z-spread of 5.3240 basis points: shifting the spread by plus and minus one basis point gives 99.954769 and 100.088763",
     "mono": true
    },
    {
     "label": "Result",
     "value": "(100.088763 - 99.954769) / (2 * 100.021739 * 0.0001) = 6.698219",
     "mono": true
    },
    {
     "label": "Against modified duration",
     "value": "6.698219 against 6.706168, a difference of 0.007949",
     "mono": true
    },
    {
     "label": "Spread DV01",
     "value": "6.698219 * 100.021739 * 0.0001 = 0.066997 per 100 of par, or 6,699.67 on 10,000,000",
     "mono": true
    },
    {
     "label": "On a floater",
     "value": "An illustrative 3-year quarterly floater priced at 99.500 has a spread duration of 2.776718 and a rate duration of only 0.124227",
     "mono": true
    }
   ],
   "notes": [
    "For a fixed-rate bullet, spread duration and modified duration differ only because the spread is added to a curve while the yield is a single rate. The gap is small and structural, not an error.",
    "The distinction is essential for floaters. A floating-rate note has almost no rate duration, because the coupon resets, and close to full-maturity spread duration, because the margin does not. A risk report that carries one number for both understates a floater book's credit exposure by a factor of twenty or more.",
    "Spread duration says nothing about the probability of a spread move. It is a sensitivity, and multiplying it by an assumed spread volatility to get a risk figure imports an assumption that should be stated separately.",
    "For a callable bond, spread duration is also model-dependent, because widening the spread changes the exercise decision. Bumping the spread in a static discounting model and calling the result spread duration ignores that."
   ]
  },
  {
   "id": "portfolio-duration",
   "term": "Aggregating duration across a portfolio",
   "definition": "Duration and convexity are market-value-weighted averages; yield is not. The distinction matters because the weighted-average yield is reported everywhere and is not the portfolio's internal rate of return.",
   "formula": "D_portfolio = sum of w_i * D_i, where w_i is holding i's full-price market value as a fraction of the total. DV01_portfolio = sum of DV01_i, with no weighting at all",
   "fields": [
    {
     "label": "Setup",
     "value": "60 percent reference bond at duration 6.706168 and 40 percent hedge instrument at duration 2.553631, weighted by full-price market value",
     "mono": true
    },
    {
     "label": "Worked, duration",
     "value": "0.60 * 6.706168 + 0.40 * 2.553631 = 5.045153",
     "mono": true
    },
    {
     "label": "Worked, convexity",
     "value": "0.60 * 53.827761 + 0.40 * 7.940756 = 35.472959",
     "mono": true
    },
    {
     "label": "Worked, DV01 on 1,000,000 of market value",
     "value": "0.60 * 670.62 + 0.40 * 255.36 = 504.52",
     "mono": true
    },
    {
     "label": "Weighted-average yield",
     "value": "0.60 * 4.684070 + 0.40 * 4.730886 = 4.702797 percent, a convention rather than an internal rate of return",
     "mono": true
    }
   ],
   "notes": [
    "The weights must be full-price market values, not par amounts and not clean-price values. Par weighting is wrong by the ratio of prices, which across a portfolio of premium and discount bonds is a systematic distortion rather than noise.",
    "DV01 aggregates by simple addition and is therefore the safer primitive. Build the portfolio DV01 from positions, then divide by market value to report a duration, rather than averaging durations and multiplying back.",
    "The linearity is exact for a parallel shift and only for a parallel shift. Key-rate DV01s aggregate by addition within each bucket and preserve the curve information that a single portfolio duration destroys.",
    "Convexity aggregates linearly too, which means a barbell and a bullet of identical portfolio duration can be compared directly on portfolio convexity. That comparison is the entire content of the barbell trade."
   ]
  },
  {
   "id": "dv01-neutral-hedge",
   "term": "The duration-neutral hedge ratio between two bonds",
   "definition": "The par amount of one bond that offsets the interest-rate exposure of another, to first order. It is the ratio of their DV01s, and nothing else enters.",
   "formula": "Hedge par amount = N_target * DV01_target / DV01_hedge, with both DV01s stated per the same unit of par. Equivalently N_hedge/N_target = (D_mod,target * P_full,target) / (D_mod,hedge * P_full,hedge)",
   "fields": [
    {
     "label": "Target",
     "value": "10,000,000 par of the reference bond: DV01 0.067076 per 100, so 6,707.63 per basis point",
     "mono": true
    },
    {
     "label": "Hedge instrument",
     "value": "Illustrative 2.750 percent of 2029-05-15 at 95.000, yielding 4.730886 percent, modified duration 2.553631, DV01 0.024458 per 100",
     "mono": true
    },
    {
     "label": "Worked, hedge ratio",
     "value": "0.067076 / 0.024458 = 2.742513",
     "mono": true
    },
    {
     "label": "Hedge par amount",
     "value": "10,000,000 * 2.742513 = 27,425,126 par",
     "mono": true
    },
    {
     "label": "Check",
     "value": "27,425,126 * 0.024458/100 = 6,707.63 per basis point, matching the target's 6,707.63",
     "mono": true
    },
    {
     "label": "Residual at 100 bp",
     "value": "15,848.64 on a parallel move up, and 17,166.84 down",
     "mono": true
    }
   ],
   "notes": [
    "The hedge ratio exceeds one here because the hedge instrument is shorter: it takes almost three times the par amount of a 2.7-year bond to match the DV01 of an 8.2-year one. A hedge sized on par amount rather than DV01 would be under-hedged by roughly a factor of that ratio.",
    "The residual in the last field is positive in both directions and is exactly the convexity difference. A DV01-neutral trade between bonds of different maturity is never convexity-neutral, and the resulting position is long gamma when the longer bond is held long.",
    "The ratio is computed at today's prices and yields, so it changes as the market moves and as the two bonds age at different rates. The shorter leg's duration decays faster, so the hedge drifts toward under-hedged and needs rebalancing in one direction predictably.",
    "First order means parallel. This hedge is neutral to a parallel shift and fully exposed to a change in curve slope, which for a 2.7-year against 8.2-year pair is the dominant risk that remains. Key-rate DV01s show that residual explicitly; the single-number hedge hides it."
   ]
  },
  {
   "id": "yield-beta-hedge",
   "term": "Yield-beta adjustment to a hedge ratio",
   "definition": "A refinement that drops the assumption that both yields move by the same amount. If the hedge instrument's yield historically moves by beta times the target's, the DV01 ratio is divided by beta.",
   "formula": "Hedge par amount = N_target * (DV01_target / DV01_hedge) / beta, where beta is the regression slope of the hedge yield change on the target yield change",
   "fields": [
    {
     "label": "Worked, beta equal to 1.00",
     "value": "beta = 1.00: ratio 2.742513, hedge par 27,425,126",
     "mono": true
    },
    {
     "label": "Hedge less volatile",
     "value": "beta = 0.90: ratio 3.047236, hedge par 30,472,362, a larger position",
     "mono": true
    },
    {
     "label": "Hedge more volatile",
     "value": "beta = 1.10: ratio 2.493193, hedge par 24,931,933, a smaller position",
     "mono": true
    },
    {
     "label": "Sensitivity",
     "value": "A 0.10 error in beta changes the hedge par amount by roughly 3.05 million, or 11.1 percent",
     "mono": true
    }
   ],
   "notes": [
    "Beta is estimated, and every estimate carries a window choice, a differencing choice and a sample. Two desks will produce different betas on the same pair, and the difference between beta 0.90 and 1.00 is around eleven percent of the hedge size, which is larger than most of the effects the adjustment is meant to capture.",
    "The adjustment is trying to do the job of a two-instrument hedge with one instrument. If the curve exposure matters enough to warrant a beta, it usually warrants hedging with two points on the curve and matching key-rate DV01s instead.",
    "Beta estimated on yield changes and beta estimated on price returns are different numbers and are not interchangeable in this formula. The formula wants the yield-change slope.",
    "A beta materially different from one is a statement that the curve is expected to move non-parallel in a specific, stable way. That is a view. Putting a view inside a hedge ratio makes it hard to see and harder to size."
   ]
  },
  {
   "id": "convexity-mismatch",
   "term": "What a duration-matched trade leaves behind",
   "definition": "Two bonds matched on DV01 still differ in every higher derivative. The largest residual is convexity, and it is a real, sized, directional exposure that a duration report shows as zero.",
   "formula": "Net profit and loss on a DV01-neutral pair for a parallel shift dy = 0.5 * (Cx_long * MV_long - Cx_short * MV_short) * dy^2, to second order",
   "fields": [
    {
     "label": "Setup",
     "value": "Long 10,000,000 par of the reference bond, market value 10,002,173.91, convexity 53.827761. Short 27,425,126 par of the hedge, market value 26,267,010.44, convexity 7.940756",
     "mono": true
    },
    {
     "label": "Worked, second-order estimate at 100 bp",
     "value": "0.5 * (53.827761 * 10,002,173.91 - 7.940756 * 26,267,010.44) * 0.0001 = 16,490.74",
     "mono": true
    },
    {
     "label": "Exact reprice at +100 bp",
     "value": "15,848.64",
     "mono": true
    },
    {
     "label": "Exact reprice at -100 bp",
     "value": "17,166.84",
     "mono": true
    },
    {
     "label": "Exact reprice at 200 bp",
     "value": "60,954.10 up and 71,516.48 down",
     "mono": true
    },
    {
     "label": "Symmetry",
     "value": "Positive in both directions and roughly quadratic in the move, which is the signature of a long convexity position",
     "mono": true
    }
   ],
   "notes": [
    "The exposure is nearly symmetric because it is second order, and it is therefore invisible in any risk measure that is first order. A book of duration-matched maturity swaps can be flat on every duration report and carry a substantial convexity position.",
    "Long convexity is not free. The long leg's yield is lower than a convexity-adjusted comparison would justify, and the position pays for its gamma in carry. Whether the trade is good depends on whether the realised volatility exceeds what that yield concession implies.",
    "The second-order estimate and the exact reprice differ here by a small amount that grows with the size of the shift, and the difference is the third-order term. For hedge sizing the second-order estimate is adequate; for profit and loss attribution it is not.",
    "Curve risk usually dominates convexity risk on a two-point maturity swap of this shape. Compute both before deciding which one the trade is actually expressing."
   ]
  }
 ]
}