数学计算

MetaTrader 5 终端中的测试程序不仅可以用于测试交易策略,还可以用于数学计算。为此,请在测试程序设置的模拟下拉菜单中选择适当的模式。这与我们选择分时报价生成方法的列表相同,但是在这种情况下,测试程序不会生成分时报价或报价,甚至不会连接交易环境(交易账户以及交易品种)。

参数的完全枚举和遗传算法之间的选择取决于搜索空间的大小。对于优化准则,请选择“自定义最大值”。测试程序设置中的其他输入字段(如日期范围或延迟)并不重要,因此会自动禁用。

在“数学计算”模式下,每次测试代理运行均只调用三个函数:OnInitOnTesterOnDeinit

在MetaTrader 5 测试程序中需要解决的一个典型数学问题是寻找一个多变量函数的极值。要解决这个问题,必须以输入变量的形式说明函数参数,并将用于计算其值的块放在 OnTester 中。

一组特定输入变量的函数值作为 OnTester 的输出值返回。不要在计算中使用除数学函数以外的任何内置函数。

必须记住,优化时,总是寻求 OnTester 函数的最大值。因此,如果需要求最小值,应返回相反数值或乘以 -1 的值。

为了理解这是如何工作的,我们以一个相对简单的具有一个最大值的二元函数为例。我们在 MathCalc.mq5 EA 交易算法中进行说明。

通常假设我们不知道函数的解析表达式,否则就有可能计算出其极值。但是现在我们用一个众所周知的公式来确定答案是正确的。

input double X1;
input double X2;
   
double OnTester()
{
   const double r = 1 + sqrt(X1 * X1 + X2 * X2);
   return sin(r) / r;
}

EA 交易附带有 MathCalc.set 文件,其中包含用于优化的参数:自变量 X1 和 X2 在范围 [-15,+15] 内迭代,步长为 0.5。

我们运行优化,并在优化表中查看解。最佳轮次可给出正确的结果:

  X1=0.0
  X2=0.0
OnTester result 0.8414709848078965

在优化图表上,你可以打开 3D 模式并直观地访问曲面的形状。

数学计算模式下函数优化(最大化)的结果

数学计算模式下函数优化(最大化)的结果

同时,测试程序在数学计算模式中的使用不限于纯粹的科学研究。具体来说,在此基础上,可以使用替代的已知优化方法(如“粒子群”或“模拟退火”方法)来组织交易系统的优化。当然,要做到这一点,需要将报价或分时报价的历史上传到文件中,并将它们连接到经过测试的 EA 交易以及模拟交易的执行,计算仓位和资金。由于可以自由定制优化过程(与遗传算法的内置“黑盒子”相反)和控制资源(主要是 RAM),所以这种日常工作可能很有意义。