Convexity

Overview

convexity

Davinci Pydantic Quantlib Wrapper

import contracts as ct import qcalendar as cl import term_structure as ts import duration as dr 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) conv = dr.convexity(bond, rate)

Native Quantlib

import QuantLib as ql # Set evaluation date today = ql.Date(15, 8, 2026) ql.Settings.instance().evaluationDate = today # Define bond parameters settlementDays = 2 faceValue = 100.0 coupon = 0.05 issueDate = ql.Date(15, 8, 2024) maturityDate = ql.Date(15, 8, 2031) calendar = ql.UnitedStates(ql.UnitedStates.GovernmentBond) bsp = ql.ModifiedFollowing dayCounter = ql.ActualActual(ql.ActualActual.Bond) paymentFrequency = ql.Semiannual schedule = ql.Schedule( issueDate, maturityDate, ql.Period(paymentFrequency), calendar, bsp, bsp, ql.DateGeneration.Backward, False ) bond = ql.FixedRateBond( settlementDays, faceValue, schedule, [coupon], dayCounter ) # Calculate convexity at a given yield (e.g., 4.5%) yield_rate = 0.045 convexity = ql.BondFunctions.convexity( bond, yield_rate, dayCounter, ql.Compounded, paymentFrequency )