Python reference
Every name the package exports, as the release this line pins declares it. Generated from the pinned wheel's own type stub rather than by importing it, so what is documented here is what that build exports — not what happened to be installed when the page was made.
This is the low-level surface: signatures, and what each name is for. Where a page documents a symbol, the entry links to it, labelled with the page's kind: a reference page lists its arguments, an explanation page its reasoning.
Measured against helixio 0.0.1.
| count | |
|---|---|
| classes | 29 |
| functions | 1 |
| modules | 15 |
Functions
set_data_source(source: object | None) — reference
Sets the process-wide default data source — any object with fetch(demand, as_of), and recipes(ask) where it serves recipes — or, with None, clears it. A market copies it when built.
Modules
helixio.bonds
Bond measures: spreads, yields to call and worst, forward prices, effective risk, a payment-in-kind bond's accretion, a zero's quotes, the readings of trades on bonds (a bond TRS's fair margin, a repo's margin and package value), and the reports they come back as. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
BondFutureAnalysis |
BondFutureAnalysis — The basket analysis: the rows, the CTD, the theoretical price. |
BondFutureOptionDiagnostics |
BondFutureOptionDiagnostics — What a bond future option is priced from, per 100. |
BondOptionDiagnostics |
BondOptionDiagnostics — What a bond option resolved to when it was priced. |
BondStrikeKind |
BondStrikeKind — What a bond option's strike is stated as: a Clean or Dirty price, or a Yield. bond_option takes the member or its string. |
CallKind |
CallKind — Whose option a callability is: the issuer's Call or the holder's Put. A callable_bond schedule row carries the member or its string. |
DeliverableAnalysis |
DeliverableAnalysis — One deliverable's analytics at a quoted futures price. |
ExDivDayType |
ExDivDayType — The days an ex-dividend lag counts: Business days on the bond's settlement calendar (UK gilts) or Calendar days (South African government bonds). |
PriceBasis |
PriceBasis — Whether a bond price includes accrued interest. Clean or Dirty; every bond reading that takes a basis takes the member or its string. A member is not equal to its string; code() is the string the parser takes. |
YieldConvention |
YieldConvention — The convention a quoted yield is stated under, by one name. A street convention — UsStreet, UkGilt, DeGovt, or the bond's own Default — compounding at the market's frequency; a fixed compounding — Annual, SemiAnnual, Quarterly, Monthly, Continuous, Simple — whatever the bond pays; or one of the two conventions that are not a discounting relationship, Ise and JapaneseSimple. Every yield_convention parameter takes the member or its spelling ("ust", "semiannual", "jgb"). A reading that needs a single compounding basis, such as a duration, refuses Ise and JapaneseSimple by name. A member is not equal to its string. |
YieldMoments |
YieldMoments — A bond's dirty price and its first two yield derivatives at one yield; every yield-space measure is a reading of the three. |
accreted_face |
accreted_face(instrument: Instrument, date: datetime.date) — A payment-in-kind bond's accreted face on date: its par face grown by every capitalisation on or before it. |
accreted_redemption |
accreted_redemption(instrument: Instrument) — A payment-in-kind bond's one cash flow per 100 of par face: its redemption, accreted to maturity. |
callable_oas |
callable_oas(instrument: Instrument, market: MarketContext, clean_price: float) — The option-adjusted spread at which the callable's clean price is clean_price. A callable loan is quoted per 100 of its outstanding, once drawn and without a credit tag. |
capitalisations |
capitalisations(instrument: Instrument) — Every capitalisation on a payment-in-kind bond's life, in order: the date the coupon would have paid, the rate and year fraction it accrued at, the face entering and leaving the period, and the amount rolled into principal. A capitalisation is not a cash flow, which is why a PIK bond's cashflow_records refuses: it pays once, at maturity. This is the table the accretion is reconstructable from. |
clean_price_at_oas |
clean_price_at_oas(instrument: Instrument, market: MarketContext, oas: float) — The callable's clean price at an option-adjusted spread; a callable loan's per 100 of its outstanding. |
discount_margin |
discount_margin(instrument: Instrument, market: MarketContext, quoted_clean: float) — The note's discount margin at a quoted clean price: the flat continuous spread on the discounting that reprices the quote. |
effective_risk |
effective_risk(instrument: Instrument, market: MarketContext, oas: float=0.0) — The callable's effective duration, convexity and DV01, from one lattice pass. "Effective" because the exercise decision moves with the shift: a callable's cashflows depend on rates, so this is not its yield duration. The three are returned together because the core needs one lattice pass for all of them. Not the sum of the bond's risk ladder — that sum weights each pillar by what the curve family stores, while this shifts the discounting itself. |
fair_margin |
fair_margin(instrument: Instrument, market: MarketContext) — The funding margin that values a bond total return swap at zero. |
forward_price |
`forward_price(bond: FixedRateBond, market: MarketContext, forward_date: datetime.date, price_basis: PriceBasis |
future_analysis |
future_analysis(future: BondFuture, market: MarketContext, futures_price: float) — The basket of future on market, at a quoted futures_price per 100. |
note_dirty_price |
note_dirty_price(instrument: Instrument, market: MarketContext) — A structured note's value per 100 of face. |
note_z_spread |
note_z_spread(instrument: Instrument, market: MarketContext, dirty_price: float) — The flat continuous spread over a structured note's discounting that reprices dirty_price per 100, its coupons projected spread-free. |
package_value |
package_value(instrument: Instrument, market: MarketContext) — A repo's value with its collateral: the cash leg plus the bond received, less the bond returned at its repo forward, less — classic — the coupons manufactured back. A cross-currency repo's foreign bond is valued on its own currency's curve and converted at spot. |
pv_weighted_time |
`pv_weighted_time(flows: list[tuple[float, float]], yield_: float, yield_convention: YieldConvention |
repo_margin |
`repo_margin(instrument: Instrument, market: MarketContext, *, price: float |
settlement_date |
settlement_date(instrument: Instrument, trade_date: datetime.date) — The date a payment-in-kind bond traded on trade_date settles on: its settlement lag walked from it, never before issue. |
simple_margin |
simple_margin(instrument: Instrument, quoted_clean: float, settlement: datetime.date) — The note's simple margin at a quoted clean price — the closed-form shortcut to the discount margin. No curve, no projection, no solve. |
spread_duration |
spread_duration(instrument: Instrument, market: MarketContext) — The note's spread duration: its sensitivity to a flat continuous overlay on the discounting, and its dominant risk. |
spread_over_curve |
`spread_over_curve(bond: FixedRateBond, reference: DiscountCurve, dirty_price: float, settlement: datetime.date, yield_convention: YieldConvention |
yield_convention_status |
yield_convention_status — The vendor calc methods' convention status, one row per code: code, name, status ("pinned" or "pending") and outstanding. |
yield_to_call |
`yield_to_call(instrument: Instrument, dirty_price: float, date: datetime.date, settlement: datetime.date, yield_convention: YieldConvention |
yield_to_maturity_scenario |
`yield_to_maturity_scenario(instrument: Instrument, dirty_price: float, settlement: datetime.date, yield_convention: YieldConvention |
yield_to_worst |
`yield_to_worst(instrument: Instrument, dirty_price: float, settlement: datetime.date, yield_convention: YieldConvention |
z_spread |
`z_spread(bond: FixedRateBond, market: MarketContext, price: float, price_basis: PriceBasis |
zero_coupon_quotes |
zero_coupon_quotes(instrument: Instrument) — The three quotes a zero is traded on, and the price behind them: (price, discount_yield, money_market_yield, bond_equivalent_yield, quoted_yield). The price is per unit of face. quoted_yield is the number the zero's own market prints, under the convention its registered calculation method carries; bond_equivalent_yield is the semi-annually compounded ACT/365F yield that puts it beside a coupon note. |
helixio.calibration
Solving curve parameters from instruments. The module is the verb, so an entry point is named for the object it solves. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
CalibratedBaseCorrelation |
CalibratedBaseCorrelation — A base-correlation curve solved from a tranche capital structure, and how it was reached. |
CalibratedInflation |
CalibratedInflation — An inflation curve solved from a ladder of zero-coupon inflation swaps, and how it was reached. |
CalibratedSurvival |
CalibratedSurvival — A survival curve solved from a ladder of credit default swaps, and how it was reached. |
Calibration |
Calibration — A calibrated curve and how it was reached. |
HullWhiteFit |
HullWhiteFit — A fitted Hull-White volatility and what the fit knows about it. |
JointCalibration |
JointCalibration — Several curves solved together, each under its first role. |
Rung |
Rung — One rung of a ladder with its quote kind declared. |
SigmaShape |
SigmaShape — The shape a Hull-White volatility is calibrated in: Flat by least squares, or Piecewise, one piece per strip expiry. |
SmoothedCalibration |
SmoothedCalibration — A discount curve fitted globally, trading repricing error for forward smoothness. |
Tolerance |
Tolerance — How hard a ladder solver tries; the core's defaults unless overridden. |
base_correlation |
`base_correlation(discount: DiscountCurve, survival: SurvivalCurve, tranches: list[Instrument], recovery: float |
bond_rung |
`bond_rung(bond: FixedRateBond, quote: float, measure: str, reference: datetime.date, yield_convention: YieldConvention |
cross_currency |
`cross_currency(reference: datetime.date, pay_discount: DiscountCurve, pay_projection: DiscountCurve, recv_projection: DiscountCurve |
cross_currency_rungs |
`cross_currency_rungs(template: str |
curve |
`curve(reference: datetime.date, rungs: list[tuple[datetime.date, Instrument, float] |
curves |
`curves(reference: datetime.date, curves: list[tuple[str |
helpers |
helpers: types.ModuleType |
hull_white |
`hull_white(market: MarketContext, instrument: Instrument, mean_reversion: float, shape: SigmaShape |
hull_white_pinned |
`hull_white_pinned(market: MarketContext, instrument: Instrument, mean_reversion: float, shape: SigmaShape |
hull_white_strip |
`hull_white_strip(market: MarketContext, currency: str, strip: list[tuple[datetime.date, datetime.date]], mean_reversion: float, collateral: str |
inflation |
`inflation(reference: datetime.date, discount: DiscountCurve |
par_rungs |
`par_rungs(template: str |
smoothed_curve |
`smoothed_curve(reference: datetime.date, rungs: list[tuple[datetime.date, Instrument, float] |
survival |
`survival(reference: datetime.date, discount: DiscountCurve, rungs: list[tuple[datetime.date, Instrument, float] |
survival_density |
`survival_density(reference: datetime.date, discount: DiscountCurve, rungs: list[tuple[datetime.date, Instrument, float] |
helixio.credit
Credit model readings taken directly: a swap's own legs, risky value, note components, and the tranche and basket losses. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
AccrualOnDefault |
AccrualOnDefault — How premium accrued since the last coupon settles on default: Proportional (the ISDA standard model's), Halfway, or NoAccrual (code none). credit_default_swap takes the member or its string. |
CdsDiagnostics |
CdsDiagnostics — Each part of a credit default swap's value, signed as it enters that value, and the risky annuity behind its quote. |
CreditLinkedSwapDiagnostics |
CreditLinkedSwapDiagnostics — Each part of a credit-linked swap's value, in the trade currency, signed as it enters that value, in five parts. The parts sum to npv(). |
DefaultPaymentTime |
DefaultPaymentTime — When a credit-linked swap's default-contingent payment is made: AtDefault (the interval's midpoint), AtPeriodEnd (the first scheduled payment date on or after the default) or AtMaturity. credit_linked_swap takes the member or its string. |
GapCharge |
GapCharge — A repack note's gap charge and its rows. |
IndexSettlement |
IndexSettlement — What a credit event settles on an index position, signed to the holder. |
IndexSkew |
IndexSkew — One term structure of hazard multipliers every constituent is scaled by. |
LegRole |
LegRole — How a credit-linked swap's leg depends on the reference entity's default: Independent (paid whatever happens), Contingent (paid while the entity survives), Default (paid on default, scaled by the loss) or Recovery (paid on default, scaled by the recovery). credit_linked_swap takes the member or its string. |
SimulatedGap |
SimulatedGap — A repack note's simulated gap: the charge, its standard error, its legs and its profile. |
TrancheSettlement |
TrancheSettlement — What a credit event settles on a tranche position, and where it leaves the tranche on the surviving pool. |
after_credit_event |
after_credit_event(instrument: Instrument, entity: str, weight: float, auction_recovery: float, event_date: datetime.date) — An index CDS or a CDO tranche after a credit event: the index re-versioned with an IndexSettlement, or the tranche eroded from the bottom and written down from the top, on the surviving pool, with a TrancheSettlement. |
basket_survival_probability |
`basket_survival_probability(pds: list[float], rho: float, n: int, *, factor_dof: float |
cds_option |
`cds_option(instrument: Instrument, expiry: datetime.date, *, strike: float, vol: float, kind: SwaptionKind |
expected_tranche_loss |
`expected_tranche_loss(pd: float, lgd: float, attach: float, detach: float, rho: float, *, factor_dof: float |
index_intrinsic |
index_intrinsic(instrument: Instrument, constituents: list[tuple[str, float]], market: MarketContext) — An index CDS against its constituents: (intrinsic value, intrinsic spread). Each constituent is a full ENTITY/SENIORITY/DOCCLAUSE spelling or a bare entity on the index family's standard tier and clause, valued on its curve in the index's currency; weights are shares of the original index notional. |
index_skew |
index_skew(instruments: list[Instrument], constituents: list[tuple[str, float]], market: MarketContext) — The skew that makes an index's constituents reprice it: index CDS at strictly ascending maturities, each valued on the index curve; solved tenor by tenor. |
note_components |
note_components(instrument: Instrument, market: MarketContext) — A credit-linked note's (coupons, redemption, recovery) components. |
on_the_run |
on_the_run(family: str, date: datetime.date) — The series of family on the run on date. |
premium_contract |
premium_contract(instrument: Instrument) — The credit default swap a tranche, an nth-to-default basket, an index CDS or a credit-linked note pays its premium on, as an instrument of its own: its premium leg is the product's premium schedule, its entity the curve the product references, and it books and prices like any CDS. |
repack_gap |
repack_gap(note: Instrument, market: MarketContext) — The repack gap charge of note against market, under the note's engine. |
risky_value |
risky_value(flows: list[tuple[datetime.date, float]], face: float, maturity: datetime.date, discount: DiscountCurve, survival: SurvivalCurve, recovery: float, default_from: datetime.date) — The survival-weighted value of the flows plus recovery of face on default, integrated over quarter-long intervals from default_from. |
series_maturity |
series_maturity(family: str, series: int, tenor_years: int) — The maturity of series of family at tenor_years, kept off the run. |
series_roll |
series_roll(family: str, series: int) — The nominal date series of family rolls on: the 20th of March or September. |
simulate_repack_gap |
simulate_repack_gap(note: Instrument, market: MarketContext, *, paths: int=20000, seed: int=24301, antithetic: bool=True, pfe_quantile: float=0.95, repeat_crises: bool=False, recovery_volatility: float=0.0) — The repack gap of note against market by Monte Carlo: crises, the valuation trigger and its liquidation lag included. With recovery_volatility, the recovery a default pays is beta-distributed about the issuer's market recovery with that standard deviation and integrated at each default; zero keeps it fixed. A model setting, with no risk row. Raises ValueError for fewer than two paths, an odd path count under antithetics, a quantile outside (0, 1), or a negative recovery volatility; one too wide for a beta raises when the run starts. |
simulate_repack_gap_risk |
simulate_repack_gap_risk(note: Instrument, market: MarketContext, *, paths: int=20000, seed: int=24301, antithetic: bool=True, pfe_quantile: float=0.95, repeat_crises: bool=False, recovery_volatility: float=0.0) — input and value: the simulated gap's sensitivity to every lifted input of market, by a central difference on common random numbers. |
helixio.curves
The curve families, the parametric fit, and the curve readings a caller takes directly. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
BaseCorrelation |
BaseCorrelation — A base-correlation skew across an index's capital structure. |
BondFitRow |
BondFitRow — One bond's place in a parametric curve fit. |
CmsSpreadCorrelationCurve |
CmsSpreadCorrelationCurve — The market's correlation between two swap indices' rates by option expiry in years — linear between pillars, flat beyond them — or one flat mark with no pillar, or a 2-D surface by expiry and strike. |
CurveRecipe |
CurveRecipe — How a market would build the curves under one key, as topology: the discount segments in order, each a role and the template that builds it, and per projection index whether it telescopes onto the discount curve or has its own strip. It carries no tenor: the quote sheet is the grid. Read back from MarketContext.recipe; str() is the core's one-line summary. |
DiscountCurve |
DiscountCurve — A discount curve, built from dated discount-factor pillars. A first pillar of exactly 1.0 on the reference date is the anchor the curve already holds, and is dropped; any other factor there is refused. |
InflationCurve |
InflationCurve — An inflation index-level curve. |
Interpolation |
Interpolation — The scheme a discount curve reads between its pillars, as a value that carries its parameters. One member per parameter-free scheme — LogLinear, BackwardFlat, ForwardFlat, LinearZero, NaturalCubic, NotAKnotCubic, MonotoneConvex, MonotoneCubic, Akima, Kruger — and tension_spline(sigma) / clamped_cubic(left, right) for the two that take them. Every interpolation parameter on a discount curve or a curve calibration takes the member or its code; given the value, tension and end_slopes are refused, since the value carries its own. code() is what DiscountCurve.interpolation() reads back. |
LevelInterpolation |
LevelInterpolation — How an inflation curve reads an index level between its nodes: Linear in the level, or LogLinear. InflationCurve and calibration.inflation take the member or its string. |
RecipeSpec |
RecipeSpec — A curve recipe stated as data, validated as the recipe builder validates it: discount segments as (role, template), per projection index "telescoping" or its own strip's template, windows as (template, start, end). |
RepoSpreadCurve |
RepoSpreadCurve — A repo spread: the simple spreads a desk marks — GC against the overnight curve, a special against GC — at dated pillars, linear between them and flat outside, accruing on a money-market day_count. Pinned with MarketContext.with_repo_spread over a base, it adds in simple-rate space, 1/P = 1/P_base + s * tau, and its pillars report risk on the repo axis. |
SpreadCurve |
SpreadCurve — A continuously compounded spread over a date, applied on top of the discounting a security is priced on. Dated, its pillars are free parameters and report risk on the security_spread axis; flat, it is declared data and reports none. |
SurvivalCurve |
SurvivalCurve — A survival curve: the probability of surviving to a date. |
fit_bond_curve |
fit_bond_curve(reference: datetime.date, quotes: list[tuple[FixedRateBond, float]], form: str='nelson_siegel', weights: str='inverse_duration', basis: int=3) — Fit a parametric discount curve to a bond universe. A smoother, not a repricer: a handful of parameters over many bonds cannot reproduce every price and is not meant to. The rows returned beside the curve are what say how far it misses — use calibrate when exactness matters. form is nelson_siegel/ns, svensson/nss, or exponential_splines/splines (which reads basis). weights is inverse_duration/duration or equal; the choice changes the answer. Raises CalibrationError if the universe cannot determine the form, the solve does not converge, or — for the splines form — the fitted curve is not a discount curve across the horizon. |
yield_at |
`yield_at(curve: DiscountCurve, date: datetime.date, yield_convention: YieldConvention |
helixio.dates
The date substrate: schedules, rolls, tenors, IMM dates, and the convention vocabularies a dated term is written in. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
BusinessDayConvention |
BusinessDayConvention — How a non-business date rolls to a business date. A member is a spelling of the core value the string names — its code() is the string the parser takes — so every parameter that takes a business-day convention takes the member or the string. The core's None (no adjustment) is the member Unadjusted, because X.None cannot be written in Python; the strings "None" and "NONE" still parse to it. A member is not equal to its string. |
CalendarSpec |
CalendarSpec — A calendar stated as data for dates.ingest_calendars: the code it binds, its holidays, and its weekend (Saturday and Sunday by default). |
DayCountFraction |
DayCountFraction — A day-count convention, named once and measured with repeatedly. Every convention is a named member — DayCountFraction.ActActIcma is DayCountFraction("ACT/ACT.ICMA") — and every parameter that takes a day count takes the member or its code. repr is the member's address; str and code() are the code. |
Frequency |
Frequency — A coupon frequency: a named member, or a period a caller spells. Frequency("6M") is Frequency.SemiAnnual; Frequency("28D") is the 28-day markets' coupon and has no named member. Once is a single payment at maturity with no recurring period, and is refused where a schedule is generated. Every parameter that takes a frequency takes the member or its spelling; a member is not equal to its string. |
JointCalendarRule |
JointCalendarRule — How a joint calendar combines its members: JoinHolidays (a holiday in any member is a holiday) or JoinBusinessDays (a business day in any member is a business day). |
MeetingSchedule |
MeetingSchedule — A central bank's schedule: its published decision days, with the date each takes effect derived by the bank's rule — the Fed the next business day, the ECB the following Wednesday, the Bank of England the decision day. Pinned on a market with MarketContext.with_meetings; seeded(bank) is the embedded 2026 schedule the market uses where none is pinned. |
Period |
Period — A tenor: a signed count of days, weeks, months or years, or the whole term. Period("3M") or Period(3, "M"). Equality and hashing are by duration (Period("12M") == Period("1Y")); ordering is by duration where it is decidable and raises ValueError where it is not (1M against 30D); + and - combine tenors of one unit family. Every tenor or frequency parameter takes one beside its spelling. |
RollConvention |
RollConvention — Where a period boundary sits inside its month. A named member, or a day of the month from RollConvention.day(n) (1 to 30). The core's None (no roll) is the member Unadjusted. Every parameter that takes a roll takes the member or its spelling ("EOM", "15"); a member is not equal to its string. |
Schedule |
Schedule — A generated set of calculation-period boundary dates. |
add_period |
`add_period(date: datetime.date, tenor: Period |
cds_standard_maturity |
cds_standard_maturity(date: datetime.date, tenor_years: int) — The CDS2015 standard maturity tenor_years out from date. |
cds_standard_maturity_months |
cds_standard_maturity_months(date: datetime.date, months: int) — The CDS2015 standard maturity months out from date — the sub-annual form, which the whole-year one is a case of. |
forward_tenor |
forward_tenor(spelling: str) — The forward start (None for a term from spot) and the tenor of a <forward-start><tenor> spelling, each in canonical form: "2y2y" is ("2Y", "2Y") and "10Y" is (None, "10Y"). |
imm_code_of |
imm_code_of(date: datetime.date) — The IMM code naming date ("JUN27"), or None where date is not a third Wednesday or its year is outside the 2000–2099 window a two-digit code can spell. |
imm_code_to_dates |
imm_code_to_dates(code: str, cycle: str='Quarterly') — The unadjusted (start, end) reference period an IMM code names — the period of the futures contract it names, as a futures template's reference_period reads it, and the inverse of imm_code_of, which renders the start. start is the third Wednesday of the code's own month; end is the third Wednesday of the next IMM in cycle. Raises ValueError naming the code where it is not MMM + YY, its year falls outside 2000–2099, or the quarterly cycle is asked for a month it does not admit. |
imm_date |
imm_date(month: int, year: int, cycle: str='Quarterly', day: str='ThirdWednesday') — The IBOR-IMM date of month in year, the third Wednesday. A month outside cycle raises ValueError. day is "ThirdWednesday" or "WednesdayOnOrAfterNinth", the first Wednesday on or after the 9th. |
ingest_calendars |
`ingest_calendars(source: list[CalendarSpec] |
ingested_calendars |
ingested_calendars — The codes ingested this process, sorted. |
is_imm_date |
is_imm_date(date: datetime.date, cycle: str='Quarterly') — Whether date is an IBOR-IMM date — the third Wednesday of a cycle month. The quarterly cycle admits only March, June, September and December. |
lagged_observation |
lagged_observation(date: datetime.date, lag_months: int) — The observation date a lag of lag_months puts before date — where an inflation swap reads the index, and therefore where its rung's pillar sits. |
last_day_of_month |
last_day_of_month(date: datetime.date) — The last calendar day of date's month, blind to weekends and holidays. The business month end is Calendar.end_of_month. |
meeting_dates |
`meeting_dates(bank: str, start: datetime.date, end: datetime.date, *, schedule: MeetingSchedule |
next_cds_imm_date |
next_cds_imm_date(date: datetime.date) — The next CDS-IMM date strictly after date — the 20th of the next March, June, September or December; a CDS-IMM date rolls to the following one. A calendar date, never adjusted. |
next_imm_date |
next_imm_date(date: datetime.date, cycle: str='Quarterly') — The next IBOR-IMM date strictly after date: an IMM date rolls to the following one. |
next_weekday |
next_weekday(date: datetime.date, weekday: str) — The first weekday on or after date. Calendar-blind: may be a holiday. |
nth_weekday |
nth_weekday(n: int, weekday: str, year: int, month: int) — The nth weekday in a month, counting from one. None where the month holds no such day — most months have four of each weekday and some five. |
prior_cds_imm_date |
prior_cds_imm_date(date: datetime.date) — The prior CDS-IMM date strictly before date: a CDS-IMM date rolls to the preceding one. |
prior_imm_date |
prior_imm_date(date: datetime.date, cycle: str='Quarterly') — The prior IBOR-IMM date strictly before date: an IMM date rolls to the preceding one. |
roll |
`roll(date: datetime.date, roll_convention: RollConvention |
schedule |
`schedule(effective: datetime.date, termination: datetime.date, frequency: Frequency |
tenor |
tenor(spelling: str) — Normalizes a tenor to its canonical spelling ("12M" stays "12M"; "1Y" stays "1Y" — the unit is part of the tenor, not a quantity to convert away). |
turn_dates |
turn_dates(period: str, start: datetime.date, end: datetime.date) — The turn-of-period dates after start and up to end: every 31 December for "YearEnd", every quarter end for "QuarterEnd". |
helixio.fpml
The FpML reader: a confirmation-view trade document into an instrument, with the cashflows the document itself states kept beside it. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
FpmlTrade |
FpmlTrade — A trade read from an FpML 5 confirmation document. |
StatedCashflow |
StatedCashflow — One paymentCalculationPeriod a FpML stream's cashflows block states: the dates and notional the document itself says the stream pays. |
complete |
complete(text: str, market: MarketContext) — Completes the first trade's stated cashflows in an FpML 5 confirmation document with their values on market, and returns the document's text. Every stated row still owed gains its days, year fraction, rates, forecast amount, discount factor and present value, and every stated principal exchange its discount factor and present value. Nothing else in the text changes. A stream without a cashflows block is left alone. A document the reader refuses, a stream whose stated rows do not pair with the coupons helixio generates, a document already carrying such values, and a market that cannot price the trade raise ValueError naming why. |
read |
read(text: str) — Reads the first trade of an FpML 5 confirmation document from its text. The first party in the document is the reporting party: a stream it pays is a paid leg. A swaption or a cancelable swap is read as the option or callable swap it is, its swap kept as underlying(). Anything the reader does not understand — another namespace, a missing element, an element that changes the economics, an index the registry does not carry — raises ValueError naming it. |
read_all |
`read_all(text: str, *, party: str |
helixio.fx
FX option diagnostics — what an option resolved to when it was priced. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
FxOptionDiagnostics |
FxOptionDiagnostics — What an FX option resolved to when it was priced. |
helixio.legs
Leg and coupon builders: the cashflow strips a product is assembled from, and the coupon class they return. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
AccrualCompounding |
AccrualCompounding — How an overnight leg accumulates its prints over a period: Simple (the market's averaged leg), Compounded or Continuous. Every accrual_compounding parameter takes the member or its string. |
AnyCoupon |
AnyCoupon — One coupon of the core's closed set: fixed, IBOR, overnight or redemption. Opaque — there is no constructor. A coupon is built by one of :func:fixed_rate_coupon, :func:ibor_coupon, :func:overnight_coupon or :func:redemption, which is where the set stays closed. |
Direction |
Direction — Which side of a leg the holder is on: Receive or Pay. Every direction parameter takes the member or its string ("Pay", "payer", "short"). |
ResetCompounding |
ResetCompounding — How a multi-reset coupon combines its resets into one payment: the ISDA 2006 methods Straight, Flat and SpreadExclusive, or Averaged. The compounding of multi_reset_coupon takes the member or its string. |
accumulated_fixed_leg |
`accumulated_fixed_leg(currency: str, effective: datetime.date, maturity: datetime.date, *, notional: float, fixed_rate: float, day_count: str |
accumulated_float_leg |
`accumulated_float_leg(coupons: list[AnyCoupon], pays: datetime.date, direction: Direction |
cms_coupon |
`cms_coupon(template: str, tenor: str, accrual_start: datetime.date, accrual_end: datetime.date, payment_date: datetime.date, *, notional: float, day_count: str |
cms_leg |
`cms_leg(schedule: Schedule, payment_dates: list[datetime.date], template: str, tenor: str, *, notional: float, day_count: str |
cms_spread_coupon |
`cms_spread_coupon(template: str, tenor: str, minus_tenor: str, accrual_start: datetime.date, accrual_end: datetime.date, payment_date: datetime.date, *, notional: float, day_count: str |
cms_spread_leg |
`cms_spread_leg(schedule: Schedule, payment_dates: list[datetime.date], template: str, tenor: str, minus_tenor: str, *, notional: float, day_count: str |
cpi_coupon |
`cpi_coupon(currency: str, accrual_start: datetime.date, accrual_end: datetime.date, payment_date: datetime.date, *, notional: float, fixed_rate: float, day_count: str |
cpi_leg |
`cpi_leg(schedule: Schedule, payment_dates: list[datetime.date], currency: str, *, notional: float, fixed_rate: float, day_count: str |
cpi_redemption |
`cpi_redemption(currency: str, payment_date: datetime.date, *, notional: float, index: str, base_index: float, observation: datetime.date |
fixed_rate_coupon |
`fixed_rate_coupon(currency: str, accrual_start: datetime.date, accrual_end: datetime.date, payment_date: datetime.date, *, notional: float, fixed_rate: float, day_count: str |
fixed_rate_leg |
`fixed_rate_leg(schedule: Schedule, payment_dates: list[datetime.date], currency: str, *, notional: float |
ibor_coupon |
`ibor_coupon(currency: str, accrual_start: datetime.date, accrual_end: datetime.date, payment_date: datetime.date, *, notional: float, index: str, day_count: str |
ibor_leg |
`ibor_leg(schedule: Schedule, payment_dates: list[datetime.date], currency: str, *, notional: float |
multi_reset_coupon |
`multi_reset_coupon(currency: str, accrual_start: datetime.date, accrual_end: datetime.date, payment_date: datetime.date, *, notional: float, index: str, day_count: str |
multi_reset_leg |
`multi_reset_leg(schedule: Schedule, payment_dates: list[datetime.date], currency: str, *, notional: float, index: str, day_count: str |
overnight_coupon |
`overnight_coupon(currency: str, accrual_start: datetime.date, accrual_end: datetime.date, payment_date: datetime.date, *, notional: float, index: str, day_count: str |
overnight_leg |
`overnight_leg(schedule: Schedule, payment_dates: list[datetime.date], currency: str, *, notional: float |
range_accrual_coupon |
`range_accrual_coupon(currency: str, accrual_start: datetime.date, accrual_end: datetime.date, payment_date: datetime.date, *, notional: float, fixed_rate: float, day_count: str |
range_accrual_leg |
`range_accrual_leg(schedule: Schedule, payment_dates: list[datetime.date], currency: str, *, notional: float, fixed_rate: float, day_count: str |
redemption |
redemption(currency: str, payment_date: datetime.date, *, amount: float) — A dated payment of a known amount — a redemption, a fee, a notional exchange. It accrues over nothing and pays no rate. |
yoy_inflation_coupon |
`yoy_inflation_coupon(currency: str, accrual_start: datetime.date, accrual_end: datetime.date, payment_date: datetime.date, *, notional: float, day_count: str |
yoy_inflation_leg |
`yoy_inflation_leg(currency: str, schedule: Schedule, payment_dates: list[datetime.date], *, notional: float, day_count: str |
helixio.linker
Inflation-linked street conventions — index ratios, real price and yield, and the market-specific quote rules. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
AnbimaQuote |
AnbimaQuote — An ANBIMA quotation: its parcels, the cotação and the unit price. |
anbima_nominal_value |
anbima_nominal_value(instrument: Instrument, market: MarketContext, date: datetime.date) — The ANBIMA VNA at date. |
anbima_price |
`anbima_price(instrument: Instrument, market: MarketContext, tir: float, settlement: datetime.date, calendar: Calendar, vna: float |
anbima_yield_from_price |
`anbima_yield_from_price(instrument: Instrument, market: MarketContext, price: float, settlement: datetime.date, calendar: Calendar, vna: float |
australian_coupon_factor |
australian_coupon_factor(instrument: Instrument, market: MarketContext, next_coupon: datetime.date) — The AOFM p for the payment at next_coupon, rounded to two places. |
australian_indexation_factor |
australian_indexation_factor(instrument: Instrument, market: MarketContext, date: datetime.date) — The Australian Kt indexation factor at date, in ratio form. |
australian_price_from_real_yield |
`australian_price_from_real_yield(instrument: Instrument, market: MarketContext, real_yield: float, settlement: datetime.date, kt: float |
australian_real_yield_from_price |
`australian_real_yield_from_price(instrument: Instrument, market: MarketContext, price: float, settlement: datetime.date, kt: float |
index_ratio |
index_ratio(instrument: Instrument, market: MarketContext, date: datetime.date) — The linker's index ratio at date: the lagged index level over the base. |
invoice |
invoice(instrument: Instrument, market: MarketContext, street: str, real_clean: float, settlement: datetime.date) — The settlement invoice per 100 nominal: (index_ratio, clean, accrued, dirty). |
real_price |
`real_price(instrument: Instrument, street: str, real_yield: float, settlement: datetime.date, price_basis: PriceBasis |
real_yield |
real_yield(instrument: Instrument, street: str, real_clean: float, settlement: datetime.date) — The street real yield implied by a real clean quote. |
reference_index |
reference_index(instrument: Instrument, market: MarketContext, observation: str, date: datetime.date) — The linker's street reference index at date. observation is "flat" (one published figure for the lagged month) or "daily" (interpolated between the lagged month and the next by the day-of-month fraction). This is what a quote reads; index_ratio is what the bond's value is built from. |
street_index_ratio |
street_index_ratio(instrument: Instrument, market: MarketContext, street: str, date: datetime.date) — The linker's street index ratio, by its market's convention. Distinct from index_ratio, which is the observation the bond's value is built from. This is the rule its quote is expressed in: most markets interpolate daily inside the lagged month, then round by their own chain. street is one of tips/us_tips, rrb/canadian_rrb, gilt/uk_dmo, anbima/ntnb, aofm/australian. |
uk_money_accrued |
`uk_money_accrued(instrument: Instrument, market: MarketContext, settlement: datetime.date, assumed_inflation: float |
uk_money_price |
`uk_money_price(instrument: Instrument, market: MarketContext, real_yield: float, settlement: datetime.date, assumed_inflation: float |
uk_money_yield |
`uk_money_yield(real_yield: float, assumed_inflation: float |
uk_real_yield_from_money |
`uk_real_yield_from_money(money_yield: float, assumed_inflation: float |
uk_real_yield_from_money_dirty |
`uk_real_yield_from_money_dirty(instrument: Instrument, market: MarketContext, money_dirty: float, settlement: datetime.date, assumed_inflation: float |
helixio.models
The closed-form option and short-rate machinery, for a caller who reaches into the model layer directly. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
HullWhite |
HullWhite — A validated one-factor Hull-White model: mean reversion a (strictly positive) and a volatility — a non-negative float, or (t_end, σ) pieces with strictly increasing positive ends in years, the last extending flat. |
HullWhiteLattice |
HullWhiteLattice — The Hull-White trinomial lattice, built and curve-fitted on construction. |
bachelier |
`bachelier(forward: float, strike: float, vol: float, expiry: float, kind: OptionKind |
black76 |
`black76(forward: float, strike: float, vol: float, expiry: float, kind: OptionKind |
black76_implied_vol |
`black76_implied_vol(price: float, forward: float, strike: float, expiry: float, kind: OptionKind |
compounded_oas |
`compounded_oas(oas: float, frequency: Frequency |
coupon_bond_option |
`coupon_bond_option(model: HullWhite, curve: DiscountCurve, expiry: datetime.date, pay_dates: list[datetime.date], coupons: list[float], strike: float, kind: OptionKind |
discount_bond_affine |
discount_bond_affine(model: HullWhite, curve: DiscountCurve, t: datetime.date, maturity: datetime.date) — (A, B) with P(t, maturity; r) = A · exp(−B · r). |
instantaneous_forward |
instantaneous_forward(curve: DiscountCurve, date: datetime.date) — f(0, date) off the curve by the lattice fit's own week-wide stencil. |
inv_norm_cdf |
inv_norm_cdf(p: float) — The inverse of the standard normal cumulative distribution. |
norm_cdf |
norm_cdf(x: float) — The standard normal cumulative distribution. |
payer_swaption |
payer_swaption(mean_reversion: float, sigma: float, curve: DiscountCurve, expiry: datetime.date, pay_dates: list[datetime.date], accruals: list[float], fixed_rate: float) — A European payer swaption under Hull-White, per unit notional: the par-struck put on the coupon bond paying fixed_rate × accrual on pay_dates plus redemption, on curve. |
receiver_swaption |
receiver_swaption(mean_reversion: float, sigma: float, curve: DiscountCurve, expiry: datetime.date, pay_dates: list[datetime.date], accruals: list[float], fixed_rate: float) — A European receiver swaption under Hull-White, per unit notional: the par-struck call on the same coupon bond as payer_swaption. |
sigma_from_price |
`sigma_from_price(model: HullWhite, curve: DiscountCurve, expiry: datetime.date, bond_maturity: datetime.date, strike: float, kind: OptionKind |
strip_from_callable |
strip_from_callable(instrument: Instrument, valuation: datetime.date) — The co-terminal swaption strip a callable implies: one (expiry, end) per exercisable call, each running to the bond's maturity. |
zero_bond_option |
`zero_bond_option(model: HullWhite, curve: DiscountCurve, expiry: datetime.date, bond_maturity: datetime.date, strike: float, kind: OptionKind |
helixio.products
Product constructors — every contract the library can build, and the two handles the bond-linked products share. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
AssetSwapKind |
AssetSwapKind — How an asset swap is packaged: ParPar or Proceeds. |
BarrierKind |
BarrierKind — Where a single barrier sits and what touching it does. Every barrier_kind takes the member or its string; a member is not its string. |
BondFuture |
BondFuture — A bond future: a delivery date and its resolved deliverable basket. |
BondOptionEngine |
BondOptionEngine — Which model prices a bond option: the bond's YieldVol or HullWhite. Instrument.engine() reads the code back. |
CapFloorKind |
CapFloorKind — A Cap or a Floor. |
CdsOptionStyle |
CdsOptionStyle — What a default before a CDS option's expiry does to it: SingleName knocks out, FrontEndProtection settles it as the payer's protection, Index is an index option with its exercise price. |
CdsStrikeType |
CdsStrikeType — How a CDS option's strike is quoted: Spread, or Price per unit notional the holder enters the index at. |
CmeMaturityRounding |
CmeMaturityRounding — How a CME contract group rounds a deliverable's maturity: to the Month (the 2-, 3- and 5-year contracts) or the Quarter (the 10-year and bond contracts). |
ExerciseStyle |
ExerciseStyle — When an option on a future may be exercised: European or American. |
FixedRateBond |
FixedRateBond — A fixed-rate bullet bond — the underlying of the bond-linked products. |
OptionKind |
OptionKind — An option's right: a Call or a Put. Every option-pricing kind takes the member or its string; a member is not its string. |
PremiumStyle |
PremiumStyle — How an option on a future settles its premium: FuturesStyle (margined daily, Eurex and ICE) or Paid up front (CBOT). |
ProductBuilder |
ProductBuilder — A swap draft: a template's swap with every term defaulted, refined by verbs, struck by a stated rate or at par against a market. Template.swap(trade_date) opens one: effective at the template's spot from the trade date, ten years long, 10,000,000 notional, receiving fixed, and no fixed rate. Frozen: every with_* returns a new draft. A draft is not an instrument — it has no npv — and build() on one with no rate raises ValueError naming with_fixed_rate and at_par. |
RepackEngine |
RepackEngine — How a repack note's gap is priced: Independent of rates, or Correlated through the issuer's Gaussian intensity. |
RepackRole |
RepackRole — Who holds a booked repack note: the bank's swap facing the SPV (SwapCounterparty) or the notes per unit notional (Noteholder). |
SwaptionEngine |
SwaptionEngine — Which model prices a swaption: the market's vol Surface or HullWhite. Instrument.engine() reads the code back. |
SwaptionKind |
SwaptionKind — Whether a swaption's holder pays (Payer) or receives (Receiver) the fixed leg on exercise. The swaption constructors' kind takes the member or its string. |
SwaptionSettlement |
SwaptionSettlement — How a swaption settles on exercise: into the swap (Physical) or for its value (Cash). |
ValuationTrigger |
ValuationTrigger — A repack note's valuation trigger: terminate when the collateral's market value falls below level of notional on a monitoring date, selling it liquidation_lag_days later. |
asset_swap |
`asset_swap(bond: Instrument, start: datetime.date, index: str, float_frequency: Frequency |
basket_total_return_swap |
`basket_total_return_swap(constituents: list[tuple[FixedRateBond, float, float] |
bermudan_swaption |
`bermudan_swaption(underlying: Instrument, exercise_dates: list[datetime.date], *, strike: float, kind: SwaptionKind |
bond_forward |
bond_forward(bond: FixedRateBond, *, notional: float, strike: float, forward_date: datetime.date, settlement_date: datetime.date, repo_key: str, short: bool=False, dirty_strike: bool=False) — A forward on notional of bond at a clean strike (dirty when dirty_strike), financed on the repo curve under repo_key. |
bond_future |
`bond_future(delivery: datetime.date, basket: list[tuple[FixedRateBond, float, str |
bond_future_option |
`bond_future_option(contract: str, expiry: datetime.date, *, strike: float, currency: str, premium_style: PremiumStyle |
bond_future_option_from_template |
`bond_future_option_from_template(code: str, year: int, month: int, *, strike: float, kind: OptionKind |
bond_future_position |
bond_future_position(future: BondFuture, *, contracts: float, contract_size: float, traded_price: float, short: bool=False) — A position in future: contracts contracts, each delivering contract_size of face, struck at traded_price per 100. Unlike bond_future, this is an Instrument and joins a book. Its value is side · contracts · (contract_size / 100) · (model − traded), undiscounted — a daily-margined future settles variation margin — where the model price comes off the cheapest-to-deliver's forward. The basket is the future's, already resolved: no security master is consulted at pricing time, and each row carries on its own repo cascade — its key, its repo group, its currency, then the discount curve. |
bond_option |
`bond_option(bond: FixedRateBond |
bond_total_return_swap |
`bond_total_return_swap(bond: FixedRateBond, *, notional: float, initial_price: float, reset_schedule: list[datetime.date], repo_key: str, paying_total_return: bool=False, funding_margin: float |
callable_bond |
`callable_bond(bond: FixedRateBond, schedule: list[tuple[datetime.date, float, CallKind |
callable_loan |
`callable_loan(loan: Instrument, schedule: list[tuple[datetime.date, float, CallKind |
callable_swap |
callable_swap(swap: Instrument, exercise_dates: list[datetime.date], *, callable_by: str='holder') — swap — a vanilla or overnight swap — cancellable on exercise_dates by callable_by: "holder" (a right bought) or "counterparty" (a right sold). Valued as the swap plus a Bermudan struck at its fixed rate on the Hull-White lattice, so its market needs the model pinned. |
cdo_tranche |
`cdo_tranche(family: str, trade_date: datetime.date, series: int, tenor_years: int, *, pool_notional: float, attach: float, detach: float, spread: float, buys_protection: bool=True, version: int=1, index_factor: float |
cme_conversion_factor |
`cme_conversion_factor(coupon: float, maturity: datetime.date, delivery_month_start: datetime.date, rounding: CmeMaturityRounding |
cms_swap |
`cms_swap(template: str, tenor: str, schedule: Schedule, day_count: str |
credit_default_swap |
`credit_default_swap(trade_date: datetime.date, reference: str, currency: str, tenor_years: int |
credit_default_swap_option |
`credit_default_swap_option(underlying: Instrument, expiry: datetime.date, *, strike: float, kind: SwaptionKind |
credit_linked_note |
`credit_linked_note(trade_date: datetime.date, reference: str, currency: str, tenor_years: int, *, notional: float, coupon: float, issued: bool=False, fixed_recovery: float |
credit_linked_swap |
`credit_linked_swap(reference: str, currency: str, legs: list[tuple[Leg, LegRole |
curve_pin |
curve_pin(currency: str, date: datetime.date, reading: str='discount_factor') — A curve's own reading at a date as an instrument — discount_factor or zero_rate of the currency's discount curve — so a curve node can be pinned directly: Rung.priced(date, curve_pin(...), value, 1.0). |
equity_basket_total_return_swap |
`equity_basket_total_return_swap(constituents: list[tuple[str, float, float]], currency: str, *, reset_schedule: list[datetime.date], paying_total_return: bool=False, funding_margin: float |
equity_option |
`equity_option(name: str, currency: str, *, strike: float, expiry: datetime.date, kind: OptionKind |
equity_total_return_swap |
`equity_total_return_swap(name: str, currency: str, *, quantity: float, initial_price: float, reset_schedule: list[datetime.date], paying_total_return: bool=False, funding_margin: float |
eurex_btp_conversion_factor |
eurex_btp_conversion_factor(coupon: float, interest_start: datetime.date, first_coupon: datetime.date, maturity: datetime.date, delivery: datetime.date, notional_coupon: float=0.06) — Eurex conversion factor for a semi-annual BTP into the Euro-BTP future, rounded to 7dp: the EUR formula on half-year periods, each payment that rolls off a weekend or TARGET holiday discounted the further fraction of a period it rolls. Rates are decimals. |
eurex_chf_conversion_factor |
eurex_chf_conversion_factor(coupon: float, maturity: datetime.date, delivery: datetime.date, notional_coupon: float) — Eurex conversion factor for a CHF Swiss Confederation bond into the CONF future: whole years to maturity and full months to the next coupon, as Eurex's CHF document states it, unrounded. Rates are decimals. |
eurex_conversion_factor |
eurex_conversion_factor(coupon: float, interest_start: datetime.date, first_coupon: datetime.date, maturity: datetime.date, delivery: datetime.date, notional_coupon: float=0.06) — Eurex conversion factor for an annual-coupon EUR bond, rounded to 6dp. Rates are decimals. |
european_swaption |
`european_swaption(underlying: Instrument, expiry: datetime.date, *, strike: float, kind: SwaptionKind |
fee |
fee(currency: str, payment_date: datetime.date, *, amount: float) — A standalone fee: amount in currency on payment_date, positive received and negative paid, discounted on the currency's cash collateral — the way an upfront is attached to a structure. Its cashflow table is one Fee row worth its npv. |
fixed_rate_bond |
`fixed_rate_bond(currency: str, issue: datetime.date, maturity: datetime.date, *, coupon: float, frequency: Frequency |
floating_rate_note |
`floating_rate_note(index: str, issue: datetime.date, maturity: datetime.date, *, margin: float, face: float, gearing: float |
fx_forward |
`fx_forward(base: str, quote: str, *, base_amount: float, contract_rate: float |
fx_option |
`fx_option(base: str, quote: str, *, notional_base: float, kind: OptionKind |
fx_swap |
fx_swap(near: Instrument, far: Instrument) — An FX swap: a near forward and an opposite far forward on one pair. |
ice_gilt_conversion_factor |
ice_gilt_conversion_factor(bond: FixedRateBond, delivery_month_start: datetime.date, notional_coupon: float=0.04) — ICE Long Gilt conversion factor: the clean price per unit nominal at the notional coupon on the delivery month's first day, under gilt conventions, rounded to 7dp. |
index_credit_default_swap |
`index_credit_default_swap(family: str, trade_date: datetime.date, series: int, tenor_years: int, *, notional: float, buys_protection: bool=True, version: int=1, index_factor: float |
inflation_linked_bond |
`inflation_linked_bond(currency: str, index: str, *, base_index: float, real_coupon: float, lag_months: int, frequency: Frequency |
interest_rate_cap_floor |
`interest_rate_cap_floor(index: str, effective: datetime.date, termination: datetime.date, *, notional: float, strike: float, kind: CapFloorKind |
loan |
`loan(schedule: Schedule, currency: str, *, notional: float, fixed_rate: float |
meeting_ois |
`meeting_ois(template: str |
nth_to_default_swap |
`nth_to_default_swap(trade_date: datetime.date, entities: list[str], n: int, currency: str, tenor_years: int, *, notional: float, spread: float, correlation: float |
payment_in_kind_bond |
`payment_in_kind_bond(currency: str, issue: datetime.date, maturity: datetime.date, *, rate: float, frequency: Frequency |
repack_note |
`repack_note(asset_swap: Instrument, issuer: str, *, notional: float, repack_role: RepackRole |
straddle |
straddle(first: Instrument, second: Instrument) — Two options of one strategy booked as one product — a straddle, or a strangle when the strikes differ: FX options on one pair or European swaptions in one currency. Worth the options' sum; Instrument.implied_vol quotes it on one flat vol, the way a straddle is quoted. Options of two strategies raise ValueError. |
structured_note |
`structured_note(leg: Leg, *, face: float, issuer: str |
swap_from_legs |
swap_from_legs(fixed: Leg, floating: Leg) — A fixed-versus-floating swap from two legs, booked as one trade. The currency and index are read off the coupons and the collateral is the legs' shared discount key. Legs on two keys raise ValueError; legs that are not a swap (a coupon on the wrong leg, two indices, two currencies, one side) raise PricingError naming why. |
vanilla_swap |
`vanilla_swap(currency: str, effective: datetime.date, termination: datetime.date, *, fixed_rate: float, index: str, notional: float, pays_fixed: bool=False, accrual_compounding: AccrualCompounding |
weekly_bond_future_option_from_template |
`weekly_bond_future_option_from_template(code: str, expires_on: datetime.date, *, strike: float, kind: OptionKind |
yoy_inflation_cap_floor |
`yoy_inflation_cap_floor(currency: str, index: str, base_date: datetime.date, maturity: datetime.date, *, notional: float, strike: float, kind: CapFloorKind |
yoy_inflation_swap |
`yoy_inflation_swap(currency: str, index: str, base_date: datetime.date, maturity: datetime.date, *, notional: float, fixed_rate: float, lag_months: int=3, receiver: bool |
zero_coupon_bond |
`zero_coupon_bond(currency: str, calc_method: int, settlement: datetime.date, maturity: datetime.date, *, face: float, discount_yield: float, day_count: str |
zero_coupon_inflation_cap_floor |
`zero_coupon_inflation_cap_floor(currency: str, index: str, base_date: datetime.date, maturity: datetime.date, *, notional: float, strike: float, kind: CapFloorKind |
zero_coupon_inflation_swap |
`zero_coupon_inflation_swap(currency: str, index: str, base_date: datetime.date, maturity: datetime.date, *, notional: float, fixed_rate: float, lag_months: int=3, receiver: bool |
helixio.rates
Linear-rates readings: settlement, futures price and its convexity, the fair forward rate, and CMS rates and options. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
cms_coupon_rate |
`cms_coupon_rate(market: MarketContext, template: str, tenor: str, fixing: datetime.date, payment: datetime.date, mean_reversion: float, *, gearing: float=1.0, spread: float=0.0, cap: float |
cms_option |
`cms_option(market: MarketContext, template: str, tenor: str, fixing: datetime.date, payment: datetime.date, mean_reversion: float, *, strike: float, kind: OptionKind |
cms_rate |
cms_rate(market: MarketContext, template: str, tenor: str, fixing: datetime.date, payment: datetime.date, mean_reversion: float) — The CMS rate on the swap index template at tenor, fixing on fixing and paid on payment: the index swap's forward and the rate convexity-adjusted by the linear terminal swap rate model at mean_reversion, as (forward, rate). |
cms_spread_coupon_rate |
`cms_spread_coupon_rate(market: MarketContext, template: str, tenor: str, minus_tenor: str, fixing: datetime.date, payment: datetime.date, mean_reversion: float, *, correlation: float |
cms_spread_option |
`cms_spread_option(market: MarketContext, template: str, tenor: str, minus_tenor: str, fixing: datetime.date, payment: datetime.date, mean_reversion: float, *, correlation: float |
fair_forward_rate |
fair_forward_rate(instrument: Instrument, market: MarketContext) — The forward rate covered interest parity implies for an FX forward. |
fra_settlement |
fra_settlement(instrument: Instrument, market: MarketContext) — The FRA's settlement amount — the discounted difference between the projected and the struck rate on the notional. |
futures_convexity |
futures_convexity(instrument: Instrument, market: MarketContext) — The future's convexity adjustment as a rate: its futures rate less the forward rate of the same contract with no adjustment. |
futures_price |
futures_price(instrument: Instrument, market: MarketContext) — The future's fair price, 100 − rate, convexity-adjusted as the contract says. |
hull_white_convexity_bias |
hull_white_convexity_bias(futures_price: float, t: float, maturity: float, sigma: float, mean_reversion: float) — The Hull-White convexity bias: the futures rate less the forward under Hull-White. |
helixio.risk
Risk measures, P&L prediction, attribution and reconciliation. The measures a desk names — DV01, PAR_LADDER, CS01, INF01 — are filed by asset class: risk.rates, risk.credit, risk.fx, risk.inflation and risk.equity, with risk.NPV beside them. risk.catalogue() lists every one; Book.measures lists the ones a book can answer. Any other point of the grammar is a risk.Measure, built with risk.delta from typed parts — Axis, Basis, Aggregation and Scale. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
Aggregation |
Aggregation — How a sensitivity is collapsed for reporting: one row (Total), a row per tenor bucket, per curve (ByCurve), or per contribution (Ladder). |
Axis |
Axis — What a sensitivity is to: the risk axes a report and a frame read. Every axis parameter takes the member or its string ("rate", "security_spread"); a member is not its string. |
Basis |
Basis — Whose quote a sensitivity is expressed against: the curve nodes' own (Zero) or the calibrating instruments' (Par). |
ExplainReport |
ExplainReport — The step-revaluation explain: the prints that became known first, then one leg per axis, telescoping exactly. |
Measure |
Measure — A quantity a report asks for: Measure.Npv, or a first-order sensitivity on an axis against a basis, collapsed by an aggregation, in a scale — what the grammar spells delta:<axis>[:<basis>[:<aggregation>]][:<scale>]. A value beside the string, never instead of it: code() and str print the grammar, Measure(spelling) parses it, delta(...) builds one from typed parts, and Book.report takes either. Equal and hashable by value; repr reads back. |
NPV |
NPV: Preset |
PredictedPnl |
PredictedPnl — The predicted explain: first order from risk plus one second-order pass. |
Preset |
Preset — A named risk measure — DV01, PAR_LADDER, CS01 — and the scale it reports in. |
Reconciliation |
Reconciliation — The two explains aligned by axis. |
ResetPnl |
ResetPnl — The reset step read per print: what each print the ending market holds and the starting market does not made against the forecast it replaced. |
Scale |
Scale — The unit a sensitivity is reported in: Scale.Unit (per unit move of the quote), Scale.Bp, Scale.Percent, Scale.VolPoint, or Scale.custom(factor). Spelled unit, bp, pct, volpt or x<factor>. |
Scales |
Scales — A book's default scale per quantity kind: rate, spread, vol, recovery, correlation, fx. |
ShiftType |
ShiftType — Whether a scenario leg moves its inputs relatively, x·(1 + s), or absolutely, x + s. Unset, each input keeps its own convention: curves absolute, FX spots and vols relative. Scenario's builders take the member or its string. |
catalogue |
catalogue — Every preset the library names, as records: name, class, measure, scale, how, requires. |
credit |
credit: types.ModuleType |
default_order |
default_order — The axis order explain uses when given none. |
delta |
`delta(axis: Axis |
equity |
equity: types.ModuleType |
explain |
`explain(book: Book, before: MarketContext, after: MarketContext, order: list[Axis |
fx |
fx: types.ModuleType |
inflation |
inflation: types.ModuleType |
predicted_pnl |
predicted_pnl(book: Book, before: MarketContext, after: MarketContext) — The predicted explain of book between two markets of the same shape, a print the after market alone holds being the reset step rather than a difference of shape. Raises ValueError where after differs from before by more than its parameters — a market under a scenario, whose shock the risk vector has no coordinate for; explain attributes such a move. |
rates |
rates: types.ModuleType |
reconcile |
reconcile(predicted: PredictedPnl, explained: ExplainReport) — The two explains aligned by axis. |
reset_pnl |
reset_pnl(book: Book, before: MarketContext, after: MarketContext) — The reset P&L of book from before to after: one row per print after holds and before does not, or holds at another value, each the exact revaluation from the forecast it replaced to the print, beside the move and the book's sensitivity to it. Raises ValueError where the two markets are valued on different days, or differ by anything other than the prints. |
helixio.templates
Convention templates: the registered ones by code, the whole registry as a table, and the swap and cross-currency templates a caller states. A template drafts its products through its own methods (get("USD-SOFR-OIS").vanilla_swap). Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
catalogue |
catalogue — Every registered template: code (what template takes), family (as Template.family reads it), and the registry's group and name. |
cross_currency |
`cross_currency(name: str, leg1: Index |
get |
get(code: str) — The registered template under code, as a value. Named template in Python. The Rust name differs because this module already has a crate-private template returning the bare AnyTemplate, which every code-keyed constructor resolves through. |
swap |
`swap(name: str, index: Index |
swap_conventions |
`swap_conventions(effective: datetime.date, termination: datetime.date, *, template: str |
helixio.vols
Volatility surfaces, the caplet strippers, and the delta/strike conversions an FX quote is stated in. Re-exports from the native extension and defines nothing: a behaviour defined here would be a behaviour with no Rust twin.
| Function | Signature |
|---|---|
CpiVolSurface |
CpiVolSurface — A zero-coupon CPI option vol surface over expiry x annualised zero-coupon strike, pinned per price index: lognormal is Black on the forward index ratio I(T)/I(T0) at strike (1+k)^tau, normal is Bachelier on that ratio (the vol in ratio units). Read at the time from the first of the month of (valuation - lag) to maturity - lag, ACT/365F. |
CreditVolSurface |
CreditVolSurface — The Black volatility of a credit name's forward CDS spread by option expiry, in years: linear in total variance between quoted expiries, flat beyond them. |
DeltaConvention |
DeltaConvention — How an FX delta is quoted: Spot or Fwd, each plain or premium-adjusted (PaSpot, PaFwd). Every delta_convention parameter takes the member or its string ("spot", "forward_premium"). A member is not its string. |
FutureOptionVolSurface |
FutureOptionVolSurface — A listed bond future's option vol surface over listed expiry dates x strikes per 100 face, pinned per contract: lognormal is a Black-76 price vol, normal a Bachelier price vol in points per year. Sticky-strike: linear in vol between strikes, linear in total variance between expiries, flat beyond every edge; time is day_count (ACT/365F unless stated) from reference. |
FxVolSmile |
FxVolSmile — One expiry's smile: (quote, vol) nodes, the quote spelled as the market spells it — "25P", "ATM", "25C" — held from the lowest strike's quote to the highest's. |
FxVolSurface |
FxVolSurface — An FX volatility surface: one smile per expiry. |
RateVolSurface |
RateVolSurface — A rate volatility surface on an expiry x tenor grid, optionally smiled. |
SabrFit |
SabrFit — A fitted SABR surface and the diagnostics of each slice that built it. |
SabrFormula |
SabrFormula — The expansion a SABR smile is read under: Hagan's lognormal (HaganLognormal), Hagan's normal (HaganNormal), or the normal beta = 0 form that reads a negative forward (NormalBetaZero). Every formula parameter takes the member or its string. |
SabrSpec |
SabrSpec — How a grid is fitted to SABR: the formula, beta and the shift, all stated, and the acceptance — the RMS vol error as a fraction of a slice's mean quote — with the Halton restarts a slice may spend reaching it. |
SabrVolSurface |
SabrVolSurface — A SABR rate smile over expiry x tenor: ATM vol, rho and nu at each node, beta and the shift stated once, alpha implied at each read from the ATM vol at the read's own forward. Pinned with with_swaption_vols or with_cap_vols beside a grid. |
StrikeAxis |
StrikeAxis — What a cube's strikes measure: an Absolute rate, or a SpreadToAtm over the forward. Every strike_axis parameter takes the member or its string. |
StripScheme |
StripScheme — How caplet vols are stripped from cap quotes: ConstantBetweenQuotes or one vol PerCaplet. The strippers' scheme takes the member or its string. |
VolConvention |
VolConvention — How a rate volatility is quoted: Normal (basis-point) or Lognormal. Every vol_convention parameter takes the member or its string. |
YoyVolSurface |
YoyVolSurface — A year-on-year inflation optionlet vol surface over expiry x absolute YoY strike, pinned per price index: normal or lognormal, a lognormal one optionally displaced (a displacement of one prices on 1 + rate). Each optionlet reads it at the time from the first of the month of (valuation - lag) to its period end - lag, ACT/365F. |
alpha_from_atm |
`alpha_from_atm(formula: SabrFormula |
atm_delta_neutral_strike |
`atm_delta_neutral_strike(forward: float, vol: float, expiry: float, delta_convention: DeltaConvention |
calibrate_sabr |
calibrate_sabr(grid: RateVolSurface, forwards: list[list[float]], spec: SabrSpec) — Fits SABR to every node of the smiled grid, each at its forward — forwards[expiry][tenor] — under spec. |
calibrate_sabr_with_atm |
calibrate_sabr_with_atm(atm: RateVolSurface, atm_forwards: list[list[float]], cube: RateVolSurface, cube_forwards: list[list[float]], spec: SabrSpec) — Fits SABR on a dense ATM matrix with a sparse smile cube: ATM vol from the matrix at every node, rho and nu fitted at the cube's nodes and read onto the matrix's. Every cube node must be a matrix node. |
caplet_forwards |
caplet_forwards(market: MarketContext, index: str, effective: datetime.date, termination: datetime.date, first_caplet_excluded: bool=True) — Each caplet's expiry (years) and forward for the cap on the term index, filtered to the rows the caplet stripper strips. |
caplet_smile |
`caplet_smile(index: str, effective: datetime.date, terminations: list[datetime.date], strikes: list[float], vols: list[list[float]], market: MarketContext, vol_convention: VolConvention |
caplet_vols |
`caplet_vols(index: str, effective: datetime.date, quotes: list[tuple[datetime.date, float]], market: MarketContext, vol_convention: VolConvention |
fx_delta |
`fx_delta(forward: float, strike: float, vol: float, expiry: float, df_base: float, delta_convention: DeltaConvention |
sabr_vol |
`sabr_vol(formula: SabrFormula |
strike_from_delta |
`strike_from_delta(target: float, forward: float, vol: float, expiry: float, df_base: float, delta_convention: DeltaConvention |
swaption_forwards |
`swaption_forwards(market: MarketContext, template: str, expiries: list[Period |
Classes
Book — reference
A collection of trades valued together, carrying the market its verbs value against.
| Method | Signature |
|---|---|
add |
add(self, id: str, instrument: Instrument, quantity: float) — Books quantity of instrument under id; the new book carries this book's market. |
extend |
extend(self, trades: list[tuple[str, Instrument, float]]) — Books every (id, instrument, quantity) of trades at once; the new book carries this book's market. The form for a book of many trades: add copies the book per call, so booking thousands of trades one add at a time is quadratic; this copies it once. A non-finite quantity is refused naming its trade, and nothing is booked. |
attach_market |
`attach_market(self, market: MarketContext |
market_context |
market_context(self) — The market this book carries, or None. |
fetch_market_data |
fetch_market_data(self, as_of: datetime.date) — Fetches what this book reads at as_of from its market's data source and keeps it — the explicit form of the fetch every verb makes, as the Rust book's fetch_market_data. Raises SnapshotError (or the source's own exception) on a refusal and leaves the market as it was. |
fetch_report |
fetch_report(self) — What the last fetch asked for and got: family, key, status. |
recipe_ask |
`recipe_ask(self, as_of: datetime.date |
demand_for |
demand_for(self, as_of: datetime.date, recipes: list[RecipeSpec]=...) — recipes kept as the source's recipes for as_of, the market moved there, and that date's demand — empty where nothing is missing. |
install |
install(self, demand: Demand, data: MarketData) — data built into the market at the demand's date and kept; fetch_report() written, on a refusal as well. |
npv |
`npv(self, *, as_of: datetime.date |
npv_by_trade |
`npv_by_trade(self, *, as_of: datetime.date |
risk |
`risk(self, *, as_of: datetime.date |
from_fpml |
`from_fpml(cls, documents: list[str |
reporting_in |
reporting_in(self, code: str) — The book reporting in code: every trade's value converted to that currency at the market's spot. |
through |
through(self, lens: Lens) — The book restricted to the trades lens admits. |
trades |
trades(self) — The book's trades as (id, instrument, quantity), in booking order. |
report |
`report(self, measures: list[Preset |
scaled |
scaled(self, scales: Scales) — The book reporting each quantity kind in scales wherever a measure states no scale of its own. |
available_measures |
`available_measures(self, *, as_of: datetime.date |
market_vega |
`market_vega(self, fit: HullWhiteFit, *, as_of: datetime.date |
under |
`under(self, scenario: Scenario, *, as_of: datetime.date |
credit_bumps |
`credit_bumps(self, kind: str, bump: float=0.01, *, as_of: datetime.date |
implied_vol |
`implied_vol(self, premium: float |
explain_pnl |
`explain_pnl(self, as_of1: datetime.date, as_of2: datetime.date, order: list[Axis |
predicted_pnl |
predicted_pnl(self, as_of1: datetime.date, as_of2: datetime.date) — The predicted explain within one day, on the terms of explain_pnl; across days it is refused. |
reset_pnl |
reset_pnl(self, as_of1: datetime.date, as_of2: datetime.date) — The reset P&L within one day, on the terms of explain_pnl; across days it is refused. |
Calendar — reference
A business-day calendar, resolved from a lookup expression. The expression is a business-centre code ("GBLO") or a comma-separated list joined into the union of its members' holidays ("GBLO,EUTA"). "EVERYDAY" names the calendar on which every day is a business day and "WEEKDAYS" the one on which only weekends are not. A value date that must also be good on a second calendar is stated with Calendar.settle's settlement. Calendars are immutable. No operation amends the calendar in hand: there is no add_holiday, no remove_holiday, and nothing here changes what any other holder resolves for a centre. Construction is a different thing from amendment, and is permitted: from_holidays builds a calendar from an explicit holiday set, and amended derives one from a calendar in hand. Both return a new value, register nothing, and leave every other holder's resolution unchanged.
| Method | Signature |
|---|---|
from_holidays |
`from_holidays(name: str, holidays: list[datetime.date], weekend: list[str] |
amended |
`amended(self, closing: list[datetime.date] |
join |
`join(calendars: list[Calendar], rule: JointCalendarRule |
expression |
expression(self) — The expression this calendar was resolved from. |
name |
name(self) — The resolved calendar's own name (diagnostic). |
is_weekend |
is_weekend(self, date: datetime.date) — Whether date falls on the weekend of this calendar's week. |
is_holiday |
is_holiday(self, date: datetime.date) — Whether date is closed for a reason beyond the weekend. A listed closure, not a Saturday: a weekend day carrying no listed closure is not a holiday, so is_weekend and is_holiday do not overlap. Selects exactly the dates holidays returns. |
is_business_day |
is_business_day(self, date: datetime.date) — Whether date is a good business day. |
adjust |
`adjust(self, date: datetime.date, business_day_convention: BusinessDayConvention |
settle |
`settle(self, date: datetime.date, n: int, unit: str='business_days', settlement: Calendar |
advance |
`advance(self, date: datetime.date, tenor: Period |
end_of_month |
end_of_month(self, date: datetime.date) — The last business day of date's month. The calendar month end is the free function last_day_of_month, which is blind to holidays. |
is_end_of_month |
is_end_of_month(self, date: datetime.date) — Whether date is its month's last business day. Strict: a trailing weekend day is not, though it does anchor the end-of-month roll. |
is_month_end_anchor |
is_month_end_anchor(self, date: datetime.date) — Whether date anchors the end-of-month roll — on or after its month's last business day, so a month-end falling on a Saturday still fires. |
next_business_day |
next_business_day(self, date: datetime.date) — The first business day on or after date. |
previous_business_day |
previous_business_day(self, date: datetime.date) — The first business day on or before date. |
add_business_days |
add_business_days(self, date: datetime.date, n: int) — Steps date by n good business days. Negative looks backward; zero returns date unchanged even where it is itself a holiday. This is the primitive a settlement or fixing lag is built on. |
business_days_between |
`business_days_between(self, start: datetime.date, end: datetime.date, *, include_first: bool |
holidays |
holidays(self, start: datetime.date, end: datetime.date, include_weekends: bool=False) — The non-business days in the inclusive range, ascending. Weekends are included only when asked for. Both endpoints are required: a calendar spans a century and an unbounded listing is not a useful answer. |
business_days |
business_days(self, start: datetime.date, end: datetime.date) — The business days in the inclusive range, ascending. |
CalibrationError
A calibration could not solve or verify its ladder.
ConvergenceError
A calibration or fit ran out of steps, sweeps or iterations.
Counterparty — [reference
A trading counterparty: its acronym and the CSA governing its trades. The CSA is named by its overnight index code ("EUR-ESTR"), as with_csa accepts one; a code naming no overnight index raises ValueError. A draft facing it (ProductBuilder.with_counterparty) discounts under the CSA: a USD trade under a EUR CSA on USD-CSA-EUR.
| Method | Signature |
|---|---|
acronym |
acronym(self) — The counterparty's short identifier. |
csa |
csa(self) — The CSA's overnight index code. |
collateral_currency |
collateral_currency(self) — The currency the CSA posts collateral in. |
collateral_for |
collateral_for(self, currency: str) — The discount key a trade in currency facing this counterparty declares: the currency itself where it is the CSA's, "<ccy>-CSA-<csa>" otherwise. |
CurveError
A curve could not be built or could not answer a query.
Demand — reference
What a book needs from outside to price on a market, as MarketContext.demand derives it and a source's fetch reads it.
| Method | Signature |
|---|---|
asks |
asks(self) — Whether this demand asks a source for any strip, fixing or spot. |
as_of |
as_of(self) — The date the market is as of. |
reporting |
reporting(self) — The currency the book reports in, where it has one. |
keys |
keys(self) — The collateral keys the snapshot builds, in build order. |
strips |
strips(self) — key and template, one row a quote strip. |
fixings |
fixings(self) — series and date, one row a print a valuation reads. |
fx |
fx(self) — The spots, each in its conventional quotation (EUR/USD). |
unresolved |
unresolved(self) — curve and reason, one row a curve no recipe builds. |
out_of_scope |
out_of_scope(self) — What the book declares that sources do not serve yet. |
recipe_ask |
recipe_ask(self) — The keys a recipe source is asked about. |
HelixError — reference
Base for every failure originating in the helixrs core.
Index — reference
An interest-rate, price or FX index: its conventions and the rate it quotes. Resolved from a registry code or display name, or built from conventions for a market the registry does not carry. Building one registers nothing. An accessor a kind does not carry raises ValueError naming the kind: a price index has no tenor, and saying so beats returning None.
| Method | Signature |
|---|---|
codes |
codes — Every registered index, as (kind, name, code). The set a rejection names, obtainable rather than only readable inside an error message. name is the index's display name — what Index.name() returns and what its fixings are stored under. The core's own table carries the accessor name in that position, which is a Rust identifier no Python caller can use for anything, so each row is resolved to report the name a caller can actually match on. |
ibor |
`ibor(name: str, currency: str, tenor: str, day_count: str |
inflation |
`inflation(name: str, region: str, currency: str, publication_frequency: Frequency |
overnight |
`overnight(name: str, currency: str, day_count: str |
fx |
`fx(base: str, quote: str, fixing_calendar: Calendar, fixing_lag_days: int, settlement: Calendar |
pair |
pair(self) — The pair an FX index names, as BASEQUOTE. |
value_date |
value_date(self, fixing_date: datetime.date) — The value date an FX fixing settles on. FX indices only. |
kind |
kind(self) — Which kind of index this is: "Overnight", "Ibor", "Fx" or "Price". |
name |
name(self) — The index's display name — the key its fixings are stored under. |
code |
code(self) — The registry code this index resolved under. A constructed index has none, and says so rather than inventing one. |
currency |
currency(self) — The ISO 4217 currency the index quotes in. |
tenor |
tenor(self) — The index's tenor, as a tenor string ("3M"). Term indices only. |
day_count |
day_count(self) — The index's accrual day count. |
fixing_calendar |
fixing_calendar(self) — The calendar the index's fixings are published on. The same calendar object the engine resolves, so a caller stepping dates on it steps them the way the index's own arithmetic does. |
fixing_lag_days |
fixing_lag_days(self) — The fixing lag, in good business days. |
business_day_convention |
business_day_convention(self) — The index's conventional business-day convention. |
end_of_month |
end_of_month(self) — The index's conventional end-of-month rule. |
region |
region(self) — The region a price index covers. |
publication_frequency |
publication_frequency(self) — How often a price index publishes, as a frequency code (1M for a monthly CPI). Refused for a rate index, which fixes daily. |
observation_lag_months |
observation_lag_months(self) — A price index's availability lag, in whole months. |
reference_month |
reference_month(self, date: datetime.date) — The first day of the lagged reference month for date. The date calibration.inflation names for a rung's pillar. Price indices only. |
interpolation |
interpolation(self) — How a price index maps a coupon date onto its monthly prints. |
fixing_date |
fixing_date(self, accrual_start: datetime.date) — The fixing date for an accrual starting on the date; for an FX index the date is the value date and the answer is its spot fixing date. |
maturity_date |
maturity_date(self, value_date: datetime.date) — The end of the window a rate valued on value_date covers: the value date advanced by the index's tenor under its own conventions. Not the coupon's accrual end: a schedule's business-day convention may have moved a boundary, and the index still quotes its tenor. |
forecast |
forecast(self, curve: DiscountCurve, value_date: datetime.date) — The rate this index quotes for a period starting on value_date, projected off curve. The simple forward over the index's own window, on the index's own day count — the same expression the engine applies to an unfixed coupon, so this reproduces the rate a priced instrument reports. Not DiscountCurve.forward_rate, which is continuously compounded on ACT/365 and is a property of the curve rather than of any index. For an ACT/360 index the two differ. A price or FX index refuses: each forecasts through a different seam. |
Instrument
A tradable instrument.
| Method | Signature |
|---|---|
product |
product(self) — The product family's name. |
engine |
engine(self) — Which model prices this instrument, where it chooses one: a European swaption's surface/hull_white, a bond option's yield_vol/hull_white; None otherwise. |
underlying |
underlying(self) — The instrument an option is written on — a swaption's swap, a bond option's bond — or None. |
market_data_needs |
market_data_needs(self) — The market data this instrument needs, as identifiers only. A dictionary of strings — no numbers, because a declaration carries none. Every value is the identifier's canonical spelling, the one the vocabulary parses back to the same identifier — never debug formatting, which nothing round-trips. |
fixings_needed |
fixings_needed(self, valuation: datetime.date) — The published fixings a valuation on valuation will read, as (index, date) pairs. A query over the instrument's own resets, not a valuation: it takes no market, and the date decides only which resets are already past — those are the ones a fixings store must hold, and the only ones reported, because a reset still to come is projected off a curve. Every index spelling is the canonical store key, so a reported pair goes straight into MarketContext.with_fixings unretyped. An instrument with no floating reset reports an empty list. |
contract_dates |
contract_dates(self) — The contract dates this instrument resolved to, as (name, date) pairs. These are exactly the dates a stated constructor takes, so a product built through the derived form can be read back and rebuilt through the stated one — which is what makes the two forms checkable against each other rather than merely both present. Empty for a product with no stated form: the listing names what a caller could state, not every date a product holds. final_payment_date remains the accessor for a calibration pillar. |
diagnostics |
diagnostics(self, market: MarketContext) — What this product's valuation resolved to on market: a bond option (yield-vol engine; the Hull-White engine has no such decomposition and raises), a bond future option, an FX option, a CDS or a credit-linked swap, each as its own diagnostics class. Any other product raises ValueError naming diagnostics. |
with_hull_white_convexity |
with_hull_white_convexity(self) — This rate future with its convexity modelled under Hull-White on the market's parameters for its currency: a term contract by the Hull-White convexity bias, a compounded overnight one (SR3, SONIA) in arrears from its first unprinted day, an averaged one (SR1) print by print. Any other product raises ValueError naming it. |
final_payment_date |
final_payment_date(self) — The date of the instrument's final payment — the pillar a calibration rung on it belongs to — or None for a product no ladder is built from. |
latest_relevant_date |
latest_relevant_date(self) — The latest date the instrument reads: the latest of its payment dates and of its IBOR coupons' fixing-window ends. None for a product with no legs. |
legs |
legs(self) — The instrument's legs, in the order it declares them, or None for a product that carries no coupon schedule. Each carries the discount key this instrument declares, so a leg taken out of an instrument values on the same curve it valued on inside it. Two legs the instrument declares that a caller sums must therefore come to the instrument's own present value, and a test asserts they do. A cross-currency swap's legs are on the sides the trade has them, each discounted on its own currency's collateral, so each values to its leg_npvs row in its own currency. A resetting leg comes back for its schedule and refuses to be valued: its notionals are forward FX. |
npv |
npv(self, market: MarketContext) — The instrument's present value against market, in npv_ccy(). The passive instantiation of the same seam a book values through — lift, view, resolve the declaration, price — with the interpreter lock released for the duration, as Book.npv releases it. |
implied_vol |
`implied_vol(self, market: MarketContext, premium: float |
npv_ccy |
npv_ccy(self) — The currency npv is in: a cash-settled forward's (an NDF's) settlement currency, a physical one's quote currency, a cross-currency swap's quoted leg's whichever side is paid (a non-deliverable one's settlement currency). |
leg_npvs |
`leg_npvs(self, market: MarketContext, pnl_ccy: str |
par_rate |
par_rate(self, market: MarketContext) — The par rate — the fixed rate, coupon or forward that values the instrument at zero. |
par_spread |
par_spread(self, market: MarketContext) — The par spread — the margin over the floating side that values the instrument at zero, where the product defines one. |
cashflow_records |
cashflow_records(self, market: MarketContext) — The instrument's cashflow schedule against market, as named parallel columns. One row per coupon, over the instrument's legs in the order it declares them. It takes a market, not a curve: the projected rate, the pay-date discount factor and the present value are priced quantities, and which curve fills which role is the market's to resolve. The same lift-view-resolve seam npv walks, with the interpreter lock released for the duration. A product carrying no leg raises rather than returning an empty table, which would be indistinguishable from a schedule whose coupons have all paid. Every row names its leg (its leg's position in that order) and the index it resets on (empty where it resets on none). A FRA, which carries no leg, reports its one settlement as a Settlement row on the accrual start, worth its npv. A zero-coupon inflation swap reports its two payments at maturity, Fixed then Indexed, whose pv sums to its npv. A non-deliverable swap's rows keep their own currency's amount, and fill settlement_currency and fx_fixing_date; their discount_factor is the FX conversion and the discount in one factor, so pv is in the settlement currency and sums to npv. |
Leg — reference
A compiled leg: coupons in payment order, valued on its own. A leg's floating coupons may name any number of distinct indices. The leg declares the first two, in first-seen order, as its projection and second_projection, and any further ones in its projection_basket, so a market missing one refuses the valuation naming it. Each coupon is priced off the curve its own index names — a stub read off a second tenor, or a basis leg beside its base, is one leg.
| Method | Signature |
|---|---|
coupons |
coupons(self) — The coupons, in payment order. |
with_collar |
`with_collar(self, cap: float |
with_digital |
`with_digital(self, call: tuple[float, float |
direction |
direction(self) — The side this leg is on. |
accumulation |
accumulation(self) — How this leg's coupons combine into what it is worth: "per_coupon" for a leg whose coupons each pay on their own date, or the zero-coupon rule the leg accumulates under. |
pays |
pays(self) — The single date a zero-coupon leg pays on, or None where each coupon pays on its own. |
currency |
currency(self) — The currency the leg pays in, or None for an empty leg. |
market_data_needs |
market_data_needs(self) — The market data this leg needs, as identifier pairs in the shape an instrument reports: discount, then projection and second_projection for the indices its coupons name, in first-seen order. |
npv |
npv(self, market: MarketContext) — The leg's present value against market. The same lift-view-resolve seam an instrument's npv walks, resolving the declaration this leg makes rather than one an instrument makes for it, with the interpreter lock released for the duration. |
bps |
bps(self, market: MarketContext) — This leg's basis-point sensitivity against market: one basis point of every accruing coupon's rate, discounted. A redemption adds nothing; a paid leg's BPS is negative. |
bps_by_flow |
bps_by_flow(self, market: MarketContext) — bps flow by flow: one figure per cashflow_records row, in its order, each flow's one basis point on its own. A redemption gives zero; the figures sum to bps. |
cashflow_records |
cashflow_records(self, market: MarketContext) — This leg's cashflow schedule against market, as named parallel columns — the same table, with the same columns in the same order, that Instrument.cashflow_records produces for the instrument holding it, except leg: a leg on its own is its table's only leg, numbered 0. |
Lens
A selection over a book: what a trade is, never what it is worth.
| Method | Signature |
|---|---|
all |
all — Every trade. |
currency |
currency(code: str) — Trades in one currency. |
product |
product(name: str) — Trades of one product family, by the family's name. |
id_prefix |
id_prefix(prefix: str) — Trades whose identifier starts with prefix. |
and_ |
and_(self, other: Lens) — This lens and other. |
or_ |
or_(self, other: Lens) — This lens or other. |
excluding |
excluding(self) — The complement of this lens. |
MarketContext — reference
The market a valuation is priced against: reference data with no date (recipes, counterparties, meeting schedules, the data source), one fixing history, and a snapshot per date — at one of which the market is.
| Method | Signature |
|---|---|
as_of |
as_of(self) — The date this market is at, or None for an undated market. |
on |
on(self, date: datetime.date) — This market at date, its other snapshots kept. |
dates |
dates(self) — The dates this market holds a snapshot for. |
without |
without(self, date: datetime.date) — This market without its snapshot at date. |
fixing_history |
fixing_history(self) — Every version of every print, as index, date, known_on, source, value; source is "fetched" or "pinned", a pin read over any fetched version. |
data_source |
data_source(self) — The object this market fetches from, or None where it is offline or none was set. |
with_data_source |
`with_data_source(self, source: object |
with_curve_helpers |
`with_curve_helpers(self, rungs: list[Rung |
with_recipe_quotes |
`with_recipe_quotes(self, key: str, quotes: dict[str, dict[Locator, float]], *, notional: float=1.0, interpolation: Interpolation |
demand |
demand(self, book: Book) — What book needs from outside to price on this market: the quote strips its curves' recipes name, the fixings its resets read, the FX spots its currencies convert through, and the curves no recipe builds. What this market already holds is not demanded. |
with_recipes_from |
with_recipes_from(self, book: Book, source: object) — This market with the recipes source.recipes(ask) holds for book's keys joined in — only for keys this market's own recipes do not set. The first step of snapshot. |
with_market_data |
with_market_data(self, demand: Demand, data: MarketData) — This market with what data carries of demand built in, or a SnapshotError naming every gap. The receiver is unchanged; where an async source hands back what it awaited. |
recipe_rungs |
recipe_rungs(self, key: str, quotes: dict[str, dict[Locator, float]], *, notional: float=1.0) — The helpers quotes binds to under this market's recipe for key, in sheet order and unsolved, each built on notional — what with_recipe_quotes solves, for checking that every quote reprices on the market it marked. with_recipe_quotes(key, quotes) is with_curve_helpers(recipe_rungs(key, quotes)). Refuses exactly as with_recipe_quotes does, with the same ValueError. |
with_discount |
`with_discount(self, currency: str, curve: DiscountCurve, *, collateral: str |
with_projection |
`with_projection(self, index: str |
with_repo_curve |
with_repo_curve(self, key: str, curve: DiscountCurve) — Pins curve as the repo (financing) curve under key. |
with_repo_spread |
`with_repo_spread(self, key: str, curve: RepoSpreadCurve |
repo_base |
repo_base(self, key: str) — The key repo(KEY) is declared over, or None for a whole repo curve or an absent key. |
with_security_spread |
with_security_spread(self, key: str, curve: SpreadCurve) — Pins curve as the security spread under key — dated or flat. |
with_credit_curve |
`with_credit_curve(self, credit: str, curve: SurvivalCurve, recovery: float |
with_inflation_curve |
`with_inflation_curve(self, index: str |
with_cms_spread_correlation |
`with_cms_spread_correlation(self, index: str, other: str, value: float |
with_basket_correlation |
with_basket_correlation(self, key: str, value: float) — Pins a basket's asset correlation under key — what an nth-to-default basket booked with correlation_key=key reads — as one risk parameter on the correlation axis. A correlation outside [0, 1) raises ValueError. |
with_base_correlation |
with_base_correlation(self, credit_index: str, curve: BaseCorrelation) — Pins curve as the base-correlation skew for the credit index credit_index, spelled FAMILY.SERIESvVERSION ("CDX.NA.IG.46v1"); another spelling raises ValueError. |
with_recovery_floor |
with_recovery_floor(self, credit_index: str, value: float) — Pins a credit index's Amraoui-Hitier recovery floor — what a tranche booked with recovery_floor="Market" on that index reads — as one risk parameter on the recovery axis. credit_index is the index the base correlation is keyed by ("CDX.NA.IG.46v1"). A floor outside [0, 1) raises ValueError. |
with_copula_dof |
with_copula_dof(self, credit_index: str, factor_dof: float, idiosyncratic_dof: float) — Pins a credit index's double-t degrees of freedom — what a tranche booked with factor_dof="Market", idiosyncratic_dof="Market" on that index reads — as two risk parameters on the correlation axis. A degree of freedom not above 2 raises ValueError. |
fixing |
fixing(self, index: str, date: datetime.date) — The rate index fixed at on date. Raises when the observation was never published, naming both — a historical reset that should have been observed and was not is a data problem, and returning a zero or projecting one hides it. Use try_fixing where absence is an ordinary answer. The key is the one the observation was pinned under, which is also the one the pricer reads: a coupon carries the index string its leg was built from, and the store is keyed by that string literally. Reading under a different spelling of the same index would hand back a number the pricer could not find. |
try_fixing |
try_fixing(self, index: str, date: datetime.date) — The rate index fixed at on date, or None if it was never published. For deciding whether a reset has been observed, where absence is an ordinary answer rather than a failure. The distinction the core draws between absent and failed survives the crossing. |
fixings |
fixings(self) — Every pinned observation, as (index, date, value). The shape with_fixings accepts, so the pair round-trips: a market's observations can be read out and pinned back unchanged. |
with_meetings |
with_meetings(self, schedule: MeetingSchedule) — This market carrying schedule as the bank's calendar of decisions: reference data, not a market input, so it moves no value and leaves equality untouched. A policy window opened on one of its effective dates is named by that decision on the curve, in risk rows and in the par ladder; where none is pinned the seeded 2026–2027 schedule answers. |
meetings |
meetings(self, bank: str) — The schedule pinned for bank, the seeded one where none is, or None for a bank with neither. |
recipes |
recipes(self) — How the curves this market does not hold would be built, as (key, curve, role, template, window). One row per recipe segment, plus one per projection source. The key column carries the canonical collateral spelling, so every listed row is addressable through recipe rather than merely readable. A bare market lists the shipped base. |
contents |
contents(self) — Every stored input's identifier, as (kind, key) pairs. The kinds name the pins that fill the stores, so a row reads as the call that would put it back, and the keys are the spellings a risk row prints and a scenario leg parses — so every listed row is addressable, not merely readable. Recipes are not listed: they describe curves this market does not hold, and are read through recipes() and recipe(key). The as_of date is not a row either — every market has one, so it is a property of the listing rather than an entry in it, and as_of() reports it. |
with_discount_via |
with_discount_via(self, currency: str, via: str, *, collateral: str) — Cash flows in currency under collateral discounted through hub currency via: discount({currency}-CSA-{collateral}) reads D(collateral) · D(currency under via) / D(collateral under via), composed at pricing from those three keys, so a later pin of a source moves it and its risk lands on the sources. # Errors ValueError where via is currency or collateral: the hub must be a third currency. |
discount_via |
discount_via(self, currency: str, *, collateral: str) — The hub currency under collateral was declared derived through (with_discount_via), or None for a curve held any other way — beside its discount row in contents(), what declares it again. |
discount_factor |
`discount_factor(self, currency: str, date: datetime.date, *, collateral: str |
repo_discount |
repo_discount(self, key: str, date: datetime.date) — The discount factor a trade financed on repo(KEY) reads on date: a spread chain composed onto its base, 1/P = 1/P_base + Σ s·τ, as pricing composes it; a whole repo curve as pinned. |
curve |
curve(self, id: str) — The curve pinned under id, with the ladder it was pinned with reattached — so a curve read out of one market and pinned into another still carries the par risk a ladder reads. id is the spelling contents() lists and a risk row prints, e.g. discount(USD) or projection(USD-SOFR). # Errors ValueError for an unparseable id; PricingError naming the held keys for a curve this market does not hold. A credit(...) or inflation(...) id is refused naming the reader that serves it — those are different curve types and cross as different classes. |
credit_curve |
credit_curve(self, credit: str) — The survival curve and stated recovery pinned under the credit identity credit — the spelling a contents() row under credit prints, which respells into this reader and into a scenario selector. The recovery comes back with the curve because it is the assumption the quote carries: a survival curve without it has unrecoverable units. # Errors PricingError naming the identity where the market pins no credit for it; ValueError for a spelling that is no identity, a bare entity included. |
inflation_curve |
inflation_curve(self, index: str) — The inflation curve pinned under index. # Errors PricingError naming the index where the market pins no inflation curve. |
cms_spread_correlation |
cms_spread_correlation(self, index: str, other: str) — The CMS spread correlation pinned for the swap indices index and other, in either order — the flat mark or the term structure. # Errors PricingError naming the pair where the market pins none. |
basket_correlation |
basket_correlation(self, key: str) — The basket correlation pinned under key. # Errors PricingError naming the key where the market pins none. |
recovery_floor |
recovery_floor(self, credit_index: str) — The recovery floor pinned for credit_index. # Errors PricingError naming the index where the market pins none. |
copula_dof |
copula_dof(self, credit_index: str) — The double-t degrees of freedom (factor_dof, idiosyncratic_dof) pinned for credit_index. # Errors PricingError naming the index where the market pins none. |
base_correlation |
base_correlation(self, credit_index: str) — The base correlation pinned under credit_index. Raises PricingError naming the index where the market pins none. |
fx_rate |
fx_rate(self, base: str, quote: str) — The FX rate pinned for the pair, as it was given. Not a triangulated cross: a rate the market reaches only through a pivot is a valuation-time derivation, and a pinned EURUSD does not make USDEUR readable here. Raises MarketDataError on a miss. |
fx_vols |
fx_vols(self, base: str, quote: str) — The FX volatility surface pinned for the pair. Takes the pair because the store holds one surface per pair. |
swaption_vols |
swaption_vols(self, currency: str) — The swaption volatility surface pinned for currency. # Errors PricingError naming the currency where the market pins no surface. |
bond_yield_vols |
bond_yield_vols(self, key: str) — The bond-yield volatility surface pinned under key: a currency code, or the security an option names. # Errors PricingError naming the key where the market pins no surface. |
cap_vols |
cap_vols(self, currency: str) — The cap volatility surface pinned for currency. # Errors PricingError naming the currency where the market pins no surface. |
cpi_vols |
cpi_vols(self, index: str) — The zero-coupon CPI option vol surface pinned for the price index index. # Errors PricingError naming the index where the market pins no surface. |
yoy_vols |
yoy_vols(self, index: str) — The year-on-year inflation optionlet vol surface pinned for the price index index. # Errors PricingError naming the index where the market pins no surface. |
credit_vols |
credit_vols(self, credit: str) — The credit volatility surface pinned under the credit identity credit. # Errors PricingError naming the identity where the market pins no surface. |
with_counterparties |
with_counterparties(self, counterparties: list[Counterparty]) — This market carrying counterparties as the master a draft's counterparty is resolved from. Reference data, not a market input: it moves no value and two markets differing only here compare equal. |
counterparty |
counterparty(self, acronym: str) — The counterparty under acronym, or None on a market given no master or an acronym it does not hold. |
recipe |
recipe(self, key: str) — How a curve under key would be built, as a CurveRecipe value, or None where this market carries no recipe for it. key is the collateral spelling a discount pin and a risk row use — "USD", or "EUR-CSA-USD" for a cross-collateral key. A key naming no currency pair has no recipe, because the registry is keyed by pairs. |
with_fixings |
`with_fixings(self, observations: list[tuple[str |
with_fx_rates |
with_fx_rates(self, quotes: list[tuple[str, str, float]]) — Pins spot FX as (base, quote, rate) quotes — rate units of quote per one base. |
with_fx_vols |
with_fx_vols(self, surface: FxVolSurface) — Pins an FX volatility surface. |
with_swaption_vols |
`with_swaption_vols(self, currency: str, surface: RateVolSurface |
with_bond_yield_vols |
with_bond_yield_vols(self, key: str, surface: RateVolSurface) — Pins a bond yield volatility surface under key — a currency code, or the security an option names: the same grid type, read at a forward modified duration on its second axis. |
with_cap_vols |
`with_cap_vols(self, currency: str, surface: RateVolSurface |
with_future_price |
with_future_price(self, contract: str, price: float) — Pins the listed future contract's quoted price ("CBOT-ZN-2027-03"), per 100 face — one lifted input on the futures-price axis. |
with_equity_spot |
with_equity_spot(self, equity: str, price: float) — Pins the equity's quoted spot — one lifted input on the equity axis. |
equity_spot |
equity_spot(self, equity: str) — The quoted spot of the equity, or None. |
with_equity_vols |
with_equity_vols(self, equity: str, surface: FutureOptionVolSurface) — Pins the equity's option vol surface — listed expiry × strike, what every option on the equity reads. |
equity_vols |
equity_vols(self, equity: str) — The option vol surface pinned for the equity. |
future_price |
future_price(self, contract: str) — The quoted price of the listed future contract, per 100, or None. |
with_future_option_vols |
with_future_option_vols(self, contract: str, surface: FutureOptionVolSurface) — Pins the listed future contract's option vol surface — what every option exercising into it reads. |
future_option_vols |
future_option_vols(self, contract: str) — The option vol surface pinned for the listed future contract. |
with_cpi_vols |
with_cpi_vols(self, index: str, surface: CpiVolSurface) — Pins a price index's zero-coupon CPI option vol surface — what a zero-coupon inflation cap, floor or collared CPI notional on index reads. |
with_yoy_vols |
with_yoy_vols(self, index: str, surface: YoyVolSurface) — Pins a price index's year-on-year inflation optionlet vol surface — what a YoY cap, floor or collared YoY coupon on index reads. |
with_credit_vols |
with_credit_vols(self, credit: str, surface: CreditVolSurface) — Pins surface as the credit vol surface for the credit identity credit — the identity its credit curve is under, a single name's or an index's — what a CDS option on it reads. |
with_credit_intensity |
with_credit_intensity(self, credit: str, currency: str, mean_reversion: float, vol: float, correlation: float) — Pins credit's Gaussian intensity — its mean reversion, volatility and correlation with currency's Hull–White factor — under the labels a correlated repack gap reads. |
with_fx_rate_correlation |
with_fx_rate_correlation(self, base: str, quote: str, currency: str, correlation: float) — Pins the correlation between the FX pair base/quote and currency's Hull–White factor, read by a cross-currency repack simulation on the correlation axis. |
with_fx_credit_correlation |
with_fx_credit_correlation(self, base: str, quote: str, credit: str, correlation: float) — Pins the correlation between the FX pair base/quote and credit's intensity. |
with_rate_correlation |
with_rate_correlation(self, currency: str, other: str, correlation: float) — Pins the correlation between two currencies' Hull–White factors. |
with_credit_crisis |
with_credit_crisis(self, credit: str, rate: float, jump_mean: float, default_probability: float) — Pins credit's crises — their arrival rate, the mean spread jump each brings, and the probability one defaults the issuer at once — under the labels a simulated repack gap reads. |
with_hull_white |
`with_hull_white(self, currency: str, mean_reversion: float, sigma: float |
pin_input |
pin_input(self, label: str, value: float) — Pins an exogenous input under label — a number the market watches and risks on its own axis. |
with_flat_swaption_vol |
with_flat_swaption_vol(self, currency: str, expiry: datetime.date, end: datetime.date, normal_vol: float) — Pin one ATM swaption normal vol. Named apart from :meth:with_swaption_vols, which pins a whole surface. |
pinned_input |
pinned_input(self, label: str) — The value pinned under label, or None if the market carries none. |
under |
under(self, scenario: Scenario) — This market under scenario: every admitted input wrapped in its family's shock, everything else carried through. A market like any other — value, risk, report and attribution all run against it, and it lifts to the base's parameter vector, so a risk vector taken under a scenario lines up with the base's row for row. The receiver is untouched. |
MarketData — reference
What a source answered: strips as (template, observed, [(locator, value), ...]), fixings as (series, date, value), spots as (pair, rate, observed). Anything a demand names and this does not carry is a gap.
| Method | Signature |
|---|---|
strips |
strips(self) — template, observed, locator, value — one row a pillar. |
fixings |
fixings(self) — series, date, value. |
fx |
fx(self) — pair, rate, observed. |
MarketDataError
A market-data lookup asked for a value that was never supplied.
MissingFixingError — reference
No fixing was published for the index on the date; kind and key name it as MarketContext.contents() lists it.
MissingFxRateError
No FX rate was supplied for the pair; kind and key name it as MarketContext.contents() lists it.
MissingMarketInputError — reference
A valuation found no curve, vol surface, correlation, scalar, fixing or FX rate in the market. kind and key name the input as MarketContext.contents() lists it once supplied — ("projection", "USD-SOFR"), ("swaption_vol", "EUR"), ("fixing", "EUR-EURIBOR-6M@2026-01-02"); trade is the book trade the refusal came from, or None.
NoLadderError
A par basis was asked of an input no calibration ladder has a row for.
PricingError
A valuation could not be produced from the market it was given.
RecipeAsk
What a recipe source is asked about: the date and the collateral keys.
| Method | Signature |
|---|---|
as_of |
as_of(self) — The date the market is as of. |
keys |
keys(self) — The collateral keys the book's trades declare. |
Records
A table of results: named columns of equal length, each carrying its kind. Returned by every reading taken against market data. to_dict and to_rows are readings of the same table; to_polars and to_pandas build a dataframe with a declared schema rather than an inferred one, which is what the column kinds are carried across the boundary for. len counts rows while [...] takes a column name, and the table refuses to be iterated rather than choose between the two axes: pandas iterates column names and polars iterates columns, so any choice made here would surprise whichever a caller arrived from. Call to_rows, columns or to_dict.
| Method | Signature |
|---|---|
columns |
columns(self) — The column names, in the order the producing frame wrote them. |
column_kinds |
column_kinds(self) — Each column's kind — "text", "number" or "date" — in column order. What a caller building their own frame needs, and what the two dataframe readings declare their schema from. |
to_dict |
to_dict(self) — The table as a mapping of column name to list of values. Text becomes str, Number float, and Date datetime.date with None where a row has none. An absent number is nan, not None: the cell belongs to a numeric column and keeping it numeric is what stops the column changing type around it. |
to_rows |
to_rows(self) — The table as a list of row tuples, each in column order. |
to_polars |
to_polars(self) — The table as a polars.DataFrame, built with a declared schema. # Errors ImportError naming the helixio[polars] extra when polars is absent. |
to_pandas |
to_pandas(self) — The table as a pandas.DataFrame, with declared dtypes. A date column becomes datetime64[ns] with NaT where absent, rather than the object column pandas infers from datetime.date values. # Errors ImportError naming the helixio[pandas] extra when pandas is absent. |
to_csv |
to_csv(self, path: str) — Writes the table to path as CSV — a header row, then one line per row. Imports nothing. Writing a text format through a dataframe library would make a plain to_csv the one call in this package that needs a dependency, which is what this avoids. # Errors OSError if the file cannot be written. |
RiskError
A risk pass failed in valuation or adjoint read-back.
RiskFrame
One risk pass and the market it was taken against, read on any axis, basis and aggregation.
| Method | Signature |
|---|---|
read |
`read(self, axis: Axis |
npv |
npv(self) — The book's value in the pass this frame holds. |
valuation_date |
valuation_date(self) — The valuation date of the market the pass was taken against. |
risk |
risk(self) — The raw input sensitivities the pass produced: input, value. |
Scenario
A named perturbation of the market, in the units its quotes are made in.
| Method | Signature |
|---|---|
shift |
`shift(self, selector: str, amount: float, *, shift_type: ShiftType |
slope |
`slope(self, selector: str, level: float, per_year: float, pivot_years: float, *, shift_type: ShiftType |
bucket |
`bucket(self, selector: str, start: datetime.date, end: datetime.date, amount: float, *, shift_type: ShiftType |
tent |
`tent(self, selector: str, peak: datetime.date, amount: float, *, left: datetime.date |
holding_outrights |
holding_outrights(self) — This scenario moving FX-implied curves' spots with every FX leg and holding their outrights, so an FX shock's P&L is the one the AD FX delta predicts. By default the implied curves' rates are held instead. |
label |
label(self) — What a report keys this scenario's row by. |
SnapshotError
A snapshot built no market: gaps lists every strip, fixing, spot or curve the source did not supply, as family and key.
SolveError
A quote solve found no root in its bracket or did not converge.
SourceError
A market-data, recipe or calendar source itself failed — transport, authentication, a payload it could not read — as distinct from a key it does not hold, which is a gap.
Template — reference
A resolved convention template, and the code it resolved from. Frozen: every with_* returns a new Template and leaves the receiver unchanged. A builder the family's conventions do not carry raises ValueError naming the code and the family, rather than returning an unchanged template.
| Method | Signature |
|---|---|
code |
code(self) — The registry code this template resolved from. |
swap |
swap(self, trade_date: datetime.date) — A draft of this template's swap on trade_date, every term defaulted: effective at spot, ten years long, 10,000,000, receiving fixed, and no fixed rate until with_fixed_rate or at_par(market). template("USD-SOFR-OIS").swap(VAL).at_par(market) is the commonest trade in one line. A template whose family builds no swap raises ValueError naming the family. |
family |
family(self) — The template family's name — the same spelling a wrong-family refusal uses, so the two cannot drift. |
calendar |
calendar(self) — The calendar this template's schedules are built on — the resolved calendar itself, not a code that would have to be re-resolved. Handing back the engine's own handle is what makes a caller's date arithmetic the engine's: a code re-resolved on this side could differ from the one the template holds and nothing would say so. A family that carries no single schedule calendar is refused by name. |
spot_lag |
spot_lag(self) — The spot lag this template's default effective date is taken at, as a tenor ("2D"). A family that carries none is refused by name. |
spot_date |
spot_date(self, valuation: datetime.date) — The default effective date this template takes for valuation — the one seam every product builder and calibration helper resolves an effective date through. Exposed so that a caller can check their own date arithmetic against the engine's rather than assume it: calendar(), spot_lag() and the business-day primitives should compose to exactly this. |
with_spot_lag |
with_spot_lag(self, days: int) — This template with the spot lag overridden, in business days. Accepted only where a constructor method on this class reads it: the zero-coupon swap, whose zero_coupon_swap(valuation, tenor, ...) derives its effective date from the lag. Every other family is refused, and the two refusals say different things. A family that carries no spot lag at all is told so. A family that carries one whose constructor here takes explicit dates is told that — because the field is real and a caller who set it would otherwise reasonably believe it had done something. |
with_meeting_node |
with_meeting_node(self, node: str) — This meeting-OIS template with its rungs noded at node: "window_end" (the default, where each decision's rate takes effect) or "payment_date" (the swap's payment date, for reconciling to a curve noded there; a turn is refused under it). Any other family raises ValueError. |
with_payment_lag |
with_payment_lag(self, days: int) — This template with the payment lag overridden, in business days. Accepted for the overnight and vanilla swap families, whose vanilla_swap here builds the legs the lag dates. A CDS carries one too, but this class has no CDS constructor for it to reach. |
with_business_day_convention |
`with_business_day_convention(self, business_day_convention: BusinessDayConvention |
with_payment_convention |
`with_payment_convention(self, business_day_convention: BusinessDayConvention |
with_float_payment_convention |
`with_float_payment_convention(self, business_day_convention: BusinessDayConvention |
with_float_payment_lag |
with_float_payment_lag(self, days: int) — This template with the floating leg's own payment lag, leaving the fixed leg on the shared one. |
with_calendar |
`with_calendar(self, calendar: Calendar |
with_date_generation |
with_date_generation(self, date_generation: str) — This template generating its swaps' schedules in date_generation's direction: "Backward" from the termination, any stub at the front, or "Forward" from the effective date, the stub at the back, as every registered template builds. An OIS or vanilla swap template takes it; another family raises ValueError. |
with_roll_convention |
`with_roll_convention(self, roll_convention: RollConvention |
with_float_payment_calendar |
with_float_payment_calendar(self, calendar: str) — This template with the floating leg's own payment calendar, leaving the fixed leg on the shared one. |
vanilla_swap |
`vanilla_swap(self, effective: datetime.date, termination: datetime.date |
forward_rate_agreement |
`forward_rate_agreement(self, valuation: datetime.date |
money_market_deposit |
`money_market_deposit(self, start: datetime.date, maturity: datetime.date, *, rate: float, notional: float, lending: bool=True, issuer: str |
tri_party_repo |
`tri_party_repo(self, start: datetime.date, end: datetime.date |
securities_loan |
`securities_loan(self, start: datetime.date, end: datetime.date |
repo |
`repo(self, start: datetime.date, end: datetime.date |
rate_future |
`rate_future(self, valuation: datetime.date |
reference_period |
reference_period(self, year: int, month: int) — The reference period of this rate-future template's listed contract for a delivery month: the IMM quarter starting on the month's third Wednesday, or the calendar month itself. |
last_trading_day |
last_trading_day(self, year: int, month: int) — The day the listed contract for a delivery month stops trading under the exchange's rule — the template's calendar standing in for the exchange's — or None where the rule is not sourced. |
tick_size |
tick_size(self, year: int, month: int, as_of: datetime.date) — The listed contract's minimum price fluctuation on as_of, in index points, or None where the exchange's rule is not sourced. |
rate_future_contract |
`rate_future_contract(self, year: int, month: int, *, contracts: float, traded_price: float, short: bool=False, convexity_adjustment: float |
zero_coupon_swap |
`zero_coupon_swap(self, valuation: datetime.date |
nds |
nds(self, trade_date: datetime.date, tenor: str, *, notional: float, fixed_rate: float, pays_fixed: bool=False) — A non-deliverable swap drafted from this NDS template. The local swap its market trades, tenor long from spot on trade_date, every payment of both legs settling in USD at the FX fixing two business days before it (BRL: Brazil and New York days). A tenor within the template's zero-coupon limit pays once at maturity. Any other family raises ValueError. |
ndf |
ndf(self, trade_date: datetime.date, tenor: str, *, notional: float, forward_rate: float, short: bool=False) — A non-deliverable forward drafted from this NDF template. notional of the settlement currency is bought (sold when short) against the reference currency at forward_rate. Spot, the value date and the fixing date come from the template's calendars and lags; the forward is cash-settled on the pair's FX key (FX-USDKRW) in the settlement currency. Any other family raises ValueError. |
tenor_basis_swap |
`tenor_basis_swap(self, effective: datetime.date, termination: datetime.date, *, notional: float, spread: float, spread_leg: str |
cross_currency_swap |
`cross_currency_swap(self, effective: datetime.date, termination: datetime.date, *, notional: float, fx_rate: float, spread: float |
with_leg_index |
`with_leg_index(self, leg: str, index: Index |
with_leg_conventions |
`with_leg_conventions(self, leg: str, *, frequency: Frequency |
with_quoted_leg |
with_quoted_leg(self, leg: str) — This cross-currency template quoting its spread on leg. |
with_resetting_leg |
`with_resetting_leg(self, leg: str |
with_leg_fx |
`with_leg_fx(self, leg: str, ndf: str |
with_initial_exchange |
with_initial_exchange(self, initial: bool) — This cross-currency template exchanging its notional at the start as well as the end, or, with False, at the end alone. An opted-in initial exchange on a non-deliverable template converts at the deal rate (the swap's fx_rate). A resetting template, or any other family, raises ValueError. |
with_settlement_currency |
with_settlement_currency(self, code: str) — This NDS or non-deliverable cross-currency template settling in code; a fixing sourced against USD crosses through USD into it. Any other family, or a deliverable cross-currency template, raises ValueError naming it. |
ndo |
`ndo(self, trade_date: datetime.date, tenor: str, *, notional: float, strike: float, kind: OptionKind |
with_csa |
with_csa(self, csa: str) — This cross-currency template under the CSA csa: its overnight index ("EUR-ESTR"), or a collateral currency ("EUR"), read as the index that currency's shipped own curve calibrates on — a currency with none raises ValueError asking for the index code. |
cross_currency_legs |
cross_currency_legs(self) — Each leg's currency, index and role (quoted, resetting). |
Module types
helixio.bonds.BondFutureAnalysis
The basket analysis: the rows, the CTD, the theoretical price.
| Method | Signature |
|---|---|
rows |
rows(self) — One row per deliverable, in basket order. |
ctd |
ctd(self) — The cheapest-to-deliver row's key: the minimum net basis. |
ctd_index |
ctd_index(self) — The cheapest-to-deliver row's position in rows() — the same row ctd names, typed, so a cross-language check compares an index rather than a label. |
theoretical_price |
theoretical_price(self) — forward_clean(CTD) / CF(CTD). |
helixio.bonds.BondFutureOptionDiagnostics — reference
What a bond future option is priced from, per 100.
| Method | Signature |
|---|---|
futures_price |
futures_price(self) — The quoted futures price. |
vol |
vol(self) — The vol read at the option's expiry and strike. |
vol_convention |
vol_convention(self) — "lognormal" or "normal". |
time |
time(self) — The option's life in the surface's time measure, in years. |
discount |
discount(self) — The discount factor to expiry — 1 for a futures-style option. |
european |
european(self) — The European value, per 100. |
early_exercise |
early_exercise(self) — What early exercise adds, per 100. |
critical_price |
critical_price(self) — The Barone-Adesi-Whaley critical futures price, where it applies. |
helixio.bonds.BondOptionDiagnostics
What a bond option resolved to when it was priced.
| Method | Signature |
|---|---|
forward_dirty |
forward_dirty(self) — Forward dirty price per 100 at exercise settlement. |
forward_yield |
forward_yield(self) — Forward yield on the dirty forward, compounded at the coupon frequency. |
forward_duration |
forward_duration(self) — Forward modified duration at the forward yield, in years. |
yield_vol |
yield_vol(self) — The yield vol read at (expiry, forward_duration). |
price_vol |
price_vol(self) — The price vol after the duration conversion: absolute per 100 under Normal, relative under Lognormal. |
accrued_at_exercise |
accrued_at_exercise(self) — Accrued per 100 at exercise settlement. |
dirty_strike |
dirty_strike(self) — The dirty cash strike per 100. |
expiry_years |
expiry_years(self) — Expiry in years, Act/365F from valuation. |
helixio.bonds.BondStrikeKind
What a bond option's strike is stated as: a Clean or Dirty price, or a Yield. bond_option takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.bonds.CallKind
Whose option a callability is: the issuer's Call or the holder's Put. A callable_bond schedule row carries the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.bonds.DeliverableAnalysis
One deliverable's analytics at a quoted futures price.
| Method | Signature |
|---|---|
key |
key(self) — The row's name — the key its basket entry carried. |
conversion_factor |
conversion_factor(self) — Its exchange-published conversion factor. |
spot_clean |
spot_clean(self) — Spot clean price per 100, settling on the valuation date. |
forward_clean |
forward_clean(self) — Forward clean price per 100 at delivery, on the carry curve. |
carry_tier |
carry_tier(self) — Which cascade rung supplied the carry curve — "security", "group", "currency" — or None for the discount-curve fallback. |
gross_basis |
gross_basis(self) — spot_clean − F·CF. |
net_basis |
net_basis(self) — forward_clean − F·CF. |
interim_coupons |
interim_coupons(self) — Coupons per 100 the deliverable pays after the valuation date and on or before delivery. |
repo_day_count |
repo_day_count(self) — The day count implied_repo is quoted on. |
implied_repo |
implied_repo(self) — The simple financing rate the invoice implies, each interim coupon reinvested to delivery at the same rate: (I + Σcᵢ − P) / (P·τ − Σcᵢ·τᵢ), on repo_day_count. |
helixio.bonds.ExDivDayType
The days an ex-dividend lag counts: Business days on the bond's settlement calendar (UK gilts) or Calendar days (South African government bonds).
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.bonds.PriceBasis
Whether a bond price includes accrued interest. Clean or Dirty; every bond reading that takes a basis takes the member or its string. A member is not equal to its string; code() is the string the parser takes.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.bonds.YieldConvention
The convention a quoted yield is stated under, by one name. A street convention — UsStreet, UkGilt, DeGovt, or the bond's own Default — compounding at the market's frequency; a fixed compounding — Annual, SemiAnnual, Quarterly, Monthly, Continuous, Simple — whatever the bond pays; or one of the two conventions that are not a discounting relationship, Ise and JapaneseSimple. Every yield_convention parameter takes the member or its spelling ("ust", "semiannual", "jgb"). A reading that needs a single compounding basis, such as a duration, refuses Ise and JapaneseSimple by name. A member is not equal to its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.bonds.YieldMoments
A bond's dirty price and its first two yield derivatives at one yield; every yield-space measure is a reading of the three.
| Method | Signature |
|---|---|
dirty_price |
dirty_price(self) — The dirty price per 100 face. |
first |
first(self) — ∂P/∂y. |
second |
second(self) — ∂²P/∂y². |
modified_duration |
modified_duration(self) — Modified duration −P′/P. |
convexity |
convexity(self) — Convexity P″/P. |
dv01 |
dv01(self) — DV01 per 100 face. |
yield_sensitivity |
yield_sensitivity(self) — ∂y/∂P, the implicit-function derivative 1/P′. |
money_duration |
money_duration(self, face: float) — Money duration at a stated face. |
money_dv01 |
money_dv01(self, face: float) — DV01 in money at a stated face. |
helixio.calibration.CalibratedBaseCorrelation
A base-correlation curve solved from a tranche capital structure, and how it was reached.
| Method | Signature |
|---|---|
curve |
curve(self) — The solved curve: one correlation per detachment. |
solves |
solves(self) — One row per tranche in solve order: pillar (the tranche index), iterations, residual. |
helixio.calibration.CalibratedInflation
An inflation curve solved from a ladder of zero-coupon inflation swaps, and how it was reached.
| Method | Signature |
|---|---|
curve |
curve(self) — The solved curve: one index-level node per rung, carrying its ladder. |
solves |
solves(self) — One row per rung in solve order: pillar, iterations, residual. |
rungs |
rungs(self) — The ladder this curve reprices: pillar and quote per rung. |
jacobian |
jacobian(self) — ∂level/∂q row-major: jacobian[node][rung]. |
helixio.calibration.CalibratedSurvival
A survival curve solved from a ladder of credit default swaps, and how it was reached.
| Method | Signature |
|---|---|
curve |
curve(self) — The solved curve — ISDA piecewise-flat hazards, or a default density — one parameter per rung, carrying its ladder into with_credit_curve. |
solves |
solves(self) — One row per rung in solve order: pillar, iterations, residual. |
rungs |
rungs(self) — The ladder this curve reprices: pillar and quote per rung, in solve order — the same order as the curve's parameters. |
jacobian |
jacobian(self) — ∂p/∂q row-major: jacobian[parameter][rung] is how far that parameter — a segment's hazard, or a pillar's density — moves per unit move in that rung's quote. |
helixio.calibration.Calibration — reference
A calibrated curve and how it was reached.
| Method | Signature |
|---|---|
curve |
curve(self) — The solved curve. |
solves |
solves(self) — One row per rung in solve order: pillar, iterations, residual. pillar and iterations are counts, and arrive as floats: a column carries text, a number or a date, and widening that set for two diagnostic columns would change every producer of a table. |
sweeps |
sweeps(self) — How many full-curve sweeps moved a pillar after the sequential pass. |
rungs |
rungs(self) — The ladder this curve reprices: (maturity, quote) per rung, in solve order — the same order as the curve's pillars. |
jacobian |
jacobian(self) — ∂z/∂q row-major: jacobian[pillar][rung] is how far that pillar's parameter moves per unit move in that rung's quote. The transform behind a par-basis risk number. A caller rarely needs it directly — Book.report flips through it — but a desk checking a hedge ratio by hand does. |
jacobian_engine |
jacobian_engine(self) — Which engine built jacobian(): ("lanes", None) for the tape-free forward passes, ("reverse", sweeps) for one reverse recording read back in sweeps vector sweeps. |
interpolation |
interpolation(self) — The interpolation scheme the ladder solved under. |
helixio.calibration.HullWhiteFit — reference
A fitted Hull-White volatility and what the fit knows about it.
| Method | Signature |
|---|---|
sigma |
sigma(self) — The fitted volatility: a float for a flat fit, a Records of end and sigma — one row per piece — for a piecewise one. |
shape |
shape(self) — The shape the fit ran in, flat or piecewise. |
mean_reversion |
mean_reversion(self) — The mean reversion the fit held fixed. |
currency |
currency(self) — The currency whose curve and quotes were fitted. |
evaluations |
evaluations(self) — How many objective evaluations the Gauss–Newton search took. |
fits |
fits(self) — One row per strip point: (expiry, end, market, model, vol_misfit). |
quote_sensitivities |
quote_sensitivities(self) — How the fitted σ moves with each quote, from the optimality condition rather than a re-calibration: expiry, end, d_sigma_d_vol per quote for a flat fit; per (piece, quote) pair, with the piece's end date first as piece, for a piecewise one. A point read off the swaption surface (see surface_points) has no quote and no row. |
surface_points |
surface_points(self) — The strip points read at the money off the currency's swaption surface, because no flat vol was pinned for them, as (expiry, end). |
helixio.calibration.JointCalibration — reference
Several curves solved together, each under its first role.
| Method | Signature |
|---|---|
curves |
curves(self) — The solved curves as (role, DiscountCurve) pairs, in the order given. |
curve |
curve(self, role: str) — The curve solved under role; a role no curve carries is a ValueError. |
iterations |
iterations(self) — The Newton iterations the joint solve took. |
residual |
residual(self) — The largest absolute rung residual at the solution. |
helixio.calibration.Rung — reference
One rung of a ladder with its quote kind declared.
| Method | Signature |
|---|---|
par |
par(pillar: datetime.date, instrument: Instrument, quote: float) — A rung at par: the instrument is worth nothing, quote is its par rate. |
spread |
spread(pillar: datetime.date, instrument: Instrument, quote: float) — A rung quoted as a spread on its floating leg, worth nothing at it. |
priced |
`priced(pillar: datetime.date, instrument: Instrument, quote: float, money_per_quote: float, settlement: datetime.date |
upfront |
upfront(pillar: datetime.date, cds: Instrument, upfront: float) — An upfront-quoted credit default swap: the contract without its upfront, priced at upfront per unit notional. |
pillar |
pillar(self) — The pillar date. |
quote |
quote(self) — The declared quote, in its own units. |
kind |
kind(self) — Which quantity the quote is: par, spread or priced. |
tenor |
tenor(self) — The tenor the rung was quoted at (5Y), where it was built from one — what labels its column of a par ladder beside the pillar date. |
label |
label(self) — How a ladder labels this rung's column: its tenor (5Y), else the label it was built with — a futures contract (DEC26), a FRA's months (3x6) — else its pillar date. |
instrument |
instrument(self) — The rung's instrument, to be priced back on a solved curve. |
helixio.calibration.SigmaShape
The shape a Hull-White volatility is calibrated in: Flat by least squares, or Piecewise, one piece per strip expiry.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.calibration.SmoothedCalibration
A discount curve fitted globally, trading repricing error for forward smoothness.
| Method | Signature |
|---|---|
curve |
curve(self) — The fitted curve. |
residuals |
residuals(self) — One row per rung in ladder order: pillar, quote, and residual — the repriced quote less the declared one, in the quote's units. |
roughness |
roughness(self) — The sum of squared jumps in the segment forward at the interior pillars. |
smoothness |
smoothness(self) — The smoothness the curve was fitted at. |
iterations |
iterations(self) — Levenberg–Marquardt iterations that proposed an accepted step. |
helixio.calibration.Tolerance
How hard a ladder solver tries; the core's defaults unless overridden.
| Method | Signature |
|---|---|
residual |
residual(self) — Residual below which a pillar is solved, in the instrument's units. |
step |
step(self) — Newton step below which the parameter is taken as converged. |
max_iterations |
max_iterations(self) — Iterations allowed per pillar. |
max_backtracks |
max_backtracks(self) — Halvings allowed of one Newton step. |
max_sweeps |
max_sweeps(self) — Full-curve sweeps allowed after the sequential pass. |
helixio.credit.AccrualOnDefault
How premium accrued since the last coupon settles on default: Proportional (the ISDA standard model's), Halfway, or NoAccrual (code none). credit_default_swap takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.credit.CdsDiagnostics
Each part of a credit default swap's value, signed as it enters that value, and the risky annuity behind its quote.
| Method | Signature |
|---|---|
premium |
premium(self) — The survival-weighted premium leg. |
accrual |
accrual(self) — The premium accrued to the default date. |
rebate |
rebate(self) — The accrual the first coupon charges for but protection did not cover, returned at settlement. |
upfront |
upfront(self) — The upfront, as money rather than a decimal of the notional. |
protection |
protection(self) — The protection leg: the default-time integral over the contract's grid. |
annuity |
annuity(self) — The risky annuity at unit coupon, which the quote divides by. Unsigned: a per-unit-coupon cost rather than a value. |
npv |
npv(self) — The contract's value: the parts, already signed, added up. |
helixio.credit.CreditLinkedSwapDiagnostics
Each part of a credit-linked swap's value, in the trade currency, signed as it enters that value, in five parts. The parts sum to npv().
| Method | Signature |
|---|---|
independent |
independent(self) — The independent legs: discounted, whatever happens. |
contingent |
contingent(self) — The contingent legs' scheduled payments, survival-weighted. |
contingent_accrual |
contingent_accrual(self) — The contingent legs' accrual settled on default. |
default_payments |
default_payments(self) — The default legs: paid on default, scaled by the loss. |
recovery_payments |
recovery_payments(self) — The recovery legs: paid on default, scaled by the recovery. |
npv |
npv(self) — The swap's value: the parts added up. |
helixio.credit.DefaultPaymentTime
When a credit-linked swap's default-contingent payment is made: AtDefault (the interval's midpoint), AtPeriodEnd (the first scheduled payment date on or after the default) or AtMaturity. credit_linked_swap takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.credit.GapCharge
A repack note's gap charge and its rows.
| Method | Signature |
|---|---|
charge |
charge(self) — The charge: the sum of the rows' contributions, in currency. |
rows |
rows(self) — date, default_probability, expected_gap (given default there, undiscounted, at the date) and contribution (this date's part of the charge, discounted to today) per default date. |
helixio.credit.IndexSettlement
What a credit event settles on an index position, signed to the holder.
| Method | Signature |
|---|---|
entity |
entity(self) — The defaulted entity. |
event_date |
event_date(self) — The event date. |
protection |
protection(self) — The protection on the defaulted weight. |
accrued |
accrued(self) — The premium accrued on the defaulted weight. |
helixio.credit.IndexSkew
One term structure of hazard multipliers every constituent is scaled by.
| Method | Signature |
|---|---|
segments |
segments(self) — (pillar, factor) pairs; each factor applies up to its pillar. |
adjust |
adjust(self, curve: SurvivalCurve) — curve scaled by this skew. |
adjusted_market |
adjusted_market(self, market: MarketContext, constituents: list[tuple[str, float]]) — market with every constituent re-pinned under its adjusted curve. A constituent is a full ENTITY/SENIORITY/DOCCLAUSE spelling, or a bare entity on the standard North American tier and clause, keyed in the index's currency. |
helixio.credit.LegRole
How a credit-linked swap's leg depends on the reference entity's default: Independent (paid whatever happens), Contingent (paid while the entity survives), Default (paid on default, scaled by the loss) or Recovery (paid on default, scaled by the recovery). credit_linked_swap takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.credit.SimulatedGap
A repack note's simulated gap: the charge, its standard error, its legs and its profile.
| Method | Signature |
|---|---|
charge |
charge(self) — The charge: the mean of the paths' discounted gaps, in currency. |
standard_error |
standard_error(self) — The charge's standard error, over antithetic pair means when paired. |
legs |
legs(self) — leg (diffusive_default, crisis_default, trigger_gapped, trigger_slow) and charge: the charge split by what ended the note. |
profile |
profile(self) — date, default_weight, expected_gap, pfe per default date. |
helixio.credit.TrancheSettlement
What a credit event settles on a tranche position, and where it leaves the tranche on the surviving pool.
| Method | Signature |
|---|---|
entity |
entity(self) — The defaulted entity. |
event_date |
event_date(self) — The event date. |
protection |
protection(self) — The loss the tranche absorbs, signed to the holder. |
write_down |
write_down(self) — The recovered amount written off the tranche's notional from the top. |
accrued |
accrued(self) — The premium accrued on the notional removed, signed to the holder. |
attach |
attach(self) — The attachment after the event, on the surviving pool. |
detach |
detach(self) — The detachment after the event, on the surviving pool. |
helixio.curves.BaseCorrelation
A base-correlation skew across an index's capital structure.
| Method | Signature |
|---|---|
flat |
flat(rho: float) — One correlation for every detachment. |
correlation |
correlation(self, detachment: float) — The base correlation at a detachment point. |
helixio.curves.BondFitRow
One bond's place in a parametric curve fit.
| Method | Signature |
|---|---|
maturity |
maturity(self) — The bond's maturity, its identity in the report. |
market_clean |
market_clean(self) — The clean price the bond was quoted at. |
model_clean |
model_clean(self) — The clean price the fitted curve gives it. |
yield_misfit |
yield_misfit(self) — Model yield less market yield — a price miss with the bond's own duration already divided out. |
helixio.curves.CmsSpreadCorrelationCurve
The market's correlation between two swap indices' rates by option expiry in years — linear between pillars, flat beyond them — or one flat mark with no pillar, or a 2-D surface by expiry and strike.
| Method | Signature |
|---|---|
flat |
flat(correlation: float) — One correlation at every expiry, with no pillar. |
with_strikes |
with_strikes(nodes: list[tuple[tuple[float, float], float]]) — A 2-D surface from ((expiry, strike), correlation) nodes. |
is_flat |
is_flat(self) — Whether this is the flat mark, with no pillar. |
is_surface |
is_surface(self) — Whether this is a 2-D surface. |
expiries |
expiries(self) — The pillar expiries in years; empty for a flat mark. |
parameters |
parameters(self) — The correlations, one per pillar (or the one flat mark). |
correlation |
`correlation(self, expiry: float, strike: float |
helixio.curves.CurveRecipe
How a market would build the curves under one key, as topology: the discount segments in order, each a role and the template that builds it, and per projection index whether it telescopes onto the discount curve or has its own strip. It carries no tenor: the quote sheet is the grid. Read back from MarketContext.recipe; str() is the core's one-line summary.
| Method | Signature |
|---|---|
currency |
currency(self) — The currency the recipe builds for. |
discount_segments |
discount_segments(self) — The discount segments in declaration order: role (deposit, policy, futures, swaps, fx_swaps, basis, fixed_float_xccy, or window), template, and window (the dates of a window row, empty otherwise). |
projection_indices |
projection_indices(self) — The projection indices the recipe resolves, in order. |
own_strip |
own_strip(self, index: str) — The template of index's own strip, or None where it telescopes onto the discount curve or the recipe does not resolve it. |
telescopes |
telescopes(self, index: str) — Whether index telescopes onto the discount curve rather than calibrating a forward curve of its own. |
windows |
windows(self) — The windows the recipe fixes whatever the sheet says, as (template, start, end). |
discount_via |
discount_via(self) — The hub currency this recipe's cross discount is derived through (with_discount_via), or None. |
is_fx_implied |
is_fx_implied(self) — Whether the discount curve is implied from FX swaps alone. |
helixio.curves.DiscountCurve — reference
A discount curve, built from dated discount-factor pillars. A first pillar of exactly 1.0 on the reference date is the anchor the curve already holds, and is dropped; any other factor there is refused.
| Method | Signature |
|---|---|
flat |
`flat(reference: datetime.date, rate: float, day_count: str |
from_zero_rates |
`from_zero_rates(reference: datetime.date, nodes: list[tuple[datetime.date, float]], day_count: str |
discount |
discount(self, at: datetime.date) — The discount factor to a date. Past the last pillar the curve carries on at its last segment's forward rate — a flat-forward extrapolation, taken silently rather than refused. A date before the reference date raises ValueError. |
zero_rate |
zero_rate(self, at: datetime.date) — The continuously-compounded zero rate to at, under the curve's rate_day_count — ACT/365 fixed unless it was built with another. A property of the curve, on the measure it was told rates are quoted in. It is not the rate any index quotes: see Index.forecast, which is simple, on the index's own day count, over the index's own window. |
forward_rate |
forward_rate(self, start: datetime.date, end: datetime.date) — The continuously-compounded forward rate between start and end, on ACT/365. As with zero_rate, a reading of the curve rather than of an index. A caller who wants the rate a coupon fixes on wants Index.forecast; for an ACT/360 index the two differ, which a test asserts. |
parameter_count |
parameter_count(self) — How many free parameters the curve has. |
natural |
natural(self) — The fitted form's natural parameters, as Rust's natural() reads them: [β0, β1, β2, λ] for a Nelson-Siegel curve, [β0, β1, β2, β3, λ1, λ2] for a Svensson one, the decays squashed back to their natural scale. What curves.fit_bond_curve solved, read back without re-deriving it from the zero rates. Raises ValueError on any other curve: a piecewise curve has pillars, an exponential-splines fit has basis weights, and neither is a natural parameter vector. |
with_zero_spread |
`with_zero_spread(self, spread: float, day_count: str |
rebased |
rebased(self, reference: datetime.date) — This curve read forward from reference: its discount factor over its own there. A date before this curve's own reference is refused. |
with_spread |
with_spread(self, spread: DiscountCurve) — This curve's discount factors times spread's, which must share its reference date. A zero-rate curve as spread adds its zero rates, on that curve's day count, to this curve's. |
fx_implied |
fx_implied(base: DiscountCurve, pair: str, spot: float, spot_date: datetime.date, forwards: list[tuple[datetime.date, float]]) — A curve implied by FX forwards over base by covered interest parity: for pair quoted as quote units per one base, the quote currency's discount factor is (spot / F(t)) · DF_base(t) / DF_base(spot_date). The spot is the curve's one risk parameter; the outrights pin its shape. |
step_forward |
step_forward(reference: datetime.date, knots: list[tuple[datetime.date, str]], discount_factors: list[float]) — A step curve: log-linear between pillars that carry an identity — a central-bank meeting, a turn of period, or none — so risk read back from it is keyed by the event. knots are (date, tag) pairs, the tag "meeting:FED" (any bank code), "turn" or "anon"; one discount factor per knot. dates.meeting_dates and dates.turn_dates give the dates. |
knot_tags |
knot_tags(self) — The tag of each pillar of a step curve, in date order, or None for a curve whose pillars carry no identity. |
interpolation |
interpolation(self) — The scheme the curve reads between its pillars, by its spelling. |
long_interpolation |
long_interpolation(self) — The second scheme and the pillar it takes over at, when this curve reads under two. |
rate_day_count |
rate_day_count(self) — The day count this curve forms a rate under. Not what it discounts on. The pillars are dated discount factors, so the curve is a function of dates and this moves no factor it returns — it is read where zero_rate and forward_rate divide a log factor into a rate, and nowhere else. |
helixio.curves.InflationCurve — reference
An inflation index-level curve.
| Method | Signature |
|---|---|
index_level |
index_level(self, at: datetime.date) — The index level at a date. |
helixio.curves.Interpolation — explanation
The scheme a discount curve reads between its pillars, as a value that carries its parameters. One member per parameter-free scheme — LogLinear, BackwardFlat, ForwardFlat, LinearZero, NaturalCubic, NotAKnotCubic, MonotoneConvex, MonotoneCubic, Akima, Kruger — and tension_spline(sigma) / clamped_cubic(left, right) for the two that take them. Every interpolation parameter on a discount curve or a curve calibration takes the member or its code; given the value, tension and end_slopes are refused, since the value carries its own. code() is what DiscountCurve.interpolation() reads back.
| Method | Signature |
|---|---|
tension_spline |
tension_spline(sigma: float) — A tension spline with tension sigma. |
anchored_linear_zero |
anchored_linear_zero(anchor: float) — Linear in the zero rate, from the continuously compounded rate anchor at the reference date (on ACT/365 fixed time). |
clamped_cubic |
clamped_cubic(left: float, right: float) — A clamped cubic with the end slopes left and right. |
code |
code(self) — The scheme's code, as DiscountCurve.interpolation() reads it back. |
read_log_df |
read_log_df(self, taus: list[float], ys: list[float], tau: float) — The log discount factor this scheme reads at tau from knots at taus (year fractions, positive and strictly increasing) with log discount factors ys, the anchor (0, 0) implicit and the forward held flat past the last knot — what a DiscountCurve under this scheme reads. Malformed knots raise ValueError naming the defect. |
helixio.curves.LevelInterpolation
How an inflation curve reads an index level between its nodes: Linear in the level, or LogLinear. InflationCurve and calibration.inflation take the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.curves.RecipeSpec
A curve recipe stated as data, validated as the recipe builder validates it: discount segments as (role, template), per projection index "telescoping" or its own strip's template, windows as (template, start, end).
| Method | Signature |
|---|---|
of |
of(key: str, recipe: CurveRecipe) — The spec stating recipe under key — the inverse of to_recipe. |
to_recipe |
to_recipe(self) — The recipe this spec states; a refused template raises ValueError naming the spec's key. |
key |
key(self) — The collateral key. |
helixio.curves.RepoSpreadCurve — reference
A repo spread: the simple spreads a desk marks — GC against the overnight curve, a special against GC — at dated pillars, linear between them and flat outside, accruing on a money-market day_count. Pinned with MarketContext.with_repo_spread over a base, it adds in simple-rate space, 1/P = 1/P_base + s * tau, and its pillars report risk on the repo axis.
| Method | Signature |
|---|---|
from_term_rates |
`from_term_rates(base: DiscountCurve, quotes: list[tuple[datetime.date, float]], day_count: str |
reference_date |
reference_date(self) — The date the spread is measured from. |
pillars |
pillars(self) — The pillars as (date, spread). |
day_count |
day_count(self) — The money-market day count the spread accrues on. |
spread |
spread(self, at: datetime.date) — The spread at at: linear between pillars, flat outside. |
helixio.curves.SpreadCurve — reference
A continuously compounded spread over a date, applied on top of the discounting a security is priced on. Dated, its pillars are free parameters and report risk on the security_spread axis; flat, it is declared data and reports none.
| Method | Signature |
|---|---|
flat |
flat(reference: datetime.date, spread: float) — One constant spread, anchored at reference. |
reference_date |
reference_date(self) — The date the spread is measured from. |
spread |
spread(self, at: datetime.date) — Linear between pillars, flat beyond the last and before the first. |
pillars |
pillars(self) — The dated pillars as (date, spread); a flat spread has none. |
discount |
discount(self, at: datetime.date) — The factor the spread alone contributes: exp(-s * tau). |
helixio.curves.SurvivalCurve — reference
A survival curve: the probability of surviving to a date.
| Method | Signature |
|---|---|
default_density |
`default_density(reference: datetime.date, nodes: list[tuple[datetime.date, float]], day_count: str |
flat_hazard |
`flat_hazard(reference: datetime.date, hazard: float, day_count: str |
survival |
survival(self, at: datetime.date) — The probability of surviving to a date. |
hazard_rate |
hazard_rate(self, at: datetime.date) — The instantaneous hazard rate −d/dt ln S at a date. |
density_at |
density_at(self, at: datetime.date) — The default density h·S at a date; default_density is the constructor from densities. |
helixio.dates.BusinessDayConvention
How a non-business date rolls to a business date. A member is a spelling of the core value the string names — its code() is the string the parser takes — so every parameter that takes a business-day convention takes the member or the string. The core's None (no adjustment) is the member Unadjusted, because X.None cannot be written in Python; the strings "None" and "NONE" still parse to it. A member is not equal to its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.dates.CalendarSpec
A calendar stated as data for dates.ingest_calendars: the code it binds, its holidays, and its weekend (Saturday and Sunday by default).
| Method | Signature |
|---|---|
code |
code(self) — The code the calendar binds. |
holidays |
holidays(self) — The holidays it closes. |
helixio.dates.DayCountFraction — reference
A day-count convention, named once and measured with repeatedly. Every convention is a named member — DayCountFraction.ActActIcma is DayCountFraction("ACT/ACT.ICMA") — and every parameter that takes a day count takes the member or its code. repr is the member's address; str and code() are the code.
| Method | Signature |
|---|---|
code |
code(self) — The convention's canonical code. |
year_fraction |
year_fraction(self, start: datetime.date, end: datetime.date) — The year fraction between two dates, context-free. A convention that wants period context or a business calendar — ACT/ACT.ICMA, 30E/360.ISDA, 30U/360, BUS/252 — is answered under its context-free reading here: ACT/ACT.ICMA measures the two dates as their own reference period, and 30U/360 applies no end-of-month February rule. The two methods below give each what it wants. |
year_fraction_with_context |
`year_fraction_with_context(self, start: datetime.date, end: datetime.date, period_end: datetime.date, frequency: Frequency |
year_fraction_with_calendar |
year_fraction_with_calendar(self, start: datetime.date, end: datetime.date, calendar: Calendar) — The year fraction measured against a business calendar — what BUS/252 divides its business-day count by. Conventions that ignore the calendar return what they would have returned without one. |
helixio.dates.Frequency
A coupon frequency: a named member, or a period a caller spells. Frequency("6M") is Frequency.SemiAnnual; Frequency("28D") is the 28-day markets' coupon and has no named member. Once is a single payment at maturity with no recurring period, and is refused where a schedule is generated. Every parameter that takes a frequency takes the member or its spelling; a member is not equal to its string.
| Method | Signature |
|---|---|
code |
code(self) — The canonical period code ("6M"), or "ONCE". |
helixio.dates.JointCalendarRule
How a joint calendar combines its members: JoinHolidays (a holiday in any member is a holiday) or JoinBusinessDays (a business day in any member is a business day).
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.dates.MeetingSchedule — reference
A central bank's schedule: its published decision days, with the date each takes effect derived by the bank's rule — the Fed the next business day, the ECB the following Wednesday, the Bank of England the decision day. Pinned on a market with MarketContext.with_meetings; seeded(bank) is the embedded 2026 schedule the market uses where none is pinned.
| Method | Signature |
|---|---|
seeded |
seeded(bank: str) — The embedded schedule of bank ("FED", "ECB", "BOE"); any other bank raises ValueError naming the seeded ones. |
bank |
bank(self) — The bank's code. |
decisions |
decisions(self) — The decision days, ascending. |
effective_dates |
effective_dates(self) — The date each decision takes effect, ascending. |
helixio.dates.Period — reference
A tenor: a signed count of days, weeks, months or years, or the whole term. Period("3M") or Period(3, "M"). Equality and hashing are by duration (Period("12M") == Period("1Y")); ordering is by duration where it is decidable and raises ValueError where it is not (1M against 30D); + and - combine tenors of one unit family. Every tenor or frequency parameter takes one beside its spelling.
| Method | Signature |
|---|---|
multiplier |
multiplier(self) — The signed count. |
unit |
unit(self) — The unit code: "D", "W", "M", "Y" or "T". |
in_months |
in_months(self) — The length in whole months, or None for days, weeks or the term. |
in_days |
in_days(self) — The length in days, or None for months, years or the term. |
normalize |
normalize(self) — The same tenor in the largest unit that states it exactly. |
helixio.dates.RollConvention
Where a period boundary sits inside its month. A named member, or a day of the month from RollConvention.day(n) (1 to 30). The core's None (no roll) is the member Unadjusted. Every parameter that takes a roll takes the member or its spelling ("EOM", "15"); a member is not equal to its string.
| Method | Signature |
|---|---|
day |
day(day: int) — A roll on the dayth of the month, from 1 to 30. |
code |
code(self) — The roll code ("EOM", "15"). |
helixio.dates.Schedule
A generated set of calculation-period boundary dates.
| Method | Signature |
|---|---|
dates |
dates(self) — The boundary dates, ascending. n boundaries delimit n - 1 periods. |
periods |
periods(self) — The periods as (start, end) pairs. |
from_dates |
from_dates(dates: list[datetime.date]) — A schedule from boundary dates stated verbatim — no calendar, no roll, no business-day adjustment. A stated boundary has already had all three applied by whoever stated it, so this is the entry point for a schedule read off a confirm or another system's output, where schedule() is the one for a schedule generated from conventions. Unconventional dates are not refused — a boundary on a weekend, or periods of unequal length, are what stating dates is for. Raises ValueError only where the list is ill-formed: fewer than two dates, a descending pair, or a repeated date. |
paying |
`paying(self, lag_days: int, calendar: Calendar, business_day_convention: BusinessDayConvention |
helixio.fpml.FpmlTrade
A trade read from an FpML 5 confirmation document.
| Method | Signature |
|---|---|
instrument |
instrument(self) — The instrument the product was read into. |
trade_date |
trade_date(self) — The trade date from the trade header. |
leg_of_stream |
leg_of_stream(self) — The zero-based index into the stream instrument's legs each one-based stream was read into: a swap orders its legs by role, not as the document orders its streams. |
stated_cashflows |
stated_cashflows(self) — Every stream's stated cashflow rows, in document order; empty where no stream carries a cashflows block. |
cashflows_match_parameters |
cashflows_match_parameters(self) — Whether the document claims its stated cashflows match its parameters, or None where no stream states the flag. |
id |
id(self) — The reporting party's trade identifier, or the first the header states, or None. |
us |
us(self) — The reporting party's id attribute. |
counterparty |
counterparty(self) — The counterparty's id attribute, or None where the product names no other party. |
components |
components(self) — Every component the trade books as (suffix, instrument, quantity), the product first: its suffix empty, then /fee/1, /premium/1, ... |
underlying |
underlying(self) — The swap a swaption or a cancelable swap is written on, or None. |
stream_instrument |
stream_instrument(self) — The instrument whose legs the swap streams were read into: the underlying of a wrapper, the product otherwise. leg_of_stream indexes its legs. |
helixio.fpml.StatedCashflow
One paymentCalculationPeriod a FpML stream's cashflows block states: the dates and notional the document itself says the stream pays.
| Method | Signature |
|---|---|
stream |
stream(self) — The one-based swap stream the row belongs to, in document order. |
payment_date |
payment_date(self) — The adjusted payment date. |
accrual_start |
accrual_start(self) — The adjusted start of the first calculation period. |
accrual_end |
accrual_end(self) — The adjusted end of the last calculation period. |
notional |
notional(self) — The notional, where the document states one. |
fixing_dates |
fixing_dates(self) — The adjusted fixing dates, one per rate observation, in document order. |
helixio.fx.FxOptionDiagnostics — reference
What an FX option resolved to when it was priced.
| Method | Signature |
|---|---|
forward |
forward(self) — The covered-interest-parity forward to delivery, quote per one base. |
strike |
strike(self) — The absolute strike the option priced at. |
vol |
vol(self) — The vol read off the surface at that strike. |
delta |
delta(self) — The signed delta at that strike under the surface's convention. |
expiry_years |
expiry_years(self) — Time to expiry in the surface's measure, years. |
helixio.legs.AccrualCompounding
How an overnight leg accumulates its prints over a period: Simple (the market's averaged leg), Compounded or Continuous. Every accrual_compounding parameter takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.legs.AnyCoupon
One coupon of the core's closed set: fixed, IBOR, overnight or redemption. Opaque — there is no constructor. A coupon is built by one of :func:fixed_rate_coupon, :func:ibor_coupon, :func:overnight_coupon or :func:redemption, which is where the set stays closed.
| Method | Signature |
|---|---|
kind |
kind(self) — Which kind of coupon this is: the kind column's spelling. |
payment_date |
payment_date(self) — The payment date. |
accrual_start |
accrual_start(self) — Accrual start, or None for a coupon that accrues over nothing. |
accrual_end |
accrual_end(self) — Accrual end, or None for a coupon that accrues over nothing. |
fixing_date |
fixing_date(self) — The reset date, for a coupon that has one. |
notional |
notional(self) — The notional the coupon accrues on. Zero for a redemption, which accrues on nothing. Its amount is amount. |
amount |
amount(self) — The amount this flow pays where the contract fixes it: a redemption's stated amount, or a fixed coupon's notional times rate times year fraction. None when the rate must be projected. |
year_fraction |
year_fraction(self) — The accrual year fraction under the coupon's own day count. |
day_count |
day_count(self) — The basis the coupon accrues on, or None for one that accrues over nothing — the code the core's own vocabulary round-trips. |
currency |
currency(self) — The currency the coupon pays in. |
contract_rate |
contract_rate(self) — The rate written into the contract, for a coupon that carries one — a fixed rate, never a projection. |
helixio.legs.Direction
Which side of a leg the holder is on: Receive or Pay. Every direction parameter takes the member or its string ("Pay", "payer", "short").
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.legs.ResetCompounding
How a multi-reset coupon combines its resets into one payment: the ISDA 2006 methods Straight, Flat and SpreadExclusive, or Averaged. The compounding of multi_reset_coupon takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.linker.AnbimaQuote
An ANBIMA quotation: its parcels, the cotação and the unit price.
| Method | Signature |
|---|---|
cotacao |
cotacao(self) — The quotation per cent of VNA, truncated to four decimals. |
unit_price |
unit_price(self) — The unit price (PU) VNA · cotação / 100, truncated to six decimals. |
parcels |
parcels(self) — (date, du, pv) per parcel in payment order. |
helixio.models.HullWhite
A validated one-factor Hull-White model: mean reversion a (strictly positive) and a volatility — a non-negative float, or (t_end, σ) pieces with strictly increasing positive ends in years, the last extending flat.
| Method | Signature |
|---|---|
mean_reversion |
mean_reversion(self) — Mean-reversion speed a. |
sigma |
sigma(self) — Short-rate volatility: the float for a flat model, the pieces otherwise. |
variance |
variance(self, s: float, t: float) — V(s, t): the variance of the Gaussian factor at t given its state at s. |
drift_convexity |
drift_convexity(self, t: float) — C(t): the drift convexity Cov(∫₀ᵗ x, x_t). |
integrated_variance |
integrated_variance(self, s: float, t: float) — I(s, t): the variance of ∫ₛᵗ x given the state at s. |
convexity_exponent |
convexity_exponent(self, t: float, maturity: float) — Λ: the futures convexity exponent of a term rate fixing at t and running to maturity (years), E[1/P(t, T)] = P(0, t)/P(0, T)·e^Λ. |
compounded_convexity_exponent |
compounded_convexity_exponent(self, start: float, end: float) — The compounded futures convexity exponent from start to end (years): what with_hull_white_convexity applies to a futures rate compounded in arrears. |
b |
b(self, t: float, maturity: float) — B(t, T) = (1 − e^{−a(T−t)}) / a, in years. |
bond_option_vol |
bond_option_vol(self, expiry: float, bond_maturity: float) — The volatility of the bond_maturity discount bond seen from expiry, in years. |
helixio.models.HullWhiteLattice
The Hull-White trinomial lattice, built and curve-fitted on construction.
| Method | Signature |
|---|---|
n_steps |
n_steps(self) — The number of steps; there are n_steps + 1 slices. |
dates |
dates(self) — The slice dates, the reference date first. |
times |
times(self) — The slice times in years from the reference date. |
step_of |
step_of(self, date: datetime.date) — Exact on a grid date, else the nearest slice, or None outside the grid. |
levels |
levels(self, step: int) — The node levels j at step, from −half_width to half_width. |
node_rate |
node_rate(self, step: int, level: int) — The short rate at node (step, level). |
discount_bond |
discount_bond(self, maturity: datetime.date, oas: float=0.0) — A unit payment at maturity rolled back to the root under a continuous spread. |
helixio.products.AssetSwapKind
How an asset swap is packaged: ParPar or Proceeds.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.BarrierKind
Where a single barrier sits and what touching it does. Every barrier_kind takes the member or its string; a member is not its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.BondFuture
A bond future: a delivery date and its resolved deliverable basket.
| Method | Signature |
|---|---|
delivery |
delivery(self) — The delivery date the basket forwards to. |
keys |
keys(self) — The rows' keys, in basket order. |
helixio.products.BondOptionEngine
Which model prices a bond option: the bond's YieldVol or HullWhite. Instrument.engine() reads the code back.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.CapFloorKind
A Cap or a Floor.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.CdsOptionStyle
What a default before a CDS option's expiry does to it: SingleName knocks out, FrontEndProtection settles it as the payer's protection, Index is an index option with its exercise price.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.CdsStrikeType
How a CDS option's strike is quoted: Spread, or Price per unit notional the holder enters the index at.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.CmeMaturityRounding
How a CME contract group rounds a deliverable's maturity: to the Month (the 2-, 3- and 5-year contracts) or the Quarter (the 10-year and bond contracts).
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.ExerciseStyle
When an option on a future may be exercised: European or American.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.FixedRateBond
A fixed-rate bullet bond — the underlying of the bond-linked products.
| Method | Signature |
|---|---|
with_penultimate_coupon |
with_penultimate_coupon(self, penultimate: datetime.date) — This bond with its last regular coupon on penultimate: the grid anchored there and a short or long final period to maturity, accruing by the ICMA split (notional periods forward from penultimate) under ACT/ACT ICMA. |
with_first_coupon |
with_first_coupon(self, first_coupon: datetime.date) — This bond with its first coupon on first_coupon: a long first period where it falls more than a period after issue, accruing by the ICMA split under ACT/ACT ICMA. |
with_ex_div |
`with_ex_div(self, days: int, day_type: ExDivDayType |
ex_div_date |
ex_div_date(self, coupon_date: datetime.date) — The ex-dividend date of the coupon paying on coupon_date, or None for a bond with no ex-dividend rule. |
forgone_coupon_date |
forgone_coupon_date(self, settlement: datetime.date) — The coupon date a buyer settling on settlement forgoes, or None when the bond trades cum-dividend then. |
is_ex_div |
is_ex_div(self, settlement: datetime.date) — Whether the bond trades ex-dividend at settlement. |
with_end_of_month |
with_end_of_month(self, end_of_month: bool=True) — This bond with its coupon grid rolled on the calendar end of the month. Takes effect only when the maturity is the last day of its month: every coupon date is then the last day of the month a whole number of periods before maturity (a 30 November maturity pays on 31 May; a 28 February one reaches 29 February in a leap year), where the default keeps the maturity's day of month. Precedes with_amortisation. |
currency |
currency(self) — The bond's currency code. |
maturity |
maturity(self) — The redemption date. |
coupon |
coupon(self) — The annual coupon rate. |
face |
face(self) — The face amount. |
instrument |
instrument(self) — This bond as an instrument — the callable with an empty exercise schedule — so a bullet books, values and tables without naming the callable; callable_bond(bond, []) is the same instrument. |
issued_by |
issued_by(self, issuer: str) — This bond as an instrument valued risky on issuer's credit: survival-weighted flows plus recovery of face; callable_bond(bond, [], issuer=issuer) is the same. |
npv |
npv(self, market: MarketContext) — The bond's value against market, through instrument(). |
cashflow_records |
cashflow_records(self, market: MarketContext) — The bond's cashflow table against market, through instrument(). |
with_payment_calendar |
`with_payment_calendar(self, calendar: Calendar, business_day_convention: BusinessDayConvention |
with_settlement_lag |
with_settlement_lag(self, days: int, calendar: Calendar) — This bond settling days business days on calendar after it trades. bonds.z_spread reads it. |
settlement_date |
settlement_date(self, trade_date: datetime.date) — The date a trade on trade_date settles on: the settlement lag walked from it, never before issue. |
with_accrual_adjustment |
`with_accrual_adjustment(self, calendar: Calendar, business_day_convention: BusinessDayConvention |
payment_date |
payment_date(self, accrual_end: datetime.date) — The date an accrual ending on accrual_end is paid. |
with_amortisation |
with_amortisation(self, outstanding: list[float]) — This bond with a notional profile: one fraction of the original face per coupon period, starting at 1, positive and never rising. Every price and flow stays per 100 of the original face; per_current_face restates one as the market's per-current-face quote. |
is_amortising |
is_amortising(self) — Whether any principal is repaid before maturity. |
outstanding_fraction |
outstanding_fraction(self, date: datetime.date) — The fraction of the original face alive on date. |
current_face |
current_face(self, date: datetime.date) — The face alive on date. |
per_current_face |
per_current_face(self, amount: float, date: datetime.date) — An amount per 100 of the original face restated per 100 of the face alive on date — the market's quote for an amortiser. Raises at or after maturity. |
per_original_face |
per_original_face(self, amount: float, date: datetime.date) — The inverse: per 100 of the current face restated per 100 of the original, which the pricing methods take. |
flows |
`flows(self, settlement: datetime.date, day_count: str |
accrued |
accrued(self, settlement: datetime.date) — The coupon accrued per 100 of face at settlement. |
price |
`price(self, yield_: float, settlement: datetime.date, price_basis: PriceBasis |
yield_ |
`yield_(self, price: float, settlement: datetime.date, price_basis: PriceBasis |
yield_moments |
`yield_moments(self, yield_: float, settlement: datetime.date, yield_convention: YieldConvention |
modified_duration |
`modified_duration(self, yield_: float, settlement: datetime.date, yield_convention: YieldConvention |
macaulay_duration |
`macaulay_duration(self, yield_: float, settlement: datetime.date, yield_convention: YieldConvention |
convexity |
`convexity(self, yield_: float, settlement: datetime.date, yield_convention: YieldConvention |
dv01 |
`dv01(self, yield_: float, settlement: datetime.date, yield_convention: YieldConvention |
money_dv01 |
`money_dv01(self, yield_: float, settlement: datetime.date, yield_convention: YieldConvention |
money_duration |
`money_duration(self, yield_: float, settlement: datetime.date, yield_convention: YieldConvention |
helixio.products.OptionKind
An option's right: a Call or a Put. Every option-pricing kind takes the member or its string; a member is not its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.PremiumStyle
How an option on a future settles its premium: FuturesStyle (margined daily, Eurex and ICE) or Paid up front (CBOT).
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.ProductBuilder — reference
A swap draft: a template's swap with every term defaulted, refined by verbs, struck by a stated rate or at par against a market. Template.swap(trade_date) opens one: effective at the template's spot from the trade date, ten years long, 10,000,000 notional, receiving fixed, and no fixed rate. Frozen: every with_* returns a new draft. A draft is not an instrument — it has no npv — and build() on one with no rate raises ValueError naming with_fixed_rate and at_par.
| Method | Signature |
|---|---|
with_notional |
with_notional(self, notional: float) — This draft on notional. |
with_fixed_rate |
with_fixed_rate(self, fixed_rate: float) — This draft at fixed_rate. |
with_side |
with_side(self, side: str) — This draft on side: "payer" pays fixed, "receiver" receives it. Anything else raises ValueError naming the two words. |
with_discount_key |
with_discount_key(self, key: str) — This draft discounting on the raw key key ("USD-CSA-EUR", or a named curve such as "CSA-ACME-2026"), overriding the family's default. The escape hatch: with_csa states a CSA, this a key. The last stated wins between this, with_csa and with_counterparty. |
with_csa |
with_csa(self, csa: str) — This draft under the CSA csa: a collateral currency ("EUR") or the CSA's overnight index ("EUR-ESTR"), which names its currency. with_csa("EUR") on a USD draft discounts on USD-CSA-EUR, with_csa("USD") on the USD curve. Anything else raises ValueError naming both forms. The last stated wins. |
with_counterparty |
with_counterparty(self, counterparty: Counterparty) — This draft facing counterparty, collateralised under its CSA: a USD draft facing a EUR-CSA counterparty discounts on USD-CSA-EUR. The collateral is the last stated between this and with_csa. |
with_termination |
`with_termination(self, end: datetime.date |
with_maturity |
`with_maturity(self, end: datetime.date |
build |
build(self) — The instrument at the rate stated. A draft with no rate raises ValueError naming with_fixed_rate and at_par. |
at_par |
at_par(self, market: MarketContext) — The instrument struck at the par rate market implies on the draft's own dates — worth zero on market to the par solve's precision, carrying that rate as a number like any confirmed trade, and indistinguishable from vanilla_swap built with the same terms at it. |
helixio.products.RepackEngine
How a repack note's gap is priced: Independent of rates, or Correlated through the issuer's Gaussian intensity.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.RepackRole
Who holds a booked repack note: the bank's swap facing the SPV (SwapCounterparty) or the notes per unit notional (Noteholder).
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.SwaptionEngine
Which model prices a swaption: the market's vol Surface or HullWhite. Instrument.engine() reads the code back.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.SwaptionKind
Whether a swaption's holder pays (Payer) or receives (Receiver) the fixed leg on exercise. The swaption constructors' kind takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.SwaptionSettlement
How a swaption settles on exercise: into the swap (Physical) or for its value (Cash).
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.products.ValuationTrigger
A repack note's valuation trigger: terminate when the collateral's market value falls below level of notional on a monitoring date, selling it liquidation_lag_days later.
| Method | Signature |
|---|---|
level |
level(self) — The trigger level as a fraction of notional. |
monitoring |
monitoring(self) — The monitoring dates. |
liquidation_lag_days |
liquidation_lag_days(self) — Calendar days from a breach to the sale. |
helixio.risk.Aggregation
How a sensitivity is collapsed for reporting: one row (Total), a row per tenor bucket, per curve (ByCurve), or per contribution (Ladder).
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.risk.Axis
What a sensitivity is to: the risk axes a report and a frame read. Every axis parameter takes the member or its string ("rate", "security_spread"); a member is not its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.risk.Basis
Whose quote a sensitivity is expressed against: the curve nodes' own (Zero) or the calibrating instruments' (Par).
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.risk.ExplainReport
The step-revaluation explain: the prints that became known first, then one leg per axis, telescoping exactly.
| Method | Signature |
|---|---|
legs |
legs(self) — The legs, (axis, contribution): across days cash and carry first, then resets where the ending market publishes prints the starting one lacks, then the axes, and last the empty-axis leg, what no axis explains. |
order |
order(self) — The axis order the legs were taken in. |
before |
before(self) — The value before the move. |
after |
after(self) — The value after the move. |
cash |
cash(self) — The cash paid between the two dates; zero within one day. |
actual |
actual(self) — after − before + cash. |
explained |
explained(self) — The sum of the legs. |
helixio.risk.Measure
A quantity a report asks for: Measure.Npv, or a first-order sensitivity on an axis against a basis, collapsed by an aggregation, in a scale — what the grammar spells delta:<axis>[:<basis>[:<aggregation>]][:<scale>]. A value beside the string, never instead of it: code() and str print the grammar, Measure(spelling) parses it, delta(...) builds one from typed parts, and Book.report takes either. Equal and hashable by value; repr reads back.
| Method | Signature |
|---|---|
code |
code(self) — The grammar spelling, as a report row prints it. |
axis |
axis(self) — The axis, or None for Npv. |
basis |
basis(self) — The basis, or None for Npv. |
aggregation |
aggregation(self) — The aggregation, or None for Npv. |
scale |
scale(self) — The scale the measure states, or None where it states none — a value, or a delta left to the book's and the preset's defaults. |
helixio.risk.PredictedPnl
The predicted explain: first order from risk plus one second-order pass.
| Method | Signature |
|---|---|
rows |
rows(self) — Each market input's contribution, (input, risk × move). |
by_axis |
by_axis(self) — The rows summed by axis, (axis, contribution); None for an input on no axis. |
first_order |
first_order(self) — The sum of the first-order rows. |
quadratic |
quadratic(self) — The one-pass second-order term along the move. |
own_gamma |
own_gamma(self) — The quadratic's own-gamma terms, (axis, value) per axis group that moved, an empty axis for the inputs on no axis. |
cross_gamma |
cross_gamma(self) — The quadratic's cross-gamma terms, (axis, other, value) per pair of moved groups, one symmetric number each. |
gamma_closure |
gamma_closure(self) — quadratic less the own and cross terms: round-off, reported as a health check of the split. |
resets |
resets(self) — The reset step: the exact revaluation from each new print's forecast to the print, for the prints after holds and before does not; zero when there are none. resets + first_order + quadratic + residual is actual. |
before |
before(self) — The value before the move — with each new print standing at the forecast it replaced, where there are any. |
after |
after(self) — The value after the move. |
actual |
actual(self) — after − before. |
residual |
residual(self) — What the reset step and the first and second order together leave unexplained. |
helixio.risk.Preset
A named risk measure — DV01, PAR_LADDER, CS01 — and the scale it reports in.
| Method | Signature |
|---|---|
name |
name(self) — The name a report row is keyed by. |
asset_class |
asset_class(self) — The asset class it is filed under — rates, credit, fx, inflation — or None for NPV. |
measure |
measure(self) — The measure's spelling, with its stated scale where one was stated. |
default_scale |
default_scale(self) — The scale it reports in by default, when nothing else states one. |
how |
how(self) — report, or the method that computes it outside a report. |
requires |
requires(self) — What the market must hold beyond the trades' own curves. |
per |
`per(self, scale: Scale |
helixio.risk.Reconciliation
The two explains aligned by axis.
| Method | Signature |
|---|---|
rows |
rows(self) — (axis, predicted, explained, difference, own_gamma, cross_gamma, residual) per leg: the first-order term from risk, the ladder's leg, the leg less the prediction, and that difference decomposed into the leg's own gamma, its cross gamma with the axes moved before it, and the residual the two leave. The resets row, present when a print became known, has both terms equal to the reset step and the three decomposed terms zero. |
total_difference |
total_difference(self) — The sum of the rows' differences. |
total_residual |
total_residual(self) — The sum of the rows' residuals: the prediction's closure plus residual within round-off. |
helixio.risk.ResetPnl
The reset step read per print: what each print the ending market holds and the starting market does not made against the forecast it replaced.
| Method | Signature |
|---|---|
rows |
rows(self) — One row per print published or restated, in date order: index, date, forecast (what the print replaced — the index's own forecast off the starting market's projection curve, at the curve's reference date where the print is dated before it, or the value the starting market held for a restated print), print, move_bp, risk_bp (the book's sensitivity to the print on the ending market, per basis point) and pnl, the exact revaluation from the forecast to the print with the earlier prints already published. |
before |
before(self) — The book's value with each print standing at the forecast it replaced: what the book carried while the prints were projected. |
after |
after(self) — The book's value with every print published. |
total |
total(self) — The step itself, after − before, which the rows' pnl sum to and the explain's resets leg carries. |
helixio.risk.Scale
The unit a sensitivity is reported in: Scale.Unit (per unit move of the quote), Scale.Bp, Scale.Percent, Scale.VolPoint, or Scale.custom(factor). Spelled unit, bp, pct, volpt or x<factor>.
| Method | Signature |
|---|---|
custom |
custom(factor: float) — Per factor of the quote, for any other multiple. |
factor |
factor(self) — The multiplier a per-unit reading is taken by. |
code |
code(self) — The spelling the grammar and every scale= argument take. |
helixio.risk.Scales
A book's default scale per quantity kind: rate, spread, vol, recovery, correlation, fx.
| Method | Signature |
|---|---|
get |
get(self, kind: str) — The scale stated for kind, or None. |
helixio.risk.ShiftType
Whether a scenario leg moves its inputs relatively, x·(1 + s), or absolutely, x + s. Unset, each input keeps its own convention: curves absolute, FX spots and vols relative. Scenario's builders take the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.vols.CpiVolSurface
A zero-coupon CPI option vol surface over expiry x annualised zero-coupon strike, pinned per price index: lognormal is Black on the forward index ratio I(T)/I(T0) at strike (1+k)^tau, normal is Bachelier on that ratio (the vol in ratio units). Read at the time from the first of the month of (valuation - lag) to maturity - lag, ACT/365F.
| Method | Signature |
|---|---|
flat |
`flat(vol: float, vol_convention: VolConvention |
expiries |
expiries(self) — The expiries the grid is quoted on, in years. |
strikes |
strikes(self) — The annualised strikes the smile is quoted on; None on a flat surface. |
vol_convention |
vol_convention(self) — Whether the vols are normal or lognormal. |
vol |
vol(self, expiry_years: float, strike: float) — The vol at expiry_years and the annualised strike. |
helixio.vols.CreditVolSurface
The Black volatility of a credit name's forward CDS spread by option expiry, in years: linear in total variance between quoted expiries, flat beyond them.
| Method | Signature |
|---|---|
flat |
flat(vol: float) — One vol at every expiry. |
points |
points(self) — The quoted (expiry_years, vol) points, in order. |
vol |
vol(self, expiry_years: float) — The vol at expiry_years. |
helixio.vols.DeltaConvention
How an FX delta is quoted: Spot or Fwd, each plain or premium-adjusted (PaSpot, PaFwd). Every delta_convention parameter takes the member or its string ("spot", "forward_premium"). A member is not its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.vols.FutureOptionVolSurface
A listed bond future's option vol surface over listed expiry dates x strikes per 100 face, pinned per contract: lognormal is a Black-76 price vol, normal a Bachelier price vol in points per year. Sticky-strike: linear in vol between strikes, linear in total variance between expiries, flat beyond every edge; time is day_count (ACT/365F unless stated) from reference.
| Method | Signature |
|---|---|
flat |
`flat(reference: datetime.date, vol: float, vol_convention: VolConvention |
day_count |
day_count(self) — The day count the vols are quoted per year of. |
reference |
reference(self) — The date the surface was marked on. |
expiries |
expiries(self) — The listed expiries; empty on a flat surface. |
strikes |
strikes(self) — The strikes, per 100; empty on a flat surface. |
vol_convention |
vol_convention(self) — Whether the vols are normal or lognormal. |
vol |
vol(self, expiry: datetime.date, strike: float) — The vol at expiry and strike. |
helixio.vols.FxVolSmile
One expiry's smile: (quote, vol) nodes, the quote spelled as the market spells it — "25P", "ATM", "25C" — held from the lowest strike's quote to the highest's.
| Method | Signature |
|---|---|
from_quotes |
from_quotes(atm: float, risk_reversal: float, butterfly: float) — The ATM vol and the 25-delta wings from a risk reversal and a butterfly. |
quotes |
quotes(self) — The node quotes, in smile order: puts, ATM, calls. |
vols |
vols(self) — The node vols, in smile order. |
helixio.vols.FxVolSurface — reference
An FX volatility surface: one smile per expiry.
| Method | Signature |
|---|---|
expiries |
expiries(self) — The expiries the surface has smiles at. |
day_count |
day_count(self) — The measure the surface's total variance is counted in. |
smile |
smile(self, expiry: datetime.date) — The smile stored at exactly expiry, not an interpolation. |
quotes |
quotes(self) — The quotes every smile carries, in smile order: puts, ATM, calls. |
vol_at_quote |
vol_at_quote(self, expiry: datetime.date, quote: str) — The vol the surface holds for quote at expiry: the node itself at a stored expiry, or its blend in total variance between the stored expiries either side, flat beyond the ends. A node read, before any strike is resolved. |
vol_at_strike |
vol_at_strike(self, expiry: datetime.date, strike: float, forward: float, df_base: float) — The vol at strike for an option expiring at expiry, given the pair's forward to delivery and the base currency's discount factor df_base: each node placed at the strike its quote resolves to, then linear in log-moneyness between the adjacent node strikes and flat beyond the wings; across expiries linear in total variance. |
strike_at_delta |
strike_at_delta(self, expiry: datetime.date, delta: float, forward: float, df_base: float) — The strike at which an option expiring at expiry has delta under the smile's own vol at that strike — the strike-vol fixed point a delta-labelled trade resolves to — given the pair's forward and the base currency's discount factor df_base, in the surface's delta convention. A positive delta is a call's, a negative one a put's. vols.strike_from_delta is the same read at one fixed vol. |
helixio.vols.RateVolSurface — reference
A rate volatility surface on an expiry x tenor grid, optionally smiled.
| Method | Signature |
|---|---|
day_count |
day_count(self) — The day count the expiry axis is measured on. |
smile |
`smile(expiries: list[float], tenor_years: float, strikes: list[float], vols: list[list[float]], vol_convention: VolConvention |
cube |
`cube(expiries: list[float], tenors: list[float], strikes: list[float], vols: list[list[list[float]]], vol_convention: VolConvention |
expiries |
expiries(self) — The expiries the grid is quoted on, in years. |
tenors |
tenors(self) — The tenors the grid is quoted on, in years. |
strike_axis |
strike_axis(self) — What the strike pillars measure: absolute or spread_to_atm. |
strikes |
strikes(self) — The strikes the smile is quoted on, where the surface carries one. |
vol |
`vol(self, expiry_years: float, tenor_years: float, strike: float |
vol_convention |
vol_convention(self) — Whether the vols are normal or lognormal. Spelled the same as the constructor's keyword, so a value read out of one surface passes straight back into another without being renamed in the caller's hands. |
helixio.vols.SabrFit
A fitted SABR surface and the diagnostics of each slice that built it.
| Method | Signature |
|---|---|
surface |
surface(self) — The fitted surface, carrying its quote Jacobian. |
diagnostics |
diagnostics(self) — One row per slice: node, forward, parameters, errors, restarts, and whether it was accepted and passed the butterfly check. |
helixio.vols.SabrFormula
The expansion a SABR smile is read under: Hagan's lognormal (HaganLognormal), Hagan's normal (HaganNormal), or the normal beta = 0 form that reads a negative forward (NormalBetaZero). Every formula parameter takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.vols.SabrSpec
How a grid is fitted to SABR: the formula, beta and the shift, all stated, and the acceptance — the RMS vol error as a fraction of a slice's mean quote — with the Halton restarts a slice may spend reaching it.
| Method | Signature |
|---|---|
formula |
formula(self) — The formula's spelling. |
beta |
beta(self) — The CEV exponent. |
shift |
shift(self) — The displacement. |
accept |
accept(self) — The acceptance, as a fraction of a slice's mean quote. |
max_restarts |
max_restarts(self) — The Halton restarts a slice may spend. |
helixio.vols.SabrVolSurface
A SABR rate smile over expiry x tenor: ATM vol, rho and nu at each node, beta and the shift stated once, alpha implied at each read from the ATM vol at the read's own forward. Pinned with with_swaption_vols or with_cap_vols beside a grid.
| Method | Signature |
|---|---|
expiries |
expiries(self) — The expiry pillars, in years. |
tenors |
tenors(self) — The tenor pillars, in years. |
formula |
formula(self) — The formula's spelling. |
beta |
beta(self) — The CEV exponent. |
shift |
shift(self) — The displacement. |
vol_convention |
vol_convention(self) — The convention the formula's vols are quoted in. |
node_parameters |
node_parameters(self, expiry_years: float, tenor_years: float) — (atm_vol, rho, nu) at a point: bilinear between nodes, flat beyond. |
vol |
vol(self, expiry_years: float, tenor_years: float, forward: float, strike: float) — The smile's vol for strike at forward, in the formula's convention. |
is_fitted |
is_fitted(self) — Whether the surface was fitted, carrying the quote Jacobian a par vega reads. |
helixio.vols.StrikeAxis
What a cube's strikes measure: an Absolute rate, or a SpreadToAtm over the forward. Every strike_axis parameter takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.vols.StripScheme
How caplet vols are stripped from cap quotes: ConstantBetweenQuotes or one vol PerCaplet. The strippers' scheme takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.vols.VolConvention
How a rate volatility is quoted: Normal (basis-point) or Lognormal. Every vol_convention parameter takes the member or its string.
| Method | Signature |
|---|---|
code |
code(self) — The core's canonical code — the string the parser would take. |
helixio.vols.YoyVolSurface
A year-on-year inflation optionlet vol surface over expiry x absolute YoY strike, pinned per price index: normal or lognormal, a lognormal one optionally displaced (a displacement of one prices on 1 + rate). Each optionlet reads it at the time from the first of the month of (valuation - lag) to its period end - lag, ACT/365F.
| Method | Signature |
|---|---|
flat |
`flat(vol: float, vol_convention: VolConvention |
expiries |
expiries(self) — The expiries the grid is quoted on, in years. |
strikes |
strikes(self) — The strikes the smile is quoted on; None on a flat surface. |
vol_convention |
vol_convention(self) — Whether the vols are normal or lognormal. |
displacement |
displacement(self) — The lognormal displacement; zero on a normal or plain Black surface. |
vol |
vol(self, expiry_years: float, strike: float) — The vol at expiry_years and the absolute YoY strike. |
From the 0.0 line at revision bf7f2e2. Every printed number is that revision's own output.