安装
pip install quantdash
支持 Python 3.9+,推荐 3.10 或更高版本。内置 pandas 和 tqdm 支持。
初始化
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
export QUANTDASH_API_KEY="your-api-key"
from quantdash import QuantDash
qd = QuantDash() # 自动读取 QUANTDASH_API_KEY
标的代码格式
标的代码统一使用{代码}.{交易所后缀} 格式:
| 后缀 | 交易所 | 示例 |
|---|---|---|
.SH | 上海证券交易所 | 600519.SH |
.SZ | 深圳证券交易所 | 000001.SZ |
.BJ | 北京证券交易所 | 920047.BJ |
.US | 美股 | AAPL.US |
.HK | 港股 | 00700.HK |
获取日K线
支持周期:1d(日)、1w(周)、1M(月)、1Q(季)、1Y(年)
df = qd.klines.get("600519.SH", period="1d", count=5, to_dataframe=True)
print(df[["symbol", "name", "trade_date", "open", "high", "low", "close", "volume"]])
symbol name trade_date open high low close volume
600519.SH 贵州茅台 2026-06-12 1271.18 1295.00 1265.01 1291.91 50495
600519.SH 贵州茅台 2026-06-15 1292.70 1292.70 1270.10 1271.10 41586
600519.SH 贵州茅台 2026-06-16 1267.01 1267.88 1255.00 1255.67 34970
600519.SH 贵州茅台 2026-06-17 1258.00 1259.77 1238.56 1240.00 44803
600519.SH 贵州茅台 2026-06-18 1235.00 1238.87 1211.22 1215.00 57472
获取分钟K线
支持周期:1m(1分钟)、5m(5分钟)、15m(15分钟)、30m(30分钟)、60m(60分钟)
df = qd.klines.get("600519.SH", period="5m", count=5, to_dataframe=True)
print(df[["symbol", "name", "trade_time", "open", "high", "low", "close", "volume"]])
symbol name trade_time open high low close volume
600519.SH 贵州茅台 2026-06-18 14:40:00 1214.44 1215.82 1212.26 1215.82 1151
600519.SH 贵州茅台 2026-06-18 14:45:00 1215.02 1217.00 1215.00 1216.99 997
600519.SH 贵州茅台 2026-06-18 14:50:00 1216.52 1217.39 1215.99 1217.38 827
600519.SH 贵州茅台 2026-06-18 14:55:00 1217.40 1228.37 1217.40 1222.55 2355
600519.SH 贵州茅台 2026-06-18 15:00:00 1223.02 1223.99 1215.00 1215.00 2324
复权方式
K 线接口支持adjust 参数:
| 值 | 说明 |
|---|---|
forward | 前复权 - 比例复权(默认) |
backward | 后复权 - 比例复权 |
forward_additive | 前复权 - 差值复权 |
backward_additive | 后复权 - 差值复权 |
none | 不复权 |
df = qd.klines.get("600519.SH", adjust="none", to_dataframe=True) # 不复权
df = qd.klines.get("600519.SH", adjust="forward", to_dataframe=True) # 前复权-比例(默认)
df = qd.klines.get("600519.SH", adjust="backward", to_dataframe=True) # 后复权-比例
df = qd.klines.get("600519.SH", adjust="forward_additive", to_dataframe=True) # 前复权-差值
df = qd.klines.get("600519.SH", adjust="backward_additive", to_dataframe=True) # 后复权-差值
时间区间查询
通过start_time 和 end_time 指定时间范围(毫秒时间戳),配合 count 控制返回条数。
指定月份区间
import datetime
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
start = int(datetime.datetime(2026, 5, 1).timestamp() * 1000)
end = int(datetime.datetime(2026, 5, 31).timestamp() * 1000)
df = qd.klines.get("600519.SH", period="1d", start_time=start, end_time=end, to_dataframe=True)
print(f"2026年5月 共 {len(df)} 个交易日")
print(df[["trade_date", "open", "close", "volume"]].tail(5).to_string(index=False))
2026年5月 共 18 个交易日
trade_date open close volume
2026-05-25 1287.00 1285.88 46353
2026-05-26 1285.35 1273.38 45932
2026-05-27 1268.02 1303.00 82728
2026-05-28 1290.00 1275.98 45890
2026-05-29 1270.60 1326.00 76478
获取某日期之前的 N 根 K 线
使用end_time + count 组合,获取截止到某个时间点的最近 N 根 K 线:
import datetime
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
end = int(datetime.datetime(2026, 6, 1).timestamp() * 1000)
df = qd.klines.get("600519.SH", period="1d", count=5, end_time=end, to_dataframe=True)
print(df[["trade_date", "open", "high", "low", "close", "volume"]].to_string(index=False))
trade_date open high low close volume
2026-05-26 1285.35 1289.89 1270.01 1273.38 45932
2026-05-27 1268.02 1319.00 1250.10 1303.00 82728
2026-05-28 1290.00 1304.00 1271.00 1275.98 45890
2026-05-29 1270.60 1329.00 1270.00 1326.00 76478
2026-06-01 1327.00 1327.00 1301.31 1309.60 43845
分钟级时间区间
对分钟 K 线同样适用,适合截取盘中某一时段的数据:import datetime
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
start = int(datetime.datetime(2026, 6, 22, 14, 30).timestamp() * 1000)
end = int(datetime.datetime(2026, 6, 22, 15, 0).timestamp() * 1000)
df = qd.klines.get("600519.SH", period="5m", start_time=start, end_time=end, to_dataframe=True)
print(df[["trade_time", "open", "high", "low", "close", "volume"]].to_string(index=False))
trade_time open high low close volume
2026-06-22 14:30:00 1242.78 1244.05 1242.77 1243.74 140
2026-06-22 14:35:00 1243.85 1245.00 1243.03 1243.17 614
2026-06-22 14:40:00 1243.05 1243.06 1240.32 1241.15 687
2026-06-22 14:45:00 1241.11 1242.81 1240.86 1242.00 848
2026-06-22 14:50:00 1242.18 1242.49 1241.12 1241.32 753
2026-06-22 14:55:00 1241.33 1242.29 1241.30 1241.89 1092
2026-06-22 15:00:00 1241.99 1242.18 1241.41 1241.41 984
批量获取K线
一次请求获取多只标的的K线数据:symbols = ["600519.SH", "000001.SZ"]
dfs = qd.klines.batch(symbols, period="1d", count=3, to_dataframe=True, show_progress=True)
for sym, df in dfs.items():
print(f"--- {sym} ({df['name'].iloc[0]}) ---")
print(df[["trade_date", "open", "close", "volume"]].to_string(index=False))
--- 600519.SH (贵州茅台) ---
trade_date open close volume
2026-06-16 1267.01 1255.67 34970
2026-06-17 1258.00 1240.00 44803
2026-06-18 1235.00 1215.00 57472
--- 000001.SZ (平安银行) ---
trade_date open close volume
2026-06-16 11.05 10.94 942708
2026-06-17 10.97 10.78 965828
2026-06-18 10.74 10.52 1426893
批量 + 时间区间
klines.batch 同样支持 start_time 和 end_time:
import datetime
from quantdash import QuantDash
qd = QuantDash(api_key="your-api-key")
start = int(datetime.datetime(2026, 5, 26).timestamp() * 1000)
end = int(datetime.datetime(2026, 6, 1).timestamp() * 1000)
dfs = qd.klines.batch(["600519.SH", "000858.SZ"], period="1d", start_time=start, end_time=end, to_dataframe=True)
for sym, df in dfs.items():
print(f"--- {sym} ({df['name'].iloc[0]}) ---")
print(df[["trade_date", "open", "close", "volume"]].to_string(index=False))
--- 600519.SH (贵州茅台) ---
trade_date open close volume
2026-05-26 1285.35 1273.38 45932
2026-05-27 1268.02 1303.00 82728
2026-05-28 1290.00 1275.98 45890
2026-05-29 1270.60 1326.00 76478
2026-06-01 1327.00 1309.60 43845
--- 000858.SZ (五 粮 液) ---
trade_date open close volume
2026-05-26 83.74 83.36 277304
2026-05-27 83.00 83.89 603801
2026-05-28 82.56 81.49 362379
2026-05-29 80.99 84.89 601101
2026-06-01 83.95 83.41 279987
获取实时行情
按标的代码查询
df = qd.quotes.get(symbols=["600519.SH", "000001.SZ"], to_dataframe=True)
print(df[["symbol", "last_price", "prev_close", "volume", "ext.name", "ext.change_pct"]])
symbol last_price prev_close volume ext.name ext.change_pct
000001.SZ 10.52 10.78 1426893 平安银行 -0.024119
600519.SH 1215.00 1240.00 57472 贵州茅台 -0.020161
按标的池查询(全量行情)
支持的标的池:| 标的池 ID | 说明 |
|---|---|
CN_Stock | A 股(沪深京) |
CN_ETF | ETF |
US_Stock | 美股 |
HK_Stock | 港股 |
df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
print(df)
symbol region ... ext.amplitude ext.turnover_rate
0 920985.BJ CN ... 0.043893 0.015161
1 002414.SZ CN ... 0.027106 0.015167
2 600589.SH CN ... 0.047852 0.076141
3 688543.SH CN ... 0.043046 0.052545
4 300988.SZ CN ... 0.044633 0.043186
... ... ... ... ... ...
5496 002546.SZ CN ... 0.022026 0.014857
5497 920363.BJ CN ... 0.038917 0.027170
5498 688590.SH CN ... 0.033557 0.051160
5499 001317.SZ CN ... 0.053210 0.043987
5500 300731.SZ CN ... 0.080393 0.090136
[5501 rows x 18 columns]
获取日内分时
单只标的
支持周期:1m(默认)、5m、15m、30m、60m
df = qd.klines.intraday("600519.SH", count=5, to_dataframe=True)
print(df[["symbol", "name", "trade_time", "close", "volume"]])
symbol name trade_time close volume
600519.SH 贵州茅台 2026-06-18 14:56:00 1223.50 273
600519.SH 贵州茅台 2026-06-18 14:57:00 1223.88 261
600519.SH 贵州茅台 2026-06-18 14:58:00 1223.26 2
600519.SH 贵州茅台 2026-06-18 14:59:00 1223.26 0
600519.SH 贵州茅台 2026-06-18 15:00:00 1215.00 1788
批量日内分时
dfs = qd.klines.intraday_batch(["600519.SH", "000001.SZ"], to_dataframe=True)
for sym, df in dfs.items():
print(f"{sym}: {len(df)} 条分钟线")
获取标的信息
insts = qd.instruments.get(["600519.SH", "000001.SZ"])
for i in insts:
print(f"{i['symbol']:>10s} {i['name']:<6s} 交易所={i['exchange']} 类型={i['type']} 上市={i['ext'].get('listing_date','')}")
600519.SH 贵州茅台 交易所=SH 类型=stock 上市=2001-08-27
000001.SZ 平安银行 交易所=SZ 类型=stock 上市=1991-04-03
获取除权因子
df = qd.klines.ex_factors(["600519.SH"], to_dataframe=True)
print(df[["symbol", "trade_date", "ex_factor"]].tail(5))
symbol trade_date ex_factor
600519.SH 2023-12-20 1.011540
600519.SH 2024-06-19 1.020716
600519.SH 2024-12-20 1.015637
600519.SH 2025-06-26 1.019649
600519.SH 2025-12-19 1.017003
获取五档盘口
单只标的
depth = qd.depth.get("600519.SH")
print(f"标的: {depth['symbol']} 地区: {depth['region']}")
for i in range(5):
bid = f"买{i+1}: {depth['bid_prices'][i]:>10.2f} x {depth['bid_volumes'][i]}"
ask = f"卖{i+1}: {depth['ask_prices'][i]:>10.2f} x {depth['ask_volumes'][i]}"
print(f" {bid} | {ask}")
标的: 600519.SH 地区: CN
买1: 1215.00 x 123 | 卖1: 1215.28 x 1
买2: 1214.95 x 2 | 卖2: 1215.96 x 1
买3: 1214.88 x 1 | 卖3: 1216.00 x 2
买4: 1214.48 x 1 | 卖4: 1218.00 x 1
买5: 1214.40 x 1 | 卖5: 1218.89 x 1
批量盘口
result = qd.depth.batch(["000001.SZ", "600000.SH"])
for sym, depth in result.items():
print(f"--- {sym} ---")
for i in range(5):
bid = f"买{i+1}: {depth['bid_prices'][i]:>8.2f} x {depth['bid_volumes'][i]:<6}"
ask = f"卖{i+1}: {depth['ask_prices'][i]:>8.2f} x {depth['ask_volumes'][i]}"
print(f" {bid} | {ask}")
--- 000001.SZ ---
买1: 10.52 x 19374 | 卖1: 10.53 x 2
买2: 10.51 x 16237 | 卖2: 10.54 x 430
买3: 10.50 x 28122 | 卖3: 10.55 x 75
买4: 10.49 x 4656 | 卖4: 10.56 x 2771
买5: 10.48 x 3764 | 卖5: 10.57 x 2566
--- 600000.SH ---
买1: 9.08 x 4661 | 卖1: 9.09 x 7087
买2: 9.07 x 5576 | 卖2: 9.10 x 1052
买3: 9.06 x 6301 | 卖3: 9.11 x 2108
买4: 9.05 x 10340 | 卖4: 9.12 x 1537
买5: 9.04 x 1074 | 卖5: 9.13 x 3112