1.动机
从 build 196 开始,MetaTrader 4 客户端提供测试可视化功能。它使控制 Expert Advisor 测试达到全新的水平。现在,交易编程人员可以观察他或她的 Expert Advisor 的每个动作,检查其对记录的操作。
关于如何使用可视化程序,可以阅读 在 MetaTrader 4 客户端测试 Expert Advisor:外部一览。在之前一篇题为测试可视化:功能强化的文章里,描述了如何实现对“交易”选项卡的测试。我们将在此添加“账户记录”选项卡。
2.任务和实现方法
首先,我们必须承认,创建“账户记录”的卷影副本是不可能的。要进行创建,我们必须使用动态连接库编写复杂的程序。但我们没必要这样做,因为测试程序的“测试结果”选项卡包含关于操作的几乎全部信息。
我们的任务是显示实际的信息。这在分析 Expert Advisor 的工作时非常方便。没有必要一直在选项卡之间切换。
由于显示器上空间不多,实现滚动并非很容易,我们将只显示最近的事件。
另外,在创建显示记录的子窗口时,有必要创建一个指标,在将其添加至图表后,创建命名为 tester.tpl 的模板或在 <expert_name>.tpl 模板内(可以从本文直接下载指标)。
保存模板用于测试
现在我们可以开始准备 Expert Advisor。
这(以下)并不很困难:
- 将 VisualTestingTools.mq4 文件保存在命名为...\MetaTrader 4\experts\include\ 的目录下;
- 添加 #include <VisualTestingTools.mq4> 行至 Expert - 现在文件内容包含在 Expert 代码中,且
- 在 Expert 的 init() 和 start() 函数中插入调用负责更新交易记录的函数。
...
double _Commission = 0.0; string _Comment = ""; datetime _Expiration = -1;
#include <VisualTestingTools.mq4>
int init()
{
if(FastEMAPeriod >= SlowEMAPeriod)
return(-1);
vTerminalInit();
vHistoryInit();
return(0);
}
int start()
{
if(FastEMAPeriod >= SlowEMAPeriod)
return(-1);
vTerminalRefresh();
vHistoryRefresh();
int _GetLastError = 0;
...
3.测试
现在,开始测试新的 Expert。为此,打开策略测试程序窗口,在 Expert 的菜单中选择 CrossMACD_DeLuxe_VisualHistory 并按其属性按钮。
策略测试程序窗口
Expert 已经获得一些新的外部变量 - 它们在命名为 VisualTestingTools.mq4 的包含文件中进行声明。其中一些用于控制“终端”选项卡,其他则是用于“账户记录”选项卡,但大多数为普通变量:
- TerminalRows- 显示“终端”选项卡行的最大数量。如果令 TerminalRows = 0,则终端将不会更新;
- HistoryRows - 显示“终端”选项卡行的最大数量。如果令 HistoryRows = 0,账户记录将不会更新;
- BigText- 如果想调大字体,则设为 true;
- SignalPoints- 以点数表示的距离,其中作为起始点的挂单止损、获利和开仓价格字段将会高亮显示。例如,如果 SignalPoints = 10,则止损字段在价格距离头寸止损位置 10 个点时将更改颜色;
- ShowCancelled- 如果想在交易历史中看到已过期的挂单则设为 true;
- ShowExpired - 如果想在交易历史中看到已过期的挂单则设为 true;
- MainColor - “终端”和“账户记录”以及终端的交易账户信息栏(余额、股本)的标题颜色。
- BuyColor- 关于买入头寸的信息颜色;
- BuyOPColor - “终端”选项卡的“开仓价格”字段的颜色;当前价格接近买入止损和买入限价订单的未平仓水平时,该颜色将替换主色;
- BuySLColor - 对于“终端”选项卡:颜色在当前价格接近买入头寸的止损水平时替换主色;对于“账户记录”选项卡:颜色在买入头寸由止损平仓时替换主色;
- BuyTPColor- 跟应用至获利头寸的 BuySLColor 相同;
- SellOPColor, SellSLColor和SellTPColor- 跟卖出头寸相同。
为变量设置想要的值并按“确定”。检查是否启用“可视化”并开始测试:
测试可视化:已经加载‘终端’和‘账户记录’窗口
EA 已经建仓,在‘终端’窗口进行可视化
一旦平仓,它会移至‘账户记录’并被另一个替换 注意止损字段为红色高亮显示 - 该头寸由止损平仓。
第二个头寸已经获利平仓。注意:最新的头寸显示在“账户记录”顶部。因此,我们始终可以看到最新事件。
这是我们的可视化终端在几分钟后的外观
4.潜在问题
在我的文章测试可视化:功能强化中所述问题也适用于vHistory指标。如果指标不在测试程序使用模板的第二个子窗口,则负责“账户记录”更新的函数的正确运行应由明确指定的子窗口号提供:
vHistory_win = WindowFind( "vHistory" );
if ( IsTesting() ) { vHistory_win = 2; }
5.总结
截屏显示了在下面给出的各种情况下“账户记录”选项卡的外观。