EA 交易的测试和优化

EA 交易的开发不仅意味着可在 MQL5 中实现交易策略,而且在更大程度上意味着可测试其财务表现,寻找最佳设置,并在各种情况下进行调试(寻找并纠正错误)。所有这些都可以在集成的 MetaTrader 5 测试程序中完成。

该测试程序适用于各种货币,支持多种逐笔交易明细生成模式:基于所选时段的开盘价、基于 M1 时段的 OHLC 价、基于人工生成的逐笔交易明细,以及基于真实的逐笔交易明细历史记录。这样您可以选择交易模拟的速度和精度的最佳比例。

测试程序设置允许您设置过去的测试时间间隔、存款规模和杠杆;测试程序可用于模拟重新报价和特定账户特性(包括佣金规模、保证金、会话时间表、限制手数)。从用户的角度来看,使用测试程序的所有详细信息都可以在 终端文档中找到。

前面,我们已经简要地讨论了测试程序的操作,特别是在 测试指标一节。让我们回忆一下,与 EA 交易不同,测试程序控制函数及其优化对于指标是不可用的。但是,我个人认为,我希望看到一个自适应的指标自我调整选项:所需要的就是在这些选项中支持 OnTester 处理程序,我们将在 单独的章节中介绍。

如您所知,有多种模式可用于优化,例如 EA 交易输入参数组合的直接枚举、加速遗传算法、数学计算或 Market Watch 中符号的按顺序运行。作为一条优化标准,您可以使用众所周知的指标,如盈利能力、夏普比率、恢复系数和预期回报,以及由 EA 交易开发人员嵌入到源代码中的“自定义”变量。在本书的上下文中,假设读者已经熟悉了设置、运行和解释优化结果的原则,因为在本章中我们将开始学习测试程序控制 API。感兴趣的人可以在 文档相关章节的帮助下更新他们的知识。

测试程序的一个特别重要的函数是多线程优化,可以使用本地和分布式(网络)智能体程序来执行,包括 MQL5 云网络中的程序。由用户手动启动的单个测试运行(具有特定的输入参数),或者在优化期间调用的许多运行之一(当我们在给定范围内实现参数值的枚举时),是在一个单独的程序 – 智能体中执行的。从技术上讲,这是一个 metatester64.exe 文件,在测试和优化过程中,可以在 Windows 任务管理器中看到其进程的副本。因此,该测试程序是多线程的。

终端为将任务分配给本地和远程智能体的调度程序。如有必要,可启动本地智能体。优化时,默认启动几个智能体;其数量对应于处理器内核的数量。在使用指定参数执行下一个测试 EA 交易的任务后,智能体可将结果返回给终端。

每个智能体可创建自己的交易和软件环境。所有智能体相互隔离,并与客户终端隔离。

特别是,智能体有自己的全局变量和自己的 文件沙箱,包括写入详细智能体日志的文件夹:Tester/Agent-IPaddress-Port/Logs。此处,Tester 为测试程序安装目录(在与 MetaTrader 5 一起进行标准安装时,指安装终端的子文件夹)。目录 Agent-IPaddress-Port 的名称包含用于与终端通信的特定网络地址和端口值,而不是 IPaddressPort。对于本地智能体,默认情况下,为地址 127.0.0.1 和从 3000 开始的端口范围(例如,在具有 4 个内核的计算机上,我们将看到端口 3000、3001、3002 和 3003 上的智能体)。

测试 EA 交易时,所有文件操作都在 Tester/Agent-IPaddress-Port/MQL5/Files 文件夹中执行。但是,可以通过 共享文件夹实现本地智能体和客户终端之间(以及同一台计算机上终端的不同副本之间)的交互。为此,当使用 FileOpen 函数打开文件时,必须指定 FILE_COMMON 标志。将数据从智能体传送到终端的另一种方式由 机制提供。

出于安全原因,智能体的本地沙箱会在每次测试前自动清空(以防止不同的 EA 交易读取彼此的数据)。

在每个智能体的文件沙箱旁边创建一个包含报价历史记录的文件夹:Tester/Agent-IPaddress-Port/bases/ServerName/Symbol/。在下一节中,我们简要地告诉您它是如何形成的。

各个测试运行和优化的结果由终端存储在一个特殊的缓存中,该缓存可以在安装目录的 Tester/cache/ 子文件夹中找到。测试结果存储在扩展名为 tst 的文件中,优化结果存储扩展名为 opt 的文件中。这两种格式均为 MetaQuotes 开发者开源的,所以您可以实现自己的批量分析数据处理,或者使用mql5.com 网址上代码库中现成的源代码。

在本章中,首先,我们将考虑 MQL 程序如何在测试程序中工作的基本原理,然后我们将学习如何在实践中与其进行交互。