本文是「MT5 图上交易面板开发」系列第 1 篇(共 7 篇),讨论笔者开发的一款 MT5 图上交易辅助面板(v1.00)的整体架构与模块划分,后续各篇按模块展开实现细节。面板界面支持中英双语,下文以中文界面为准。
免责声明:本文内容仅用于技术交流与学习参考,不构成任何投资建议。金融市场存在不确定性,过往表现不代表未来结果。请读者根据自身情况独立判断、审慎决策,并自行承担投资风险。
1. 设计目标
MT5 的架构里,图表承担分析职能,交易执行分散在订单弹窗与终端列表。以图表为主要工作界面的交易者,一次挂单操作意味着视线离开图表数秒;持仓管理则是终端列表里的逐个右键。
这款面板的设计目标只有一个:把执行层操作搬回图表------市价、挂单、手数计算、平仓、仓位保护,全部在图上完成。技术形态是以 EA(Expert Advisor)挂载到图表运行的交互面板。
先明确技术定位:它是操作辅助工具,不生成交易信号、不替代人工决策,所有订单均由使用者在图上主动触发。
2. 总体架构
从实现视角看,面板分四层:
text
┌─────────────────────────────────┐
│ UI 层:主面板 + 各功能子窗 │ 控件布局、显隐、双语、位置记忆
├─────────────────────────────────┤
│ 事件层:OnChartEvent 交互承接 │ 鼠标移动/点击/拖拽 → 动作分发
├─────────────────────────────────┤
│ 交易层:CTrade 订单操作封装 │ 市价/挂单/平仓/改单,同步或异步
├─────────────────────────────────┤
│ 状态层:OnTick/OnTimer 轮询引擎 │ 仓位保护、风控守卫、图表信息刷新
└─────────────────────────────────┘
3. MQL5 实现要点(架构骨架)
面板程序的基本骨架(实现思路示意,非产品源码):
mql5
#include <Trade\Trade.mqh>
CTrade trade; // 交易层:统一封装下单/平仓/改单
int OnInit()
{
// UI 层:创建主面板与子窗,恢复上次的停靠位置
// 事件层:启用鼠标事件(默认关闭,必须显式打开)
ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true);
return INIT_SUCCEEDED;
}
void OnChartEvent(const int id, const long &lparam,
const double &dparam, const string &sparam)
{
// 交互入口:所有图上操作从这里分发到对应功能模块
}
void OnTick()
{
// 状态层:行情跳动时驱动仓位保护引擎与风控守卫检查
}
void OnDeinit(const int reason)
{
// 持久化面板与子窗位置(文件或全局变量),销毁图表对象
}
两个容易踩的坑:CHART_EVENT_MOUSE_MOVE 默认是关闭的 ,不做 ChartSetInteger 显式启用,鼠标跟随类交互全部无效;子窗位置持久化 要在 OnDeinit 里落盘(GlobalVariableSet 或文件均可),否则重启后面板回到默认位置。
基础特性对应的设计决策:
- 挂图即用:主要参数放在面板与设置窗内调整,而不是 EA 输入参数------输入参数每次修改都要重新挂载,面板内参数可以热改;
- 中英双语:界面文案集中管理,设置中一键切换;
- 按钮可裁剪:控件按需显隐,只保留常用项;
- 位置记忆 :主面板默认停靠图表右下(黄金分割位),各子窗位置自动记忆。

4. 功能模块划分
| 模块 | 核心功能 | 实现要点 | 本系列 |
|---|---|---|---|
| 快速下单与挂单 | BUY/SELL 市价按钮(悬停预览 SL/TP 虚线)、鼠标挂单(双击下单、类型自动解析)、拖拽挂单(Entry/SL/TP 三拖杆) | 图表事件流、坐标换价、挂单类型判断 | 第二篇 |
| 风险手数 | 固定手数 / 余额风险% / 风险金额三种模式,按止损点数与点值自动换算 | 点值换算、步长对齐、最小手数兜底 | 第三篇 |
| 批量平仓与订单管理 | 9 种批量平仓、7 种删挂单、批量取消止损止盈、勾选式平仓副窗、订单表格、持仓汇总、单票菜单 | 持仓/挂单遍历、条件筛选、逆序删除 | 第四篇 |
| 仓位保护 | 自动保本、阶梯止盈(最多 16 级、三种跟踪粒度)、分批止盈 | OnTick 轮询、峰值状态跟踪、PositionModify | 第五篇 |
| 风控规则与图表辅助 | 日盈亏限额、点差过滤、时段限制等事前守卫;K 线倒计时、涨跌角标、均价线、日期跳转 | 开仓前置检查链、图表对象绘制、OnTimer 刷新 | 第六、七篇 |
5. 主面板布局(自上而下)
- 标题栏:设置、截图、最小化、关闭;
- 品种切换区:自动读取 Market Watch 品种列表,点击即切换;
- 手数行:三种手数模式共用一个输入框;
- SL / TP 行:按点数填写止损止盈距离;
- 参数行:魔术号、订单注释、每次点单数、挂单偏移;
- BUY / SELL 按钮:可分别隐藏、可加锁防误触;
- 挂单区:鼠标挂空、鼠标挂多、拖单;
- 平仓区:9 种批量平仓按钮;
- 删挂单区:7 种删挂单按钮;
- 取消区:批量取消止损 / 止盈;
- 功能按钮区:一键平仓、自动保本、阶梯止盈、分批止盈、信息面板。

6. 典型使用场景
- 以图表为主的主观交易:消除弹窗与终端列表之间的往返切换;
- 多持仓、多挂单场景:批量操作替代逐单右键;
- 强调仓位纪律的账户:风险手数模式与事前风控规则形成双保险;
- 短线 / 剥头皮风格:K 线收盘倒计时配合图上快速下单;
- 复盘需求:一键截图保存图表 PNG,配合日期跳转回看历史。
7. 定位边界
重申:辅助工具。不生成交易信号,不预测行情,不构成投资建议;每一笔订单都由使用者主动触发,工具只负责把"触发"这个动作的距离缩到最短。
8. 系列目录(连载中)
- 总览:整体架构与功能模块设计(本文)
- 图上快速下单的实现:事件流、坐标换价与挂单解析
- 按风险额度自动计算手数的实现
- 批量平仓与订单管理的实现
- 仓位保护三件套的实现
- 事前风控守卫的实现
- 图表信息层的实现(完结篇)
风险提示
- 杠杆交易(外汇、贵金属、差价合约等)具有高风险,可能导致损失全部本金,请充分了解相关风险后再参与交易;
- 本文介绍的是交易辅助工具的实现,仅提供操作与信息展示功能,不生成交易信号,不构成任何投资建议;所有交易决策由使用者自行做出;
- 面板中的保本触发价等显示值均为测算参考值,实际以经纪商服务器成交为准;
- 新工具请先在模拟账户(Demo)上充分测试,确认功能与预期一致后再考虑用于实盘;
- 过往表现不代表未来结果,任何参数设置都无法保证盈利。
版权声明:本文为原创内容,作者超哥量化。