Available symbols

Discover available symbols and their configuration through the Python SDK.

Use client.data.get_available_symbols() to retrieve all configured symbols with their available dates, trading parameters, and volume statistics. It also accepts optional filters, so you can ask for one symbol, one exchange, or one date instead of the whole catalog.

Get available symbols

python
symbols = client.data.get_available_symbols()

# Only use dates that are fully calibrated
for sym in symbols:
    valid_dates = [
        d["date"] for d in sym["available_dates"]
        if d.get("status") == "complete" and d.get("stage") == "model_calibration"
    ]
    if valid_dates:
        print(f"{sym['name']} ({sym['symbol_name']}): {valid_dates}")

Filtering

Called with no arguments the method returns the whole catalog, which is large. Pass any of the following to narrow it server-side:

ArgumentTypeDescription
symbolstrExact ticker, e.g. "700.HK" — not a prefix or substring match
exchangestrExchange protocol, e.g. "hkex_securities"
providerstrData provider, e.g. "omd" or "bmll"
datestrCalibration date "YYYY-MM-DD" — keeps only symbols calibrated on it
limitintMaximum symbols to return (1–1000)
offsetintSymbols to skip, for paging alongside limit
python
# Which dates is this symbol already calibrated for?
tencent = client.data.get_available_symbols(symbol="700.HK")
print([d["date"] for d in tencent[0]["available_dates"]])

# Which symbols are ready on a particular date?
ready = client.data.get_available_symbols(date="2025-09-02")
print([s["name"] for s in ready])

# Page through one exchange
page = client.data.get_available_symbols(exchange="hkex_securities", limit=50)

Filtering by date also narrows each symbol's available_dates to that date, so avg_number_of_msgs and avg_volume_traded then describe that date alone rather than the symbol's whole history.

The same ticker can appear more than once, sourced from different providers — and those entries carry different dates and different tick sizes. Tencent, for example, exists as 700.HK from omd and as 700 from bmll. Treat (name, provider, exchange) as the identity of a row, not name on its own, and pass provider alongside symbol when you need a specific one.

Response fields

Symbol object

FieldTypeDescription
namestrSymbol ticker (e.g., 700.HK, 9999.HK)
symbol_namestrCompany/symbol name (e.g., TENCENT, NTES-S) — may be null
providerstrData provider the row was sourced from (e.g., omd, bmll)
exchangestrExchange code (e.g., HKEX.Securities)
instrument_typestrType of instrument (equity, derivative)
currencystrTrading currency (e.g., HKD)
tick_sizefloatMinimum price increment
lot_sizeintMinimum order size
available_dateslistPer-date calibration records (see below)
avg_number_of_msgsfloatAverage message count per day
avg_volume_tradedfloatAverage daily volume

Date object (each item in available_dates)

FieldTypeDescription
datestrCalibration date in YYYY-MM-DD format
statusstrPipeline status — only "complete" is ready for simulation
stagestrPipeline stage — only "model_calibration" is ready for simulation
number_of_msgsintNumber of order book messages on this date
volume_tradedfloatTotal volume traded on this date
reference_pricefloatReference price used for calibration

Example response

json
[
  {
    "name": "700.HK",
    "symbol_name": "TENCENT",
    "provider": "omd",
    "exchange": "HKEX.Securities",
    "instrument_type": "equity",
    "currency": "HKD",
    "tick_size": 0.5,
    "lot_size": 100,
    "available_dates": [
      {
        "date": "2025-09-02",
        "status": "complete",
        "stage": "model_calibration",
        "number_of_msgs": 868188,
        "volume_traded": 478765.11,
        "reference_price": 606.0
      },
      {
        "date": "2025-09-02",
        "status": "complete",
        "stage": "model_calibration",
        "number_of_msgs": 863274,
        "volume_traded": 444244.71,
        "reference_price": 605.0
      }
    ],
    "avg_number_of_msgs": 288577.0,
    "avg_volume_traded": 153834.97
  }
]