目录

MT4正版下载 - 盯了一晚上MT4的止损老不涨上去我干脆把EA里每次tick刷新价的办法掰碎了唠_先说那段让人头疼的无限循环

盯了一晚上MT4的止损老不涨上去我干脆把EA里每次tick刷新价的办法掰碎了唠_先说那段让人头疼的无限循环
今天凌晨三点多我还在那盯着MT4的图表发呆,咖啡凉透了都没顾上喝一口,手里那个单子的止损价格死活不跟着移动,明明行情都走了快一百点了,止损还杵在原地跟个木桩子似的,我当时心里那个烦啊,琢磨着这追踪止损到底该怎么在MT4里实现,是得手动去点那个修改单子还是得靠EA里的代码自己动,守着这个破软件老半天,感觉整个人的耐心都快磨没了,但又不甘心就这么算了,毕竟那个价格再不动的话,好不容易攒的浮盈眨眼就得还给市场。

先说那段让人头疼的无限循环

其实你要想让止损自动跟着走,核心就是得在EA里面搞一个每次报价都触发的玩意儿,MT4里有个叫OnTick的函数,只要行情跳动它就跑一遍,你所有的跟踪逻辑都得塞进这个函数里头,我一开始写代码的时候老忘了这一茬,光想着怎么算价格,结果那个函数里空荡荡的,止损自然就纹丝不动,后来我就学乖了,凡是跟止损有关的判断,全都丢进OnTick里,让它每一次报价都检查一遍当前的价格跟止损该放的位置,比一比,发现该挪了就先改单,改完再记下新的止损价,下次报价再比一次,就这么一圈一圈地死反复,跟个大傻子似的在那绕圈。

还有一个特别容易踩的坑就是你没算清楚那个止赢的价格是怎么设置的,好多人都盯着那个止损怎么追,觉得止赢只要设个固定点就完事了,其实你追踪止损的时候可能得顺带把那个止赢价格也稍微添上一点,因为你把止损往上挪了,止赢按道理也得跟着往上调一点才合理,除非你是用一种啥特别朴素的方法就只单独追止损这个参数,反过来也是,你搞移动止损时最好把卖出价跟买入价给分清了,尤其是在有手续费和点差的地方,你要是只顾着那个止损档位而忘了那个点差,改出来的价格都快钻到现价前头去了,那不是闹笑话嘛。

另外我还得提醒一句,跟你同一种想法的人其实不少,我见过有的帖子说一旦用了OnTick就会把EA跑得特别卡,这就有点以偏概全了,你觉得卡是因为你在里面干了一些多余的事,比如每跳一下就去查询某一次的K线数据,或者每跳一下就把订单记录打开扫一遍,那肯定快不起来啊,你只需把跟踪部分做得很轻,只在价格变动时算加减法,偶尔再调用一下那个OrderModify,其实占用不了多少资源的,当然了如果你用的是一个特别粗糙的EA平台,像那种网上随便下的什么永久免费的破解模板,那就另当别论了,那玩意儿里面塞了成百上千行的没用的计算,你不管怎么改那个追踪止损都会卡的,这个得心里有点数。

使用内置快捷键快速刷新列表

最直接也最快捷的刷新方式,其实就是利用MT4自带的快捷键功能。选中“终端”窗口(也就是显示订单列表的那个底部面板),然后按下键盘上的F5键,这个操作会强制MT4重新请求服务器端的数据,相当于给订单列表做了一次“硬刷新”。

不过这里有个细节需要注意,F5键在MT4里的默认功能是“刷新所有图表”,它同时也会刷新订单列表。
如果你只想刷新订单列表而不想影响图表,可以右键点击终端窗口的空白处,在弹出的菜单里选择“刷新”选项,这样只会对订单列表进行局部更新,不会动用图表的数据流。

说实话,快捷键这种方式虽然简单,但在某些特殊情况下并不总是奏效。比如当你的网络连接已经断开,或者服务器正在维护的时候,按再多次F5也没用。这时候就需要检查一下右下角的连接状态图标,确保自己的网络连接是正常的,然后再尝试刷新操作。

关闭图表后脚本数据与状态的去向

有些朋友可能会想,那我图表不小心关掉了,脚本是不是就白跑了?其实也不是完全白跑。MT4的脚本在执行过程中,如果已经把数据写入到了全局变量(GlobalVariable)里,或者通过文件写入函数(FileWrite)把结果保存到了本地文件,那就算图表关闭了,这些数据也还是保留着的。所以,一个设计良好的脚本,应该养成边运行边保存中间结果的习惯,而不是等到最后统一输出。

我自己就吃过这个亏。以前写过一个统计每日平均波幅的脚本,运行到一半的时候手滑把图表关了,结果脚本立刻终止,前面的计算结果全丢了,只能重新跑一遍。后来我学乖了,在脚本里每处理完一根K线就写一行日志到CSV文件里。这样就算中途图表被关闭,我至少能拿到已经处理完的那部分数据,不至于全盘皆输。

另外,脚本被终止时,MT4会触发一个deinit事件,也就是脚本的卸载函数。在这个函数里,你可以做一些清理工作,比如释放数组占用、关闭文件句柄等。但需要注意的是,如果图表是直接被用户关闭的,deinit事件里的执行环境可能已经不完全了,有些操作可能会失败。所以别指望在deinit里做太复杂的逻辑,简单清理就好。

还有一种情况是,脚本还在运行,但你把图表周期从5分钟切换到了15分钟。这时候脚本会不会被强制终止?答案是会的。因为周期切换意味着图表的数据流完全重建了,脚本赖以生存的K线序列被替换掉了,MT4会认为脚本已经失效,从而自动停止它。这一点和切换品种是一样的,只要图表的核心参数(品种或周期)变了,脚本就会死掉。

平台服务器维护与本地缓存清理

交易商的服务器也会定期维护,通常选在周末或者交易量最低的时段。如果你在非交易时段登录发现连接失败,先不要慌,去交易商官网看看有没有维护公告。我记得有一回,某知名平台在周日凌晨升级服务器,结果一大群人在论坛里骂骂咧咧说连不上,其实人家提前一周就发了通知,只是很多人不看。

如果服务器维护时间已经过了,但还是连不上,那可以试试清理MT4的本地缓存。MT4在运行过程中会产生不少临时文件,时间久了这些文件可能会损坏,导致连接异常。具体操作是:关闭MT4,找到安装目录下的“config”文件夹,把里面的“history”和“cache”子文件夹清空,然后重新启动MT4。这个方法我试过好几次,对解决连接失败确实有效。

还有一种比较极端的做法是重置MT4的配置文件。把安装目录下的“origin.txt”文件删除,然后重新打开MT4,软件会自动生成一个新的配置文件。不过这里要提醒一句,重置配置之后,你之前设置的图表模板、指标参数这些个性化设置可能会丢失,所以操作之前最好先备份一下“config”文件夹。

说实话,MT4的连接机制其实不算复杂,就是客户端和服务器之间保持心跳连接。但正因为简单,所以任何一环出问题都会直接反映成连接失败。我自己摸索出来的经验就是:先网络,再服务器,后账户,最后才考虑客户端本身的问题。按照这个顺序排查,绝大多数情况都能在十分钟内解决,省得干着急。

文章目录