发送推送通知

我们知道,终端允许你将来自 MetaQuotes 服务、终端本身以及 MQL 程序的推送通知发送到 iOSAndroid 操作系统的移动设备。该技术使用 MetaQuotes ID,这是一个用户的唯一标识符(见注释)。MetaQuotes ID 是在用户设备上安装移动版终端时分配的,之后必须在终端设置的“通知”选项卡中指定该 ID(可以指定多个标识符,用逗号分隔)。此后,MQL 程序便可使用发送推送通知的功能。

事实上,MetaQuotes ID 并非标识用户,而是标识移动终端的特定安装实例;一个用户可以有多个安装实例。默认情况下,该 ID 与 mql5.com 社区的注册无关,尽管可以在网站上指定这种绑定。不要将社区中的用户注册与 MetaQuotes ID 混淆。要使用通知功能,终端用户无需登录社区。

bool SendNotification(const string text)

SendNotification 函数将带有指定文本的推送通知发送到所有具有终端设置中 MetaQuotes ID 的移动终端。消息长度不超过 255 个字符。

如果通知成功从终端发送,函数返回 true,如果发生错误则返回 false_LastError 中可能的错误代码包括:

  • 4515 – ERR_NOTIFICATION_SEND_FAILED – 通信问题
  • 4516 – ERR_NOTIFICATION_WRONG_PARAMETER – 无效参数,例如空字符串
  • 4517 – ERR_NOTIFICATION_WRONG_SETTINGS – MetaQuotes ID 配置不正确或缺失
  • 4518 – ERR_NOTIFICATION_TOO_FREQUENT – 函数调用过于频繁

如果与服务器存在连接,消息会立即发送。如果用户的设备在线,消息应该会到达收件人,但在一般情况下无法保证送达。程序不会收到关于消息送达情况的回执通知。服务器上不保存用于延迟发送的推送消息历史记录。

该函数的使用频率有限制:每秒不超过 2 次调用,每分钟不超过 10 次。

SendNotification 函数不在策略测试程序中执行。

本书包含一个简单的脚本 NetNotification.mq5,设置正确时,它会发送一个测试通知。

void OnStart()
{
   const string message = MQLInfoString(MQL_PROGRAM_NAME)
      + " runs on " + AccountInfoString(ACCOUNT_SERVER)
      + " " + (string)AccountInfoInteger(ACCOUNT_LOGIN);
   Print("Sending notification: " + message);
   PRTF(SendNotification(NULL));    // INVALID_PARAMETER(4003)
   PRTF(SendNotification(message)); // NOTIFICATION_WRONG_SETTINGS(4517) or 0 (success)
}