优化的结果与对其进行的单一测试不同 - 页 6

 

我看到传播测试的问题已经被反复提出。我最近到了一个系统,看起来或多或少有些严肃(就实际交易而言),因此需要彻底测试。而且也一直在关注这个问题。因此,我写了一个简单的脚本,为离线测试设置所需的传播。

其原理是众所周知的,在symbols.sel文件中,Ask被覆盖了。因此,在离线终端中把它从历史文件夹中复制到experts/files文件夹中,启动脚本,然后关闭终端,把symbols.sel复制回来,再次启动终端

P.S. 替换了脚本,一个小的疏忽是,如果有人突然有时间采取SetSpread而不是SetSpread_1,需要重新下载。

附加的文件:
 
同样的问题。我在优化过程中得到了同样的结果,但在单次运行中的结果却截然不同。感谢Mathemat为我指明了正确的方向。

数学
在测试过程中,要小心对待这些物体。最好是根本不使用它们。

我将分享发生的情况和解决的方法,也许有人会觉得有用。我自己写了一个指标,使用趋势线。该指标将破损趋势线的数量传递给终端的全局变量。事情是这样的。

GlobalVariableSet("GV_name", number);

并在专家顾问中取值为

int dc = GlobalVariableGet("GV_name");

可视化器和单一测试中一切正常。因此,我决定省去声明一个 "额外 "的变量,以减少代码大小。在我按以下方式修正了代码后,一切都开始工作了,在优化器和单一测试中都有相同的结果。

string GlobVar = "GV_name";  // объявил переменную в индикаторе на глобальном уровне программы

int start(){
  GlobalVariableSet(GlobVar, number);
}
string GlobVar;  // объявил переменную в советнике на глобальном уровне программы
int dc;

int start(){
  dc = GlobalVariableGet(GlobVar);
}

因此,在指标和EA中设置全局变量使一切都正常工作。

 

晚上好,各位同事。

我决定重新启动这个话题,因为我遇到了一个同样的问题。

我的专家顾问不使用图形对象。我设置了一个到处都一样的自定义点差。然而,单一测试与优化结果 有很大的不同。此外,我在不同的电脑上进行了单次测试,它们 看起来 很相似,但与优化结果不一致。

也许有人已经找到了解决办法?

 
Andrey Kaunov:

晚上好,各位同事。

我决定重新启动这个话题,因为我遇到了一个同样的问题。

我的专家顾问不使用图形对象。我设置了一个到处都一样的自定义点差。然而,单一测试与优化结果 有很大的不同。此外,我在不同的电脑上进行了单次测试,它们 看起来 很相似,但与优化结果不一致。

也许有人已经找到了解决方案?

为什么它们应该是一样的?如果只是通过对参数的全面分析和选择最佳方案。但这是昂贵的,而且是资源密集型的。这就是我们使用遗传算法的原因。而它们基本上是这样建立的:从那些被优化的参数集中随机抽样 ,然后选择最好的一个,在那里进行更详细的搜索。例如,6个参数。提出最佳解决方案就像6维空间中的最高密度。而且可以有很多密集化的点。好的算法给出光滑的6维体积滑道,密度不大,优化会找到它们,如果算法给出尖锐的密度,那么结果可能是随机的。也就是说,优化会找到密度,但不是每次都是同一组参数(相同的模型)。

 

瓦莱里,我不回答,而是引用,请允许我......

eugene-last:

嗯...我认为很多人只是拒绝理解这个问题。或者故意走开。

什么是优化,什么是单一测试?答案:优化是几个单一的测试。
这意味着什么? 回答:理论上意味着优化通过是相同的,最后的结果与单一测试相同。

那么,在实践中,事实证明情况并非如此。而专家顾问(顺便说一下,这不是一个格言,我看到它困扰着这里的一些人)并没有失败,因为单一测试显示了完全相同的结果。那么,为什么这个单一的优化测试会得到不同的结果呢?"?"?"?"?"?"?

 
Andrey Kaunov:

晚上好,各位同事。

我决定重新启动这个话题,因为我遇到了一个同样的问题。

我的专家顾问不使用图形对象。我设置了一个到处都一样的自定义点差。然而,单一测试与优化结果 有很大的不同。此外,我在不同的电脑上进行了单次测试,它们 看起来 很相似,但与优化结果不一致。

也许有人已经找到了解决方案?

1.检查所有变量是否被初始化,尽管在过去的MQL4中--未初始化的变量等于0,现在我不知道。

2,如果你使用动态数组--你需要检查ArrayResize()的结果--我有一个问题,我为4-5个指标做了EA,结果发现一个指标吃掉了所有的内存,在我的EA中,ArrayResize()并不总是给出要求的数组大小--它曾经工作过,或者没有。如果我没有弄错的话,MQL4最大大约3Gb的内存,用于MQL-程序,终端是32位

 
Andrey Kaunov:

瓦莱里,我不回答,而是引用,请允许我......

我不太清楚,我不知道。优化毕竟不是几个单一的测试,而是很多。所以为了速度,也许输入的数据可以不同。为了弄清这个问题,我们需要简单的可重复的问题代码。然后也许开发者会回答。

 
Igor Makanu:

1.检查所有的变量是否被初始化,尽管以前在MQL4中--未初始化的变量等于0,现在我不知道了,顺便说一下,这也涉及到指标。

2、如果你使用动态数组--你需要检查ArrayResize()的结果--我遇到过这个问题,我为4-5个指标做了EA,结果发现一个指标吃掉了所有的内存,在EA中,我没有一直用ArrayResize()标记数组的请求大小--它起作用了,其他时间都没有作用。如果我没有弄错的话,MQL4最大大约3Gb的内存,用于MQL-程序,终端有32位

伊戈尔,谢谢你的提示。我将尝试在这个方向上做一些研究。

Valeriy Yastremskiy:

我不确定,我不知道。因此,为了速度,输入的数据可能会有所不同。为了弄清这个问题,我们需要简单的可重复的问题代码。然后,也许开发者会回答。

那么,没有什么应该是不同的,否则就失去了优化的全部意义。而开发商10年来都没有回答任何问题......。

 
Andrey Kaunov:

伊戈尔,谢谢你的提示。我会试着朝这个方向去挖掘。

那么,没有什么应该是不同的,否则就失去了优化的全部意义。而开发商10年来都没有回答任何问题......。

开发人员不理解文字和投诉。只有可理解的代码才能再现问题)。

 
Igor Makanu:

1.检查所有的变量是否被初始化,尽管以前在MQL4中--未初始化的变量等于0,现在我不知道了,顺便说一下,这也涉及到指标。

2、如果你使用动态数组--你需要检查ArrayResize()的结果--我有这个问题,我在4-5个指标上做了EA,结果发现一个指标吃掉了所有的内存,而在EA中,我没有一直用ArrayResize()标记数组的请求大小--它曾经工作或不工作。如果我没有记错的话,在MQL4 中, MQL-程序内存最大约为3Gb,终端为32位

4里有零,5里有垃圾。上一次这样的问题似乎正是因为找到了在OnInit之外初始化的变量,并在优化运行过程中发生变化,即在

在下一次传递中,他们最终没有得到他们的原始价值。