QMT 不能读本地 CSV,实盘策略怎么改进?
发布时间:7小时前阅读:5
回测跑得好好的策略,一挂到实盘就报错:文件不存在。有人第一反应是路径写错了,检查三遍,路径明明是对的。他遇到的是 QMT 里一个很常见的坑——策略在回测和实盘两种运行方式下,工作目录不是同一个,代码里写的相对路径,落到实盘就指到了别的地方。
为什么会这样。回测时策略由编辑器直接拉起来,当前目录往往是你打开项目的位置;实盘时策略是被客户端按自己的方式加载的,进程的当前目录、甚至运行的账户环境都可能不一样。加上部分目录有写入限制,你用 Excel 打开着那个 CSV,文件被占用,读的时候也可能拿到空内容或者直接抛异常。
改进的方向不是想办法绕开限制,而是让策略不再依赖“当前目录”这个模糊概念。具体四步。
第一步,把路径写成绝对路径,同时在策略初始化时打印一次当前工作目录和文件是否存在,让日志自己说话。这一步做完,八成的“文件不存在”当场就能定位。
第二步,把数据文件和策略文件放在一起,用策略文件自身的路径去拼数据路径,这样不管从哪启动,基准都是同一个。别用当前目录拼。
第三步,读取时把参数写全:编码、分隔符、是否有表头、缺失值怎么处理,全部显式指定。默认值在不同环境下不一定一致,中文路径下的编码问题尤其常见。
第四步,也是最关键的:不要在每次行情回调里读文件。把读取放到初始化阶段,一次性读进内存,用全局变量或上下文对象持有;数据要更新,就定时重读或者干脆改成启动时统一加载。文件读写放在高频回调里,既慢又容易撞上占用。
如果数据量比较大,可以考虑换成列式存储格式,读取速度快很多,也不容易被别的软件锁住。数据来源如果本来就来自客户端本地落地的行情,直接查本地数据比导出 CSV 再读回来更省事。
判断标准:策略每次启动,日志里都要能看到三个数——文件绝对路径、读到的总行数、首尾两行的日期。这三个数和你手工打开文件看到的一致,读取这一环才算过关。对不上就别急着上实盘,先把这个对账做平。
股票/量化开户欢迎找我!满足条件股票佣金万0.854、etf 可转债佣金万0.5、国债逆回购一折(百万分之一)!期权1.8元一张全包价!量化软件QMT+ptrade免费使用!还有888、999资金靓号等你选!
温馨提示:投资有风险,选择需谨慎。



问一问
从业认证

+微信
分享该文章
