测试可视化对象:图表、对象和指标
测试程序允许以两种不同的方式进行测试:可视化和非可视化。通过在测试程序的主设置选项卡上选择相应的选项来选择测试方法。
启用可视化时,测试程序会打开一个单独的窗口,在其中再现交易操作并显示指标和对象。虽然测试程序是可视化的,但我们并不需要在每种情况下都能看到,只需要在有用户接口的程序中看到即可(例如,交易面板或由图形对象制作的受控标记)。对于其他 EA 交易而言,只有根据既定策略执行算法才是重要的。这可以在没有可视化的情况下进行检查,进而可以显著加快该过程。顺便说一下,在优化过程中,测试就是在这种模式下运行的。
在这样的“后台”测试和优化过程中,不会构建任何图形对象。因此,当访问对象的特性时,EA 交易将接收到零值。因此,只有在可视化模式下测试时,你才能检查对象和图表的工作。
之前,在 测试指标 一节,我们已经看到了指标在测试程序中的具体行为。为了提高非可视化测试和 EA 交易优化(使用指标)的效率,指标可以不在每条分时报价处进行计算,而是仅在我们向他们请求数据时进行计算。仅当指标中有 EventChartCustom、OnChartEvent 和 OnTimer 函数或 tester_everytick_calculate 指令时,才会对每条分时报价进行重新计算(请参阅 测试程序的预处理指令)。在可视化测试程序窗口中,在线指标总是在每条分时报价处接收 OnCalculate 事件。
如果测试是在非可视模式下进行的,则在测试完成后,符号图表会自动在终端中打开,显示已完成的交易和 EA 交易中使用的指标。这有助于将市场进入和退出时刻与指标值联系起来。但是,此处我们指的只是对测试的交易品种和时间范围起作用的指标。如果 EA 交易在其他交易品种或时间范围上创建了指标,则不会显示。
务必要注意的是,测试完成后自动打开的图表上显示的指标会在测试结束后重新计算。即使这些指标在测试的 EA 交易中使用过,并且在柱线形成时已经计算过,也会发生这种情况。
在某些情况下,程序员可能需要隐藏交易算法中使用了哪些指标的信息,因此它们在图表上的可视化是不可取的。为此,可以使用 IndicatorRelease 函数。
IndicatorRelease 函数最初用于在不再需要时释放指标的计算部分。这样可以节省内存和处理器的资源。其第二个目的是在完成一次运行后,禁止在测试图表上显示指标。
要在测试结束时禁用图表上的指标显示,只需用 OnDeinit 处理程序中的指标句柄调用 IndicatorRelease 即可。在完成之后和显示测试图表之前,总会在 EA 交易中调用 OnDeinit 函数。无论是 OnDeinit 还是全局和静态对象的析构函数都不会在测试程序的指标本身中被调用 - 这是MetaTrader 5 的开发人员商定的。
此外,MQL5 API 包括一个具有类似目的的特殊函数 TesterHideIndicators ,我们将在后面探讨。
同时,应注意 tpl 模板(如果已创建)会额外影响测试图表的外部表示。
因此,如果 MQL5/Profiles/Templates 目录中有 tester.tpl 模板,该模版将被应用到打开的图表中。如果 EA 交易在其工作中使用了其他指标,并且没有禁止显示这些指标,则来自模板和 EA 交易的指标将会在图表上合并。
当 tester.tpl 不存在时,应用默认模板 (default.tpl)。
如果 MQL5/Profiles/Templates 文件夹包含一个与 EA 交易同名的 tpl 模板(例如,ExpertMACD.tpl),则在可视化测试期间或在测试后打开的图表上,只会显示该模板中的指标。在这种情况下,不会显示测试的 EA 交易中使用的任何指标。