1

我正在尝试使用 MetaTrader 遗传算法优化包含大约 40 种不同输入的当前 EA。

输入具有约束,例如 I1 < I2 < I3、I24 > 0、... 总共约 20 个约束。

我尝试使用以下代码过滤不遵守约束的解决方案:

int OnInit(){
   if(I1 >= I2 || I2 >= I3) {
      return(INIT_FAILED);
   }
   ...
}

那么问题如下:在前 512 次迭代之后没有找到可行的解决方案并且优化停止(非遗传优化器也会发生同样的情况)。

如果我删除约束,算法将运行并优化解决方案,但这些解决方案将不尊重约束。

有没有人已经遇到过类似的问题?目前我认为我将不得不使用外部工具进行优化,但这感觉不对

4

1 回答 1

0

由于 Daniel 昨天推荐了一个OnInit(){...}位于快捷方式的处理程序,因此遗传模式优化器将并且必须放弃,因为它在最近的一些种群修改/突变的进化过程中没有看到任何进展。

令我惊讶的是,全网格模式(跨越整个笛卡尔参数集空间)拒绝测试每个参数集空间向量,一个接一个。在这种类型的测试中花费了数百机器年,这对我之前的 MT4 [策略测试器] 体验来说听起来很奇怪。


还有一个技巧:

让我再分享一个选项:

让经过测试的代码通过OnInit(){...},但使条件快捷方式成为OnTick(){...}-event-handler,在进入时直接返回。这是我们发明的一个技巧,因为我们的代码能够模拟实际被测交易的一些延迟启动(基于时间的内部迭代器,用于时间流中的滑动窗口位置)。这种方式可以模拟“错误”参数集向量的一些不利影响,并且遗传学可能会进一步发展,甚至发现作为副作用的参数化类型会受到惩罚:o)


SearchSpace 有 40 多个参数?... 表演!

如果这是您的想法,那么一旦您开始使用测试场,您的下一个性能水平就会得到交付,其中许多机器在集中管理的parameterSet-vector 分布上执行测试并报告结果。

这确实是我们 Quant R&D 的性能助推器。

一段时间后,我们还为(同样是)平台外 Quant R&D 原型设计和测试实施了一个“独立”农场。

于 2018-06-07T15:12:02.293 回答