快捷手动交易工具箱:基本功能(基础篇)
📘

快捷手动交易工具箱:基本功能(基础篇)

第 1/3 篇

手动下单前的工具箱雏形

在 MT5 里做快捷手动交易,第一步不是写 EA,而是先理清工具箱要替你解决什么。原文作者 Alexander Fedosov 在 2020 年 10 月 12 日发布的这一思路,截至统计时获得 5380 次查看与 8 条讨论,说明手动交易者对轻量辅助工具确实有刚需。 所谓工具箱概念,本质是把重复的下单动作(选品种、填手数、设止损、点买点卖)从终端原生面板里抽出来,用自定义面板或脚本接管。这样你盯盘时少点几次鼠标,也就少几次误操作概率。 基本功能的实现阶段,先不追求花哨:能一键在当前图表品种下单、能快速切换 0.01 / 0.1 / 1 标准手、能把止损拖到鼠标位置,就已经覆盖大部分手动交易场景。外汇与贵金属杠杆高、滑点随机,这类工具只降操作摩擦,不替你判断方向。

「为什么还要给手动交易做快捷键」

自动 EA 在 MT5 里越来越常见,但仍有相当比例的老手坚持手动下单,尤其在剥头皮和突发行情里,他们更信自己的临场判断。 这类场景对时机极度敏感:价格可能在几秒内扫掉关键位,手点面板容易慢半拍甚至点错方向。 我做的这套基础功能,就是给手动交易者补一个“秒级执行”的缺口——把入场、离场做成可一键触发的动作,而不是在菜单里翻找。外汇与贵金属杠杆高、滑点快,手动抢单本身已是高风险操作,工具只减误触、不替你决策。

◍ 手动交易工具箱该装哪些基本操作

手动交易绕不开两条路:市价单直接吃盘口,或挂单等价格触发。一个顺手的工具箱,首要准则是把这两种下单方式都做透,而不是只塞一堆花哨指标。 从实际盘前准备看,交易者常卡在三类重复动作上:批量平掉所有浮盈单、快速开市价、快速挂单。原生 MT5 终端虽有热键,但跨窗口点选仍费时,尤其贵金属跳空时手慢一点滑点就吃肉。 以图例里的轻量工具为例,主窗只分「市价单」「挂单」两类,热键直接映射:C 键平所有盈利单,M 键开市价设置窗,P 键开挂单窗。手数不仅能填固定 lot,还能按账户余额百分比算——这对外汇/贵金属高杠杆账户控风险更直接。 止盈止损也给了双格式:绝对价位或点数。比如黄金设 50 点止损比算 2345.20 这种价位更不容易手抖填错。这类设计不神奇,但能让你在波动率突增时少点两次鼠标,概率上降低操作失误。

工具实现

首先,我们来创建一个初始项目结构。 打开 Experts 目录,创建 “Simple Trading” 文件夹及一些文件,如图例 4 所示。 图例 4 项目文件结构 我们研究一下所创建文件的作用: SimpleTrading.mq5 — 智能交易系统的文件,将在其中创建 GUI,并包含初始应用程序设置。 Program.mqh — 包含要连接到 EA 的文件,该文件将包含 CFastTrading 类,及其字段和方法。 它还包含其部分实现。 MainWindow.mqh — 连接的包含文件 Program.mqh ,内含 GUI 元素的实现方法。 Defines.mqh —  连接的包含文件 Program.mqh ;内含一组 GUI 元素的宏替换,用于实现英语和俄语版本。 首先,打开 Program.mqh ,连接实现界面和交易功能所需的函数库,并创建 CFastTrading 类。 现在,打开 EA 文件 SimpleTrading.mq5 , 把它连接到 Program.mqh , 若有新创建的类,则创建一个实例< /s3>。 此外,设置输入参数 ,其中包括: Base FontSize — 应用程序的基本字体大小。 Caption Color — 主应用程序窗口的标题颜色。 Back color — 背景颜色。 Interface language — 界面语言。 Magic Number — 本智能交易系统创建订单时的唯一识别码。 为了令 EA 输入参数可用于此类,必须创建变量和方法,将 EA 设置的数值分配给这些变量,以及实现的方法。 在类的私密部分中创建变量。 在公开部分中创建方法: 此处是实现: 现在,于 EA 初始化部分应用它们: 添加 CreateGUI() 方法,该方法将创建整个界面。 到目前为止,它是空的。 当我们创建 UI 元素时,会进一步填充它。 该方法可以添加到 EA 初始化中: 现在,创建主应用程序窗口。 这可在类的受保护部分里添加 CreateMainWindow() 方法来完成。 将其实现添加到 MainWindow.mqh 文件中,然后 在 CreateGUI() 中调用它。 在此方法实现中,我使用了 CAPTION_NAME 宏替换 ,这就是为什么应在特殊的 Defines.mqh 文件中创建它的原因。 现在,创建一个新的宏替换。 编译项目,从而得到主应用程序窗口。 现在,我们添加按钮(图例 1),它将执行所述操作。 为了实现它们,请在类的受保护部分中创建通用的 CreateButton() 方法。 在 MainWindow.mqh 中实现它,并 于主窗口创建方法的主体中调用。 此处也用宏替换, 这就是为什么要将其添加到 Defines.mqh 当中。 这就是选择英文版本时我们的所得。 图例 5 主应用程序窗口。 如前所述,该应用程序还应有两个窗口来处理市价单和挂单。 因此,创建它们并链接到 “Market Order” 和 “Pending Order” 按钮:相关操作可单击按钮,或按热键 M 和 P 来执行。 因此, 在类的受保护部分中添加 CreateMarketOrdersWindow() 和 CreatePendingOrdersWindow() 这两个方法 ,并在 MainWindow.mqh 中实现它们 。 在这两个窗口中要用到宏替换,因此把它们添加到相应的文件之中: 现在,在 CreateGUI() 基本方法中调用新创建的窗口,该方法会创建应用程序界面: 由于这些已创建窗口是对话框,因此它们

「给交易面板先搭好类骨架」

做 MT5 自定义交易面板,第一步不是画按钮,而是把事件响应类继承关系定清楚。下面这段代码从 EasyAndFastGUI 的 CWndEvents 派生出 CFastTrading,专门承接图表事件、计时器和初始化回调,后续所有 GUI 元素都挂在这个类上。 LANG 枚举只放了 RUSSIAN 和 ENGLISH 两项,说明界面文案切换走的是编译期枚举而非运行时动态加载,想加中文得自己补一个 CHINESE 成员并在 MainWindow 里接好字串。 构造函数、析构函数和 OnInitEvent 目前都是空实现,这是刻意留的白:真正的 DoEasy25 引擎初始化、主窗口创建要等包含 MainWindow.mqh 之后在对应方法里填。开 MT5 新建 EA 把这段贴进头文件,能直接编译过,证明依赖路径 EasyAndFastGUI\WndEvents.mqh 和 DoEasy25\Engine.mqh 没配错。 外汇与贵金属杠杆高、滑点随机,这类面板只解决下单交互效率,不替你判断方向,信号逻辑得另写。

MQL5 / C++
class="macro">#include <EasyAndFastGUI\WndEvents.mqh>
class="macro">#include <DoEasy25\Engine.mqh>
class="macro">#include "Defines.mqh"
class=class="str">"cmt">// 切换界面语言的枚举
enum LANG
{
   RUSSIAN,     class=class="str">"cmt">// 俄语
   ENGLISH      class=class="str">"cmt">// 英语
};
class=class="str">"cmt">// 创建应用程序的类
class CFastTrading : class="kw">public CWndEvents
{
class="kw">public:
                     CFastTrading(class="type">void);
                    ~CFastTrading(class="type">void);
   class=class="str">"cmt">//--- 初始化/逆初始化
   class="type">void              OnInitEvent(class="type">void);
   class="type">void              OnDeinitEvent(class="kw">const class="type">int reason);
   class=class="str">"cmt">//--- 计时器
   class="type">void              OnTimerEvent(class="type">void);
   class=class="str">"cmt">//--- 图表事件应答
   class="kw">virtual class="type">void      OnEvent(class="kw">const class="type">int id,class="kw">const class="type">long &lparam,class="kw">const class="type">class="kw">double &dparam,class="kw">const class="type">class="kw">string &sparam);
};
class=class="str">"cmt">// 加入 GUI 元素
class="macro">#include "MainWindow.mqh"
class=class="str">"cmt">// 构造函数
CFastTrading::CFastTrading(class="type">void)
{
}
class=class="str">"cmt">// 析构函数
CFastTrading::~CFastTrading(class="type">void)
{
}
class=class="str">"cmt">// 初始化
class="type">void CFastTrading::OnInitEvent(class="type">void)
{
}
class=class="str">"cmt">// 逆初始化

◍ 把交易面板拆进事件循环里

快速交易类的析构靠 OnDeinitEvent 触发,里面只做一件事:调用 CWndEvents::Destroy() 卸掉图形界面。若不显式销毁,MT5 退出脚本时可能残留窗口句柄,下次加载同 EA 有概率报对象已存在。 定时器走 OnTimerEvent,它把事件直接转交给 CWndEvents::OnTimerEvent() 处理。面板上的按钮状态刷新、价格轮询都依赖这层心跳,默认计时精度由 EA 的 Timer 设置决定,常见为 100~500 毫秒一级。 图表事件应答函数 OnEvent 此处为空实现,说明该版本未接管鼠标拖拽或自定义图表消息。若你要做一键平仓面板,得在这里补 id==CHARTEVENT_CUSTOM+ 系列的分支。 主文件 SimpleTrading.mqh 通过 #include "Program.mqh" 挂入核心类,输入参数里 Inp_BaseFont=10 控制面板基础字号,Caption 取 C'0,130,225' 这种 RGB 蓝,Background 用 clrWhite。改这几个值就能在 MT5 里直接换肤,不用动逻辑层。

MQL5 / C++
class="type">void CFastTrading::OnDeinitEvent(class="kw">const class="type">int reason)
{
class=class="str">"cmt">//--- Remove the interface
  CWndEvents::Destroy();
}
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Timer                                                            |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">void CFastTrading::OnTimerEvent(class="type">void)
{
  CWndEvents::OnTimerEvent();
class=class="str">"cmt">//---
}
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Chart event handler                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">void CFastTrading::OnEvent(class="kw">const class="type">int id,class="kw">const class="type">long &lparam,class="kw">const class="type">class="kw">double &dparam,class="kw">const class="type">class="kw">string &sparam)
{
}

常见问题

先把常用操作做成快捷键或悬浮面板,把开仓、平仓、平仓一半集中到一个键位,实战里能省掉翻菜单的时间。
工具箱是把重复动作固化下来,避免临场手滑点错;基础篇先搭类骨架,后面加功能不推翻重来。
小布可以替你盯盘口和整理常用操作入口,把重复劳动交给小布,你专注决策,少在界面里来回找按钮。
拆成按钮点击、图表刷新、订单回执三类事件循环就够了,先跑通再补止损线拖拽等功能。
至少装市价开仓、一键全平、半平锁利;这类品种波动快高风险,少一步操作就少一次滑点概率。