API ReferenceRates API Reference

Rates Instruments

Interest rate derivatives for curve calibration, pricing, and risk.

All types are available via flat import:

from vade import IRS, FRA, ZCS, SBS, OIS, Deposit, IRFuture, CapFloor

Or via product-path import:

from vade.instruments.rates import IRS, FRA, ZCS, SBS, OIS, Deposit, IRFuture, CapFloor

See Conventions for all accepted string parameter values.

Contents: IRS | FRA | ZCS | SBS | OIS | Deposit | IRFuture | CapFloor


IRS

Interest Rate Swap: fixed vs floating leg. Python wrapper composing FixedLeg + FloatLeg.

See also: Pricing Guide for rates instrument pricing workflows.

Alias: IRS = InterestRateSwap

Constructor

IRS(
    *,
    spec=None,
    effective=None,
    termination=None,
    frequency="a",
    fixed_rate=0.0,
    notional=1_000_000.0,
    convention="act360",
    float_convention=None,
    fixing_method="rfr_payment_delay",
    spread=0.0,
    calendar=None,
    payment_lag=None,
    currency="USD",
    amortization=None,
    fixed_amortization=None,
    float_amortization=None,
    modifier="mf",
    stub="shortfront",
    disc_curve_id=None,
    forecast_curve_id=None,
)

Parameters

NameTypeDefaultDescription
specstr or NoneNoneInstrument spec name (overrides individual params)
effectivedatetime.date or NoneNoneStart date of the swap
terminationdate, str, or NoneNoneEnd date or tenor string (e.g., "5Y")
frequencystr"a"Payment frequency for both legs
fixed_ratefloat0.0Fixed leg rate (percentage, e.g., 3.0 for 3%)
notionalfloat1_000_000.0Notional amount
conventionstr"act360"Day count convention for the fixed leg
float_conventionstr or NoneNoneDay count convention for the float leg (defaults to convention)
fixing_methodstr"rfr_payment_delay"Rate fixing method
spreadfloat0.0Spread on the floating leg (basis points)
calendarstr or NoneNoneNamed calendar (e.g., "NYC", "LDN")
payment_lagint or NoneNonePayment lag in business days
currencystr"USD"Currency code
amortizationschedule or NoneNoneAmortization schedule for both legs
fixed_amortizationschedule or NoneNoneAmortization schedule for fixed leg only
float_amortizationschedule or NoneNoneAmortization schedule for float leg only
modifierstr"mf"Business day adjustment rule
stubstr"shortfront"Stub period preference
disc_curve_idstr or NoneNoneDiscount curve identifier for Solver lookup
forecast_curve_idstr or NoneNoneForecast curve identifier for Solver lookup

See Conventions for accepted values for frequency, convention, fixing_method, modifier, and stub.

Methods

MethodReturnsDescription
.rate(curves, *, solver=None)floatPar rate against curves
.npv(curves, *, solver=None)floatNet present value
.cashflows(curves, *, solver=None)DataFramePeriod-level cashflow table
.spread(curves, *, solver=None)floatPar spread

The curves parameter accepts a DiscountCurve, LineCurve, list, dict, or None. When using a Solver, pass the solver and curves are resolved by disc_curve_id/forecast_curve_id.

Example

import datetime
from vade import IRS, DiscountCurve

nodes = {datetime.date(2024, 1, 1): 1.0, datetime.date(2025, 1, 1): 0.97, datetime.date(2026, 1, 1): 0.94}
curve = DiscountCurve(nodes, interpolation="log_linear", convention="act365f")

irs = IRS(
    effective=datetime.date(2024, 1, 1),
    termination="1Y",
    frequency="a",
    fixed_rate=3.0,
    convention="act365f",
)
irs.npv(curve)  # 817.9264117309795
irs.rate(curve)  # 3.084091921661261

FRA

Forward Rate Agreement: single-period forward rate instrument. Python wrapper composing a single FloatPeriod.

Alias: FRA = ForwardRateAgreement

Constructor

FRA(
    *,
    spec=None,
    effective=None,
    termination=None,
    notional=1_000_000.0,
    fixed_rate=0.0,
    convention="act360",
    fixing_method="rfr_payment_delay",
    calendar=None,
    disc_curve_id=None,
    forecast_curve_id=None,
)

Parameters

NameTypeDefaultDescription
specstr or NoneNoneInstrument spec name
effectivedatetime.date or NoneNoneStart date
terminationdate, str, or NoneNoneEnd date or tenor string (e.g., "6M")
notionalfloat1_000_000.0Notional amount
fixed_ratefloat0.0Fixed rate (percentage)
conventionstr"act360"Day count convention
fixing_methodstr"rfr_payment_delay"Rate fixing method
calendarstr or NoneNoneNamed calendar
disc_curve_idstr or NoneNoneDiscount curve identifier for Solver lookup
forecast_curve_idstr or NoneNoneForecast curve identifier for Solver lookup

See Conventions for accepted values for convention and fixing_method.

Methods

MethodReturnsDescription
.rate(curves, *, solver=None)floatPar rate against curves
.npv(curves, *, solver=None)floatNet present value
.cashflows(curves, *, solver=None)DataFramePeriod-level cashflow table
.spread(curves, *, solver=None)floatPar spread

Example

import datetime
from vade import FRA, DiscountCurve

nodes = {datetime.date(2024, 1, 1): 1.0, datetime.date(2024, 7, 1): 0.985, datetime.date(2025, 1, 1): 0.97}
curve = DiscountCurve(nodes, interpolation="log_linear", convention="act360")

fra = FRA(
    effective=datetime.date(2024, 3, 1),
    termination="6M",
    fixed_rate=3.5,
    convention="act360",
)
fra.rate(curve)  # forward rate implied by the curve
fra.npv(curve)  # NPV of the FRA position

ZCS

Zero Coupon Swap: zero-coupon fixed vs floating leg. Python wrapper composing ZeroFixedLeg + ZeroFloatLeg.

Alias: ZCS = ZeroCouponSwap

Constructor

ZCS(
    *,
    spec=None,
    effective=None,
    termination=None,
    fixed_rate=0.0,
    notional=1_000_000.0,
    convention="act360",
    float_convention=None,
    fixing_method="rfr_payment_delay",
    spread=0.0,
    calendar=None,
    currency="USD",
    disc_curve_id=None,
    forecast_curve_id=None,
)

Parameters

NameTypeDefaultDescription
specstr or NoneNoneInstrument spec name
effectivedatetime.date or NoneNoneStart date
terminationdate, str, or NoneNoneEnd date or tenor string
fixed_ratefloat0.0Fixed leg rate (percentage)
notionalfloat1_000_000.0Notional amount
conventionstr"act360"Day count convention for the fixed leg
float_conventionstr or NoneNoneDay count convention for the float leg
fixing_methodstr"rfr_payment_delay"Rate fixing method
spreadfloat0.0Spread on the floating leg (basis points)
calendarstr or NoneNoneNamed calendar
currencystr"USD"Currency code
disc_curve_idstr or NoneNoneDiscount curve identifier for Solver lookup
forecast_curve_idstr or NoneNoneForecast curve identifier for Solver lookup

See Conventions for accepted values for convention and fixing_method.

Methods

MethodReturnsDescription
.rate(curves, *, solver=None)floatPar rate against curves
.npv(curves, *, solver=None)floatNet present value
.cashflows(curves, *, solver=None)DataFramePeriod-level cashflow table
.spread(curves, *, solver=None)floatPar spread

Example

import datetime
from vade import ZCS, DiscountCurve

nodes = {datetime.date(2024, 1, 1): 1.0, datetime.date(2025, 1, 1): 0.97, datetime.date(2026, 1, 1): 0.94}
curve = DiscountCurve(nodes, interpolation="log_linear", convention="act365f")

zcs = ZCS(
    effective=datetime.date(2024, 1, 1),
    termination="2Y",
    fixed_rate=3.0,
    convention="act365f",
)
zcs.rate(curve)  # par zero-coupon rate
zcs.npv(curve)  # NPV of the ZCS position

SBS

Single Basis Swap: two floating legs with different frequencies. Python wrapper composing two FloatLegs.

Alias: SBS = SingleBasisSwap

Constructor

SBS(
    *,
    spec=None,
    effective=None,
    termination=None,
    frequency="q",
    leg2_frequency="s",
    notional=1_000_000.0,
    spread=0.0,
    convention="act360",
    leg2_convention=None,
    fixing_method="rfr_payment_delay",
    leg2_fixing_method=None,
    calendar=None,
    payment_lag=None,
    currency="USD",
    modifier="mf",
    stub="shortfront",
    disc_curve_id=None,
    forecast_curve_id=None,
)

Parameters

NameTypeDefaultDescription
specstr or NoneNoneInstrument spec name
effectivedatetime.date or NoneNoneStart date
terminationdate, str, or NoneNoneEnd date or tenor string
frequencystr"q"Leg 1 payment frequency
leg2_frequencystr"s"Leg 2 payment frequency
notionalfloat1_000_000.0Notional amount
spreadfloat0.0Spread on leg 1 (basis points)
conventionstr"act360"Day count convention for leg 1
leg2_conventionstr or NoneNoneDay count convention for leg 2 (defaults to convention)
fixing_methodstr"rfr_payment_delay"Rate fixing method for leg 1
leg2_fixing_methodstr or NoneNoneRate fixing method for leg 2 (defaults to fixing_method)
calendarstr or NoneNoneNamed calendar
payment_lagint or NoneNonePayment lag in business days
currencystr"USD"Currency code
modifierstr"mf"Business day adjustment rule
stubstr"shortfront"Stub period preference
disc_curve_idstr or NoneNoneDiscount curve identifier for Solver lookup
forecast_curve_idstr or NoneNoneForecast curve identifier for Solver lookup

See Conventions for accepted values for frequency, convention, fixing_method, modifier, and stub.

Methods

MethodReturnsDescription
.rate(curves, *, solver=None)floatPar basis spread
.npv(curves, *, solver=None)floatNet present value
.cashflows(curves, *, solver=None)DataFramePeriod-level cashflow table
.spread(curves, *, solver=None)floatPar spread

Example

import datetime
from vade import SBS, DiscountCurve

nodes = {datetime.date(2024, 1, 1): 1.0, datetime.date(2025, 1, 1): 0.97, datetime.date(2026, 1, 1): 0.94}
curve = DiscountCurve(nodes, interpolation="log_linear", convention="act360")

sbs = SBS(
    effective=datetime.date(2024, 1, 1),
    termination="2Y",
    frequency="q",
    leg2_frequency="s",
    convention="act360",
)
sbs.rate(curve)  # par basis spread between the two tenors
sbs.npv(curve)  # NPV of the basis swap

OIS

Overnight Indexed Swap: fixed vs RFR floating leg with compounding. Python wrapper composing FixedLeg + FloatLeg with RFR compounding.

Alias: OIS = OvernightIndexedSwap

Constructor

OIS(
    *,
    spec=None,
    effective=None,
    termination=None,
    frequency="a",
    fixed_rate=0.0,
    notional=1_000_000.0,
    convention="act360",
    float_convention=None,
    fixing_method="rfr_payment_delay",
    spread=0.0,
    calendar=None,
    payment_lag=None,
    currency="USD",
    amortization=None,
    fixed_amortization=None,
    float_amortization=None,
    compounding_method=None,
    lockout=None,
    lookback=None,
    modifier="mf",
    stub="shortfront",
    disc_curve_id=None,
    forecast_curve_id=None,
)

Parameters

NameTypeDefaultDescription
specstr or NoneNoneInstrument spec name
effectivedatetime.date or NoneNoneStart date
terminationdate, str, or NoneNoneEnd date or tenor string
frequencystr"a"Payment frequency
fixed_ratefloat0.0Fixed leg rate (percentage)
notionalfloat1_000_000.0Notional amount
conventionstr"act360"Day count convention for the fixed leg
float_conventionstr or NoneNoneDay count convention for the float leg
fixing_methodstr"rfr_payment_delay"Rate fixing method
spreadfloat0.0Spread on the floating leg (basis points)
calendarstr or NoneNoneNamed calendar
payment_lagint or NoneNonePayment lag in business days
currencystr"USD"Currency code
amortizationschedule or NoneNoneAmortization schedule for both legs
fixed_amortizationschedule or NoneNoneAmortization schedule for fixed leg only
float_amortizationschedule or NoneNoneAmortization schedule for float leg only
compounding_methodstr or NoneNoneRFR compounding method (e.g., "rfr_obs_shift")
lockoutint or NoneNoneNumber of lockout days before period end
lookbackint or NoneNoneNumber of lookback days for rate observation
modifierstr"mf"Business day adjustment rule
stubstr"shortfront"Stub period preference
disc_curve_idstr or NoneNoneDiscount curve identifier for Solver lookup
forecast_curve_idstr or NoneNoneForecast curve identifier for Solver lookup

See Conventions for accepted values for frequency, convention, fixing_method, modifier, and stub.

Methods

MethodReturnsDescription
.rate(curves, *, solver=None)floatPar rate against curves
.npv(curves, *, solver=None)floatNet present value
.cashflows(curves, *, solver=None)DataFramePeriod-level cashflow table
.spread(curves, *, solver=None)floatPar spread

Example

import datetime
from vade import OIS, DiscountCurve

nodes = {datetime.date(2024, 1, 1): 1.0, datetime.date(2025, 1, 1): 0.97, datetime.date(2026, 1, 1): 0.94}
curve = DiscountCurve(nodes, interpolation="log_linear", convention="act365f")

ois = OIS(
    effective=datetime.date(2024, 1, 1),
    termination="1Y",
    frequency="a",
    fixed_rate=3.0,
    convention="act365f",
)
ois.rate(curve)  # par OIS rate
ois.npv(curve)  # NPV of the OIS position

Deposit

Deposit instrument for short-end curve calibration. Rust-backed.

Constructor

Deposit(
    *,
    effective=None,
    termination=None,
    rate=0.0,
    notional=1_000_000.0,
    convention="act360",
    disc_curve_id=None,
    forecast_curve_id=None,
)

Parameters

NameTypeDefaultDescription
effectivedatetime.date or NoneNoneStart date
terminationdate, str, or NoneNoneEnd date or tenor string (e.g., "3M")
ratefloat0.0Deposit rate (percentage)
notionalfloat1_000_000.0Notional amount
conventionstr"act360"Day count convention
disc_curve_idstr or NoneNoneDiscount curve identifier for Solver lookup
forecast_curve_idstr or NoneNoneForecast curve identifier for Solver lookup

See Conventions for accepted values for convention.

Methods

MethodReturnsDescription
.rate(curves, *, solver=None)floatPar rate against curves
.npv(curves, *, solver=None)floatNet present value
.cashflows(curves, *, solver=None)DataFramePeriod-level cashflow table
.spread(curves, *, solver=None)floatPar spread

Example

import datetime
from vade import Deposit, DiscountCurve

nodes = {datetime.date(2024, 1, 1): 1.0, datetime.date(2024, 4, 1): 0.9925, datetime.date(2024, 7, 1): 0.985}
curve = DiscountCurve(nodes, interpolation="log_linear", convention="act360")

dep = Deposit(
    effective=datetime.date(2024, 1, 1),
    termination="3M",
    rate=3.0,
    convention="act360",
)
dep.rate(curve)  # par deposit rate implied by the curve
dep.npv(curve)  # NPV of the deposit

IRFuture

STIR Futures instrument with convexity adjustment. Rust-backed.

Constructor

IRFuture(
    *,
    effective=None,
    termination=None,
    price=100.0,
    notional=1_000_000.0,
    convexity_adjustment=0.0,
    convention="act360",
    quote_convention="price",
    sigma=None,
    tick_size=None,
    notional_multiplier=None,
    contract_size=None,
    disc_curve_id=None,
    forecast_curve_id=None,
)

Parameters

NameTypeDefaultDescription
effectivedatetime.date or NoneNoneContract start date
terminationdate, str, or NoneNoneContract end date or tenor string
pricefloat100.0Futures price (e.g., 96.5 implies ~3.5% rate)
notionalfloat1_000_000.0Notional amount
convexity_adjustmentfloat0.0Convexity adjustment in basis points
conventionstr"act360"Day count convention
quote_conventionstr"price"Quote convention ("price" or "rate")
sigmafloat or NoneNoneVolatility for automatic convexity calculation
tick_sizefloat or NoneNoneMinimum price increment
notional_multiplierfloat or NoneNoneNotional multiplier per tick
contract_sizefloat or NoneNoneContract size
disc_curve_idstr or NoneNoneDiscount curve identifier for Solver lookup
forecast_curve_idstr or NoneNoneForecast curve identifier for Solver lookup

See Conventions for accepted values for convention.

Methods

MethodReturnsDescription
.rate(curves, *, solver=None)floatImplied forward rate
.npv(curves, *, solver=None)floatNet present value
.cashflows(curves, *, solver=None)DataFramePeriod-level cashflow table
.spread(curves, *, solver=None)floatPar spread

Example

import datetime
from vade import IRFuture, DiscountCurve

nodes = {datetime.date(2024, 1, 1): 1.0, datetime.date(2024, 7, 1): 0.985, datetime.date(2025, 1, 1): 0.97}
curve = DiscountCurve(nodes, interpolation="log_linear", convention="act360")

irf = IRFuture(
    effective=datetime.date(2024, 6, 1),
    termination="3M",
    price=96.5,
    convention="act360",
)
irf.rate(curve)  # implied forward rate from the curve
irf.npv(curve)  # NPV based on price vs implied rate

CapFloor

Cap/Floor instrument with Black-76 or Bachelier pricing. Python wrapper composing caplet/floorlet periods.

See also: Cap & Floor Guide for cap/floor pricing and vol surface usage.

Constructor

CapFloor(
    *,
    effective=None,
    termination=None,
    strike=0.0,
    vol=0.0,
    notional=1_000_000.0,
    frequency="q",
    cap_floor_type="cap",
    model="black76",
    convention="act360",
    currency="USD",
)

Parameters

NameTypeDefaultDescription
effectivedatetime.date or NoneNoneStart date
terminationdate, str, or NoneNoneEnd date or tenor string
strikefloat0.0Strike rate (percentage)
volfloat0.0Volatility (decimal, e.g., 0.20 for 20%)
notionalfloat1_000_000.0Notional amount
frequencystr"q"Caplet/floorlet frequency
cap_floor_typestr"cap"Type: "cap" or "floor"
modelstr"black76"Pricing model: "black76" or "bachelier"
conventionstr"act360"Day count convention
currencystr"USD"Currency code

See Conventions for accepted values for frequency and convention.

Methods

MethodReturnsDescription
.npv(disc_curve, forecast_curve)floatNet present value using Black-76 or Bachelier
.cashflows(disc_curve, forecast_curve)DataFrameCaplet/floorlet-level cashflow table

Note: CapFloor does not have .rate() or solver keyword arguments. Both disc_curve and forecast_curve are required positional parameters.

Example

import datetime
from vade import CapFloor, DiscountCurve

nodes = {datetime.date(2024, 1, 1): 1.0, datetime.date(2025, 1, 1): 0.97, datetime.date(2026, 1, 1): 0.94}
disc = DiscountCurve(nodes, interpolation="log_linear", convention="act365f")
forecast = DiscountCurve(nodes, interpolation="log_linear", convention="act365f")

cap = CapFloor(
    effective=datetime.date(2024, 1, 1),
    termination="1Y",
    strike=3.0,
    vol=0.20,
    frequency="q",
    cap_floor_type="cap",
    model="black76",
    convention="act360",
)
cap.npv(disc, forecast)  # NPV of the interest rate cap


See Also

  • Rates Guides -- Curve building, pricing, risk, and cap/floor guides
  • Curves API -- DiscountCurve, ForwardCurve, and parametric models
  • Solver API -- Multi-curve calibration and bootstrap

On this page