原生推特(Twitter)客户端:第二部·进阶篇
「用 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。外汇跟单机器人接图通知前,建议先在模拟账户跑通这套上传,贵金属行情截图推送同样适用,但接口限频和高风险环境都要自己压测。
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,也可接一个现成的解析库来处理返回体。外汇与贵金属行情波动剧烈,自动化发图仅作记录与分享,不构成任何交易信号。
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 库用。
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 构造逻辑。 外汇和贵金属行情波动剧烈、杠杆风险极高,用信号推送辅助盯盘可以,但任何自动发出的内容都不能替代你自己的交易决策。 类未完工也意味着接口可能变,别把现有函数当稳定契约,改完自己压一遍边界请求最踏实。