CAD methodology — Bank of Canada zero-coupon curve
Source
Bank of Canada, "Yield curves for zero-coupon bonds". This is BoC's zero-coupon product, fitted using the Merrill Lynch Exponential Spline (MLES) methodology described in Bolder, Johnson, and Metzler (2004). CarryCurve does not use BoC's separate benchmark-bond yields product, which is a par-yield series.
Quote convention and processing
BoC publishes continuously-compounded zero rates in decimal form (0.0500 = 5.00%). CarryCurve reads these directly — no bootstrap, no conversion. Methodology tag: Native.
Fetch mechanism
BoC's zero-coupon curve is not exposed through the Valet API; that API serves only the benchmark par-yield series (2y / 3y / 5y / 7y / 10y / Long). The zero curve is served only via the form on the bond-yield-curves page, which GETs stats/results/csv?lookupPage=lookup_yield_curve.php&dFrom=...&dTo=.... The CarryCurve CAD adapter calls that endpoint with a 30-day window for the daily refresh (always wide enough to capture the most-recent publication given the two-week lag) and an explicit window for backfills. Non-CSV responses — BoC's stats backend has intermittent maintenance windows — are detected by content-type and CSV signature, the disk cache is preserved unchanged, and the adapter returns the cache.
Publication cadence
Weekly on Thursdays, with a structural two-week lag. On any given Thursday, the most recent row in the BoC CSV is dated roughly two weeks prior. This is the BoC's stated cadence and isn't something CarryCurve can engineer around without paying a commercial vendor (out of v2.0 scope).
The cross-curve ranking and Pro digest show CAD's freshness badge prominently for this reason — a "10 business days ago" badge on a CAD row is normal, not an error.
Stale threshold
Per the watchdog (§9.6), CAD's persistent-stale alert fires when the most recent row is more than 16 business days old. This is sized to cover BoC's normal worst case — the working day just before each Thursday publish, when the most recent data is approximately three weeks (~15 business days) old by design — plus one business day of grace. Other currencies have tighter thresholds appropriate to their publishing cadences: GBP 3 business days, USD 2 business days, EUR 3 business days.
Holiday and weekend handling
BoC's CSV contains rows for non-trading days marked with the literal string na. CarryCurve treats these as missing-by-design rather than parse errors. The holiday calendar used is the Bank of Canada's Ontario provincial schedule (BoC is in Ottawa).
Tenor grid
Uniform 0.25-year grid from 0.25y to 30.00y (120 points). Column names in the upstream CSV follow the pattern ZC{NNNN}YR where the tenor in years equals the integer divided by 100 (ZC025YR = 0.25y, ZC1000YR = 10y, ZC3000YR = 30y). This is finer than the GBP grid (0.5y intervals); the math is unchanged.