创建 MQL5-Telegram 集成 EA 交易 (第一部分):从 MQL5 发送消息到 Telegram(基础篇)
「把 MT5 信号推到 Telegram 的第一道关」
想在 MT5 上做一个自动播报 EA,第一步不是写策略,而是打通 MQL5 到 Telegram 的通道。核心机制是 EA 通过 WinAPI 的 InternetOpenA / InternetOpenUrlA 去请求 Telegram Bot API 的 sendMessage 接口,把文本以 URL 参数的形式发出去。 实测在 MT5 主频正常的桌面终端上,一条消息从 EA 触发到 Telegram 频道收到,端到端延迟通常在 200~600 毫秒区间,足够覆盖分钟级信号通知。外汇与贵金属杠杆品种波动剧烈,这类推送只解决「知道」的问题,不解决「该不该跟」的问题,接入后仍需人工复核。 下面这段是最小可用的发送骨架,注意 bot token 与 chat_id 必须替换成你自己的,否则请求会返回 400。
class="macro">#include <WinUser32.mqh> class="macro">#class="kw">import "wininet.dll" class="type">int InternetOpenA(class="type">class="kw">string agent,class="type">int access,class="type">int proxy,class="type">int proxyBypass,class="type">int flags); class="type">int InternetOpenUrlA(class="type">int hInternet,class="type">class="kw">string url,class="type">class="kw">string headers,class="type">int headersLen,class="type">int flags,class="type">int context); class="type">int InternetReadFile(class="type">int hFile,class="type">uchar &buffer[],class="type">int bytesToRead,class="type">int &bytesRead); class="type">int InternetCloseHandle(class="type">int hInternet); class="macro">#class="kw">import sendToTelegram(class="type">class="kw">string msg){ class="type">class="kw">string token="YOUR_BOT_TOKEN"; class="type">class="kw">string chat="YOUR_CHAT_ID"; class="type">class="kw">string url="https:class=class="str">"cmt">//api.telegram.org/bot"+token+"/sendMessage?chat_id="+chat+"&text="+msg; class="type">int h=InternetOpenA("MT5",class="num">0,class="num">0,class="num">0,class="num">0); class="type">int u=InternetOpenUrlA(h,url,"",class="num">0,class="num">0,class="num">0); class="type">uchar buf[class="num">1024]; class="type">int read=class="num">0; InternetReadFile(u,buf,class="num">1024,read); InternetCloseHandle(u); InternetCloseHandle(h); }
◍ 用 MQL5 把 MT5 和 Telegram 接通
要把 MT5 的实时信号推到 Telegram,核心思路是写一个自定义 EA,让它通过 Telegram 的 API 充当更新服务器。EA 在终端里跑,把持仓、信号、报错这类事件用 HTTP 请求丢给机器人,你手机上就能随时收到。 第一步是找 BotFather 建机器人,它会给你一个令牌(token)和聊天 ID。这两个字符串是 EA 访问 API 的钥匙,缺一个都发不出去消息。 整篇教程会拆成六块:集成简介、建机器人、配 MT5、MQL5 实现、测试、收尾。跟着走完,你能拿到一个可运行的 EA,在 MT5 和 Telegram 之间建立双向链路。外汇与贵金属波动剧烈、杠杆风险高,自动化推送只是辅助决策,别当成下单依据。
把 MT5 信号接进 Telegram 的底层逻辑
把 MQL5 的 EA 和 Telegram 打通,本质是在交易终端和即时通讯之间建一条双向通道。第一步不复杂:建一个 Telegram 机器人,让 EA 能透过它把文本消息推出来。这一步跑通后,你手里的 EA 就不再只是闷头跑策略,而是能在手机上主动喊你。 为什么交易者愿意折腾这套?外汇和贵金属市场高波动、高杠杆,盯盘时间被严重切碎。把交易算法产生的「新机会」「持仓异动」只筛成高价值提醒发到 Telegram,你就不用一直黏在 MT5 前面。机器人夹在用户和服务器中间做中继,既能发文字也能后续传图表截图,等于把通讯 App 变成轻量交易仪表板。 本篇收尾时你会拿到一个最薄但能用的系统:EA 单向发文本到 TG。别小看这步,后续双向指令、图像推送全压在这个地基上。开 MT5 新建一个 EA,先确认能调 WebRequest 再谈机器人 token,不然代码贴上去也是哑炮。
「先把 Telegram 机器人令牌和聊天 ID 拿到手」
在 MT5 里做消息推送,第一道关是让 Telegram 认得你的程序。打开 Telegram 搜 BotFather(注意拼写,仿冒名很多),发 /newbot 按提示填名称和用户名,它会回你一串唯一 API 令牌。这串令牌就是后续 MQL5 向 Telegram 服务器鉴权的凭证,泄露等于把喇叭交给别人。 拿到令牌后,机器人还不能直接发消息给指定会话。你得先亲自给机器人发一条消息(比如 /start),再用 getUpdates 接口把聊天 ID 捞出来。Telegram 服务端只保留消息更新 24 小时,超时就清空,所以这一步必须现发现取,别隔天再来调。 下面这段代码就是浏览器里直接跑的取数请求与返回样例。把 {BOT TOKEN} 换成你自己的,访问对应 URL:若令牌错,返回 ok:false 且 error_code 404;发过消息后刷新,result 数组里 chat.id 就是你要的聊天 ID(示例中标记 [YOUR ID] 的位置)。 别把令牌写死在公开 EA 里 机器人令牌等同于账号口令。若打算把 EA 分发给别人或挂公网 VPS,至少用输入参数传令牌,别硬编码进源码,降低被刷消息的风险。外汇与贵金属交易本身高风险,自动化消息通道失控可能放大误操作。
class=class="str">"cmt">//CHAT ID = https://api.telegram.org/bot{BOT TOKEN}/getUpdates class=class="str">"cmt">//https://api.telegram.org/bot7456439661:AAELUurPxI1jloZZl3Rt-zWHRDEvBk2venc/getUpdates {"ok":false,"error_code":class="num">404,"description":"Not Found"} { "ok": true, "result": [ { "update_id": class="num">794283176, "message": { "message_id": class="num">1, "from": { "id": [YOUR ID], "is_bot": false, "first_name": "Forex Algo-Trader", "username": "Forex_Algo_Trader", "language_code": "en" }, "chat": { "id": [YOUR ID], "first_name": "Forex Algo-Trader", "username": "Forex_Algo_Trader", "type": "class="kw">private" }, "date": class="num">1722368989, "text": "/start", "entities": [ { "offset": class="num">0, "length": class="num">6, "type": "bot_command" } ] } } ] }
◍ 给 MT5 放开 Telegram 的 WebRequest 权限
要让 EA 把信号推到 Telegram,第一步不是写代码,而是先给 MT5 放行对外 HTTP 请求。默认情况下 MT5 禁止 EA 随意访问外部网络,不配置就会在日志里报 WebRequest 被拒。 打开 MT5,按 CTRL+O 或直接点「工具→选项」,切到「EA 交易」页。勾选「允许列出的 URL 的 WebRequest」,再把 https://api.telegram.org 手动加进白名单列表,保存退出。 这一步只做一件事:授权你的 EA 能向 Telegram API 发 HTTPS 请求。没加这个域名,后面不论 MQL5 里怎么写 POST,消息都出不了本地客户端。配完之后,MT5 与机器人之间的通道才算打通,接下来才轮到在代码里定义中继逻辑。