> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qfex.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Market Stats

Subscribe to consolidated market statistics for one symbol or all symbols.

The `market_stats` stream combines the latest BBO, mark price, open interest, and current daily volume into one message. On subscribe, MDS sends the latest snapshot when data is available, then pushes refreshed stats once per second.

## How it works

Connect to the public websocket:

* URL: **wss\://mds.qfex.com**

Then send a subscribe message:

```json theme={null}
{
  "type": "subscribe",
  "channels": ["market_stats"],
  "symbols": ["AAPL-USD"]
}
```

Or subscribe to all symbols with a wildcard:

```json theme={null}
{ "type": "subscribe", "channels": ["market_stats"], "symbols": ["*"] }
```

## Sample Code

<CodeGroup>
  ```python python theme={null}
  # Python (websocket-client)
  import json
  import websocket

  def on_open(ws):
      sub = {
          "type": "subscribe",
          "channels": ["market_stats"],
          "symbols": ["*"]
      }
      ws.send(json.dumps(sub))

  def on_message(ws, message):
      print("Market stats:", message)

  if __name__ == "__main__":
      ws = websocket.WebSocketApp(
          "wss://mds.qfex.com",
          on_open=on_open,
          on_message=on_message
      )
      ws.run_forever()
  ```

  ```javascript node theme={null}
  // Node.js (ws)
  import WebSocket from "ws";

  const ws = new WebSocket("wss://mds.qfex.com");

  ws.on("open", () => {
    const sub = {
      type: "subscribe",
      channels: ["market_stats"],
      symbols: ["*"],
    };
    ws.send(JSON.stringify(sub));
  });

  ws.on("message", (msg) => {
    console.log("Market stats:", msg.toString());
  });
  ```
</CodeGroup>

## Example Response

```json theme={null}
{
  "type": "market_stats",
  "sequence": 30272540,
  "time": "2025-09-04T09:26:40Z",
  "symbol": "*",
  "bbos": [
    {
      "time": "2025-09-04T09:26:39.545268322Z",
      "symbol": "AAPL-USD",
      "bid": [["10101.1", "0.4505414"]],
      "ask": [["10102.55", "0.57753524"]]
    }
  ],
  "mark_prices": [
    {
      "time": "2025-09-04T09:26:39.545268322Z",
      "symbol": "AAPL-USD",
      "price": "10102"
    }
  ],
  "open_interests": [
    {
      "time": "2025-09-04T09:26:39.545268322Z",
      "symbol": "AAPL-USD",
      "open_interest": "12.5"
    }
  ],
  "daily_volumes": [
    {
      "symbol": "AAPL-USD",
      "volume": "12.5"
    }
  ]
}
```

### Unsubscribe (optional)

```json theme={null}
{ "type": "unsubscribe", "channels": ["market_stats"], "symbols": ["*"] }
```

***

**Notes**

* `symbols` supports a single symbol, multiple symbols, or wildcard `*`.
* `bbos`, `mark_prices`, `open_interests`, and `daily_volumes` are arrays. Arrays can be empty when no latest value is available for that component.
* Daily volume is counted from the daily reset at **20:00 America/Chicago**.
* `market_stats` ignores `intervals` and `sig_figs`; it always uses the default subscription filter.
