Quantlib Bond with Optioonality

import QuantLib as ql # 1. Set Evaluation Date & Market Curve today = ql.Date(25, ql.June, 2026) ql.Settings.instance().evaluationDate = today rate = 0.05 # 5% flat yield curve for this example day_counter = ql.Actual360() ts_handle = ql.YieldTermStructureHandle(ql.FlatForward(today, rate, day_counter)) # 2. Define the Bond Schedule issue_date = ql.Date(15, ql.January, 2026) maturity_date = ql.Date(15, ql.January, 2036) tenor = ql.Period(ql.Semiannual) calendar = ql.UnitedStates(ql.UnitedStates.GovernmentBond) convention = ql.Following schedule = ql.Schedule( issue_date, maturity_date, tenor, calendar, convention, convention, ql.DateGeneration.Backward, False ) # 3. Define the Callability Schedule # Let's assume the issuer can call the bond at par (100) on or after Jan 15, 2031 callability_schedule = ql.CallabilitySchedule() call_date = ql.Date(15, ql.January, 2031) call_price = 100.0 call_price_type = ql.CallabilityPrice(call_price, ql.CallabilityPrice.Clean) callability = ql.Callability(call_price_type, ql.Callability.Call, call_date) callability_schedule.append(callability) # 4. Construct the CallableFixedRateBond settlement_days = 3 face_amount = 100.0 coupons = [0.05] accrual_day_count = ql.ActualActual(ql.ActualActual.Bond) bond = ql.CallableFixedRateBond( settlement_days, face_amount, schedule, coupons, accrual_day_count, convention, face_amount, issue_date, callability_schedule )