MT5 图上交易面板开发(一):整体架构与功能模块设计

本文是「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. 主面板布局(自上而下)

  1. 标题栏:设置、截图、最小化、关闭;
  2. 品种切换区:自动读取 Market Watch 品种列表,点击即切换;
  3. 手数行:三种手数模式共用一个输入框;
  4. SL / TP 行:按点数填写止损止盈距离;
  5. 参数行:魔术号、订单注释、每次点单数、挂单偏移;
  6. BUY / SELL 按钮:可分别隐藏、可加锁防误触;
  7. 挂单区:鼠标挂空、鼠标挂多、拖单;
  8. 平仓区:9 种批量平仓按钮;
  9. 删挂单区:7 种删挂单按钮;
  10. 取消区:批量取消止损 / 止盈;
  11. 功能按钮区:一键平仓、自动保本、阶梯止盈、分批止盈、信息面板。

6. 典型使用场景

  • 以图表为主的主观交易:消除弹窗与终端列表之间的往返切换;
  • 多持仓、多挂单场景:批量操作替代逐单右键;
  • 强调仓位纪律的账户:风险手数模式与事前风控规则形成双保险;
  • 短线 / 剥头皮风格:K 线收盘倒计时配合图上快速下单;
  • 复盘需求:一键截图保存图表 PNG,配合日期跳转回看历史。

7. 定位边界

重申:辅助工具。不生成交易信号,不预测行情,不构成投资建议;每一笔订单都由使用者主动触发,工具只负责把"触发"这个动作的距离缩到最短。

8. 系列目录(连载中)

  1. 总览:整体架构与功能模块设计(本文)
  2. 图上快速下单的实现:事件流、坐标换价与挂单解析
  3. 按风险额度自动计算手数的实现
  4. 批量平仓与订单管理的实现
  5. 仓位保护三件套的实现
  6. 事前风控守卫的实现
  7. 图表信息层的实现(完结篇)

风险提示

  1. 杠杆交易(外汇、贵金属、差价合约等)具有高风险,可能导致损失全部本金,请充分了解相关风险后再参与交易;
  2. 本文介绍的是交易辅助工具的实现,仅提供操作与信息展示功能,不生成交易信号,不构成任何投资建议;所有交易决策由使用者自行做出;
  3. 面板中的保本触发价等显示值均为测算参考值,实际以经纪商服务器成交为准;
  4. 新工具请先在模拟账户(Demo)上充分测试,确认功能与预期一致后再考虑用于实盘;
  5. 过往表现不代表未来结果,任何参数设置都无法保证盈利。

版权声明:本文为原创内容,作者超哥量化。

相关推荐
dingdingfish5 天前
系统架构概述
microsoft·系统架构·ea·architecture
郭泽斌之心3 个月前
让别人临时接管你的 AI 助手:分级授权的远程控制怎么设计
人工智能·深度学习·量化交易·ea·mt5·fay数字人·easydeal
郭泽斌之心3 个月前
不买 Trading Central,自己做一套交易信号引擎:MA/BB/Pivot/ATR + 集中采集架构
人工智能·深度学习·ea·mt5·fay数字人·easydeal
郭泽斌之心3 个月前
给 AI 交易助手做 LLM 网关:多通道负载均衡 + 静默失败自动切换
人工智能·经验分享·ea·mt5·fay数字人·easydeal
郭泽斌之心4 个月前
MQL5 EA 怎么和外部程序通信?文件三件套协议:参数热更新不重启、状态心跳、远程触发
人工智能·经验分享·深度学习·ea·fay数字人·easydeal
滚雪球~1 年前
okx欧易注册与量化设置
量化·程序化交易
博一波1 年前
【企业级架构】企业战略到技术落地的全流程【第一篇】
架构·ea
有个人神神叨叨1 年前
【Apache Olingo】全面深入分析报告-OData
apache·ea·odata
梁辰兴2 年前
汽车租赁系统数据库 E-R 图设计
数据库·ea·汽车租赁系统·er图设计·er