到底发生了什么事? - 页 4

 
SeriousRacoon:
并尝试禁用当前的逻辑,用一个普通的向导来取代它。你会立即看到猫在哪里出了问题,在逻辑或执行方面。

好建议....我们不应该到了这样的地步:我们认为优化只不过是单一运行的独立实例,至少,这是用户所希望的,也是开发者所希望的。

这意味着,无论专家顾问的算法有多复杂,单次运行的结果 与优化过程中一组运行的结果应该是相同的。

我将在优化过程中每次运行完成后打印(如Renat建议的那样)交易历史到一个包含参数的文件中(以方便在一堆创建的文件中搜索),并对单次运行做同样的处理,这样就有可能找到优化后和单次运行的结果差异。 这似乎是了解真相的唯一途径。

然而,我非常好奇是什么,什么细微的差别,可能导致优化和单次运行的不同结果,因为逻辑上表明,这在原则上是不可能的,只要单次运行与优化批次运行中的结果相同。

 
Алексей Тарабанов:

"几乎所有的数据都在一个循环中被初始化"。

伙计们,你们不能在一个循环中初始化。你必须在循环中阅读。

我告诉你在哪些情况下,这不仅是可能的,而且是必要的,没有其他办法。

[删除]  

@Andrey Dik,我想知道究竟如何栓住打印到文件。我在想,文件应该是边走边写。而那里究竟应该写些什么呢?价格--不具参考价值。 你需要写一些信息,帮助你理解差异的原因。什么样的信息?我们在哪里可以找到它?我还不知道。

 
Сергей Таболин:

@Andrey Dik,我想知道究竟如何栓住打印到文件。看来,文件应该是边走边写。而那里究竟应该写些什么呢?价格是没有信息的。你需要写一些信息,帮助你理解差异的原因。什么样的信息?我们在哪里可以找到它?我还没有想法。

在OnTester()函数中,创建一个名为InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +....的文件。并在其中记录所有交易(不是头寸)的历史,所有必要的分析信息、时间、价格等都会被记录下来。你也可以在这个文件中写一些对某一特定EA来说非常有趣的东西,这对搜索优化器和单一运行之间的不一致可能很有用。

不要忘记检查MQLInfoInteger (MQL_OPTIMIZATION));在单次运行时在文件名中添加后缀,以便在优化后不覆盖同一文件。


如果你得到两个内容不同的文件,这对开发人员来说是不够的,只能给你一个方向,在哪里进一步挖掘,你需要带来一个可重复的问题代码。

[删除]  
Andrey Dik:

在OnTester()函数中创建一个名为InputName1 + "_" + InputName2 + "_" + InputName3 + "_" + InputName4 + "_" +....的文件。并在其中记录所有交易(不是头寸)的历史,所有必要的分析信息、时间、价格等都会被记录下来。你也可以在这个文件中写一些对某一特定EA来说非常有趣的东西,这对搜索优化器和单一运行之间的不一致可能很有用。

不要忘记检查MQLInfoInteger (MQL_OPTIMIZATION));在单次运行时在文件名中添加后缀,以便在优化后不覆盖同一文件。


SZY.如果你得到两个内容不同的文件,对开发者来说是不够的,只能给你提供下一步挖掘的方向,你需要举出一个可重复的代码问题。 我希望问题是在EA代码中。

谢谢你。会做的。

 
Сергей Таболин:

谢谢你。我将这样做。


 
Сергей Таболин:

谢谢你。会做的。

检查全局声明变量的初始化

如果初始化不是在OnInit()中,而是在声明中,并且如果它们的值在代码中被改变。

 
Andrey F. Zelinsky:

检查全局声明变量的初始化

如果初始化不是在OnInit()中,而是在声明中,并且如果它们的值在代码中被改变。

无论变量是否被初始化,但在两种测试模式(优化和单次运行)下,结果应该是一致的。

 
Andrey Dik:

好建议....我们不应该到了这样的地步:我们认为优化不过是单一运行的独立实例,至少这是用户希望的,也是开发者希望的。

这意味着,无论专家顾问的算法有多复杂,单次运行的结果 与优化过程中一组运行的结果应该是相同的。

我将在优化期间每次运行完成后打印(如Renat建议的那样)交易历史到一个包含参数的文件中(以方便在创建的文件堆中搜索),并在单次运行中做同样的事情,这样就有可能找出优化后和单次运行的结果差异。

然而,我非常好奇是什么,什么细微的差别,可能导致优化和单次运行的不同结果,因为逻辑上表明,这在原则上是不可能的,只要单次运行与优化批次运行中的结果相同。

一般来说,我同意你的观点。如果owl真的不根据环境(无论是在优化器中还是在测试器中运行)进行分支,那么我们唯一可以假设的是,在优化模式下,测试器中的一些api调用在速度上过于优化,原谅我的同义词。也许这取决于所使用的函数中的标志。一个详细的交易和执行结果的日志会有帮助,是的。

我个人没有遇到过这种情况。

 
Andrey Dik:

无论变量是否被初始化,但在两种测试器模式(优化和单次运行)下,结果应该是一致的。

全局声明一个变量,并在声明时初始化它,例如,int kk=0。

然后在OnTick()中取消打印并改变数值,例如Print("kk=",kk); ++kk;

然后改变TF或参数 -- 并看到结果。