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}")