MT4自带的
Alert()函数,说实话有点鸡肋。弹个小窗,切到别的屏幕就看不见了。PlaySound()好一点,但你要是戴着耳机看剧、在厨房做饭、或者干脆人不在电脑前,声音警报跟没响一样。我几年前跑一个GBPJPY的夜间头皮就吃过这个亏。早上起来看盘,发现EA在凌晨两点多出了一笔完美进场,但我在睡觉,电脑音量也关着,完美错过。后来我就开始研究有没有更靠谱的提醒方式。找了一圈发现解法其实比想象中简单,而且网上把这事讲透的人不多。这篇就把我用的两种方法——自定义声音和USB物理闪灯——完整的配置过程写出来。
PlaySound() 函数——官方给的标准方案
MQL4文档里对
PlaySound()的说明很直接:调用这个函数,传入一个.wav文件名就行。文件放在MT4安装目录下的Sounds文件夹里。官方教程里甚至给了完整的例子,在开仓、平仓、出错、甚至保证金不足的时候分别播放不同的声音文件。但文档里没写的是什么?是音频格式的坑。我第一次试的时候,找了个自己的
ding.wav丢进去,死活播不出来。后来查了半天才发现,MT4对WAV格式挑剔得很,必须是PCM编码、8位或16位单声道、采样率不高于22050Hz。用Audacity转了一下格式之后立竿见影。这个细节官方文档半句没提。多事件多声音的配置
PlaySound()的真正威力在于给不同事件配不同的声音。官方教程里的例子就展示了这套思路:Ok.wavClose_order.wavError.wavOops.wav自己用下来这个配置非常实用——不用盯屏幕,光靠听声音就知道发生了什么事。我做多用一个清脆的高频音,做空用一个低沉的低频音,报错用刺耳的蜂鸣,一目了然。
标准声音警报的致命缺陷
上面这套方案好是好,但有个硬伤:你人必须在电脑前,而且电脑必须开着声音。VPS上跑EA的朋友应该深有体会——警报在服务器上触发了,但根本没人听见。
USB物理闪灯——一个有点野但非常管用的方案
几年前在一个交易论坛上看到有人讨论这个东西。原理很简单:买一个USB接口的指示灯,电脑通过DLL控制它,EA在触发信号的时候让灯亮起来或者闪起来。
具体实施步骤:
MQL4/Libraries目录下听起来有点折腾,但说实话,用过之后就回不去了。我当时测试的那个设备支持七种颜色。我把做多设成绿色、做空设成红色、挂单触发设成黄色、严重错误用白色闪烁。灯就放在显示器顶上,余光一扫就知道EA现在是什么状态,连椅子都不用转过去。
邮件和推送通知作为补充
MQL4文档里还提到了
SendMail()和SendNotification(),这两个可以用来发邮件和MT4手机端推送通知。我现在是三层配合着用:论坛上有人还提到可以用微信接收信号,理论上各种通知渠道都可以打通。
关于DLL的安全顾虑
用第三方DLL,安全肯定是绕不开的问题。MetaQuotes官方帮助中心的态度也很明确——只从可信来源启用DLL导入。我自己的做法是:只用公开时间久、用户多的厂家的DLL,而且先在隔离环境里跑一遍测试。我用的那个USB灯的DLL公开了四年多,没看到过安全方面的负面反馈。
如果你实在不放心,还有一个更稳妥的变通方案:让EA把信号写到一个文本文件里或者通过命名管道通信,然后外面单独跑一个程序去读取这个信号再来控制USB灯。这样DLL完全不用进MT4,安全性高得多。
代码示例
下面是一个简化版的集成方式:
``
mql4
// 导入USB灯的DLL
#import "usbalert.dll"
int SetLightColor(int color);
int FlashLight(int times);
#import
// 在交易信号逻辑里调用
void OnTick()
{
if(BuySignal())
{
PlaySound("buy_chime.wav");
SetLightColor(2); // 绿色
SendNotification("EURUSD 出现做多信号");
}
if(SellSignal())
{
PlaySound("sell_chime.wav");
SetLightColor(1); // 红色
SendNotification("EURUSD 出现做空信号");
}
}
``为什么这比你想的更有用
很多零售交易者的MT4要么跑在台式机上,要么跑在VPS上。VPS上的EA触发信号了你没法直接感知,但你可以用一个本地的树莓派之类的设备去拉VPS上的信号,然后控制USB灯。我见过有交易者就是这么搞的——EA在云端跑,家里的桌面上放一个灯,信号一来就闪。
说白了,MT4自带的警报系统是最基础的那一层。你自己在上面能搭出什么花样,决定了你到底是能抓住信号,还是眼睁睁看着机会溜走。
参考来源:MQL4 Book – Combined Use of Programs(book.mql4.com),MQL4官方文档 – PlaySound()(docs.mql4.com),韬客论坛USB警报灯讨论(talkfx.com)。
本文首发于FXEAR.com,原创内容,未经授权禁止转载。