Mac运行MT4 - MT4电脑版历史数据缺失原因与修复办法_最常见的全局变量冲突场景剖析

先说那个有效期到底是个啥玩意儿
MT4里挂单它有一个叫有效期的设定,不知道你有没有留意过那个选项,默认情况下有些交易商给你设的是当天有效,有些给你设的是永久有效,这里头区别可就大了去了,比如你周五晚上挂了一个单,想着周一开盘肯定能触发,结果到了周一你的单子可能早就过期了,因为那个有效期它是按交易商的服务器时间算的,不是按你本地时间算的,而且周五挂的单如果只设了当天有效,那相当于周末那两天你的单子就成了个摆设了,这个问题其实特别常见,尤其是那些习惯提前挂单等行情的朋友,十个人里估计有四五个人都吃过这个亏。
然后呢你要是发现挂单没成交,第一件事就是去打开订单窗口看看你那个挂单是不是还在那里,如果它已经从列表里消失了,那多半就是有效期的问题了,你要是右键点一下历史订单,能看到那个单子旁边标注的是什么原因取消的,比如说expired或者已过期,那就能确定是有效期了,但如果你发现单子还在列表里,但是价格明明已经穿过了你设的那个触发价,那就是另外一个问题了,这个问题就比较麻烦了,因为涉及到市场流动性的层面,不是说你改一下设置就能解决的。
再说说那个有效期设置,你要么就选永久有效,这样它就一直挂着等触发,要么你就得自己算好时间,别让单子半夜三更的悄悄过期了你自己还不知道,很多时候我们光顾着看价格去了,压根没留意那个单子挂在那多久了,等回头一看发现单子没了还以为是被触发了,结果去持仓里找又找不到,那个心情真的是跟坐过山车一样,所以我建议大家每次挂单之前都先看一眼那个有效期设置,养成习惯了以后就没那么多幺蛾子了。
最常见的全局变量冲突场景剖析
咱们拿实际例子说话。假设你同时跑两个EA,一个是趋势跟踪策略,一个是网格加仓策略。趋势跟踪EA在每个tick到来时,会把当前的趋势方向写到全局变量“TrendDir”里,1代表多头,-1代表空头。网格EA呢,它也想参考一下趋势方向来决定是否加仓,于是它也去读“TrendDir”这个变量。表面上看,这没什么问题,对吧?但关键在于,如果你还挂了第三个EA,它也用了“TrendDir”这个名字,但写入的逻辑完全不一样,那网格EA读到的数据就可能是错的。
还有一种更隐蔽的情况,就是EA在启动的时候会初始化一些全局变量。比如某个EA在init函数里写了一句GlobalVariableSet("MyEA_Status", 0),意思是把状态重置为0。如果这个EA被加载到多个图表上,每个图表都会执行一次初始化,那后加载的那个图表就会把前一个图表设置的状态覆盖掉。这就会导致前一个图表上的EA逻辑判断出错,甚至直接停止交易。
还有一种情况是EA崩溃或者被手动移除后,全局变量并没有被自动删除。MT4的全局变量是持久化的,除非你手动删除,或者用GlobalVariableDel函数删除,否则它会一直存在。这意味着,你之前跑过的某个EA留下的垃圾全局变量,可能会干扰到后来新加载的EA,尤其是当新EA碰巧用了相同的变量名时。
从我个人的经验来看,很多第三方EA或者网上免费的EA,开发者并没有充分考虑到多人共用账户的情况,所以全局变量名起得特别随意,什么“aaa”、“temp”、“flag”之类的比比皆是。一旦你把两个这样的EA放一起,那基本就是定时炸弹。
说说解决办法,不过我也不确定你适用哪个
解决的办法网上也搜到几种,但说实话我自己试下来有好有坏,我就挑我想起的来说,(1)最粗暴的就是把不用的指标全删掉,只留最核心的那一两个,别嫌弃,这可是最见效的,(2)再就是去指标引用的周期上做做手脚,不是用M1就非得实时循环的,你改成按收盘价模式只在新K线产生后刷新,工作量小非常多,(3)还有一招,把高级优化等级开上,有几个计算量大的指标可以勾选那个“仅使用最后一次”,就不用每根K线都重跑,(4)或者干脆把图表切换到M5以上周期,数据的刷新频率没那么高,对性能的消耗自然就小,(5)另外,不要把所有指标全堆在主图里,弄个单独的副图去放那些震荡指标,窗口分化后每块独立刷新,算是心理安慰也有点效果,(6)最后一个就是去下那种不用OnCalculate循环风格的替代指标,有些社区的人写的干净版,数据和原版几乎一样,但占用就低多了,反正我自己后来是把加了双缓冲优化的那个版本换上去才舒服了,其余那些花哨的指标统统扔进了回收站。
我写完这些又去翻了下任务管理器,现在占用的CPU已经掉到百分之十几了,跟之前那个99%的疯狂状态天差地别,但我也不敢说这就是标准答案,毕竟每个人MT4里装的插件数量、模板样式,还有电脑配置都不一样,你可能照着我做的每一招弄完还是有点卡,那时候你也别心急,先把软件更新成最新版本,又或者是把旧平台数据备份好,然后重建一个新的配置文件,我就是这么折腾过来的,说真的你光看论坛里那些“怎么优化都不行”的帖子就够你喝一壶的,说到底还是要自己慢慢试。
反正我现在看着那个小角落里的CPU占用数字,总算能安安心心盯着那条不怎么动的均线了,你们要是也遇着这种事,也别嫌麻烦,从“少挂指标”这个最土的方法开始试,不一定非得改什么代码,更别学我以前那样跟电脑较劲,虽然现在总算是流畅了一些,但也不知道下一步还会不会突然卡住,反正我是这么干的,你看着办吧。
通过修改配置文件实现精准字体控制
如果你试了上面所有方法,还是觉得某些地方的字体不够完美,那还有最后一招,就是直接修改MT4的配置文件。MT4在首次运行时会生成一个配置文件,存放在你的用户目录下,具体路径是:C盘用户文件夹里的AppData\Roaming\MetaQuotes\Terminal,里面有一个按数字命名的文件夹,进去之后找到"config"文件夹,里面的"terminal.
ini"文件就是MT4的全局配置文件。用记事本打开这个文件,你会看到很多配置项,其中有一项是"FontFace"和"FontSize",这两个参数直接控制着MT4默认使用的字体名称和大小。
你可以把"FontFace"的值改成"Microsoft YaHei"(微软雅黑),把"FontSize"的值改成12或者14,保存文件后重启MT4,所有界面字体都会按照你设定的参数来渲染。这个方法的好处是精准,不受软件内设置选项的限制,比如你可以把特定窗口的字体大小设置成10,而其他窗口保持12。不过修改配置文件有个风险,就是如果你改错了语法,比如少了一个引号,或者值写错了,MT4可能会无法正常启动,或者直接恢复默认配置。所以修改之前最好先备份一下这个文件。
另外还有一个小技巧,如果你用的是多显示器环境,比如一台4K主屏加一台1080P副屏,MT4在不同显示器上的字体清晰度可能完全不同。这是因为Windows对不同分辨率的显示器采用了不同的缩放策略。你可以在Windows的显示设置里,为每个显示器单独设置缩放比例,让主屏和副屏的缩放保持一致,这样MT4窗口在两个屏幕之间来回拖动时,字体就不会一会儿模糊一会儿清楚了。说实话这个细节很多人不注意,但实际操作中影响很大。
字体问题解决之后,整个MT4的界面看起来会舒服很多,盯盘时间长了眼睛也没那么累。我自己的经历是,把字体从默认的8号调高到12号之后,看K线上的价格标注和指标数值明显轻松多了,而且配合微软雅黑字体,中文注释也不再发虚。如果你也遇到了类似的问题,不妨按照上面的步骤一步步来,从系统缩放、软件内置设置、语言编码、配置文件这四个层面逐一排查,总有一个方法能解决你的问题。实际操作中可能要多试几次才能找到最适合自己显示环境的组合,但一旦调好了,那体验的提升是立竿见影的。