首页 / 交易学院 / 小布知识库 / 用标准库类与 Google Chart API 做交易信息板
用标准库类与 Google Chart API 做交易信息板
📊

用标准库类与 Google Chart API 做交易信息板

用 CObject 体系与 Google Chart API,把交易统计做成常驻信息板

MQL5 编程 难度 · 进阶 2026-07-15 11 分钟阅读
#MQL5#标准库#OOP#GoogleChart#信息板

本文演示如何把交易统计、余额曲线、品种占比饼图塞进图表子窗口的一个指标里,不阻塞主图。核心是用 MQL5 标准库(一套基于 CObject 的类)做面向对象封装,再用外部图表服务渲染可视化。

一、为什么用标准库做信息板

标准库位于 MQL5/Include,只提供类、不提供函数,需要一点 OOP 基础。它的价值是批量管理指标缓冲区、图表对象、数组,避免手写大量 ObjectCreate/Set,适合做复杂界面。

二、标准库的类体系

三、Board 类的设计

保护数据:子窗口号、成交数组、余额数组、编辑单元、图表对象、饼图数据。私有数据:约 30 个交易特征变量(净利润、盈利因子、回撤等)。公共方法:构造、析构、Refresh、CreateInterface。

✦ 构造与析构的纪律
构造里用 Chart.Attach() 关联当前图并 new 动态对象;析构里用 CheckPointer + delete 释放,再调用 Shutdown/Detach/Delete 清理。谁 new 谁 delete。

四、交易特征指标怎么算

五、Google Chart API 集成

用 wininet.dll 下载 PNG 再转 BMP 显示;余额图 cht=lc,饼图 cht=p3;尺寸限制 1000x300。需要终端允许 DLL 导入,并附带三个自写 DLL(字体度量、PNG 转 BMP、wininet 封装)。

⚠ 部署前提
文章依赖外部 DLL 与终端的 DLL 导入权限,部署前确认环境允许;现代 MQL5 也可用内置 CGraphic 类在终端内直接画图,未必非要绕道外部 API。

六、指标生命周期与事件

七、Canvas 绘制坐标系与重绘时机

标准库信息板基于 CCanvas:在内存里画好文字、矩形、线,再贴到图表。坐标是相对画布的像素,原点在左上。重绘要挂在 OnChartEvent(如鼠标移动、新 tick)或定时器里,避免每 tick 全量重画拖慢终端。

实务要点:把「计算数值」和「画图」分开,数值变化时置脏标志,只在脏时重绘;文字用 CCanvas 的 Text 方法指定字体大小与对齐。画布尺寸要适配图表窗口,Resize 时重建缓冲区,否则高分屏会糊。

八、交易特征指标的计算坑

信息板常展示「胜率、盈亏比、平均持仓时长」等特征。计算时最大的坑是除零(总笔数为零时算胜率)和未初始化(首笔成交前字段是零或 EMPTY_VALUE)。任何比率都要先判分母,没成交就显示「—」而非百分之零。

✦ 先判分母
胜率等于盈利笔数除以总笔数。总笔数为零时直接显示占位符,别让 EA 因除以零抛异常或画出误导性的零。

九、Google Chart API 的离线替代

原文用 Google Chart API 把图表发到网页,但那需要联网且把数据传出终端。若你只想在终端内看,完全可用 CCanvas 自己画柱状或折线,零依赖、不上云。需要对外分享时,再把 CCanvas 导出成图片文件即可。

选型原则:纯本地监控用 CCanvas;要跨设备看盘用 Web 加 Chart API(注意数据出境合规)。信息板本质是「把交易统计可视化」,技术路线看你的部署场景,不必盲从原文的联网方案。

十、小结

✦ 小结
标准库信息板把交易统计变成看得见的面板:CCanvas 负责画、类体系负责管数据、特征指标负责算。记住先判分母、按需重绘、本地优先,你就能做出既好看又不拖慢终端的监控面板。

常见问题

MQL5/Include 下的一组类(仅类、非函数),用 OOP 思路批量管理指标缓冲区、图表对象、数组,避免手写大量 ObjectCreate/Set,适合复杂界面。
指标常驻图表、随报价刷新、不占主图,还能缩放关闭;脚本是一次性的,没法持续刷新。
净利润、盈利因子、最大回撤、连续盈亏、各品种成交占比——这几个最能一眼判断策略质量。
不一定。现代 MQL5 有 CGraphic 类可直接在终端内画图,不必绕道外部 API 与 DLL,部署更省心。
内存会被回收,但日志报 “X undeleted objects left”;养成 new/delete 配对、用 CheckPointer 判断后再删的习惯。