QuantLib Day Counts
import QuantLib as ql
# Define two dates
date1 = ql.Date(1, 1, 2025)
date2 = ql.Date(1, 7, 2025)
# Initialize the day counter
dc = ql.Actual360()
# Calculate days and fraction
days = dc.dayCount(date1, date2)
fraction = dc.yearFraction(date1, date2)
Actual/360
# Initialize the day counter
dc = ql.Actual360()
Actual/Actual
# Initialize day counters
isda_dc = ql.ActualActual(ql.ActualActual.ISDA)
isma_dc = ql.ActualActual(ql.ActualActual.ISMA)
afb_dc = ql.ActualActual(ql.ActualActual.AFB)
Thirty/360
dc = ql.Thirty360(ql.Thirty360.USA)
dc = ql.Thirty360(ql.Thirty360.European)
dc = ql.Thirty360(ql.Thirty360.Italian)
Actual/365
dc = ql.Actual365Fixed()
#assumes no leap days
dc = ql.Actual365Fixed(ql.Actual365Fixed.NoLeap)
SimpleDayCounter
day_counter = ql.SimpleDayCounter()
import QuantLib as ql
# 1. Set dates and schedule
today = ql.Date(19, 6, 2026)
ql.Settings.instance().evaluationDate = today
issue_date = ql.Date(15, 1, 2026)
maturity_date = ql.Date(15, 1, 2027)
calendar = ql.UnitedStates(ql.UnitedStates.Settlement)
convention = ql.Following
schedule = ql.Schedule(
issue_date,
maturity_date,
ql.Period(ql.Semiannual),
calendar,
convention,
convention,
ql.DateGeneration.Backward,
False
)
# 2. Define bond parameters
settlement_days = 2
face_amount = 10000.0
coupons = [0.05] # 5% annual rate
day_counter = ql.ActualActual(ql.ActualActual.ISDA)
# 3. Create FixedRateBond
bond = ql.FixedRateBond(
settlement_days,
face_amount,
schedule,
coupons,
day_counter
)
# 4. Extract and print payment amounts and dates
print("--- Cash Flow Schedule ---")
for cashflow in bond.cashflows():
# Attempt to cast as a coupon to see accrual start/end dates
coupon = ql.as_coupon(cashflow)
if coupon:
print(f"Date: {cashflow.date().ISO()} | Type: Coupon | Amount: {cashflow.amount():.2f} | Rate: {coupon.rate():.2%}")
else:
# Fallback to redemption/principal payment
print(f"Date: {cashflow.date().ISO()} | Type: Redemption | Amount: {cashflow.amount():.2f}")