监视多币种的交易信号(第一部分):开发应用程序结构·进阶篇
📘

监视多币种的交易信号(第一部分):开发应用程序结构·进阶篇

第 2/2 篇

◍ 二次拉起时主监视器怎么读

在 MT5 里把这套信号监视器挂到第二个图表或新图表再次启动时,程序不会重新让你选品种和时间帧,而是直接读取首次启动缓存的数据,跳进正在跑的监视器。外汇和贵金属波动快,这种跳过选择的设计能避免重复配置,但也要留意缓存若来自旧会话,品种列表可能和当前市场观察不同步。 主窗口纵向列出的是初始第 1 步勾过的品种,它们理论上和终端市场观察窗口一致;横向上方是第 2 步定的工作时间帧;中间一排信号模块只对该时间帧+品种组合生效。窗口标题左起三个按钮分别是设置、最小化、关闭。 点“Settings”在次级启动里有两个实际用途:一是进图例 6 那种界面改或加信号,二是切回初始设置模式重选品种与周期。想验证的话,开两个 EURUSD 图表各挂一次,第二次直接看到的是监视器而非配置窗,高风险品种请先确认缓存品种没漏掉。

「搭好信号监视器的文件骨架」

做 MT5 自定义监控面板,第一步不是写逻辑,而是把目录和文件层级定死。在 <数据文件夹>\MQL5\Experts 下新建 Signal Monitor 文件夹,里面放 5 个文件:主程序 Signal Monitor.mq5、承载 CProgram 类的 Program.mqh、画主窗口的 MainWindow.mqh、管视觉与逻辑组件配置的 SetWindow.mqh,以及管首次启动分步引导的 StepWindow.mqh。 文件齐了之后,核心是把它们编进同一个编译单元。主文件里先引 Program.mqh,再引图形库 WndEvents.mqh;Program.mqh 内部再依次把三个 .mqh 包含进来,类体里暂留空构造与析构,框架就通了。 按这个结构走,图例 9 里的树形目录应该一分不差:Experts/Signal Monitor 下恰好 5 个文件。少一个,后续 MainWindow 里的窗口方法就链接不上,编译会直接报找不到标识符。外汇与贵金属 EA 开发本身高风险,框架错一处,实盘加载可能静默失败。

MQL5 / C++
class=class="str">"cmt">//--- Include application class
class="macro">#include "Program.mqh"
class="macro">#include <EasyAndFastGUI\WndEvents.mqh>
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Class for creating an application                                |
class=class="str">"cmt">//+------------------------------------------------------------------+
class CProgram
{
class="kw">public:
  CProgram(class="type">void);
  ~CProgram(class="type">void);
};
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Add Controls                                                     |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="macro">#include "MainWindow.mqh"
class="macro">#include "SetWindow.mqh"
class="macro">#include "StepWindow.mqh"
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Constructor                                                      |
class=class="str">"cmt">//+------------------------------------------------------------------+
CProgram::CProgram(class="type">void)
{
}
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Destructor                                                       |
class=class="str">"cmt">//+------------------------------------------------------------------+
CProgram::~CProgram(class="type">void)
{
}
class=class="str">"cmt">//+------------------------------------------------------------------+

把文件丢进终端根目录

这套 MQL5 附件不是拖进图表就能跑的,所有文件必须按原目录结构落到终端根目录下的 MQL5 文件夹里,否则包含关系会直接断链。 打开根目录最快的方式是在 MT5 里按 Ctrl+Shift+D,或者从导航器右键菜单进关联路径,和例 10 的截图操作一致。 放置完成后重启一次终端,再加载 EA 或指标,缺失文件导致的编译报错通常会消失。外汇与贵金属品种波动剧烈,实盘前务必先在策略测试器用历史数据验证逻辑。

◍ 记住这一条就够了

把 Signal Monitor 拷进 Experts、EasyAndFastGUI 拷进 Include 和 Image 后编译报一堆 Objects、ElementBase、Button 错误,作者本人回帖点明:那篇只是未来应用的标记,下一篇才给可跑的第一版。想现在就验证,别对着半成品死磕编译器。 MT5 根目录里 MQL5 文件夹就是这类自定义 EA/库的总入口,ZIP 包 456.03 KB 解压后路径放错一个,终端就找不到依赖。外汇和贵金属品类波动大、杠杆高,实盘前先在策略测试器用历史数据跑通再上。 下回看到标着「第 X 部分」的系列文,先确认是不是收尾篇再动手部署,能省掉大半无效调试。

常见问题

主监视器重启后会重新扫描根目录下的配置文件,只要文件没删,币种和信号条件都会按原设定自动恢复加载。
至少拆成配置读取、品种遍历、信号计算、结果写出四个文件,逻辑隔离后改品种不用动核心代码。
小布已内置多品种信号扫描,打开对应品种页就能直接看异动提醒,不用手动搭文件丢终端。
多半是文件名或后缀不对、编码非 UTF-8,或者目录层级放错,核对后再重启终端即可。
必须给每个品种信号加独立开关和日志,否则一个币种报错会拖垮整个监视器进程。