Custom Sensitivity Based Risk Measures Example
Overview
Script
import lib.fixed_income.contracts as ct
import lib.fixed_income.qcalendar as cl
import lib.fixed_income.valuation as vl
import lib.fixed_income.term_structure as ts
import lib.fixed_income.data 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,
coupon=0.05,schedule=schedule)
flows = ct.cash_flows(bond)
data = {"date": "2026-08-10", "1M": 3.79, "1.5M": 3.8, "2M": 3.84, "3M": 3.89, "4M": 3.91, "6M": 4.0, "1Y": 4.04, "2Y": 4.25, "3Y": 4.31, "5Y": 4.41, "7Y": 4.56, "10Y": 4.72, "20Y": 5.25, "30Y": 5.25}
data2 = []
for key in data:
if key != 'date':
item = [key, data[key]]
data2.append(item)
pass
curve1 = ts.BootstrappedCurve(type=ts.BootstrapTypes.PiecewiseLogLinearDiscount,day_count=dt.treasury.DAY_COUNT, data=dt.treasury_term_data(data2))
value1 = vl.value(contract=bond, curve=curve1)
pv1 = vl.present_value(cash_flows=flows,discount_curve=curve1)
#make a small change
delta = 0.01
data2[0][1] += delta
curve2 = ts.BootstrappedCurve(type=ts.BootstrapTypes.PiecewiseLogLinearDiscount,day_count=dt.treasury.DAY_COUNT, data=dt.treasury_term_data(data2))
value2 = vl.value(contract=bond, curve=curve2)
pv2 = vl.present_value(cash_flows=flows,discount_curve=curve2)
diff = pv2-pv1
sensititivy = diff/delta
pass