把 MQL5 图表导出为 HTML 网页
一、为什么把图表搬进浏览器
现代浏览器普及、免费、渲染可靠,是显示多媒体信息的成熟工具。让 MetaTrader 专注与经纪商交易、收集处理信息,把图形展示交给更擅长的浏览器,是“各做最擅长的事”的原则。
二、数据导出流程
MQL5 脚本负责收集数据并写出 HTML/JS 文本,浏览器负责渲染与交互。整个过程不依赖 MT5 内置的图形限制。
三、生成自包含 HTML
用 FileOpen 写文件,依次写入文档头、引入 Highcharts/jQuery、数据点与初始化脚本。注意字符串拼接长度限制与字符编码一致。
void OnStart(void)
{
int fh = FileOpen("chart.html", FILE_WRITE|FILE_ANSI);
FileWrite(fh, "<!doctype html><html><head>");
FileWrite(fh, "<script src='highcharts.js'></script></head><body>");
FileWrite(fh, "<div id='container'></div><script>");
FileWrite(fh, "Highcharts.chart('container',{series:[{data:[");
for(int i=0;i<count;i++) FileWrite(fh, DoubleToString(arr[i],5)+",");
FileWrite(fh, "]}]});</script></body></html>");
FileClose(fh);
}
四、数据格式与交互
五、跨浏览器兼容
现代浏览器都支持标准 HTML5/JS,理论上渲染一致。注意 Highcharts 的授权(非商用免费),商用需购买许可或换开源库。
六、常见坑
七、用 MQL5 生成 HTML/JS 图表
把图表导出 HTML,本质是 MQL5 把数据(时间序列、指标线、成交标记)序列化成一个自带 JavaScript 绘图(如 Canvas 或图表库)的网页文件,双击即可在浏览器离线查看,不依赖终端。
优势是「可分享、可归档」:把某个策略在某段行情的表现导出发给同事或自己留存,比截图信息量大得多,还能交互缩放。
八、数据导出格式
常用做法是把 OHLC 和时间序列写成 JSON 或 CSV,嵌进 HTML 模板,前端用一段 JS 读它画图。注意数值精度和时间戳格式(UTC 还是本地),否则浏览器里时间轴错位。
string html = "<html><body><script>"; html += "const data = " + JsonOf(series) + ";"; html += "drawChart(data);</script></body></html>"; FileWrite(htmlPath, html);
九、离线查看与分享
生成的 HTML 是自包含的,发给别人双击就能看,不用装 MT5。适合做定期绩效报告、向客户展示、或自己跨设备回看。注意若含敏感账户信息要脱敏再分享。
进阶可加交互:鼠标悬停显示某根 K 的明细、点击跳转到对应成交,把静态图变成迷你复盘工具。
十、性能与体积优化
导出大段历史会生成很大的 HTML,浏览器打开慢。优化:只导需要的区间、对序列做适当降采样、压缩 JSON、用轻量绘图库。几万根 K 线也能流畅打开。
另一个技巧是用增量导出:只追加最新一段,而非每次全量重生成,适合做「每日绩效日报」自动化。
十一、HTML 图表的合规与安全
导出含账户信息的图表前务必脱敏:隐藏账户号、余额、专属标识,只留策略与行情。既保护隐私,也避免把可识别信息发给不该看的人。分享绩效用脱敏版是基本功。
技术上加个「导出开关」控制是否含敏感字段,默认脱敏,需要明细时再开。一分钟的开关,能省掉无数隐私泄露的隐患,也是专业服务的底线。
导出前把要展示的区间与指标固定好,避免每次重新计算整段历史拖慢网页加载。生成的 HTML 建议用内联样式,方便直接贴进日报或邮件,不依赖外部 CSS 也能正常显示。若图表要嵌进网站,记得把中文字体声明写进样式,否则跨平台打开会掉成方框字。
如果要批量导出多个图表,建议并行生成后合并,而非串行等每个都算完,能省下大量等待。并在文件名里带上品种与起止时间,方便日后检索复盘,也避免和别人导出的文件重名覆盖。
导出的图表若用于对外分享,记得把账号、品种代码等敏感信息脱敏,避免无意泄露实盘账户细节。
十二、小结
把图表导出 HTML,是把 MT5 从“全能但受限”的工具,扩展为“可协作、可分享”的分析流水线的一小步。