Fixed Income Analytics: Duration, Convexity, and Credit
Module: Fintech AI | Difficulty: Advanced
Duration
Convexity
Price Change
Credit Spread
import numpy as np
class BondAnalytics:
def __init__(self, cashflows, times, yield_to_maturity):
self.cfs = cashflows; self.times = times; self.ytm = yield_to_maturity
def price(self):
return sum(cf / (1+self.ytm)**t for cf, t in zip(self.cfs, self.times))
def duration(self):
p = self.price()
macaulay = sum(t * cf / (1+self.ytm)**t for cf, t in zip(self.cfs, self.times)) / p
modified = macaulay / (1 + self.ytm)
return modified
def convexity(self):
p = self.price()
return sum(t * (t+1) * cf / (1+self.ytm)**t for cf, t in zip(self.cfs, self.times)) / (p * (1+self.ytm)**2)
Research Insight: Duration and convexity are fundamental for fixed income risk management. Duration measures interest rate sensitivity, while convexity captures the curvature. For large rate moves, convexity is crucial β high convexity bonds outperform in both rate declines and increases.