Summary: 记录一次VPS重启后MT4历史数据丢失的完整排查过程,包含手动替换.hst文件重建索引的实用技巧,以及卡巴斯基杀毒软件误删文件的惨痛教训。




这事儿发生在周二晚上。我那台VPS上挂的EA跑了半年了,一直稳得跟老狗一样。那天手贱,看见系统有更新提示,就顺手点了个“重启并更新”。结果这一重启,直接给我整出心脏病来了。

重启完我照常登录MT4,EA倒是加载了,日志里也没报错。可我打算跑个回测看看最近一周的参数表现,打开策略测试器,图表上干干净净——一根K线都没有。我去历史中心里翻,2024年的数据都在,但最近一个月的数据,全没了。就感觉这个VPS像是被人格式化了C盘一样。

我当时第一个念头是,是不是Broker换服务器地址了?我去检查了品种名称,没变。又在“市场报价”里右键“显示全部”,还是什么都没有。接着我去“工具”——“选项”——“图表”里,把“显示离线”的开关打开又关掉,折腾了半天,一根毛都没出来。

后来我静下心来想了想,这个问题其实不是数据没了,是MT4读不到那个数据。我隐约记得在MQL4官方文档(docs.mql4.com)里看过关于历史数据存储路径的说明。MT4的每一个品种的ticks数据,是压缩在\history\[服务器名称]\[品种名].hst这个文件里的。

我赶紧远程连上VPS,摸到那个目录里一看,EURUSD.hst文件安安稳稳地躺在那里,修改日期还是今天!这说明什么?说明数据根本没丢,硬盘上有。但平台就是加载不出来。

问题出在索引文件上。强制重启之后,MT4内部针对这个品种的索引指针可能错乱了或者丢了。就好比你书架上有一本书,但你的图书管理系统里把这本书的编号给删了,你明明知道书在架子上,但系统就是查不到。

MetaQuotes官方帮助中心(help.metaquotes.net)给的标准解决方案是让你用“历史中心”里的“导出”和“导入”功能,把数据导出来再倒回去。但这个操作慢得要死,数据量大的时候得等半个小时。

我当时急用,就自己琢磨了个野路子,直接手动替换文件来强制重建索引。这招我后来给好几个朋友用过,百试百灵。

具体的操作步骤是这样的,每一步都有讲究:
  • <strong>先把MT4终端完全关掉</strong>。这一步绝对不能省。你要是开着MT4去动这个文件,它会把文件锁住,你改不了。

  • <strong>找到历史文件夹</strong>。我的VPS路径是C:\ProgramData\MetaQuotes\Terminal\[实例ID]\history\[服务器名]\。这里有个坑,每个MT4账号的实例ID不一样,别找错了。

  • <strong>把出问题那个品种的.hst文件</strong>(比如EURUSD.hst)<strong>复制一份</strong>,放到桌面或者随便一个临时文件夹里备份。

  • <strong>把这个文件夹里原来的EURUSD.hst删掉</strong>。

  • <strong>重新打开MT4终端</strong>。这时候终端会发现自己没有这个品种的数据了,它会自动去连接Broker的服务器,在线重新下载一份历史数据。右下角会有一个“历史更新”的进度条,等它跑完。

  • <strong>再次关掉MT4</strong>。

  • <strong>把你刚才备份的那个原始的.hst文件,粘贴回这个文件夹里</strong>,覆盖掉刚才新生成的那个文件。


  • 这一套操作下来,MT4的索引已经被新文件重建了,但你覆盖回去的数据是你原来的那个包含了完整tick数据的旧文件。MT4读取的时候,索引是对的,数据也是对的,完美解决问题。

    我知道这听起来有点像玄学,但底层逻辑就是“用新索引挂载旧数据”,比官方那个导出导入快多了。

    再补充一个差点让我翻车的细节。我的VPS装的是卡巴斯基杀毒软件。重启之后,卡巴斯基在扫描的时候,把MT4的.hst历史文件当成潜在威胁给隔离了。我当时查了半天没查出来,后来去卡巴斯基的隔离区一看,里面躺了好几个.hst文件。从那以后,我就在卡巴斯基的排除列表里,把C:\ProgramData\MetaQuotes\整个文件夹加了白名单。这个教训太深刻了,你要是也用卡巴斯基,一定要记得这一步。

    整个过程下来,满打满算十五分钟就搞定了。如果老老实实按官方帮助中心的方法去重新下载数据,以我那台VPS的破网速,没个两三个小时下不来。

    参考来源:
  • MQL4官方文档 – “使用历史中心”章节(docs.mql4.com)


  • ---

    本文首发于FXEAR.com,原创内容,未经授权禁止转载