Skip to content

Margin API

Margin calculations for leveraged trading.

Margin Calculations

initial_margin

initial_margin

initial_margin(
    notional: Money, req: MarginRequirements
) -> Money

Calculate initial margin required to open a position.

Initial margin is the collateral required to open a leveraged position. For example, 10% initial margin means 10x leverage.

Parameters:

Name Type Description Default
notional Money

Position notional value (size * price)

required
req MarginRequirements

Margin requirements with initial rate

required

Returns:

Type Description
Money

Required initial margin

Example

from decimal import Decimal req = MarginRequirements(initial=Decimal("0.1"), maintenance=Decimal("0.05")) margin = calculate_initial_margin(Decimal("10000"), req) float(margin) # 10% of $10,000 1000.0

maintenance_margin

maintenance_margin

maintenance_margin(
    notional: Money, req: MarginRequirements
) -> Money

Calculate maintenance margin required to keep a position open.

Maintenance margin is the minimum collateral to avoid liquidation. It's typically lower than initial margin.

Parameters:

Name Type Description Default
notional Money

Position notional value (size * price)

required
req MarginRequirements

Margin requirements with maintenance rate

required

Returns:

Type Description
Money

Required maintenance margin

Example

from decimal import Decimal req = MarginRequirements(initial=Decimal("0.1"), maintenance=Decimal("0.05")) margin = calculate_maintenance_margin(Decimal("10000"), req) float(margin) # 5% of $10,000 500.0

free_margin

free_margin

free_margin(
    equity: Money, maintenance_margin: Money
) -> Money

Return free margin available under cross margin.

margin_utilization

margin_utilization

margin_utilization(
    used_margin: Money, equity: Money
) -> Decimal

Data Classes

MarginRequirements

MarginRequirements dataclass

MarginLevel

MarginLevel dataclass

MarginSchedule

MarginSchedule dataclass

for_notional

for_notional(notional: Money) -> MarginRequirements

Pick margin requirements for a given notional (highest threshold <= notional).

for_size

for_size(
    size: Quantity, price: Price
) -> MarginRequirements

Pick margin requirements given position size and price.

get_initial_margin_rate

get_initial_margin_rate(
    *,
    notional: Money | None = None,
    size: Quantity | None = None,
    price: Price | None = None
) -> Rate

Convenience wrapper returning initial margin rate.

Provide either
  • notional, or
  • size and price (notional = |size * price|)

get_maintenance_margin_rate

get_maintenance_margin_rate(
    *,
    notional: Money | None = None,
    size: Quantity | None = None,
    price: Price | None = None
) -> Rate

Convenience wrapper returning maintenance margin rate.

Provide either
  • notional, or
  • size and price (notional = |size * price|)

IsolatedMargin

IsolatedMargin dataclass