DeltaCalc.PortfolioMargin (DeltaCalc v0.3.0)

Copy Markdown View Source

Portfolio-margin calculations over a caller-supplied position list.

This module nets offsetting long and short quantities before computing maintenance margin, liquidation price, and margin usage. It performs no I/O and assumes all positions in a call belong to the same risk unit.

API Functions

FunctionArityDescriptionParam Kinds
margin_usage1Calculate used and available margin under portfolio-margin netting.account: value
portfolio_liquidation_price1Estimate liquidation price for the netted portfolio book.account: value
combined_maintenance_margin1Calculate maintenance margin after netting offsetting portfolio positions.account: value

Summary

Types

Portfolio-margin account input.

Portfolio-margin position input.

Position side used for net exposure.

Margin usage under the portfolio model.

Functions

Return net quantity x mark price x max MMR across the portfolio.

Return used maintenance margin, available equity, and usage percentage.

Return the price where equity equals net maintenance margin, or nil for a flat book.

Types

account()

@type account() :: %{
  :positions => [position()],
  optional(:equity) => DeltaCalc.Decimal.input()
}

Portfolio-margin account input.

position()

@type position() :: %{
  side: side(),
  quantity: DeltaCalc.Decimal.input(),
  mark_price: DeltaCalc.Decimal.input(),
  mmr: DeltaCalc.Decimal.input()
}

Portfolio-margin position input.

side()

@type side() :: :long | :short

Position side used for net exposure.

usage()

@type usage() :: %{used: Decimal.t(), available: Decimal.t(), usage_pct: Decimal.t()}

Margin usage under the portfolio model.

Functions

combined_maintenance_margin(account)

@spec combined_maintenance_margin(account()) :: Decimal.t()

Return net quantity x mark price x max MMR across the portfolio.

margin_usage(account)

@spec margin_usage(account()) :: usage()

Return used maintenance margin, available equity, and usage percentage.

portfolio_liquidation_price(account)

@spec portfolio_liquidation_price(account()) :: Decimal.t() | nil

Return the price where equity equals net maintenance margin, or nil for a flat book.