# `DeltaCalc.AccountMetrics`
[🔗](https://github.com/ZenHive/delta_calc/blob/v0.3.0/lib/delta_calc/account_metrics.ex#L1)

Per-account liquidation, leverage, and margin-usage metrics.

This module is pure calculation glue around `DeltaCalc.Leverage`, `DeltaCalc.Liquidation`,
and `DeltaCalc.Safety`; callers own account isolation, alert thresholds, exchange state,
and persistence.

## API Functions
| Function | Arity | Description | Param Kinds |
| --- | --- | --- | --- |
| `margin_usage_pct` | 2 | Calculate margin used as a percentage of account equity. | `margin_used: value`, `equity: value` |
| `calculate` | 2 | Calculate per-account liquidation, leverage, margin usage, and safety metrics. | `account: value`, `opts: value` |

# `account`

```elixir
@type account() :: %{
  entry_price: Decimal.t(),
  notional: Decimal.t(),
  equity: Decimal.t(),
  margin_used: Decimal.t(),
  mmr_total: Decimal.t(),
  side: side(),
  swan_pct: Decimal.t()
}
```

Per-account inputs required for risk metric calculation.

# `metrics`

```elixir
@type metrics() :: %{
  effective_leverage: Decimal.t(),
  liquidation_price: Decimal.t(),
  liquidation_distance_pct: Decimal.t(),
  margin_usage_pct: Decimal.t(),
  safety: map()
}
```

Calculated account risk metrics.

# `side`

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

Position side for account liquidation calculations.

# `calculate`

```elixir
@spec calculate(account(), map()) :: metrics() | {:error, atom()}
```

Return account-level risk metrics for one isolated account.

`:safety_cfg` in `opts` is passed through to `DeltaCalc.Safety.safety/5`.

# `margin_usage_pct`

```elixir
@spec margin_usage_pct(Decimal.t(), Decimal.t()) :: Decimal.t()
```

Return `margin_used / equity * 100`, or zero when equity is not positive.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
