miniQMT:写策略一直翻文档?这一份 xtdata 速查表收藏夹置顶就够了
我为什么写这份速查表
写 miniQMT 策略最浪费时间的不是写代码,是查接口:
-
周期参数到底怎么写?
'1d'还是'day'? -
复权类型有几种?前复权后复权字符串叫啥?
-
板块名称是中文还是代码?
-
get_full_tick 返回的字段长啥样?
每次都要翻官方文档、翻 6.1-6.4 节代码——严重打断思路。
这一节我把所有 xtdata 高频接口+参数+字段一页全收录,强烈建议收藏 → 公众号置顶 → 写代码时随时翻。
一、连接管理
xtdata 用之前必须先连接。不连接调任何接口都会失败。
| 函数 | 说明 | 返回值 |
|---|---|---|
connect() |
连接行情服务器 | 无 |
disconnect() |
断开连接 | 无 |
fromxtquantimportxtdata
xtdata.connect() # 必须!
# ... 业务代码 ...
xtdata.disconnect() # 程序退出前调一下
踩坑提示:
-
❌ 没 connect 就调
get_market_data→ 数据为 None,新手最常见的坑 -
✅ 一般
connect()一次就够了,多次调用没害但没必要
二、行情订阅 —— 让数据自己来找你
| 函数 | 说明 | 关键参数 |
|---|---|---|
subscribe_quote(stock_code, period, callback) |
订阅单股 | period:tick / 1m / 5m / 1d |
subscribe_whole_quote(code_list, callback) |
订阅多股 | callback 接收所有 tick |
unsubscribe_quote(stock_code) |
取消订阅 | — |
周期参数(period)速查
| 值 | 说明 | 用途 |
|---|---|---|
'tick' |
分笔行情 | 高频盯盘、毫秒级监控 |
'1m' |
1 分钟 K | 短线策略 |
'5m' |
5 分钟 K | 日内择时 |
'15m' |
15 分钟 K | 日内择时 |
'30m' |
30 分钟 K | 中线 |
'1h' |
1 小时 K | 中线 |
'1d' |
日 K | 主流策略 |
'1w' |
周 K | 长线 |
'1mon' |
月 K | 长线 |
# 订阅 Tick
defon_tick(data):
print(data)
xtdata.subscribe_quote('600000.SH', 'tick', on_tick)
# 订阅多股
xtdata.subscribe_whole_quote(['600000.SH', '000001.SZ'], on_tick)
实战经验:单进程订阅数量上限大约 50 只——再多容易丢数据。用全推订阅替代(参考第 3.6 节)。
三、实时数据获取
实盘最高频的几个接口,一定要熟到背下来:
| 函数 | 说明 | 返回结构 |
|---|---|---|
get_full_tick(code_list) |
拿一组股票的最新 Tick | {code: tick_dict} |
get_market_data(field_list, stock_list, period, ...) |
拿历史/实时行情 | dict |
get_l2_quote(stock_code) |
Level2 五档+委买委卖明细 | dict |
get_l2_order(stock_code) |
Level2 逐笔委托 | dict |
get_l2_transaction(stock_code) |
Level2 逐笔成交 | dict |
get_full_tick 返回字段
tick = xtdata.get_full_tick(['600000.SH'])['600000.SH']
# {
# 'time': 1710398400000, # 时间戳(毫秒)
# 'lastPrice': 10.05, # 最新价
# 'open': 10.00, 'high': 10.10, 'low': 9.95,
# 'lastClose': 9.98,
# 'amount': 1234567.0, 'volume': 123456,
# 'bidPrice': [10.05, 10.04, 10.03, 10.02, 10.01],
# 'bidVol': [100, 200, 150, 300, 250],
# 'askPrice': [10.06, 10.07, 10.08, 10.09, 10.10],
# 'askVol': [80, 120, 90, 200, 180],
# }
实盘里 90% 场景就这一个接口够用。记牢字段名。
四、历史数据接口
历史 K 线主要靠这两个:
| 函数 | 说明 | 备注 |
|---|---|---|
get_market_data_ex(...) |
增强版,支持复权、填充、count | 推荐用这个 |
download_history_data(stock_code, period, start, end) |
下载历史数据到本地 | 第一次必须先下载 |
download_history_data2(stock_list, period, start, end, callback) |
批量下载 | 支持进度回调 |
复权类型(dividend_type)
| 值 | 说明 | 何时用 |
|---|---|---|
'none' |
不复权 | 看真实历史价 |
'front' |
前复权 | 回测推荐 |
'back' |
后复权 | 计算长期收益 |
'front_ratio' |
等比前复权 | 特殊场景 |
'back_ratio' |
等比后复权 | 特殊场景 |
data = xtdata.get_market_data_ex(
field_list=[],
stock_list=['600000.SH'],
period='1d',
start_time='20240101',
end_time='',
count=-1,
dividend_type='front', # 推荐前复权
fill_data=True,
)
df = data['600000.SH']
print(df.tail())
踩坑提示:
-
❌ 不下载就
get_market_data_ex→ 大概率为空 -
✅ 标准三步:下载 → 获取 → 用
五、基础信息接口
写策略离不开”这只股票是什么板块/涨停价多少/合约规则”这类查询。
| 函数 | 说明 |
|---|---|
get_stock_list_in_sector(sector_name) |
拿板块成分股 |
get_instrument_detail(stock_code) |
拿合约详情(涨跌停价/最小变动) |
get_trading_dates(market, start, end) |
拿交易日历 |
get_instrument_type(stock_code) |
拿证券类型 |
常用板块名称
| 板块 | 用途 |
|---|---|
'沪深A股' |
全市场扫描 |
'上证A股' / '深证A股' |
单市场 |
'创业板' / '科创板' |
风险偏好筛选 |
'沪深指数' |
指数监控 |
'沪深ETF' |
ETF 策略 |
# 沪深 A 股
stocks = xtdata.get_stock_list_in_sector('沪深A股')
print(f"A 股数量: {len(stocks)}")
# 涨停价
detail = xtdata.get_instrument_detail('600000.SH')
print(f"涨停价: {detail['UpStopPrice']}, 跌停价: {detail['DownStopPrice']}")
# 交易日历
dates = xtdata.get_trading_dates('SH', '20240101', '20240301')
六、财务数据接口
回测/选股策略经常需要财务数据:
| 函数 | 说明 |
|---|---|
download_financial_data(stock_list, table_list) |
下载财务数据 |
get_financial_data(stock_list, table_list, start, end) |
获取财务数据 |
财务报表类型(table_list)
| 表名 | 说明 |
|---|---|
'Balance' |
资产负债表 |
'Income' |
利润表 |
'CashFlow' |
现金流量表 |
'Capital' |
股本结构 |
'Holdernum' |
股东人数 |
'Top10holder' |
十大股东 |
'Top10flowholder' |
十大流通股东 |
'Pershareindex' |
每股指标(EPS/BPS/ROE 在这) |
# 第一步:下载(首次必做)
xtdata.download_financial_data(
stock_list=['600000.SH'],
table_list=['Balance', 'Income', 'Pershareindex'],
)
# 第二步:获取
fin = xtdata.get_financial_data(
stock_list=['600000.SH'],
table_list=['Pershareindex'],
start_time='20230101', end_time='',
)
七、5 个最高频的代码模板
直接抄到项目里:
1. 拿股票最新价
defget_latest_price(stock_code):
tick = xtdata.get_full_tick([stock_code])
returntick.get(stock_code, {}).get('lastPrice')
2. 拿涨跌停价
defget_limit_prices(stock_code):
detail = xtdata.get_instrument_detail(stock_code)
return {
'up': detail['UpStopPrice'],
'down': detail['DownStopPrice'],
}
3. 判断是否在交易时段
defis_trading_time():
fromdatetimeimportdatetime, time
now = datetime.now().time()
return (time(9, 30) <= now<= time(11, 30)
ortime(13, 0) <= now<= time(15, 0))
4. 拿前复权日 K(回测)
defget_kline(code, days=200):
data = xtdata.get_market_data_ex(
field_list=[], stock_list=[code], period='1d',
start_time='', end_time='', count=days,
dividend_type='front', fill_data=True,
)
returndata[code]
5. 计算简单 MA
importnumpyasnp
defget_ma(code, period='1d', n=20):
data = xtdata.get_market_data_ex(
field_list=['close'], stock_list=[code], period=period,
count=n+5, dividend_type='front',
)
closes = data[code]['close']
iflen(closes) <n:
returnNone
returnfloat(np.mean(closes[-n:]))
八、5 个常见坑(自查清单)
打勾自检你是否踩过:
- 没
connect就调接口 → 数据为 None - 没
download_history_data就调get_market_data_ex→ 数据为空 - 周期参数写错(
'day'❌ →'1d'✅) - 复权类型写错(
'qfq'❌ →'front'✅) - 板块名称写英文(
'A股'❌ →'沪深A股'✅)
这五个坑能踩 80% 的新手——记牢就赢一半。
九、注意事项总结
| 注意点 | 说明 |
|---|---|
| 连接是前提 | connect() 必须最先调 |
| 订阅有上限 | 单进程大约 50 只,多了用全推 |
| 历史数据要先下载 | 否则获取为空 |
| Level2 要权限 | 没开通就别调 L2 接口 |
| 财务数据要先下载 | download_financial_data 后才能 get |
写在最后
写策略时别再翻官方文档了。
把这一篇收藏到公众号置顶,写代码时直接搜关键词——比翻文档快 10 倍。
下一篇预告
行情速查表搞定了,下面是交易接口——
下一篇 7.2 xttrader API 速查表:
-
下单接口
order_stock全参数详解 -
撤单 / 查询 / 回调 完整对照表
-
委托类型、价格类型、状态码全解释
-
同步 vs 异步差异表
留个互动给你
你查 xtdata 文档最常找的是哪个接口?
评论区聊聊——你最容易记错的参数是哪一个?
如果这一篇对你有帮助:
-
点个 在看 让我知道速查表内容你需要 👍
-
转给一个还在翻文档的朋友 🔁
-
关注 + 星标 ⭐ 第一时间看下一篇
风险提示:本文仅作技术分享与教学用途,不构成任何投资建议。量化交易有风险,实盘需谨慎。
夜雨聆风