文章 "连续前行优化 (第四部分): 优化管理器(自动优化器)"

 

新文章 连续前行优化 (第四部分): 优化管理器(自动优化器)已发布:

本文主要目的在于阐述运用我们的应用程序进行操控的机制及其能力。 因此,本文可视为有关如何运用该应用程序的指南。 它涵盖了所有可能的陷阱,以及应用程序用法的细节。

为继续分析所创建程序,我们首先需要定义该项目的初衷。 我们决定在交易中运用科学的方法,并着手创建清晰的程序化交易算法(无论我们与何种类型的机器人打交道,基于指标亦或是应用模糊逻辑和神经网络 — 所有这些都是执行特定任务的编程算法)。 因此,选择优化结果的方式也应形式化。 换言之,如果在交易过程中拒绝采用随机性,那么准备交易的过程也应该是自动化的。 否则,我们可以随机地选择自己喜欢的结果,这比系统交易更接近直觉。 这一思路是鼓励我创建此应用程序的第一个动机。 下一个则是能够利用优化来测试算法 — 运用下图所示的连续前行优化。   


连续前行优化在给定的时间区间内,轮流在历史(黄色)和前向验证(绿色)优化过程之间交替。 假设您拥有 10 年的历史数据。 我们确定优化区间应等于 1 年的间隔,而前向验证间隔则由 1 个季度(或 3 个月)组成。 作为结果,我们的间隔时间等于 1.25 年(1 年+ 1 个季度),这包含了一个优化通关测试 + 一个前向验证测试。 在图例中,每行代表该时间间隔。

作者:Andrey Azatskiy

 
认真工作。比较同一 EA 上不同自动优化 实现之间的结果会很有意思。
 
fxsaber:
认真工作。在同一 EA 上比较自动优化的不同实现方式的结果会很有意思。

感谢您的积极反馈

 

你们能义务完成这样的工作,真是了不起。有一周的写作时间和大约半年的代码开发时间。自动化优化难道不是终端客户端最重要的任务吗?不幸的是,MQ 并不重视这一点,而是更关注经纪人的请求(他们会付钱)。奇怪的是,并没有出现用户热情洋溢的评论。怎么,没人在优化?

我还没来得及编译这个项目,只是在调试模式 下看了看界面,读了读文章,但一切看起来都非常有前景。我需要找到如何在 Visual Studio 中编译的说明。

如果能在市场概览中为每个优化区间添加枚举工具的功能就更好了。这需要电力,但在短时间内可以对结果进行评估。嗯,也许还能实现俄语本地化?不过一切都很清楚了。

我与您握手并为您的劳动鞠躬。

 
Good Beer:

你们能义务完成这样的工作,真是了不起。有一周的写作时间和大约半年的代码开发时间。自动化优化难道不是终端客户端最重要的任务吗?不幸的是,MQ 并不重视这一点,而是更关注经纪人的请求(他们会付钱)。奇怪的是,用户并没有热情洋溢地发表评论。怎么,没人优化它?

我还没有机会编译该项目,只是在调试模式 下看了看界面,读了读文章,但一切看起来都非常有希望。我需要找到在 Visual Studio 中编译的说明。

如果能在市场概览中为每个优化区间添加枚举工具的功能就更好了。这需要电力,但可以在短时间内评估结果。嗯,也许还能实现俄语本地化?不过现在一切都很清楚了。

我与您握手并为您的劳动鞠躬。

感谢您的评论,希望我的开发对您有用。在今后的文章中,我们将介绍如何在 VS 中构建项目,以及如何实现自己的优化逻辑。

关于编译,如果您在工作室的调试模式下运行项目,它已经编译完成。您可以在 MetaTrader Auto Optimiser/bin/Debug 目录中找到它。

 

我还没有开始你的课程,但第一个问题已经出现了:

1.我的理解是否正确--不支持用户自定义优化标准?非常需要。

2.如何确保持续优化滑动?是否必须手动输入所有优化和前进范围?为什么不这样实现?

优化开始日期/优化周期(月、周、日)/优化范围/前向周期/前向范围。以编程方式将周期划分为多个阶段。我在多重测试器中做到了这一点。但一年的时间,哪怕一次写出一周,也会让你大吃一惊。还可以使用剥头皮功能。

3. 只是好奇:为什么需要 "TESTER_ONLY "宏替换?没有它,EA 会从图表中卸载。

 
Good Beer:

我还没有开始你的课程,但我已经有了第一个问题:

1.我的理解是否正确--不支持用户自定义优化标准?非常需要。

2.如何提供连续的优化滑动?是否必须手动输入所有优化和前进范围?为什么不这样实现?

优化开始日期/优化周期(月、周、日)/优化周期范围/前向周期/前向范围。以编程方式将周期划分为多个阶段。我在多重测试器中做到了这一点。但一年的时间,哪怕一次写出一周,也会让你大吃一惊。还可以使用剥头皮功能。

3. 只是好奇:为什么需要 "TESTER_ONLY "宏替换?没有它,EA 会从图表中卸载。

1.我没有填写自定义标准,因为有许多不同的其他替代,但在将来,如果我想开发这个项目(因为本系列的所有文章都将完成,我计划再写 2 篇) - 您可以添加它,这并不难。这是一个合理的决定,谢谢您的建议。

2.关于日期,您只需输入一次,然后保存到文件中,将来只需加载保存的文件即可。我是根据自己在期货市场上进行股市测试时使用的情况做出这个细分的。期货测试是在主食上进行的,而主食日期并不固定,是由经纪人提供的。因此,我手动设置了钉书钉的细目,这样测试期就不会落在钉书钉的时刻。您只需输入一次所需的优化窗口,将其保存到文件中,然后加载该文件即可。

3. 不会在现实生活中意外运行的宏。Expert Advisor 是测试版,还没有完成实际交易。我决定对这个宏进行 #define,以免有人在实际交易中意外运行它。有了这个 #define,"智能交易系统 "只能在测试器中运行,如果您在图表上加载机器人,它就会被直接删除。

 
Good Beer:

2.如何确保持续的滑动优化?

在最后一篇文章中,我将逐步描述提供滑动优化的整个过程,并附上代码。重点是,优化算法本身是单独实现的。正如我前面提到的,你可以在当前优化算法的基础上添加其他算法。

 

Good Beer:

我还没有成功编译该项目...

最简单快捷的编译方法是打开项目并按下CTRL+SHIFT+B。

更直观的方法是点击编辑器中的绿色箭头,应用程序将以代码调试模式 启动,但编译也将进行。

另一个选项 - 从下拉菜单中点击 Build

Later(MetaTrader Auto Optimiser/bin/Debug(或 MetaTrader Auto Optimiser/bin/Release,取决于所选的构建类型)) - 编译的程序就会出现。

 

在排序窗口中可以输入多个优化标准。无论如何,都离不开自定义的乘法。例如,以交易次数为根,或以夏普乘以交易次数,都是不错的选择。请不要放弃这个想法。

可以使用 MQL 工具创建周期列表。

关于 #define TESTER_ONLY,我的意思是括号中的表达式在没有 TESTER_ONLY 的情况下也能工作。我不明白为什么要使用替换?

 
Good Beer:

在排序窗口中可以输入多个优化标准。无论如何,都离不开自定义的乘法。例如,以交易次数为根,或以夏普系数乘以交易次数,都是不错的选择。请不要放弃这个想法。

可以使用 MQL 工具创建周期列表。

关于 #define TESTER_ONLY,我的意思是括号中的表达式在没有 TESTER_ONLY 的情况下也能工作。我不明白为什么要使用替换?

好吧,等我完成文章的第一版后,我会继续写下去,但还是有一些想法我想实现。

句号列表--正是自动优化器所需要的,它自己会切换测试,并且应该看到这些句号(根据结果程序的逻辑)。

关于定义:

#ifdef  TESTER_ONLY
   if(MQLInfoInteger(MQL_TESTER)==0 &&
      MQLInfoInteger(MQL_OPTIMIZATION)==0)
     {
      Print("This expert was created for demonstration! It is not anabled for real trading !");
      ExpertRemove();
      return(INIT_FAILED);
     }
#endif

表达式封装在 #ifdef #endif 结构中--它是在编译时执行的条件。如果通过定义 #define TESTER_ONLY 来编译项目,则编译时将包含该条件下的表达式,如果不声明,则不会包含该表达式。这样,如果有人想在真实环境中试验和运行机器人,只需注释 #define TESTER_ONLY,而无需更改源代码。



本系列的第一篇文章介绍了考虑多种选择的方法。所有内容都是通过参数规范化实现的。不过,正如我之前所说的,你可以创建自己的优化器,并建立自己的系统来计算这些参数--这将在下一篇文章中介绍。

该网站使用cookies。了解有关我们Cookies政策的更多信息。