Skip to main content
QFEX provides a pulsed underlier price stream, aggregated across multiple exchanges.
It is used in the funding calculation for perpetual markets.
Outside of extended market hours, the underlier price will not be returned.

How it works

Connect to the public websocket:
  • URL: wss://mds.qfex.com
Then send a subscribe message:
{"type": "subscribe","channels": ["underlier"],"symbols": ["AAPL-USD","SP500-USD"]}

Sample Code

# Python (websocket-client)
# pip install websocket-client
import json
import websocket

def on_open(ws):
    sub = {
        "type": "subscribe",
        "channels": ["underlier"],
        "symbols": ["SP500-USD"]  # or ["*"]
    }
    ws.send(json.dumps(sub))

def on_message(ws, message):
    data = json.loads(message)
    print("Underlier update:", json.dumps(data, indent=2))

def on_error(ws, error):
    print("Error:", error)

def on_close(ws, close_status_code, close_msg):
    print("Closed:", close_status_code, close_msg)

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

Example Response

{
  "type": "underlier",
  "sequence": 50,
  "time": "2014-11-07T08:19:27.028459Z",
  "symbol": "AAPL-USD",
  "price": "400.23"
}

Unsubscribe (optional)

{"type":"unsubscribe","channels":["underlier"],"symbols":["SP500-USD"]}

Notes
  • Pulsed stream (aggregated over multiple exchanges).
  • Used in funding rate calculation.
  • Outside extended hours, no price is returned.