Skip to content

SabiQuant Documentation

High-integrity, zero-dependency (std-only) Quantitative Finance library in Rust with verified QuantLib numerical parity.
Crates.io Versiondocs.rs DocumentationLicenseDependencies

Key Architectural Pillars

Zero Dependencies (std-only)

Built purely on the Rust standard library (std). Zero transitive dependencies, no external crate churn, no C-bindings, and instantaneous compilation. Effortlessly runs in restricted environments, microservices, and WebAssembly.

QuantLib Parity

Benchmarked and numerically verified against QuantLib reference implementations. Full analytical parity across ISDA/ICMA conventions, Actual/Actual ICMA day counts, business calendars, and stub periods.

Exact Decimal & Settlement

128-bit exact fixed-point decimal arithmetic (DecimalAmount) with 38 decimal places and 7 IEEE rounding modes. Built-in settlement boundaries isolate rounding error and defend against penny discrepancies.

Deep Analytical Risk

Full analytical first- and second-order risk metrics: Modified Duration, Macaulay Duration, Convexity, and analytical dP/dydP/dy derivative computation without finite-difference approximation noise.


Quick Example: Fixed-Income Valuation

Calculate clean price, dirty price, accrued interest, and risk analytics with SabiQuant:

use sabiquant::bonds::{BondPricingPlan, BondPricingResult};
use sabiquant::core::{Date, Frequency};
use sabiquant::core::calendars::TargetCalendar;
use sabiquant::core::daycount::ActualActualICMA;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. Setup settlement and maturity dates
let settlement = Date::from_ymd(2025, 3, 15)?;
let maturity = Date::from_ymd(2035, 3, 15)?;
// 2. Define bond pricing plan (10Y, 4.5% annual coupon)
let plan = BondPricingPlan::builder()
.settlement(settlement)
.maturity(maturity)
.coupon_rate(0.045)
.frequency(Frequency::Annual)
.calendar(TargetCalendar::default())
.day_counter(ActualActualICMA::default())
.face_value(100.0)
.build()?;
// 3. Price bond at 4.20% market yield
let market_yield = 0.042;
let pricing: BondPricingResult = plan.price_from_yield(market_yield)?;
println!("Dirty Price: {:.4}", pricing.dirty_price);
println!("Clean Price: {:.4}", pricing.clean_price);
println!("Accrued Interest: {:.4}", pricing.accrued_interest);
println!("Modified Duration: {:.4}", pricing.modified_duration);
println!("Convexity: {:.4}", pricing.convexity);
// 4. Invert yield from target market clean price
let target_clean_price = 102.435;
let implied_yield = plan.yield_from_clean_price(target_clean_price)?;
println!("Implied Yield: {:.4}%", implied_yield * 100.0);
Ok(())
}

Installation

Add SabiQuant to your Cargo.toml:

[dependencies]
sabiquant = "0.1.0"

Or via the command line:

Terminal window
cargo add sabiquant