找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 31|回复: 0

EA报警推到手机上:WebRequest的三个必踩坑

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-27 23:27:00 | 显示全部楼层 |阅读模式
最后由 paullhou 于 2026-8-16 08:13 编辑

EA 报警推到手机上:三个必踩的坑

策略挂在 VPS 上,人不可能一直盯着。让 EA 用 WebRequest 把消息发到钉钉或企业微信的群机器人,手机就能秒收。

功能不复杂,但下面三个坑几乎人人踩一遍,说清楚能省你一整天。

坑一:重载选错,JSON 永远发不出去

WebRequest 有两个版本,一个九个参数、一个七个参数。区别不在参数多少,而在七参数那版才有 headers。

机器人只收 JSON,你必须能设置 Content-Type: application/json;九参数那版第三、四个参数被固定成了 cookie 和 referer,没地方塞。

用错了还不报错:服务端要么回 400,要么直接丢掉,而你在 MT 里看着像"发出去了"。认准七参数那个就行。

坑二:白名单填不对

位置:工具 → 选项 → EA交易 → 允许 WebRequest 访问以下 URL。

填域名前缀就行,别填带参数的完整地址;子域名不通配:填了 dingtalk.com,oapi.dingtalk.com 照样不通;带端口的必须写端口,自建服务最容易漏这个;策略测试器里 WebRequest 用不了,这是设计如此,不是你代码的问题。

最后一条最坑人:在测试器里怎么调都没反应,其实挂到图表上就好了。

坑三:不做冷却,你会被自己的 EA 刷屏

价格在关键位反复穿越是常态。"突破就报警"的逻辑,震荡时十分钟能报二十次,手机响到你想卸载。更麻烦的是机器人有频控,刷多了被限流,真正重要的那条反而发不出去。

两条规则就够:

同一品种、同一方向,N 分钟内只发一次(我用 15 分钟);方向变了立刻放行,不受冷却限制。

别只用一个全局时间戳——那样做多的信号会把做空的信号一起吃掉,得按"品种 + 方向"分开记。

还有个更隐蔽的:时间戳要等发送成功了再记。如果检查冷却时顺手就写上了,那么一次网络抖动造成的失败,同样会启动 15 分钟冷却,真信号就被这次失败吞掉了。


// 检查在前,记录在后 —— 发成功了才算数
if(TimeCurrent() - lastSend < InpCooldown * 60) return;
if(SendAlert(msg)) lastSend = TimeCurrent();复制代码发送函数
input string InpWebhook = "";   // robot webhook url

bool SendAlert(string text)
{
   uchar post[], result[];      // uchar, not char
   string headers;
   string body = "{"msgtype":"text","text":{"content":"" + text + ""}}";

   // StringToCharArray 会把结尾的 0 也算进去,所以要减 1
   int len = StringToCharArray(body, post, 0, WHOLE_ARRAY, CP_UTF8) - 1;
   if(len < 0) len = 0;
   ArrayResize(post, len);

   ResetLastError();
   int code = WebRequest("OST", InpWebhook, "Content-Type: application/json\r\n",
                         5000, post, result, headers);
   if(code == -1) { Print("failed, err=", GetLastError()); return false; }

   // 返回体一定要打印,而且按 UTF8 解码,否则中文报错信息是乱码
   Print("http=", code, " ", CharArrayToString(result, 0, WHOLE_ARRAY, CP_UTF8));
   return (code == 200);
}复制代码消息正文如果带引号、反斜杠或换行,记得先转义再拼进 JSON,否则整条消息会被判为格式非法。

出错了看这张表

现象原因返回 -1,错误码 4060(MT4)/ 4014(MT5)URL 不在白名单,或者你从**指标**里调用了服务端 400 / 收不到重载用错了,没法设 Content-Type测试器里毫无反应策略测试器不支持,正常现象HTTP 200 但手机没收到看返回体,多半是被限流,或机器人的关键词/加签没配对中文变问号或乱码转换和解码都要显式写 `CP_UTF8`最后

重载和白名单这两个坑,查文档能解决;冷却这个坑,只有被自己的 EA 刷过屏才会长记性。

做新策略时顺手把冷却加上,几行代码的事,换来的是观察期能真的观察下去。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-10 03:01 , Processed in 0.632726 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表