监视多币种的交易信号(第一部分):开发应用程序结构·进阶篇
◍ 二次拉起时主监视器怎么读
在 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 开发本身高风险,框架错一处,实盘加载可能静默失败。
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 部分」的系列文,先确认是不是收尾篇再动手部署,能省掉大半无效调试。