# Calculate DV01 for a vanilla swal for MXN index using quantlib

I am trying to calculate dv01 for a vanilla swap using quantlib. Its a MXN TIIE Swaps for built an index like

tiie_index = IborIndex('TIIE', Period(28, Days), 2, MXNCurrency(), NullCalendar(), Following, False, Actual360())


which I then pass in the swaphelpers. What I want to know how can I create the similar index for passing to the vanillaswap object. At the moment is Euribor6M(forecastTermStructure) but that doesnt seem right. if I do tiie_index(forecastTermStructure), then it throws an error.

index=Euribor6M(forecastTermStructure)

from QuantLib import *

# global data
calendar = TARGET()
todaysDate = Date(16, April, 2021)
Settings.instance().evaluationDate = todaysDate
settlementDate = Date(20, April, 2021)

# market quotes
deposits = {
(1, Months): 0.04289,
(3, Months): 0.04289,
(6, Months): 0.04345,
(9, Months): 0.04401,

}

swaps = {
(1, Years): 0.04506,
(2, Years): 0.04881,
(3, Years): 0.05262,
(4, Years): 0.05575,
(5, Years): 0.05817,
(7, Years): 0.06212,
(10, Years): 0.06639,
(15, Years): 0.07074,
(20, Years): 0.07303,
(30, Years): 0.0741}

# convert them to Quote objects
for n, unit in deposits.keys():
deposits[(n, unit)] = SimpleQuote(deposits[(n, unit)])
for n, unit in swaps.keys():
swaps[(n, unit)] = SimpleQuote(swaps[(n, unit)])

# build rate helpers

dayCounter = Actual360()
settlementDays = 2
depositHelpers = [DepositRateHelper(QuoteHandle(deposits[(n, unit)]),
Period(n, unit), settlementDays,
calendar, Following,
False, dayCounter)
for n, unit in [(1, Months), (3, Months),
(6, Months), (9, Months)]]

fixedLegFrequency = EveryFourthWeek
fixedLegTenor = Period(28, Days)
fixedLegDayCounter = Actual360()
floatingLegTenor = Period(28, Days)
# create index
tiie_index = IborIndex('TIIE', Period(28, Days), 2, MXNCurrency(), NullCalendar(), Following, False, Actual360())
swapHelpers = [SwapRateHelper(QuoteHandle(swaps[(n, unit)]),
Period(n, unit), calendar,
fixedLegDayCounter, tiie_index)
for n, unit in swaps.keys()]

# term structure handles

# term-structure construction

helpers = depositHelpers + swapHelpers
depoSwapCurve = PiecewiseFlatForward(settlementDate, helpers, Actual360())

swapEngine = DiscountingSwapEngine(discountTermStructure)

# 5Y Swap

nominal = 10000000
maturity = Date(10, June, 2026)
fixedRate = 0.05

#How to create the MX index here?
index = Euribor6M(forecastTermStructure)

fixedSchedule = Schedule(settlementDate, maturity,
fixedLegTenor, calendar,
DateGeneration.Forward, False)
floatingSchedule = Schedule(settlementDate, maturity,
floatingLegTenor, calendar,
DateGeneration.Forward, False)

fixedSchedule, fixedRate, fixedLegDayCounter,
Actual360())
swap.setPricingEngine(swapEngine)

print('NPV')
print(swap.NPV())
print('Rate')
print(swap.fairRate()
shift = 0.0001

temp_fyc_handle = YieldTermStructureHandle(depoSwapCurve)
temp_dyc_handle = YieldTermStructureHandle(depoSwapCurve)
P_p = swap.NPV()

temp_fyc_handle = YieldTermStructureHandle(depoSwapCurve)
temp_dyc_handle = YieldTermStructureHandle(depoSwapCurve)
P_m = swap.NPV()

dv01 = (P_m - P_p) / 2.0
print('Swap DV01')
print(dv01)

• Why are you passing NullCalendar()? i assume you, Mexico has holidays. Commented Apr 19, 2021 at 13:36

index = IborIndex('TIIE', Period(28, Days), 2, MXNCurrency(),

As Dimitri commented, you might also use Mexico() instead of NullCalendar() in both places.