亲爱的作者您所做的工作是巨大的!编程水平也令人印象深刻。但结果却是无法使用!要做到这一点,您必须穿越文章的整个周期,收集不同的文件,编译,查找遗漏的文件,考虑它们是否已在新文章中更新......?毋庸置疑,这样的工作值得将其成果收集在一个地方。
同时,在我看来,还没有人意识到这项工作对这一资源的真正意义(交易者)。但这并不奇怪,你还需要发展到这样的水平。如果 mt5 能够成长为一个正常的 WFO,那将是一件好事,但它并不想....。此外,还有什么空间可以用来创建附加组件呢?我最想要的是实现交叉验证,将故事分成 K 个部分,依次抛出每个部分,对剩余部分进行优化,然后对抛出的部分进行检查,如此反复 K 次。这样,从最简单的 "稳定参数集 "开始的任何假设,都可以比通常的滑动选择法更可靠地得到验证。
亲爱的作者您所做的工作是巨大的!编程水平也令人印象深刻。但结果却是无法使用!要做到这一点,您必须穿越文章的整个周期,收集不同的文件,编译,查找遗漏的文件,考虑它们是否已在新文章中更新......?毋庸置疑,这样的工作值得收集在一个地方。
与此同时,据我所知,还没有人意识到这项工作对这一资源的真正意义(交易者)。但这并不奇怪,你还需要成长到这样的水平。如果 mt5 能够成长为一个正常的 WFO,那将是一件好事,但它并不想....。此外,还有什么空间可以用来创建附加组件呢?我最想要的是实现交叉验证,将故事分成 K 个部分,依次抛出每个部分,对剩余部分进行优化,然后对抛出的部分进行检查,如此反复 K 次。这样,从最简单的 "稳定参数集 "开始的任何假设,都可以比通常的滑动选择法更可靠地得到验证。
感谢您如此中肯的评论。我计划再写三篇文章,介绍自动优化器本身。其中一篇文章将介绍具体的使用说明和程序本身。很多文章都只公布了工作结果,却没有解释是如何实现的。目前,我们将介绍优化报告的上传部分以及报告的形成过程,在下一篇文章中(我正在撰写),我们将介绍优化程序本身--这是一个用 C# 编写的程序,可以在终端运行优化程序。顺便说一下,在这个程序中,优化算法本身是放在接口部分的,所以一旦这一轮文章完成,你就可以实现你的想法了,为此你需要在 C# 中实现 IOptimiser 接口,并连接自定义优化器的构造函数,关于如何实现--将在接下来的文章中详细介绍。
关于所有东西都放在不同的地方这一事实--我会在我正在写的那些文章中尝试列出整个代码,尽管这会打断叙述的主线,也许我会将代码发布到 github 上,但编译后的文件仍然不会发布,因为编译过程并不困难。如果有人有任何关于编译和使用项目的问题,我随时愿意提供帮助。
我还计划撰写 3 篇文章,介绍自动优化器本身。
最近,我已经到了需要将这一过程自动化的地步。我已经开发出一种优化方法,可以在 OOS 历史记录上给出稳定的正结果,但它需要长时间的计算和大量的手工单式工作。而滑动 opta 并不是解决问题的唯一办法。最紧迫的挑战之一是,如何让遗传学家 扩大其确定最佳结果的取值范围,细化其缩小的取值范围,并执行新的 opta。这与一次性为所有参数设置足够宽的范围,并从中挑选最佳值的做法大相径庭。在我的机器人中,参数的数量是如此之多,以至于这样的 opta 要么要花费数周时间,要么就无法足够详细地探索参数空间。
所以我现在在想:我是应该等你,还是自己寻找解决方案? 当然,我应该开始处理你的项目。
目前,在启动调用面板的智能交易系统时,我的终端会崩溃,只留下最后一个条目:
2020.02.02 22:45:07.187 终端 退出,代码为 0
尽管如此,每次启动终端时都会出现以下提示:
2020.02.02.02 23:35:17.747 IPC 初始化 IPC 失败,带信息:
2020.02.02.02 23:35:17.748 终端 IPC 调度器未启动
最近,我意识到需要将这一过程自动化。我已经开发出一种优化方法,可以在 OOS 历史记录上给出稳定的正结果,但它需要长时间的计算和大量单调的手工工作。而滑动 opta 并不是解决问题的唯一办法。最紧迫的挑战之一是如何让遗传学家 扩大其确定最佳结果的取值范围,细化其缩小的取值范围,并执行新的 opta。这与一次性为所有参数设置足够宽的范围,并从中挑选最佳值的做法大相径庭。在我的机器人中,由于参数数量众多,这样的 opta 要么要花费数周时间,要么就无法足够详细地探索参数空间。
我现在在想:是等你还是自己寻找解决方案? 我肯定应该开始处理你的项目。
目前,在启动调用面板的智能交易系统时,我的终端会崩溃,只留下最后一个条目:
2020.02.02 22:45:07.187 终端 退出,代码为 0
同时,每次启动终端时都会出现以下提示:
2020.02.02.02 23:35:17.747 IPC 初始化 IPC 失败,并显示信息:
2020.02.02.02 23:35:17.748 终端 IPC 调度器未启动
关于错误--是在连接我的文件后开始出现的,还是你的机器人以这种方式影响了终端?我没有观察到这样的问题,而且我已经在不止一台电脑上启动了机器人,并添加了文章中提到的内容。我的系统也是 64 位的。
如果你写的是我上一系列的文章(关于优化管理)--最好直接在你的电脑上以调试模式处理,因为我不太可能重现这个问题,无论如何,上次我启动项目时并没有出现这个问题。
关于错误 - 是在连接我的文件后开始出现的,还是你的机器人影响了终端?
根本不是机器人的问题,我只是尝试通过运行 OptimisationManagerExtention Expert Advisor 调用前两篇文章中的面板。之后终端就崩溃了。
我只是尝试通过运行 OptimisationManagerExtention Expert Advisor 调用前两篇文章中的面板。之后终端就崩溃了。
然后--正如我所说,您需要查看特定的计算机和示例。我一眼也看不出问题出在哪里,因为我已经很久没有处理过这个项目了。至少您需要在计算机上安装一个以上的终端,并且图形界面的 dll 位于 MQL5/Libraries 目录中。
在当前的自动优化程序项目中,我将图形界面从终端中移除,它应该作为一个普通程序运行,而不是作为机器人运行,因此不会出现类似问题,至少在 3 个月或更长时间内,我一直在测试它,并且运行了不止一个机器人。至于那个老项目,正如我所说,你需要看一个具体的例子,我不能告诉你原因是什么。
突出显示的参数在一般情况下不起作用。您需要在 TS 中设置两个输入参数,定义一个非交易(抛出)区间。这样才符合实际情况。
在一般情况下,您可以创建一个自定义符号,该符号通过抛出区间从原始符号中获得。
这正是我要做的。只需一个参数就足够了,因为分割是等分的。该参数指定了要丢弃的线段的编号。你也可以添加 "部分数 "参数。
利用安德鲁工具,您可以给主终端一个任务来执行 k 次优化,每次优化都有自己的参数 "验证段数"。不过,这样一来,你就必须编写一个附加程序,将统计数据整合在一起。
如果测试人员可以在遗传过程中强制枚举某些参数,那么一切都会简单百倍。然后就可以用参数 "绘图编号 "来分析 opta 结果。
另一种方法是使用OnTesterDeinit() 函数。我已经在该函数中实现了一个完整的 WFO,你可以很容易地根据任何标准进行交叉验证。但只有在全面搜索的情况下,交叉验证才是 "正确的",因为交叉验证是通过枚举整个测试部分的帧来完成的。在大多数情况下,全面枚举是不现实的。而且,如果我们运行遗传算法,帧集将是不公平的,因为在 Opta 算法的过程中,它也会根据我们想要测试的部分来选择结果。不过,这会造成多大的实际损害还是个问题。如果测试位点的长度与总长度的比例很小,那么遗传学中仍然会有足够多的变体,而测试位点在这些变体中是很糟糕的。而且,在所有这些常见变异之后,还可以再留下一个没有参与变异的位点,并检查其结果。
这正是我想要的。只有一个参数就足够了,因为它被分成了相等的部分。该参数指定要丢弃的部分的编号。您也可以添加参数 "部分数"。
利用安德鲁的工具,您可以给主终端一个任务来执行 k 次优化,每次优化都有自己的参数 "验证部分数量"。不过,这样一来,你就必须编写一个附加组件,将统计数据整合在一起。
如果测试人员可以在遗传过程中强制枚举某些参数,那么一切都会简单百倍。然后,就可以用参数 "绘图编号 "来分析 opta 结果了。
此外,还有fxsaber 工具,它可以帮助解决其他问题。
- www.mql5.com
新文章 连续前行优化 (第三部分): 将机器人适配为自动优化器已发布:
第三部分充当前两部分之间的桥梁:它阐述的是第一篇文章中研究的 DLL,以及第二篇文章中论述的报告下载对象之间的交互机制。 我们将分析从 DLL 导入的包装类的创建过程,该类可依据交易历史记录形成 XML 文件。 我们还将研究一种与此包装器进行交互的方法。
在第一篇文章中,分析了 XML 报告文件的操作机制,和文件结构的创建。 在第二篇文章中则研究了报告的创建。 实验了报告生成机制,从加载历史记录对象开始,到生成报告对象结束。 在研究报表创建过程中涉及到对象时,详细分析了其计算部分。 本文还包含主要系数公式,以及可能的计算问题的说明。
正如本文概述中提到的那样,本部分中阐述的对象充当了数据加载机制,和报告生成机制之间的桥梁。 除了保存交易报告文件的功能之外,本文还包含参与 XML 报告卸载的类的说明,以及可以自动运用这些功能的机器人模板说明。 本文还论述了如何将创建的功能添加到现有算法。 这意味着自动优化器用户可以同时优化新旧算法。
作者:Andrey Azatskiy