📊
用标准库类与 Google Chart API 做交易信息板
用 CObject 体系与 Google Chart API,把交易统计做成常驻信息板
#MQL5#标准库#OOP#GoogleChart#信息板
本文演示如何把交易统计、余额曲线、品种占比饼图塞进图表子窗口的一个指标里,不阻塞主图。核心是用 MQL5 标准库(一套基于 CObject 的类)做面向对象封装,再用外部图表服务渲染可视化。
一、为什么用标准库做信息板
标准库位于 MQL5/Include,只提供类、不提供函数,需要一点 OOP 基础。它的价值是批量管理指标缓冲区、图表对象、数组,避免手写大量 ObjectCreate/Set,适合做复杂界面。
二、标准库的类体系
- CObject 基类:绝大多数库类的祖先;
- CArray* 数组类:动态数组的通用实现;
- CChart / CChartObject:图表与图形对象;
- CString / CFile:字符串与文件操作;
- CIndicator 指标基类、CDealInfo 成交信息类。
三、Board 类的设计
保护数据:子窗口号、成交数组、余额数组、编辑单元、图表对象、饼图数据。私有数据:约 30 个交易特征变量(净利润、盈利因子、回撤等)。公共方法:构造、析构、Refresh、CreateInterface。
✦ 构造与析构的纪律
构造里用 Chart.Attach() 关联当前图并 new 动态对象;析构里用 CheckPointer + delete 释放,再调用 Shutdown/Detach/Delete 清理。谁 new 谁 delete。
四、交易特征指标怎么算
- 用 HistorySelect 选历史,CDealInfo 取每笔出场利润(含 swap/commission);
- 分买/卖、盈/亏累积 gross_profit / gross_loss;
- profit_factor = gross_profit / gross_loss;
- 连续盈亏笔数与金额、最大/相对/绝对回撤。
五、Google Chart API 集成
用 wininet.dll 下载 PNG 再转 BMP 显示;余额图 cht=lc,饼图 cht=p3;尺寸限制 1000x300。需要终端允许 DLL 导入,并附带三个自写 DLL(字体度量、PNG 转 BMP、wininet 封装)。
⚠ 部署前提
文章依赖外部 DLL 与终端的 DLL 导入权限,部署前确认环境允许;现代 MQL5 也可用内置 CGraphic 类在终端内直接画图,未必非要绕道外部 API。
六、指标生命周期与事件
- OnInit:建 Board 实例、启定时器、记初值;
- OnDeinit:杀定时器、delete 对象(触发析构);
- OnCalculate:比历史成交数变化则 Refresh;
- OnTimer:每秒监窗口尺寸/成交数变化刷新。
常见问题
MQL5/Include 下的一组类(仅类、非函数),用 OOP 思路批量管理指标缓冲区、图表对象、数组,避免手写大量 ObjectCreate/Set,适合复杂界面。
指标常驻图表、随报价刷新、不占主图,还能缩放关闭;脚本是一次性的,没法持续刷新。
净利润、盈利因子、最大回撤、连续盈亏、各品种成交占比——这几个最能一眼判断策略质量。
不一定。现代 MQL5 有 CGraphic 类可直接在终端内画图,不必绕道外部 API 与 DLL,部署更省心。
内存会被回收,但日志报 “X undeleted objects left”;养成 new/delete 配对、用 CheckPointer 判断后再删的习惯。