MT4交易报告导出 - MT4多账户同开两个经纪商操作全解_编写程序接收DDE数据实现自定义功能

先把界面那点破事理顺了
说到防误操作第一步其实不是什么高深技术,就是把你的图表窗口和交易窗口的布局调成自己习惯的样子,很多人打开MT4默认是一堆窗口叠在一起,下单面板在左下角,市场报价在右边,你要是经常切来切去鼠标在屏幕上飞快的划,那点错也就是分分钟的事,我个人的习惯是把市场报价窗口固定到最左侧,然后下面的交易栏放到底部,这样你眼睛扫过去大概知道鼠标在哪个位置,就不容易在不该点的区域乱晃了,这个习惯刚开始可能觉得不顺手,但坚持个把月你会发现手滑概率小了不少,真的。
另外有个我自己的土办法就是给图表上挂的那些指标和模板分组,你想想如果你看一个EURUSD的图,然后旁边挂着五六个指标窗口,每个窗口右上角都有那个交叉按钮,有时候你想关掉一个指标结果鼠标稍微偏一点就点到了图表的交易按钮,这种事听起来挺傻但实际操作中真的太容易发生了,所以我把常用的模板就留三四个必要指标,其他乱七八糟的全删了,然后下单面板我用快捷键调出来而不是每次都去点那个新订单的图标,这样至少减少了一半以上的误触发概率。
还有一个特别容易忽略的就是MT4顶部的那些工具栏按钮,什么新建图表、打开历史数据、保存模板之类的,如果你是用笔记本的触摸板或者那种很小巧的无线鼠标,指针移动精度又不高,真的很容易在拖动图表的时候碰到这些按钮弹出乱七八糟的窗口,我建议是把工具栏里的图标精简到最少,只留几个你每天都用的,其他的右键点掉用快捷键替代,这个操作也是一劳永逸的事,你花个十几分钟设置好以后就能平平安安用上很长一阵子,我自己就是设置完以后基本再没出现过那种弹错窗口的情况。
手数计算函数的具体编写步骤
写这个函数其实有固定的套路,我自己用的版本经过多次优化,现在稳定运行了两年多。
第一步是获取账户余额,用AccountBalance()函数就能拿到。然后设定风险百分比,这个值我一般建议放在外部输入参数里,方便不同账户和不同策略调整。接着要获取订单的止损价格和当前价格,通过MarketInfo拿到的点值信息来计算止损距离。
第二步是计算风险金额和止损距离的比值。风险金额等于账户余额乘以风险百分比,止损距离等于开仓价减去止损价的绝对值除以点值。注意这里的点值要区分是三位数报价还是五位数报价,现在大多数经纪商都是五位数报价,所以点值计算要用MarketInfo返回的Point值乘以十。我见过很多新手在这里出错,算出来的手数差十倍。
第三步是处理最小手数和最大手数限制。MT4平台对单笔订单有最小手数要求,通常是零点零一手,有些平台可能是零点零五手。
计算出来的手数如果小于最小手数,就直接用最小手数,如果大于最大手数,就限制在最大手数。另外还要考虑账户剩余保证金是否足够,如果不够就适当降低手数或者放弃开仓。这个步骤能避免很多账户被爆仓的悲剧。
常见限制类型及应对方法
交易限制里最常见的一种是“仅平仓模式”,这种状态下账户只能平仓不能开新仓。通常出现在持仓比例过高,或者经纪商在重大新闻发布前临时调整规则时。在MT4里查看这种限制,需要观察导航栏账户名旁边是否出现了一个小锁图标,或者终端窗口的交易标签页顶部是否有红色警示文字。
另一种常见限制是最大交易手数。有些账户规定单笔订单不能超过5手,或者所有持仓加起来不能超过20手。这种限制在“市场报价”窗口的规格里都能看到具体的数值。如果你尝试下单时被提示“无效手数”,多半就是触碰了这个上限。遇到这种情况,要么拆分成多笔小单,要么联系经纪商申请提高限额。
止损止盈的最小距离限制也很让人头疼。外汇和黄金品种通常都要求止损距离至少达到一定点数,比如黄金可能是200点,欧美货币对可能是50点。查看方法同样是在品种规格里,找到“止损距离”和“挂单距离”两个参数。如果你设置的止损距离小于这个数值,系统会直接拒绝提交订单,这时候只需要调整止损距离就能顺利下单了。
编写程序接收DDE数据实现自定义功能
如果你会编程,那DDE能玩出的花样就更多了。C#、VB.NET、Python这些语言都有对应的库可以直接调用Windows的DDE接口。拿C#来说,可以用NDde这个开源库,几行代码就能建立起一个DDE客户端,订阅MT4推送过来的行情数据。收到的数据是字符串格式,你需要自己解析成浮点数来处理。
我写过一个简单的示例程序,用C#接收MT4的EURUSD报价,然后计算均线指标,当价格突破均线时自动弹出提醒。整个过程不到两百行代码,运行起来非常稳定。如果你用Python的话,可以试试pydde这个库,虽然功能没有C#版本那么全,但基本的订阅和接收数据还是没问题的。
编程接收DDE数据时有个重要的注意事项,DDE回调函数必须尽快处理完收到的数据,不能在里面做耗时太长的操作,否则可能会阻塞数据接收,导致行情更新延迟。正确做法是把收到的数据先放到队列里,然后由另一个线程异步处理。这个坑我当初踩过,连续跑几个小时程序就卡死了,最后用队列解决了问题。
另外要提醒大家的是,DDE协议毕竟是老技术了,微软官方虽然还在支持,但并没有加入任何安全机制。如果你的电脑连在公共网络上,理论上其他程序也能通过DDE读取到你MT4的行情数据。好在行情数据本身不是什么敏感信息,如果你实在担心,可以配合防火墙规则限制DDE的访问范围,或者只在完全信任的网络环境下使用。