MT4挂单类型 - MT4手机端图表配置保存技巧与实战应用_MT4手机端图表配置保存技巧与实战应用

TimeHour到底是个啥玩意儿
说实话我一开始连TimeHour返回的是服务器时间还是本地时间都没搞清楚,就傻乎乎地在代码里写了个if(TimeHour(TimeCurrent())>=8 && TimeHour(TimeCurrent())<20)想着这样就能让EA只在早上八点到晚上八点干活,结果挂上去一看,我这边是白天它倒是老实,等到了晚上六点多的时候它就开始抽风,有时候该开单不开单该平仓不平仓的,后来才明白MT4里那个TimeCurrent用的全是服务器时间,我的服务器设在英国那指标时间跟咱这边差了七八个小时,你想想我按北京时间写过滤条件那不是全乱套了嘛,(1)我还得先搞清楚当前图表的时间是什么基准,这里头就牵扯到夏令时冬令时那种乱七八糟的时区换算,(2)然后你还得考虑跨天的问题,比如你想过滤到凌晨两点到五点不交易,要是写成小时数从2到4的情况一到午夜或者接近0点的时候就彻底失灵了,(3)再就是OrderSend之前这个过滤条件放到哪一步才合适,放在开仓条件最前面跟放在最底下的结果有时候都能不一样,(4)还有一个就是快收盘那几分钟要怎么处理,有人想过滤掉最后十分钟有人想过滤掉头五分钟,这个TimeHour压根儿不够用得加上TimeMinute来回配合,(5)最后你还要注意那种周五收盘然后周一开盘之间的各种跳空窗口,要是不过滤掉那一小段你单子挂在那里特别容易被那种大跳空的行情莫名其妙的扫掉。
所以说到底这个TimeHour只是个返回当前小时数字的函数,它本身不复杂,复杂的是你拿它配合什么时间来用,我就犯过一个大错,直接用TimeHour(TimeCurrent()),其实准确的说法是应该写TimeHour(TimeLocal())还是TimeHour(TimeCurrent())得看你想要的是本地时间还是经纪商的服务器时间,当时我还贴代码上去问人家,人家跟我说你用TimeCurrent就是服务器时间啊我真想把自己拍论坛上,后来我干脆直接在图表上画了一条竖线来对比当前时间和我想开单的那个时间点,搞了老半天才明白MT4的测试策略里那个可视化模式你选成控制整段时间的时候还可以把那个“每tick基于实时价格”的模拟方式打开,这样会看到跟真实跑更接近的情况,但我绕了这么大一圈无非就是想告诉你,这时间过滤你看着是几行if判断的问题,实际上牵扯到你的交易时段和经纪商数据库那边一大串时区转换的事,大家不要觉得那么不长心就完事了。
说到这我又想起我当时还想着把那个TimeHour用在一个叫做交易俱乐部那种群里面下载过来的EA上,那EA本来是没有时间过滤这功能的,我硬给它加上去了,结果它原本一天只开一次单的那个逻辑跟我的过滤条件打架了,俩条件都得满足才开导致它一天啥也没干,那叫一个郁闷,最后你还是得弄清楚这个EA本身是怎么控制时间的,有的EA自带一个StartHour变量有的EA自带个模数那种值,你自己往里填数字就行,有的EA用了循环判断可以设置多个交易时段,你得小心别把这些不同玩法给混着用,我就碰上了那个写法顺序的问题,我把最基础的bar的波动幅度条件放在了前面,导致后来的时间判断根本没有被真正执行到,你自己写得时候把时间过滤放在第一条件上应该会更顺一些。
交易品种被禁用或市场处于休市阶段
经常有人碰到这样的怪事:上一秒还能正常挂单,下一秒所有交易按钮都变成灰色了。这通常不是因为你的账户出了问题,而是当前交易品种被临时禁止交易了。有些经纪商会在重大数据发布前或者节假日前后,对某些货币对或贵金属品种实施交易限制,目的是为了控制风险,这种情况在原油和指数产品上尤其明显。
另外,市场休市这个原因特别容易被人忽视。周末的时候,几乎所有外汇品种都停止交易,这时候你下单肯定会被拒绝。但很多人不知道的是,即使在周一早上,某些品种的开盘时间也有差异,比如部分指数产品和加密货币,它们的交易时段和外汇并不完全重合。如果你在下单时收到“Market closed”的提示,那就先去查查这个品种的具体交易时间表,别在闭市的时候白费力气。
还有一个小细节,就是你的交易终端上可能把某个品种设置成了“隐藏”状态,这个不会直接导致下单失败,但会让人误以为品种消失了。在“市场报价”窗口里右键点击任意品种,选择“显示全部”,就能看到所有可交易的产品了。
如果你确实想交易某个品种,却发现它始终处于不可选状态,那八成就是被经纪商临时限制了,这时候换一个相关性高的品种交易,或者等限制解除后再操作。
处理中文乱码和特殊字符显示异常
字体显示问题里,最让人头疼的其实是中文乱码。你可能会遇到一种情况:MT4的界面英文显示完全正常,但只要是中文的地方,比如K线图上的注释、指标参数里的中文描述、或者邮件模板里的中文内容,全都变成了一堆问号或者小方块。这个问题的根源,在于MT4对不同语言编码的支持策略。老版本的MT4默认使用Windows-1252编码,这种编码根本不包含中文字符,所以一旦遇到中文,系统就不知道该怎么渲染,只能显示成乱码。
解决办法有两种,第一种是给MT4安装简体中文语言包。你可以在MT4的官方网站下载对应的语言包文件,下载下来之后把文件复制到MT4安装目录下的"Languages"文件夹里,然后重启MT4,在主界面右下角的语言选择下拉菜单里切换到中文。安装语言包之后,MT4内部的核心功能文字都会变成中文,但要注意,你自己在图表上添加的注释文字,以及一些第三方指标里写死的文字,还是可能会乱码,因为这些是存储在你的模板文件和指标脚本里的,它们的编码格式没有变。
第二种办法是修改Windows的区域设置。控制面板里找到"区域"或"区域和语言"设置,在"管理"选项卡里点击"更改系统区域设置",把当前系统区域改成"中文(简体,中国)",并且勾选"Beta: 使用Unicode UTF-8提供全球语言支持"这个选项。改完之后系统会提示你重启电脑,重启之后再打开MT4,你会发现之前乱码的地方大部分都能正常显示了。这个方法比较彻底,因为它从系统层面统一了编码格式,但缺点是会影响其他老软件的显示,如果你电脑上有其他依赖旧编码的软件,改完可能会出问题,所以建议谨慎操作。
用自定义图表把交易结果可视化对比
数字看多了难免头晕,这时候把交易结果做成图表就直观多了。你可以把导出的订单数据按周或者按月汇总,然后插入柱状图展示每周或者每月的净利润变化趋势。这样做的好处是能一眼看出你的盈利是否稳定,如果柱子忽高忽低,波动极大,说明你的交易结果随机性很强,策略的稳定性有待提高。如果柱子整体呈现稳步上升的态势,那至少说明系统在朝好的方向发展。
另外还可以做一个盈亏分布直方图,把所有订单的盈亏金额分成几个区间,比如亏损超过500美元的、亏损在100到500之间的、盈利在100到500的、盈利超过500的,然后统计每个区间的订单数量。
通过这个分布图,你能直观地看到自己的盈亏单是否成比例分布。如果绝大多数订单都是小额亏损,只有极少数是大幅盈利,那说明你用的是典型的截断亏损让利润奔跑策略,只要盈利单的幅度足够大,这种分布就是健康的。
还有一个很实用的小技巧,就是把交易结果跟行情走势图叠加在一起看。在MT4里打开你主要交易的货币对图表,然后对照着订单的开平仓时间,复盘一下当时的价格形态。这样做能让你直观地看到自己是不是总在趋势末端入场,或者是不是总在突破假信号时追单。图表化的分析方式比单纯盯数字更容易发现问题,毕竟很多交易错误是视觉性的,看到图的那一刻你就会恍然大悟。