Bootstrapping the Treasury Curve
import QuantLib as ql
# Set evaluation date
calc_date = ql.Date(25, 6, 2026)
ql.Settings.instance().evaluationDate = calc_date
# Define common settings
calendar = ql.UnitedStates(ql.UnitedStates.GovernmentBond)
day_count = ql.ActualActual(ql.ActualActual.ISDA)
business_convention = ql.Following
face_amount = 100
settlement_days = 0
# Helper for a 6-month T-bill
bill_quote = ql.QuoteHandle(ql.SimpleQuote(0.0510)) # 5.10% yield
bill_helper = ql.DepositRateHelper(
bill_quote,
ql.Period(6, ql.Months),
settlement_days,
calendar,
business_convention,
True,
day_count
)
# Helpers for coupon bonds (Example: 2-year and 5-year Treasury notes)
# Assumes you have their par yields
bond_quotes = [ql.SimpleQuote(100.0), ql.SimpleQuote(100.0)] # Quoted as clean prices (often 100 for par)
coupon_rates = [0.048, 0.045] # Coupon rates
maturities = [ql.Date(25, 6, 2028), ql.Date(25, 6, 2031)]
bond_helpers = []
for quote, rate, maturity in zip(bond_quotes, coupon_rates, maturities):
issue_date = calc_date - ql.Period(1, ql.Years) # Or actual issue date
schedule = ql.Schedule(
issue_date, maturity, ql.Period(ql.Semiannual), calendar,
business_convention, business_convention,
ql.DateGeneration.Backward, False
)
bond_helper = ql.FixedRateBondHelper(
ql.QuoteHandle(quote),
settlement_days,
face_amount,
schedule,
[rate],
day_count,
business_convention
)
bond_helpers.append(bond_helper)
helpers = [bill_helper] + bond_helpers
# Combine into a bootstrapped yield curve
yield_curve = ql.PiecewiseLogLinearDiscount(
calc_date,
helpers,
day_count
)
# Enable daily recalculation
yield_curve.enableExtrapolation()
# Get the zero rate at the 2-year mark
target_date = calc_date + ql.Period(2, ql.Years)
time_fraction = day_count.yearFraction(calc_date, target_date)
compounding = ql.Compounded
frequency = ql.Annual
zero_rate = yield_curve.zeroRate(target_date, day_count, compounding, frequency).rate()
discount_factor = yield_curve.discount(target_date)
print(f"2-Year Zero Rate: {zero_rate:.4%}")
print(f"2-Year Discount Factor: {discount_factor:.4f}")