Specifying Fixed Income Contracts

Overview

duration

Davinci Pydantic Quantlib Wrapper

import contracts as ct import qcalendar as cl import term_structure as ts import duration as dt schedule = ct.Schedule(start_date='2000-01-01', end_date='2030-01-01', frequency= ct.Frequency.Annual, calendar= cl.Calendar.USGovernmentBond, convention=ct.Convention.Following, dateroll=ct.DateRoll.Forward) bond = ct.FixedRateBond(settlement_days=2,face_value=10000, day_count=ct.DayCount.Actual360,coupons=0.05,schedule=schedule) rate = ts.InterestRate(0.005, ct.DayCount.Actual360, ct.Compounding.Compounded, ct.Frequency.Semiannual) mc = dt.macaulay_duration(bond, rate)

Native Quantlib

import QuantLib as ql # Define yield as an InterestRate object ytm_rate = ql.InterestRate(0.0511, ql.Actual365Fixed(), ql.Compounded, ql.Annual) # Calculate Macaulay or Modified duration macaulay_dur = ql.BondFunctions.duration(bond, ytm_rate, ql.Duration.Macaulay) modified_dur = ql.BondFunctions.duration(bond, ytm_rate, ql.Duration.Modified)