上个月底做月度复盘,想把账户历史导出来做个资金曲线图。右键点“保存为报告”,选好日期范围,等着看HTML文件弹出来。结果等了半天,出来一个残缺的页面——前半段交易记录好好的,后半段直接空白,像是被拦腰砍了一刀。当时以为是文件太大,或者硬盘满了,检查了一圈发现都不是。
真正的问题藏在哪
后来我琢磨了一下,跟几个写EA的朋友聊了聊,发现这事其实挺普遍的。问题不在你的电脑,也不在MT4的安装文件,而是出在交易历史的内存缓冲区上。当你一个交易时段内开的单子特别多,尤其是一边跑着好几个EA一边手动下单,这个缓冲区就容易卡壳。你点“保存为报告”的时候,MT4要从缓冲区里把数据读出来生成HTML,结果读了一半读不动了,直接放弃。
MQL4官方文档(docs.mql4.com)里讲了
HistorySelect()这个函数,告诉你编程的时候怎么获取历史订单。但它没提的是,界面上那个“保存为报告”的按钮用的也是同一套底层机制。缓冲区一崩,UI功能也跟着完蛋。这是文档里不会写的东西,只能靠实际踩坑才能摸清楚。第一步:换个出口导出数据
别死磕“保存为报告”了,试一下账户历史选项卡里的 “保存为详细报告” 或者 “保存为CSV” 。不同版本的MT4叫法不太一样,有些版本甚至隐藏了这个入口。如果找不到这两个选项,我用过最笨但最有效的方法:
logs文件夹里的当天日志文件,比如 20260624.log。第二步:一个偶然发现的“刷新大法”
有一次我实在是被搞烦了,关掉MT4出去抽了根烟,回来重新打开,再点导出的时候居然好了。后来我专门试了几次,发现重启终端真的能刷新历史缓冲区。但有个注意事项——如果你账户里还有持仓单,这时候重启不会丢数据,因为历史记录是保存在服务器端的。但如果你急着导出刚平仓的单子,最好等个一两分钟让数据同步完再重启。
第三步:实在不行就上“核武器”
如果上面两步都救不了你,那只能去MT4数据目录里的
history文件夹,把里面以服务器名命名的文件夹拷出来。里面的.hst和.fxt文件存的是完整的K线和交易数据,只不过格式是专有的,普通软件打不开。网上有一些第三方工具可以解析这些文件,比如Tick Data Suite,但这是最后的选择,一般人用不到这一步。参考来源: MetaQuotes MQL4官方文档. "历史数据访问." docs.mql4.com。
本文首发于FXEAR.com,原创内容,未经授权禁止转载。