为 MetaTrader 5 创建自定义新闻递送·进阶篇
📘

为 MetaTrader 5 创建自定义新闻递送·进阶篇

第 2/3 篇

「从新闻源拉数据落盘的请求骨架」

这段 MT5 脚本片段负责把外部新闻 API 的返回结果真正写进本地文件。前面先用 switch 拼出 articles 类的请求地址,再走 WebRequest 发 GET。

MQL5 / C++
case articles:
  _url=BASE_URL+ATCLE+parameters+API_KEY;
  class="kw">break;
}
class=class="str">"cmt">//---
 ResetLastError();
 res=WebRequest("GET",_url,cookie,NULL,timeout,post,class="num">0,result,headers);
 if(res==-class="num">1)
  {
   Alert("无法下载文件");
   class="kw">return;
  }
 else Print("下载成功");
 class="type">class="kw">string pStream=CharArrayToString(result,class="num">0,-class="num">1,CP_UTF8);
 class="type">int hFile=FileOpen(sFilename,FILE_BIN|FILE_WRITE);
 if(hFile==INVALID_HANDLE)
  {
   Print("无效文件句柄");
   class="kw">return;
  }
 FileWriteString(hFile,pStream);
 FileClose(hFile);
 class="kw">return;
逐行看:case articles 把 BASE_URL、ATCLE、parameters、API_KEY 拼成完整 URL 后 break;ResetLastError 清掉旧错误码,WebRequest 以 GET 方式请求,超时与 cookie 由外部变量控。res 返回 -1 代表网络层失败,弹 Alert 并退出;否则 Print 下载成功。 CharArrayToString 把字节数组按 UTF8 转成字符串,FileOpen 以二进制写模式开本地文件,句柄无效就打印并 return。FileWriteString 写盘、FileClose 收尾——这套流程跑通后,你在 MT5 终端文件目录里就能看到新闻 JSON。 下面那串 JSON 是 API 返回的 sources 列表样例,含 bbc-news、bloomberg 等 8 个源,字段有 id、name、category、language、country。做价格行为分析时,把 bloomberg(business/en/us)和 bbc-news(general/en/gb)这类源按需筛出来,才可能在外盘黄金、欧美波动前抓到线索。外汇与贵金属杠杆高,新闻驱动行情反转概率大,仅作信号参考。

MQL5 / C++
case articles:
  _url=BASE_URL+ATCLE+parameters+API_KEY;
  class="kw">break;
}
class=class="str">"cmt">//---
 ResetLastError();
 res=WebRequest("GET",_url,cookie,NULL,timeout,post,class="num">0,result,headers);
 if(res==-class="num">1)
  {
   Alert("无法下载文件");
   class="kw">return;
  }
 else Print("下载成功");
 class="type">class="kw">string pStream=CharArrayToString(result,class="num">0,-class="num">1,CP_UTF8);
 class="type">int hFile=FileOpen(sFilename,FILE_BIN|FILE_WRITE);
 if(hFile==INVALID_HANDLE)
  {
   Print("无效文件句柄");
   class="kw">return;
  }
 FileWriteString(hFile,pStream);
 FileClose(hFile);
 class="kw">return;

◍ 新闻源清单里的英文财经类入口

在 MT5 内置的新闻订阅接口里,源数据以 JSON 结构逐条列出,每条带 id、name、category、language、country 与 sortBysAvailable 字段。上面这段节选里,business-insider 与 business-insider-uk 同属 business 类、均标注 2007 年上线,区别只在 country 字段为 us 与 gb,说明同一媒体按地区拆成两个独立源。 cnbc 的 sortBysAvailable 只有 ["top"],而 business-insider 支持 ["top","latest"];如果你写 EA 去拉新闻,调用 latest 排序时得先判断该源是否允许,否则可能返回空数组。 breitbart-news 归在 politics、buzzfeed 在 entertainment 且自称月浏览 70 亿次——这些和外汇直接弱相关,但重大政治头条往往驱动黄金与美系货币对波动,订阅时建议按 category 过滤而非全量接收。外汇与贵金属属高风险品种,新闻触发跳空概率不低,实盘前先用策略测试器回放历史事件反应。

新闻源列表里的财经与泛类条目

在 MT5 接新闻聚合接口时,源列表以 JSON 结构逐条声明。下面这段覆盖了从 Financial Times 到 Metro 的 14 个源,其中 business 类有 Financial Times、Fortune、Handelsblatt 共 3 个,general 类有 Google News、Independent、Metro 等 4 个,其余分布在 sport / technology / gaming / entertainment。 注意每个对象的 sortBysAvailable 字段差异很大:Handelsblatt 只开放 latest,而 Financial Times 和 Google News 仅支持 top,Fox Sports、Hacker News 等才同时给 top 与 latest。写 EA 拉取排序时若写死参数,遇到只给 latest 的源会直接返回空。 国家与语言维度也得看实值:de 语种源(Focus、Gruenderszene、Handelsblatt)返回正文多为德语,做中文盘面情绪分析前要接翻译层,否则关键词匹配会漏掉欧洲盘资金面消息。外汇与贵金属受跨语种宏观消息驱动明显,这类源的高风险在于时差与语义错配可能诱导误判。

MQL5 / C++
{"id":"financial-times","name":"Financial Times","description":"The latest UK and international business, finance, economic and political news, comment and analysis from the Financial Times on FT.com.","url":"http:class=class="str">"cmt">//www.ft.com/home/uk","category":"business","language":"en","country":"gb","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]},
{"id":"focus","name":"Focus","description":"Minutenaktuelle Nachrichten und Service-Informationen von Deutschlands modernem Nachrichtenmagazin.","url":"http:class=class="str">"cmt">//www.focus.de","category":"general","language":"de","country":"de","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top"]},
{"id":"football-italia","name":"Football Italia","description":"Italian football news, analysis, fixtures and results for the latest from Serie A, Serie B and the Azzurri.","url":"http:class=class="str">"cmt">//www.football-italia.net","category":"sport","language":"en","country":"it","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]},
{"id":"fortune","name":"Fortune","description":"Fortune class="num">500 Daily and Breaking Business News","url":"http:class=class="str">"cmt">//fortune.com","category":"business","language":"en","country":"us","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]},
{"id":"four-four-two","name":"FourFourTwo","description":"The latest football news, in-depth features, tactical and statistical analysis from FourFourTwo, the UK&class="macro">#x27;s favourite football monthly.","url":"http:class=class="str">"cmt">//www.fourfourtwo.com/news","category":"sport","language":"en","country":"gb","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]},
{"id":"fox-sports","name":"Fox Sports","description":"Find live scores, player and team news, videos, rumors, stats, standings, schedules and fantasy games on FOX Sports.","url":"http:class=class="str">"cmt">//www.foxsports.com","category":"sport","language":"en","country":"us","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]},
{"id":"google-news","name":"Google News","description":"Comprehensive, up-to-date news coverage, aggregated from sources all over the world by Google News.","url":"https:class=class="str">"cmt">//news.google.com","category":"general","language":"en","country":"us","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top"]},
{"id":"gruenderszene","name":"Gruenderszene","description":"Online-Magazin für Startups und die digitale Wirtschaft. News und Hintergründe zu Investment, VC und Gründungen.","url":"http:class=class="str">"cmt">//www.gruenderszene.de","category":"technology","language":"de","country":"de","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]},
{"id":"hacker-news","name":"Hacker News","description":"Hacker News is a social news website focusing on computer science and entrepreneurship. It is run by Paul Graham&class="macro">#x27;s investment fund and startup incubator, Y Combinator. In general, content that can be submitted is defined as \"anything that gratifies one&class="macro">#x27;s intellectual curiosity\".","url":"https:class=class="str">"cmt">//news.ycombinator.com","category":"technology","language":"en","country":"us","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]},
{"id":"handelsblatt","name":"Handelsblatt","description":"Auf Handelsblatt lesen sie Nachrichten über Unternehmen, Finanzen, Politik und Technik. Verwalten Sie Ihre Finanzanlagen mit Hilfe unserer Börsenkurse.","url":"http:class=class="str">"cmt">//www.handelsblatt.com","category":"business","language":"de","country":"de","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["latest"]},
{"id":"ign","name":"IGN","description":"IGN is your site for Xbox One, PS4, PC, Wii-U, Xbox class="num">360, PS3, Wii, 3DS, PS Vita and iPhone games with expert reviews, news, previews, trailers, cheat codes, wiki guides and walkthroughs.","url":"http:class=class="str">"cmt">//www.ign.com","category":"gaming","language":"en","country":"us","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]},
{"id":"independent","name":"Independent","description":"National morning quality(tabloid) includes free online access to news and supplements. Insight by Robert Fisk and various other columnists.","url":"http:class=class="str">"cmt">//www.independent.co.uk","category":"general","language":"en","country":"gb","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top"]},
{"id":"mashable","name":"Mashable","description":"Mashable is a global, multi-platform media and entertainment company.","url":"http:class=class="str">"cmt">//mashable.com","category":"entertainment","language":"en","country":"us","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]},
{"id":"metro","name":"Metro","description":"News, Sport, Showbiz, Celebrities from Metro - a free British newspaper.","url":"http:class=class="str">"cmt">//metro.co.uk","category":"general","language":"en","country":"gb","urlsToLogos":{"small":"","medium":"","large":""},"sortBysAvailable":["top","latest"]}

「新闻源清单里的英文与德语通道」

这段数据源描述里列了 15 个新闻源条目,覆盖 general、music、science-and-nature、sport、gaming、technology 多个类目,其中语言字段出现 en 与 de 两种:en 占 13 条,de 占 2 条(spiegel-online 与 t3n)。 对做贵金属和外汇的人来说,reuters 与 newsweek 的 sortBysAvailable 都带 latest,意味着可拉实时流;spiegel-online 和 t3n 仅支持 top,且国家码为 de,抓取时需单独处理德语编码。 在 MT5 里若接这套源做舆情预警,建议先按 language 字段分流,避免把德语描述误判为英文关键词触发信号。外汇与贵金属波动受新闻催化明显,此类接入仅作辅助参考,实际仓位仍面临高风险。

◍ 新闻源清单里的英文媒体结构

上面这组数据源记录以 JSON 格式逐条罗列,每条包含 id、name、description、url、category、language、country 以及 sortBysAvailable 等字段。比如 the-lad-bible 的 country 为 gb,category 为 entertainment,sortBysAvailable 支持 top 与 latest 两种排序。 从覆盖地区看,gb 出现 5 次(talksport、the-economist、the-guardian-uk、the-lad-bible、the-sport-bible、the-telegraph 中前二者加后四者去重计为 6 条但 country=gb 实际为 6 条),us 出现 5 次,au、in 各 1 次,说明英语系数据源以英美为主。 在 MT5 里若要用这些源做宏观事件扫描,可直接把 id 字段当作 API 请求参数。注意外汇与贵金属受英美新闻扰动明显,这类媒体源仅作信息面参考,实际波动方向需结合盘面价格行为判断,高风险品种切勿单凭新闻押注。

把新闻源列表接进行情预警的笨办法

上面这段结构其实是某个新闻聚合接口吐出的源清单与样本文章,里面能看到 The Wall Street Journal、Washington Post 这类英文源只开放 "top" 排序,而 Wired.de 同时给 "top" 和 "latest",德语源 Wirtschafts Woche 仅有 "latest"。做跨市场事件驱动时,这种差异会直接影响你抓数据的频率与覆盖。 把这类 JSON 直接塞进 MT5 做舆情开关不现实,但可以用 WebRequest 拉取后做关键字过滤。比如 2017-11-11 的 CNBC 样本中,Alibaba 的 Singles Day 中途销售额已破 180 亿美元,这类消费数据若与黄金亚盘波动叠加,可能带来短线流动性异常。 实盘里建议只订阅 business 类源,并用 MQL5 的 StringFind 做标题匹配,避免 general 类政治新闻制造噪音。外汇与贵金属杠杆高,新闻触发滑点可能远超预期,任何基于事件的入场都先在小账户验证。

常见问题

先建一个定时轮询的外部请求,把返回的 JSON 或 XML 落到本地文件,再用读取函数解析时间、标题、正文三字段即可。
优先选带 scheduled economic release 标签的英文财经入口,盘前半小时刷新一次就能覆盖主要数据发布。
可以,小布已内置多源新闻解析,打开对应品种页就能把关键词新闻直接推到行情预警里,省去手搓请求。
若只做美盘贵金属,德语通道可跳过;做 EUR 相关品种时,德语源常比英文源早几分钟出央行表态。
会,建议泛类只留一两个做突发兜底,垂直财经占八成权重,再按关键词过滤能压住噪音。