Skip to main content

Crate hypercall_margin

Crate hypercall_margin 

Source
Expand description

Pure margin computation for the Hypercall options + perps platform.

This crate contains all margin math with zero IO dependencies – no database, no network, no async runtime. It is the correctness kernel for margin calculations.

§Margin Modes

Hypercall supports two margin modes:

  • Standard (Deribit-style): linear per-position margin. Long options are fully paid (zero margin), short options use max(15% * spot - OTM, 10% * spot) for IM. See standard::StandardMarginService.

  • Portfolio (SPAN-style): scenario-based margin. The portfolio is stressed across 17 scenarios (13 core + 4 tail) combining spot and vol shocks. Scanning risk is the worst-case weighted loss, plus contingency add-ons for short gamma near expiry. See portfolio::span::compute_span_margin_at.

§Architecture

hypercall-types  (WalletAddress, shared primitives)
      ^
hypercall-margin (this crate: types + pure math)
      ^
hypercall        (engine: IO, vol oracle, async wiring)

The engine populates market state (spot prices, implied vols) and calls into this crate for the actual margin computation. This crate never fetches data itself.

§Example

use hypercall_margin::standard::{StandardMarginService, StandardAccount};
use rust_decimal_macros::dec;

let service = StandardMarginService::new();
let account = StandardAccount::new("wallet".to_string(), dec!(10000));
let result = service.compute_margin(&account);
assert!(result.can_increase_risk());

Re-exports§

pub use constants::MM_TO_IM_RATIO;
pub use error::MarginError;
pub use types::Account;
pub use types::MarginDetails;
pub use types::OptionType;
pub use types::Scenario;
pub use types::ScenarioType;
pub use portfolio::account_cash_decimal;
pub use portfolio::classify_liquidity_gap;
pub use portfolio::compute_extended_risk_grid_from_snapshot;
pub use portfolio::compute_risk_grid_from_snapshot;
pub use portfolio::compute_span_margin_at;
pub use portfolio::empty_portfolio_margin_details;
pub use portfolio::generate_scenarios;
pub use portfolio::has_portfolio_positions;
pub use portfolio::market_state_from_snapshot;
pub use portfolio::pool_capacity_usdc;
pub use portfolio::pool_target_usdc;
pub use portfolio::pool_utilization;
pub use portfolio::short_option_oi_usdc;
pub use portfolio::snapshot_from_account;
pub use portfolio::utilization_apr;
pub use portfolio::validate_pool_config;
pub use portfolio::ContingencyMargin;
pub use portfolio::ExtendedRiskGrid;
pub use portfolio::InstrumentRiskRow;
pub use portfolio::PmAccountSettlementFacts;
pub use portfolio::PmFixtureOptionKey;
pub use portfolio::PmFixturePosition;
pub use portfolio::PmLiquidityClassification;
pub use portfolio::PmMarketMarks;
pub use portfolio::PmSettlementFixture;
pub use portfolio::PmSettlementModelError;
pub use portfolio::PmSettlementObligation;
pub use portfolio::PmSettlementPoolConfig;
pub use portfolio::PmSettlementPoolSnapshot;
pub use portfolio::PortfolioMarginConfig;
pub use portfolio::PortfolioMarginContingencyConfig;
pub use portfolio::PortfolioMarginGridConfig;
pub use portfolio::PortfolioMarginMarketState;
pub use portfolio::PortfolioMarginOptionExposure;
pub use portfolio::PortfolioMarginOptionKey;
pub use portfolio::PortfolioMarginOptionMarketState;
pub use portfolio::PortfolioMarginPerpExposure;
pub use portfolio::PortfolioMarginScenario;
pub use portfolio::PortfolioMarginSnapshot;
pub use portfolio::PortfolioMarginSymbolOverride;
pub use portfolio::PortfolioMarginUnderlyingMarketState;
pub use portfolio::PortfolioMarginUnderlyingSnapshot;
pub use portfolio::ScenarioPnl;
pub use portfolio::SnapshotComponentKind;
pub use standard::OptionPosition;
pub use standard::PerpPosition;
pub use standard::PositionMarginContribution;
pub use standard::StandardAccount;
pub use standard::StandardMarginParams;
pub use standard::StandardMarginResult;
pub use standard::StandardMarginService;

Modules§

black_76
Black-76 pricing for European options on futures contracts.
black_scholes
Black-Scholes option pricing with Edgeworth expansion for skew and kurtosis.
constants
error
margin_mode
portfolio
Portfolio Margin (SPAN-style) computation.
standard
Standard Margin (Deribit-style) linear margin computation.
types

Enums§

MarginMode
Per-wallet margin regime. Determines which margin engine path is used.