Margin API¶
Margin calculations for leveraged trading.
Margin Calculations¶
initial_margin¶
initial_margin ¶
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 ¶
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 ¶
Return free margin available under cross margin.
margin_utilization¶
Data Classes¶
MarginRequirements¶
MarginRequirements
dataclass
¶
MarginLevel¶
MarginLevel
dataclass
¶
MarginSchedule¶
MarginSchedule
dataclass
¶
for_notional ¶
Pick margin requirements for a given notional (highest threshold <= notional).
for_size ¶
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|)