API Reference

Calendar

Date scheduling, business day calendars, day count fractions, and tenor arithmetic.

Related: Pricing Guide demonstrates Schedule-based cashflow generation with business day calendars.

All types are available via flat import:

from vade import Schedule, BusinessCalendar, dcf, add_tenor, add_business_days

See Conventions for all accepted string parameter values.

Schedule

Financial schedule with regular periods and optional stubs.

Schedule(
    effective,
    termination,
    frequency,
    calendar=None,
    adjuster="modified_following",
    roll_day=None,
    front_stub=None,
    back_stub=None,
    stub_inference="short_front",
)

Parameters

NameTypeDefaultDescription
effectivedatetime.daterequiredStart date of the schedule
terminationdatetime.daterequiredEnd date of the schedule
frequencystrrequiredPeriod frequency ("M", "Q", "S", "A", "Z")
calendarBusinessCalendar or NoneNoneBusiness day calendar (weekends-only if not provided)
adjusterstr"modified_following"Business day adjustment rule
roll_daystr, int, or NoneNoneRoll day convention ("eom", "imm", or 1-31)
front_stubdatetime.date or NoneNoneExplicit front stub date
back_stubdatetime.date or NoneNoneExplicit back stub date
stub_inferencestr"short_front"Stub preference ("short_front", "long_front", "short_back", "long_back")

See Conventions for all accepted values for frequency, adjuster, roll_day, and stub_inference.

Properties

PropertyTypeDescription
.unadjusted_dateslist[datetime.date]Unadjusted period boundary dates
.adjusted_dateslist[datetime.date]Adjusted period boundary dates
.n_periodsintNumber of periods

Methods

MethodReturnsDescription
.has_front_stub()boolWhether the schedule has a front stub
.has_back_stub()boolWhether the schedule has a back stub

Example

import datetime
from vade import Schedule, BusinessCalendar

schedule = Schedule(
    effective=datetime.date(2024, 1, 15),
    termination=datetime.date(2025, 1, 15),
    frequency="Q",
    calendar=BusinessCalendar("NYC"),
)

schedule.n_periods  # 4
schedule.adjusted_dates  # [datetime.date(2024, 1, 16), datetime.date(2024, 4, 15), datetime.date(2024, 7, 15), datetime.date(2024, 10, 15), datetime.date(2025, 1, 15)]
schedule.has_front_stub()  # False
schedule.has_back_stub()  # False

Note: the effective date 2024-01-15 (Martin Luther King Jr. Day) is adjusted to 2024-01-16 in the adjusted dates.

BusinessCalendar

Business day calendar with holidays and weekend conventions.

BusinessCalendar(name)

Parameters

NameTypeDefaultDescription
namestrrequiredNamed calendar identifier (e.g., "NYC", "LDN", "TGT")

See Conventions for all named calendars.

Static Methods

BusinessCalendar.new_custom(holidays, weekmask)

Create a custom calendar with explicit holidays and weekend mask.

NameTypeDefaultDescription
holidayslist[str]requiredHoliday dates as "YYYY-MM-DD" strings
weekmasklist[int]requiredWeekend day numbers (0=Mon, 5=Sat, 6=Sun)

Methods

MethodReturnsDescription
.is_holiday(date)boolCheck if a date is a holiday
.is_business_day(date)boolCheck if a date is a business day
.bus_day_count(start, end)intCount business days between start (inclusive) and end (exclusive)
.union_cal(other)BusinessCalendarCreate a union calendar (holiday from either calendar)

Example

import datetime
from vade import BusinessCalendar

nyc = BusinessCalendar("NYC")
nyc.is_business_day(datetime.date(2024, 12, 25))  # False
nyc.is_holiday(datetime.date(2024, 12, 25))  # True
nyc.bus_day_count(datetime.date(2024, 1, 1), datetime.date(2024, 1, 31))  # 20

ldn = BusinessCalendar("LDN")
combined = nyc.union_cal(ldn)
combined.is_business_day(datetime.date(2024, 12, 26))  # False (Boxing Day in LDN)
nyc.is_business_day(datetime.date(2024, 12, 26))  # True (not a NYC holiday)

custom = BusinessCalendar.new_custom(["2024-03-01"], [5, 6])
custom.is_holiday(datetime.date(2024, 3, 1))  # True

dcf

Compute the day count fraction between two dates.

dcf(convention, start, end, calendar=None, termination=None)

Parameters

NameTypeDefaultDescription
conventionstrrequiredDay count convention (e.g., "act360", "act365f", "30/360")
startdatetime.daterequiredStart date
enddatetime.daterequiredEnd date
calendarBusinessCalendar or NoneNoneRequired for "bus252" convention
terminationdatetime.date or NoneNoneRequired for "30e/360isda" convention

See Conventions for all accepted conventions.

Example

import datetime
from vade import dcf

start = datetime.date(2024, 1, 15)
end = datetime.date(2024, 7, 15)

round(dcf("act360", start, end), 10)  # 0.5055555556
round(dcf("act365f", start, end), 10)  # 0.498630137

add_tenor

Add a tenor string to a date.

add_tenor(date, tenor, calendar=None)

Parameters

NameTypeDefaultDescription
datedatetime.daterequiredBase date
tenorstrrequiredTenor string (e.g., "2Y", "6M", "1W", "3D", "3B")
calendarBusinessCalendar or NoneNoneRequired for business day tenors ("NB")

See Conventions for tenor string format.

Example

import datetime
from vade import add_tenor, BusinessCalendar

base = datetime.date(2024, 1, 15)

add_tenor(base, "6M")  # datetime.date(2024, 7, 15)
add_tenor(base, "1Y")  # datetime.date(2025, 1, 15)
add_tenor(base, "3B", BusinessCalendar("NYC"))  # datetime.date(2024, 1, 18)

add_business_days

Add or subtract business days from a date.

add_business_days(date, days, calendar)

Parameters

NameTypeDefaultDescription
datedatetime.daterequiredBase date
daysintrequiredNumber of business days (positive forward, negative backward)
calendarBusinessCalendarrequiredBusiness day calendar

Example

import datetime
from vade import add_business_days, BusinessCalendar

nyc = BusinessCalendar("NYC")
base = datetime.date(2024, 1, 15)

add_business_days(base, 2, nyc)  # datetime.date(2024, 1, 17)
add_business_days(base, -2, nyc)  # datetime.date(2024, 1, 11)

On this page