10.23 限制的观察帖还在持续更新(落地观察表在本帖二楼跟帖维护),今天说个方向相反的变化——
大QMT 开始支持 Python 3.12 了。官方口径:两个 Python 版本同时支持(3.12 + 3.6),可手动切换。 目前我只确认国金和光大(已实机实测),其他券商未知——求样本。
【升级流程(两分钟版)】
登录交易端 → 选择 python 库版本 py3.12 → 点击 python 库下载
→ 设置版本保存 → 重启交易端 → 新增策略运行
两个要点:
- 双版本并存:3.6 保留,随时切回——老策略零风险;
- 切换后务必重启并确认版本生效——我第一次跑探针没输出,排查半天发现是重启后没确认切换是否生效。
【实机探针:6 组测试全过】
Python 版本:3.12.10
pandas 版本:3.0.2
f-string:✓(老版本缺的现代语法,有了)
pathlib:✓
get_market_data 返回类型:DataFrame(MultiIndex,官方公告一致)
旧 Panel 属性(major_axis 等):确认移除(AttributeError)
文件桥(独立进程 TCP):✓ 完美兼容
【破坏性变更:升级 3.12 后,报错从哪来】
pandas 升级后 Panel 被彻底移除——三个高频接口的返回结构全变了:
get_market_data / get_financial_data / get_top10_share_holder
好消息是官方迁移文档很全,坏消息是大部分散户不会去看。精简对照:
旧写法(Panel 专有) | 3.12 下 | 换成
data.items(股票列表) | ✗ 失效 | data.columns.get_level_values(0).unique()
data.major_axis(日期轴) | ✗ 失效 | data.index
data.major_xs('日期') | ✗ 失效 | data.xs('日期').unstack()
data.minor_xs('close') | ✗ 失效 | data.xs('close', level=1, axis=1)
链式取数 data['股票']['字段'] 不用改——单股票子表和单字段取法与旧版完全一致。
不想一次性迁移的,用双兼容分支(官方文档标准写法):
if isinstance(data, pd.DataFrame):
stocks = data.columns.get_level_values(0).unique() # 3.12 新结构
else:
stocks = data.items # 3.6 旧 Panel 结构
同一个策略文件,两个版本环境都能跑——升级期间不用赌方向。
【文件桥在 3.12 的兼容性(意外收获)】
我开源的文件桥(纯标准库 TCP 协议)在 3.12 + pandas 3.0.2 环境零改动跑通全部读写测试——工具链对新 Python 版本兼容,10.23 限制期里的活路依然在。
【求样本】
目前只确认国金和光大,其他券商有没有推送 3.12?升级后老策略跑起来有没有报错?回帖说一下券商和现象——样本会进我的落地观察表(限制状态 + 升级状态并表)。
更多实测笔记在公众号「晋盈投资」。
风险提示:技术实测记录,不构成投资建议。升级操作以券商官方文档为准;策略迁移前先在模拟环境充分验证。 |