在您的 MQL 项目中使用 JSON 数据 API(基础篇)
📘

在您的 MQL 项目中使用 JSON 数据 API(基础篇)

第 1/3 篇

在 MQL 项目里直接吃 JSON 数据

MT5 终端从 build 2875 起内置了 WebRequest 能力,配合 CCurl 或原生接口可以把外部 JSON 数据拉进 EA。2025 年 1 月 28 日那篇社区帖在 24 小时内拿到 1434 次查看、21 条回复,说明用 JSON API 做策略外置数据源的需求很实在。 常见用法是把第三方报价、宏观日历或自有信号服务以 JSON 返回,EA 用 ParseJSON 解析后驱动下单逻辑。外汇与贵金属杠杆高,外部数据延迟或字段变更都可能触发误成交,接入前务必在策略测试器用历史 tick 回放验证。 最简验证路径:开 MT5 → 新建脚本 → 调用一次公开 JSON 接口打印字段,确认终端「选项-专家顾问-允许 WebRequest」已勾选对应域名。

「为什么要把外部数据接进 EA」

纯靠 MT5 自带报价和指标,策略容易陷入只看价格维度的盲区。通过 API 把外部系统的数据拉进 EA,能补上实时银行间报价、经济指标、新闻情绪这些非价格信号,让决策依据从单一走向多维。 外汇与贵金属属高杠杆品种,叠加外部数据并不降低风险,只是把判断素材扩宽,回测时仍需对样本外行情做压力测试。 在 EA 里挂接 API 后,可借助 NLP 做市场情绪打分,或把基本面异动作为过滤条件。这类集成把 MetaTrader 的平台能力向外延伸,使交易信号不再只由技术指标触发,而可能结合情报层的概率权重。

◍ Ziwox 数据接口能给你什么

Ziwox 是一套外汇数据分析系统,对外提供免费 API。注册后拿到密钥,就能拉取 JSON 或纯文本行情,覆盖主要和次要货币对。 除了常规价格与技术指标,它把基本面、情绪和 AI 推断混在同一接口里返回:基本货币偏差、AI 价格预测、散户持仓统计、COT 报告、支撑阻力位、风险开/关情绪、债券收益率与 VIX 都包含在内。 值得开 MT5 试一下的点是,它同时给了「人写」和「机器写」的两类信号——分析师团队出基本面结论,NLP 引擎扫新闻出情绪分,AI 再给价格倾向。外汇和贵金属波动剧烈、杠杆风险高,这类数据只能当多维参考,不能单独作为入场依据。 接法不复杂:生成 key 后直接 HTTP 请求,返回结构规整,适合拿来做自定义指标或 EA 的辅助输入。

把 API 想成两个程序之间的对话合同

API 全称 Application Programming Interface,本质是一套让两个软件组件按约定协议互通的机制。把它理解成服务合同更直观:一方发出请求,另一方返回响应,合同里写明了请求和响应的格式。 以天气场景为例,气象局后台数据库持有每日观测值,手机上的天气 App 作为客户端向它发请求,数据库作为服务器回传数据,App 再渲染成界面。这套结构在 MT5 外接信号源时完全同构:你的 EA 是客户端,远程分析服务是服务器。 在 MQL5 里做 HTTP 请求调用外部 API,常用 WebRequest。下面这段演示向某端点取 JSON 并落地到变量,跑通它就明白客户端/服务器分工不是抽象概念。 外汇与贵金属市场高波动,任何外接 API 都有延迟或断连风险,信号仅作概率参考,不构成方向保证。

MQL5 / C++
class="type">class="kw">string headers="Content-Type: application/json\r\n";
class="type">char post[],result[];
class="type">class="kw">string res;
class="type">int timeout=class="num">5000;
StringToCharArray("{\"symbol\":\"XAUUSD\"}",post,class="num">0,WHOLE_ARRAY);
class="type">int ret=WebRequest("POST","https:class=class="str">"cmt">//api.example.com/signal",headers,timeout,post,result,res);
class=class="str">"cmt">// 第1行: 定义请求头,声明发送的是 JSON
class=class="str">"cmt">// 第2行: post 存请求体字节,result 存响应字节
class=class="str">"cmt">// 第3行: res 接收响应文本
class=class="str">"cmt">// 第4行: 超时设为 class="num">5000 毫秒
class=class="str">"cmt">// 第5行: 把 JSON 字符串转成字节数组,内容是查 XAUUSD 信号
class=class="str">"cmt">// 第6行: 调用 WebRequest 发 POST,ret 为 HTTP 状态码,结果写入 result 和 res
class=class="str">"cmt">// 注: 需在 MT5 工具->选项->EA 交易 允许 WebRequest 加该域名

「API 回传数据长什么样」

对接行情或新闻接口时,回传格式直接决定你解析代码的写法。常见标准有 JSON、XML、TEXT、HTML、CSV,选哪个取决于对接方系统和你的解析成本。 JSON 是轻量键值结构,人类能直接读,MT5 里用 CJAVal 或手动切分都能吃进去。下面是一段真实风格的报价回传: { "id":5687, "source":"oanda", "symbol":"EURUSD", "price":"1.08562", "high":"1.09211", "low":"1.08154" } EURUSD 当时报 1.08562,日内高 1.09211、低 1.08154,三点拉开约 66 点,属于典型亚欧盘窄幅段。 XML 靠标签建层次,企业系统和老牌数据源更爱用。Forex Factory 新闻接口就吐 XML,例如德国贸易帐事件里 forecast 标 19.9B、previous 标 22.1B,低影响事件,做贵金属和欧元叉盘时这种数据往往只带来瞬时毛刺。外汇和贵金属杠杆高,这类新闻冲击常放大滑点,验证前先开模拟跑。 纯文本、HTML、CSV、protobuf 也都在用,CSV 适合批量历史导入,protobuf 偏高频低延迟。本系列后续调用的服务统一走 JSON,你本地用 MQL5 的 WebRequest 收完字符串按键值拆即可。

◍ 在 MT5 里搭起 JSON 调用链路

MQL5 原生不解析 JSON,想接外部模型或行情接口,第一步是找第三方库。社区和 GitHub 上能拿到现成的序列化与解析模块,比如常见的 JAson.mqh,下载后塞进 MetaTrader 的 Include 目录就能被全局引用。 多数公共 API 都有请求频次限制,别在 EA 每次 tick 都去拉远程。拿到 HTTP 响应后先写文件落地,后续逻辑读本地副本,既躲限流也降延迟。 引入方式分两种:库在 Include 总目录用尖括号,和 EA 同目录用双引号。下面这段就是实际工程里最常用写法,路径别写反。 解析完的字段按你的策略类型归类,再喂给下单或信号模块;外汇与贵金属波动剧烈、杠杆风险高,任何外部数据都只能当概率参考而非确定性指令。

MQL5 / C++
class=class="str">"cmt">//Use this type of file include if the file is in MQL include follder
class="macro">#include <JAson.mqh>
class=class="str">"cmt">// Use this type of file include If this file is next to your EA file/follder
class="macro">#include "JAson.mqh"

常见问题

在 MQL 项目里用 WebRequest 发 HTTP 请求拉取 JSON,再用内置或第三方解析函数转成结构体,EA 就能自动吃外部数据。
它能回传结构化情绪或仓位数据,EA 可据此调整过滤条件;接口返回的是键值对 JSON,按字段取数即可。
小布可以替你跑这套调用链路并做 AIGC 诊断,打开对应品种页就能看到接口数据的异常和解读。
通常是 { "field": value } 的嵌套文本;EA 里先存响应字符串,再按路径解析出具体字段做判断。
因为请求格式和返回字段必须两边约定一致,否则解析失败;先把接口文档当合同看,再写调用代码。