QMT 不让读本地文件了,那我的策略状态数据该存哪?——QMT变量持久化方案正确指南
发布时间:3小时前阅读:2
早上十点,策略正跑到一半,客户端闪退。重新登录、重新启动策略,屏幕上的持仓表一片空白,程序以为自己空仓,转头又追了一笔进去,等你发现时已经多了一倍仓位。这类事故的根源往往不是策略逻辑,而是状态数据没地方落脚。
本地文件读写被收紧之后,原来那种 open 一个文本、把字典写进去的写法就不好使了。原因有两层:一是运行环境的权限限制,写盘会被拦,或者写到临时目录,重启就被清掉;二是策略进程本身,内存里的变量随进程结束一起消失,不会自己留下来。
那状态到底存哪,按场景分四条路走。第一条,用客户端自带的持久化能力,也就是策略上下文里能跨 K 线保留的那类变量或参数,写入后在界面上能看到,重启后是否保留要自己验证一遍,不同版本行为不完全一样。第二条,把关键状态放进策略参数或配置区,启动时读回,适合数据量很小、更新不频繁的场景,比如总仓位上限、开关标记。第三条,落到外部存储,本机起一个轻量服务或数据库,策略通过本地接口读写,或者用云上的数据库,这条路最灵活,代价是多一个组件要维护。第四条,也是最可靠的兜底:不存状态,靠成交回报和当日委托记录重建,程序启动时先拉一遍账户真实情况,再决定下一步。
不管走哪条路,下单前都要做一次幂等校验:给每笔目标单生成唯一标记,发单前先查这个标记有没有用过,用过就跳过。这一步比存哪更重要,因为任何存储都可能滞后。
还要提醒一句,别把"能写进去"当成"能读回来"。有些接口写成功了,读的时候字段名对不上,或者类型变了,比如存的是浮点、读出来是字符串,比较的时候永远不相等,策略就会认为自己是空仓。写完立刻读一次、断言一下,三行代码的事,能省掉一整天的排查。
最后一条经验:状态数据要少而准。只存那些丢了就没法继续的东西,持仓、已发单标记、当日计数,别把整个行情序列都塞进去,体积越大,读写越慢,出错面也越大。
判断方案是否合格,做一个动作就够了:盘中主动重启策略,看它能不能自己把持仓和委托对上,且不重复发单。能通过,说明数据落点选对了。
股票/量化开户欢迎找我!满足条件股票佣金万0.854、etf 可转债佣金万0.5、国债逆回购一折(百万分之一)!期权1.8元一张全包价!量化软件QMT+ptrade免费使用!还有888、999资金靓号等你选!
温馨提示:投资有风险,选择需谨慎。



问一问
从业认证

+微信
分享该文章
