第三期:get_market_data_ex:QMT数据调度中枢的"双生模式"
核心定位:这是QMT数据体系最关键的函数,没有之一。它既是回测时的 "时光机" (读取本地历史),又是实盘时的 "雷达站" (订阅实时数据)。一个 subscribe参数的布尔值,决定了策略是活在历史幻觉还是真实战场。90%的新手因混淆该参数,导致回测完美、实盘爆仓。
一、函数的战略价值:
get_market_data_ex是xtquant中唯一支持双模式的函数,通过 subscribe参数在 "本地回放" 与 "实时直播" 间切换:
| 模式 |
subscribe=False |
subscribe=True |
| 数据源 |
本地加密文件(已下载) |
行情服务器实时流 |
| 延迟 |
0.1ms(磁盘读取) |
3ms(网络+服务器) |
| 适用场景 |
回测、复盘 |
实盘、监控 |
| 结果可复现 |
是 |
否(实时数据无法重现) |
| 网络依赖 |
无 |
有(断网即失效) |
生死区别:回测时若误用 subscribe=True,策略会等待实时数据到来,导致回测卡死或结果不可复现;实盘时若误用 subscribe=False,策略读取的是过期本地数据,信号延迟>1分钟,完全失效。
二、6个参数逐字拆解:每个都是"地雷"
参数1:field_list —— 字段筛选的"性能黑洞"
基础用法:

性能影响:字段每增加1个,内存占用+10%,回测速度-5%。高频策略中,字段筛选可提速30%。
实战技巧:高频策略只用 lastPrice和 volume;日内策略加 high/low;持仓策略才需要 openInt(持仓量)。
参数2:stock_code —— 字符串的"严格格式"
致命陷阱:不支持列表,必须是字符串。批量获取需循环调用,但可优化:

特殊处理:北交所股票后缀为 .BJ,港股通为 .HK,期货为 .SHFE等,格式错误返回空数据。
参数3:period —— 周期的"档位选择"
周期与数据量关系(以贵州茅台1年为例):
'tick':500MB(240万条),仅适合高频
'1m':10MB(12万条),性价比最高
'5m':2MB(2.4万条),适合波段
'1d':1KB(365条),适合多因子
黄金法则:回测时先用 '1d'验证逻辑,再用 '1m'精细化。直接上 'tick'会导致回测耗时10小时,且过拟合风险极高。
参数4:count vs start_time —— 数据范围的"互斥陷阱"
两者互斥:count=-1(全部)时,start_time和 end_time失效;若指定 start_time,则 count无效。

实战技巧:count=240可获取最近1天分钟线,用于尾盘策略;count=-1用于全量回测。
参数5:dividend_type —— 复权的"生死选择"
四种复权方式对比:
| 方式 |
价格连续性 |
负数问题 |
适用场景 |
| 'none' |
断层 |
无 |
仅用于分析原始价格 |
| 'front' |
连续 |
有 (多次分红后) |
禁用,会导致策略信号错误 |
| 'back' |
连续 |
无 |
仅用于展示,不适合回测 |
| 'front_ratio' |
连续 |
无 |
唯一推荐,乘法复权保真 |
致命案例:某用户使用 'front'前复权回测贵州茅台2015-2020年,2018年出现 -50元 的买入信号,回测崩溃。切换到 'front_ratio'后正常。
黄金法则:回测与实盘必须统一使用 'front_ratio',否则信号漂移。
参数6:subscribe —— 模式的"灵魂开关"
这是本函数最核心的参数,没有之一。
模式A:回测模式(subscribe=False)

模式B:实盘模式(subscribe=True)

生死陷阱:回测时误用 subscribe=True,函数会等待实时数据到来,导致回测卡死或结果不可复现;实盘时误用 subscribe=False,读取的是过期本地数据,信号延迟>1分钟,完全失效。
三、双模式实战:同一个策略,两套代码
策略逻辑:双均线金叉买入,死叉卖出
** **回测版本(subscribe=False) ** **

实盘版本(subscribe=True)


核心差异:
- 回测版:一次性读取,批量计算,速度快
- 实盘版:逐根触发,逐根计算,延迟低
- 转换成本:从回测到实盘,需重写30%代码(主要是持仓管理、下单逻辑)

五、避坑指南:90%新手倒在这里
坑1:未下载数据就调用
现象:get_market_data_ex返回 None或空DataFrame
解决:先执行 download_history_data,再调用本函数
坑2:subscribe=True用于回测
现象:回测卡死或结果每次不同
解决:回测必须 subscribe=False,实盘才用 True
坑3:订阅超限300品种
现象:超过300个品种后,返回前值填充的重复数据
解决:用 get_full_tick替代 subscribe_quote
坑4:时间格式错误
现象:返回空数据,无报错
解决:时间格式必须为 '20251126093000',精确到秒
坑5:复权方式导致负数
现象:价格出现-50元,策略崩溃
解决:始终使用 'front_ratio'等比前复权
六、总结与下期预告
get_market_data_ex是QMT的 必备 ,一个函数打通回测与实盘。掌握其双模式切换、字段裁剪、复权选择三大技巧,就能构建机构级的数据调度能力。
下期预告:我们将深入 subscribe_quote,解锁毫秒级实时监控的黑科技,实现涨停预警、盘口狙击、动态风控三大实战策略。记住:数据不精准,策略等于0;模式不区分,实盘等于猜。
彩蛋:
1、QMT开通流程
(1)开户➕入金10万以上
(2)提供测试账号、安装配置流程、量化会员资料。
2、VIP服务

3、VIP福利
惊喜佣金
添加量化讨论群
量化工具全套资料库
提供服务器托管模式:ptrade策略+ldp极速柜台+vip定向服务器(限50人)
