Prices & adjustments
Daily prices, volume and adjustment factors for returns and historical backtests.
Query ETF price performance, NAV changes, fund size, tracking relationships and portfolio holdings for quantitative research, portfolio analysis and AI workflows.
Daily prices, volume and adjustment factors for returns and historical backtests.
Unit, accumulated and adjusted NAV for price-to-NAV analysis.
Shares outstanding, fund size and NAV per unit for flow and scale tracking.
Tracking indices and portfolio securities for product exposure analysis.
Use consistent ETF symbols and date parameters to retrieve a pandas DataFrame, or let an AI query the same data through MCP.
import quantcoda as qc qc.set_token("qc_live_your_key") df = qc.etf_daily( symbol="510300.SH", start_date="20260101" )
Start with ETF reference data: symbol identifies the ETF, while index_code and index_name identify its tracked index. The separate tracking-indices endpoint describes the index itself; it is not a holdings list.
For fund size, query shares outstanding and fund size for the same ETF. This endpoint requires PRO or above. total_size is in 10,000 CNY, and total_share is in 10,000 fund units. Multiply by 10,000 to convert to CNY or units; neither field is trading turnover.
symbolcsnameextnamecnameindex_codeindex_namesetup_datelist_datelist_statusexchangemgr_namecustod_namemgt_feeetf_typetrade_datesymboletf_nametotal_sharetotal_sizenavcloseexchangeimport os
import quantcoda as qc
qc.set_token(os.environ["QUANTCODA_TOKEN"])
mapping = qc.basic(symbol="510300.SH")
sizes = qc.share_size(symbol="510300.SH", trade_date="20260105")
if mapping.empty or sizes.empty:
print("No matching data; check the symbol, date and coverage.")
else:
result = sizes[["symbol", "trade_date", "total_size", "total_share"]].merge(
mapping[["symbol", "index_code", "index_name"]],
on="symbol", how="left", validate="many_to_one"
)
result["aum_cny"] = result["total_size"] * 10000
result["fund_units"] = result["total_share"] * 10000
print(result.to_string(index=False))
trade_date is the fund-size observation date (YYYYMMDD), not the download time. The date above is an example, not a guarantee of an available row. Missing values remain missing; a missing row is not zero AUM. If the mapping is not unique, the example raises a merge error so you can inspect it instead of silently duplicating fund size.
The reference mapping has no historical effective-date filter. Joining it to an older size observation does not establish a point-in-time mapping. Publication time, complete historical coverage and revision timing are not guaranteed here; do not assume today's reference data was known on a past backtest date. See data methodology before using the result in a backtest.
Use the same methods with the Python SDK or discover their tools on the hosted MCP server. For statement-based research, see the China stock financial data API; check API pricing and request limits before running a larger universe.
/v1/etf/basicFREEETF daily OHLC bars/v1/etf/dailyFREEETF adjustment factors/v1/etf/adj-factorPROETF net asset values/v1/etf/navPROETF portfolio holdings/v1/etf/portfolioPROETF shares outstanding & fund size/v1/etf/share-sizePROETF tracking-index reference data/v1/etf/tracking-indices
Create an API key to query ETF reference data, daily prices and adjustment factors.
Create a free account