优化和样本外测试。 - 页 6

 
Mathemat:
维塔,说得好。但我想说,概括能力不仅是EA的属性,也是学习算法的属性,它必须正确识别这种能力。methaquot算法并没有揭示这种能力,它通过过度优化破坏了这种能力。

元引号算法并没有发现这种能力,而是被过度优化所吞噬。-- 我希望看到一个例子。
 

这样的例子比比皆是。我不清楚。我的意思是,对优化器的使用考虑不周,就像 "一、二、三!"导致灰名单的过度和不合理的乐观。 例如,最近的例子 -"外汇对我们不利吗?或者,也许我不了解它'。或"趋势顾问(专家)。我在等待反馈。'.这些都是窍门。

关于 "毁于一旦":在一个数据段上的边际曲线拟合会导致在真实的、样本外的数据段上持续盈利的概率极低。 最佳状态是在过度盈利和收支平衡之间的某个地方,这是NS训练算法中固有的。

请告诉我,维塔,我们的遗传优化器在其纯粹的形式下是否为专家顾问在未来的盈利能力提供任何保证--即使它在测试/优化中是超级大的盈利?我不是在谈论测试器,测试器就很好。

P.S. 终于找到了MQ最早提到的遗传优化器之一:https://www.mql5.com/ru/forum/50805。见Filin的 帖子和Slawa的 回复。答案表明,优化器只对专家顾问能力的粗略 估计有用,仅此而已。大多数灰名单将其作为专家顾问 "全面 "测试的第一和唯一工具。这是一种业余的做法,会导致错误的幻觉。事实上,这个工具只用于粗略估计,根据吝啬法则,只适合 在出现明显的负面结果时废止明显不好的专家顾问--但不适合对专家顾问的价值作出正面结论......

 

Mathemat писал (а):

这样的例子比比皆是。我不清楚。我的意思是,对优化器的使用考虑不周,就像 "一、二、三!"导致灰名单的过度和不合理的乐观。 例如,最近的例子 -"外汇对我们不利吗?或者,也许我不了解它'。或"趋势顾问(专家)。我在等待反馈。'.这些都是调整。

--> :)明白了。不过,我同意,元引号不能成为 "草率应用优化器 "的责任。我赞成人的思维和优化器的优化。例如,我知道我的专家顾问的交易所依据的法律。优化器给了我很多有利可图的参数集。它是如何获得它们的--"直截了当 "地借助于遗传学或 "聪明地 "借助于神经元网络--这对我来说并不重要,因为在任何情况下,我批判性地(可以说是故意地)看一下结果,并立即把苍蝇和肉片分开,因为只有我知道我的专家顾问交易的确切规律。

--> 想象一下,我们有一个 "智能 "优化器,它可以准确地说:"这里是最佳的操作参数集。我发誓,不调整!"或 "不,伙计们,对于这个EA,我不能选择工作参数,而不是仅仅适合曲线。" 这些将是时代!一个优化器认证在EA中实施的策略!从metaquotes免费访问!"。很好!我真的想要一个。

关于 "斩草除根":一个数据区间上的边际曲线拟合在真实的、样本外的区间上导致持续盈利的概率极低。 最佳状态是在收支平衡和超级盈利之间的某处,这是NS学习算法所固有的。

--> "最佳状态在中间某处 "是一种直观的感觉,源于完全优化的 "墓穴 "在未来肯定会失败,所以不应该将优化进行到底,或者说 "真相就在附近 "之类的说法。这种感觉与现实毫无关系。规律性可以被优化到极致,只有在那里,它才会展现出它的全部光辉。无论你怎么扭曲它,它都没有用,但可以培养出最佳状态在中间某处的感觉。

请告诉我,维塔,我们的遗传优化器在其纯粹的形式下是否为专家顾问未来的盈利能力提供任何保证--即使是在测试/优化部分有超级大的盈利能力的情况下?我不是在谈论测试器,测试器就很好。

--> 我不是,而且我认为从优化器的结果中要求这种保证是不恰当的。见上文关于 "智能",给予保证,优化器。

P.S. 终于找到了MQ最早提到的遗传优化器之一。

https://www.mql5.com/ru/forum/50805

.见Filin的 帖子和Slawa的 回复。从答案中可以看出,优化器只对专家顾问的能力有一个粗略的 估计,仅此而已。大多数灰名单将其作为专家顾问 "全面 "测试的第一和唯一工具。这是一种业余的做法,会导致错误的幻觉。事实上,这样一个只用于粗略估计的工具,根据吝啬法则,在出现明显的负面结果的情况下, 足以废弃明显不好的专家顾问,但不能对专家顾问的价值作出积极的结论......

-->"优化器只对粗略 估计EA的能力有用"--再次声称优化器无法准确 估计EA的能力,但实际上是对EA的策略进行认证。只剩下创建一个生成策略的机器人,将其送入优化器,获得关于其适用性的意见,然后去保证 切钱。你喜欢这种幻觉吗?


 

幻觉是伟大的,但只是一种幻觉。但是,利用MQL4中可用的手段,有可能极大地改善我们所拥有的(测试器/优化器)的应用。否则,我们仍然会看到每三天一次的超级直升机,只有试装的结果,假装是正常的测试......

而且我对元引号没有任何抱怨:优化器所做的正是它的设计目的,即在Expert Advisor的参数空间中进行遗传优化,事实上它就是遗传拟合。

我对测试人员有一个建议:最好能有一个像test()这样的标准函数,其中所有必要的参数都能清楚地指定,包括 所有测试的历史文件的名字。僵硬地将文件名与内容捆绑在一起,不是一个足够灵活的解决方案。

 
leonid553:

大家下午好。

在优化一个EA后,我们经常要对优化器建议的十几组参数进行呆板的抽样。

我有一个在样本之外优化专家顾问的想法。假设我们向专家顾问 "收费",通过一些参数进行优化。我们确定了一个日期。例如,从1月1日起。2006年至2007年1月1日。

我们已经收到了几千个专家顾问。之后,我们将带有优化结果的页面保存为一个单独的文件。接下来,我们设置以下历史时期进行优化,即增加一两个月,或者根据需要增加。

在我们的案例中,我们设定的例子是从1月1日起。2007年至2007年6月1日。而且我们再次使用优化。更确切地说,它不会很优化。优化器不应该采取EXPERT'S PROPERTIES中的参数,而是从我们第一次优化后保存的文件中重新选择参数集。在这第二次优化之后,我们只剩下那些在样本之外获得利润的vAriens了!这也是我们的目标。

理想的结果是,我们得到了 "理想的参数",以便以后在网上进行测试!

我认为这将是对mt4测试器的一个有益补充。可能,而且很有可能,它已经被某个地方的人实施了。如果有人知道,请分享链接!

我由于知识不多,无法弄清楚如何在实践中去实施这个想法。

当然,这种算法已经有了实际的实现......。在论坛上,我只发现了它的衍生品...例如,"如何实施你的优化标准"...

我想分享我对这个问题的解决方案....

让我们准备一个EA...让我们添加外部参数...

extern int    Counter      = 1;        // Счетчик подсчета количества оптимизаций. Если равен 0, то обычная оптимизация...
extern string Filename     = "";       // Имя файла с оптимизируемыми параметрами

int    FilePtr=0;                      //  Положение файлового указателя

在函数init()中插入以下块....

   if(IsOptimization() && Counter>0)
   {
// Для ускорения процесса будем поддерживать сквозной указатель файловой позиции
// с помощью глобальной переменной FilePtr 
// На первом проходе инициализируем её нулём.
      if (GlobalVariableCheck("FilePtr")==false || Counter == 1) 
      {
         FilePtr = 0; 
         GlobalVariableSet("FilePtr",0); 
      } 
      else 
      {
         FilePtr = GlobalVariableGet("FilePtr"); 
      }

      int handle=FileOpen(Filename,FILE_CSV|FILE_READ,';');
      FileSeek(handle,FilePtr, SEEK_SET);
      Parametr1=StrToInteger(FileReadString(handle));
      Parametr2=StrToInteger(FileReadString(handle));
      Parametr3=StrToInteger(FileReadString(handle));

      FilePtr = FileTell(handle); 
      GlobalVariableSet("FilePtr",FilePtr);
      
      FileClose(handle); 
   }

Parametr1, Parametr2, Parametr3 - 外部参数,应该被优化....。

这就是全部......。

 
kharko:

当然,已经有这种算法的实际实现了......在论坛上,我只发现了它的衍生品...例如,"如何实现你的优化标准"...

我想分享我对这个问题的解决方案....

看看Nikolay Kositsin的文章,例如《基于流行交易系统的专家和交易机器人优化炼金术(续)》

 

它是如何工作的?

在时间间隔A,我们运行通常的参数优化(Counter=0) ......

现在我们的任务是创建一个带有优化参数的文件,并将其保存在.../tester/files目录下。

在Excel中选择带有我们参数的列,将其复制并粘贴到Word或记事本中作为未格式化的文本...

在Wordboard或记事本中,将每一行转换为:value1;value2;value3的形式。

将其保存在.../tester/files目录下。

如果你不是太懒,你可以写一个宏来即时执行上述操作...

现在我们可以在时间段B上运行优化...现在的优化参数将是Counter...指定最大值(列表中的行数)...

就这样,问题就解决了......好运...

 
Vinin:

看看尼古拉-科西津的文章,比如这篇《基于流行交易系统的专家顾问和交易机器人优化的炼金术(续)》

我读了这篇文章...我认为我的变体更简单,更方便....。而且最重要的是它是普遍的...

上述实施与该支部作者的愿望完全吻合......

 
一个现实生活中的优化实例...见附件
附加的文件:
sample.zip  1201 kb
 

谢谢你,kharko 的解决方案。我会努力使用它的!