原生推特(Twitter)客户端:第二部·进阶篇
📘

原生推特(Twitter)客户端:第二部·进阶篇

第 2/2 篇

「用 MQL5 拼 multipart 上传块」

在 MT5 里向外部接口推图片,核心是先手工拼出 multipart/form-data 的分隔与字段头。下面这段逻辑把边界串、Content-Disposition 头和字段名 media 直接接成一段字符串,再转成 char 数组交给发送函数。 StringAdd 连续拼接时,注意 \r\n 换行不能省,否则服务端解析边界会失败。StringToCharArray 的偏移填 0、长度用 StringLen 取实际值,能避免数组尾留空字节。 调试阶段把 m_verbose 置 true,会把整个 post 体存成 filename_post.txt 并打印返回 resp,方便你直接开 MT5 终端看微信这类接口回的 media_id。外汇跟单机器人接图通知前,建议先在模拟账户跑通这套上传,贵金属行情截图推送同样适用,但接口限频和高风险环境都要自己压测。

MQL5 / C++
  class="type">class="kw">string part = "\r\n--";
  StringAdd(part, boundary);
  StringAdd(part, "\r\nContent-Disposition: form-data;"
                " name=\"media\"\r\n\r\n");
  StringToCharArray(part, data, class="num">0, StringLen(part));
  appendPhoto(filename, boundary, data);
  class="type">class="kw">string resp = SendRequest("POST", url, data, headers);;
  if(m_verbose)
    {
     SaveToFile(filename + "_post.txt", data);
     Print(resp);
    }
  class="kw">return (getTokenValue(resp, "media_id"));
  }

把多图表截图自动发上推特

想在 MT5 里把当前打开的图表自动截图并带图发推,核心是先抓取画面、再逐个上传拿 media_id、最后用逗号拼起来调发布接口。示例里最多圈定 4 个图表,文件名回写进 fnames 数组,消息体由 Screenshots() 顺手拼好。 上传阶段从数组末尾往前走:先存最后一张的 id,其余每张前补逗号再追加,避免首尾多余分隔符。这样得到的 medias 字符串直接喂给 tweet(msg, medias),推文就挂上了全部截图。 实战里有个坑:uploadPhoto 依赖 Twitter Upload-API 返回的 media_id,自己写个 getTokenValue() 解析即可;若不想手搓 JSON,也可接一个现成的解析库来处理返回体。外汇与贵金属行情波动剧烈,自动化发图仅作记录与分享,不构成任何交易信号。

MQL5 / C++
  CTwitter tw(consumer_key, consumer_secret,
                  access_token, access_secret, verbose);
  class=class="str">"cmt">// Gather information
  class="type">class="kw">string fnames[class="num">4];
  class="type">class="kw">string msg;
  Screenshots(fnames, msg);
  class=class="str">"cmt">// Upload screenshots
  class="type">int n = ArraySize(fnames);
  class="type">int i = n - class="num">1;
  class=class="str">"cmt">// create comma separated media_ids
  class="type">class="kw">string medias = tw.uploadPhoto(fnames[i]);
  for(i= n - class="num">2; i>=class="num">0; i--)
  {
      StringAdd(medias, ",");
      StringAdd(medias, tw.uploadPhoto(fnames[i]));
  }
  
  class=class="str">"cmt">// Send Tweet with photos&class="macro">#x27; ids
  class="type">class="kw">string resp = tw.tweet(msg, medias);
  Print(resp);

◍ 用 CTwitter 单文件发图推文

Twitter.mqh 把推特交互封装成一个独立类,不依赖其他 include 文件。想发带图推文,只引入这一个头文件就够了,对 EA 或脚本的体积控制比较友好。 实例化时传入 consumer_key、consumer_secret、access_token、access_secret,最后一个 verbose 参数可选,开 true 会在开发期把请求细节打到日志,方便排查授权失败。 公开函数里,verifyCredentials() 回传当前令牌对应的 Twitter ID,可用来确认鉴权是否生效;uploadPhoto() 先传图拿 media_id;tweet() 再带着 media_ids 发出去。注意 getTokenValue() 只是极简字符串截取,不是完整 JSON 解析,别拿去当通用 json 库用。

MQL5 / C++
  CTwitter tw(consumer_key, consumer_secret,
                 access_token, access_secret, verbose);

「用脚本把MT5图表甩到推特」

附件里的 MT5 脚本能一次性抓取最多 4 个图表截图,并自动拼出一条含品种名与 OHLCV 数值的推文。它本质是个起点模板,方便你后续改造成自己的信号播报或复盘机器人。 跑之前必须自己在代码里填好 Twitter 的 consumer key、access token 和对应密匙,否则 HTTP 请求会被直接拒。脚本默认把四个图表并成一张图发出去,你也可以改成单图或换任意本地图片(比如那张幸运猫)。 验证路径很直接:开 MT5 加载脚本→填密钥→选 1~4 个品种图表→运行,去账号看是否收到带 OHLCV 的推文。外汇与贵金属行情波动剧烈,对外自动发图前先确认不会泄露实盘仓位细节。

记住这一条就够了

这套原生 Twitter 类目前只是起点,Twitter.mqh 体积 19.77 KB、配套 TwitterDemo.mq5 仅 4.87 KB,说明核心封装还很轻量,后续还有大量 API 待补。 想验证就直接把两个文件拖进 MT5 的 MQL5/Include 与 Scripts 目录编译,跑通发图后再回头读类里的 HTTP 构造逻辑。 外汇和贵金属行情波动剧烈、杠杆风险极高,用信号推送辅助盯盘可以,但任何自动发出的内容都不能替代你自己的交易决策。 类未完工也意味着接口可能变,别把现有函数当稳定契约,改完自己压一遍边界请求最踏实。

常见问题

用单文件封装的推特客户端在脚本里调用截图接口,循环抓取各图表画面后直接以multipart方式上传发推,省去手动导出再上传。
边界字符串前后少了换行或Content-Disposition漏写name字段都会拒收,严格按规范拼装请求体即可通过。
小布可接管截图与发文流程,你设定好品种和频率,它自动把图表甩上推特,你只管看反馈。
截图用原始分辨率导出别压缩,上传走原图通道,推特端就不会再降质。
记住单文件发图推文结构最稳,别把鉴权和上传拆太散,集中管理token与请求最省事。