文章 "无需 Python 或 R 语言知识的 Yandex CatBoost 机器学习算法"

 

新文章 无需 Python 或 R 语言知识的 Yandex CatBoost 机器学习算法已发布:

本文通过一个具体的例子提供了机器学习过程的主要阶段的代码和描述。您不需要 Python 或 R 语言知识就能够获得模型。此外,基本的MQL5知识已经足够了- 这正是我的水平。因此,我希望这篇文章能为广大读者提供一个很好的指导,帮助那些对评估机器学习能力感兴趣的人,并在他们的课程中实现这些能力。

结果不是很特别出众,但可以注意到,主要的交易规则“避免金钱损失”是遵守的。即使我们从 CB_Svod.csv 文件中选择另一个模式,效果仍然是正面的,因为我们得到的最失败的模型的财务结果是-25个点,所有模型的平均财务结果是3889.9个点。


图 9 对于期间 01.08.2019 - 31.10.2020 的已训练模型的财务结果


作者:Aleksey Vyazmikin

 
感谢您的文章)您认为哪些指标在对 wp 进行分类时最为成功?ROC-AUC、准确率、F1 还是其他?
 
Maxim Dmitrievsky:
感谢您的文章 ) 您发现哪些指标在对 wp 进行分类时最为成功?ROC-AUC、准确率、F1 还是其他?

不客气)

我主要处理不平衡样本,对于二元分类来说,零比单位多,单位值也比零高得多。事实上,我只看 Recall 和 Precision。

召回率(Recall)--显示模型因获"知识 "而产生的活动,即模型对单位形式的 "刺激 "做出反应的频率,指数越高,模型做出反应的单位百分比越高。

精确度--显示响应的精确度,在这里,根据不同的策略,精确度即使是很小的百分比(例如 45%)也是可以接受的。

标准指标主要考虑的是分类对象的等价性,这不足以做出最终决定。

为了选择模型组,我还使用了 "误差平衡 "指标--对动态误差进行评估。

总的来说,我们使用了 30 多种不同的指标,也许这是一个单独的研究课题和文章。

 
Aleksey Vyazmikin:

不客气)

我主要处理非平衡样本,对于二进制分类来说,零比单位多,而单位的值又比零多很多。事实上,我只看 Recall 和 Precision。

召回率 - 显示模型对单位形式"刺激 "做出反应的频率,指数越高,模型做出反应的单位百分比越高。

精确度- 显示反馈的准确性,在这里,根据不同的策略,精确度即使是很小的百分比也是可以接受的,例如 45%。

标准指标主要考虑分类对象的等价性,但这不足以做出最终决定。

为了选择模型组,我还使用了 "误差平衡 "指标--对动态误差进行评估。

一般来说,会用到 30 多种不同的指标,也许这是一个单独的研究课题和文章。

那么,对于每种策略,从条件上讲,都要使用一个信号频率较低的独立模型,然后再将它们结合起来?我从文章中并没有真正理解这一点。这种方法本身的理念很有意思。你之前在 MO 主题中谈到了叶片选择等问题。还是这是另一个话题?
 
Maxim Dmitrievsky:
也就是说,每种策略都使用一个信号频率较低的单独模型,然后将它们组合起来?

计划使用不同的基本策略,以信号发生器的形式进行不同的设置,并相应地为每个信号使用不同的模型。由于计算预测器的过程成本较高,因此应在一个智能交易系统中完成。目前,我还没有一个可以支持挂单 和止损的虚拟仓位系统,因为计划在净额结算账户中使用这种方法。

 
Maxim Dmitrievsky:
我只是没有从文章中真正理解这一点。这种方法本身的理念很有意思。你之前在 MO 主题中谈到了叶片选择等问题。还是这是另一个话题?

叶片是一个独立的话题。事实上,从树叶的特性来看,我并没有很好地选择树叶(我只是从第一棵树上摘取了树叶)。前几天我了解到XGBoost 有一个保存树叶的选项,但我需要 Phyton,也许那里的树叶质量更好。

 

阿列克谢,有了开头!

在我看来,作为第一篇文章,它已经非常不错了。质量比一些写了十几篇文章的作者要高得多。谢谢,我会仔细研究其中的细微差别。

附:我看了视频。有这样热情的年轻人真好.....

 
Denis Kirichenko:

阿列克谢一惊!

在我看来,作为第一篇文章,它已经非常不错了。质量比一些写了十几篇文章的作者要高得多。谢谢您,我会仔细研究其中的细微差别。

附:我看了视频。有这样热情的年轻人真好.....

谢谢!

这篇文章是作为使用命令行的CatBoost 应用手册撰写的,随后集成到 MT5 中,我想展示使用表格"CSVfast"工作的好方法,它从根本上方便了我处理大型 CSV 文件,我已经使用它两年多了。根据这一需要,我决定用标准指标进行一次实验,并取得了成功。

附录中是 EA 的代码和组织整个基础架构的脚本--对我来说,重要的是我所描述的内容可以被复制--所以请测试并报告错误,提出改进建议--我希望大家共同为这项工作做出贡献。

是的,年轻人当然与众不同,只是年龄越大,他们与社会环境的距离就越远,客观感知也就越少。

 

感谢您的文章。我知道这篇文章正在准备之中,一直在等待它的发表....。您和马克西姆-德米特里耶夫斯基(Maxim Dmitrievsky)前一篇文章中的短周期测试结果都不错。机器学习方面的研究结果表明,在 ns 没有经过训练的数据上进行相邻的短周期测试,几乎总是能仅根据神经网络学习 逻辑得出积极的竞价结果,并进一步要求进行任何优化或再训练。您是否考虑过将重新训练的过程自动化,或者在训练神经网络之前先进行一段时间的短期测试,然后再进行转换。这样可以更广泛地了解特定方法的成功与否。

 
Andrey Dibrov:

感谢您的文章。我知道这篇文章正在准备之中,一直在等待它的发表....。您和马克西姆-德米特里耶夫斯基(Maxim Dmitrievsky)前一篇文章中的短周期测试结果都不错。机器学习方面的研究结果表明,在 ns 没有经过训练的数据上进行相邻的短周期测试,几乎总是能仅根据神经网络的学习逻辑得出积极的竞价结果,并进一步要求进行任何优化或再训练。您是否考虑过将重新训练的过程自动化,或者在训练神经网络之前先进行一段时间的短期测试,然后再进行转换。这样可以更广泛地了解特定方法的成功与否。

很高兴你觉得这篇文章很有趣。

我的方法和马克西姆文章 中的方法除了使用的工具--CatBoost--外,其他方面都有所不同。在我的文章中,样本是按信号准备的,信号之间可以间隔 100 多个条形图,而马克西姆的文章则对每个条形图都进行了长时间的训练,以找到一般模式,马克西姆的训练更侧重于趋势,我建议使用复杂的预测器,而马克西姆的文章则展示了价格序列简单变换的变体。马克西姆首先展示了如何用 python 训练模型,并在 MT5 中应用,而无需使用 python,这非常方便--这种方法本身不能用于交易,这也是文章中包含 "天真方法 "一词的原因!我的文章也关注 CatBoost 模型的训练过程和与 MT5 的集成,但训练不是在 python 中完成的,而是在单独的独立控制台程序中完成的,该程序是 CatBoost 库的封装程序,允许使用与 python 相同的所有功能。此外,文章还考虑了顾问的结构,以显示从 A 到 Z 的整个信息收集和处理周期。训练的成功与否取决于预测因子,在本文中,我们主要使用了标准振荡器形式的预测因子。和马克西姆一样,我们的目标不是提供一个现成的赚钱方案,而是打好基础。

至于测试--你太不专心了--马克西姆的文章显示了 EA 在 4 个月的训练之外的样本上的行为,而我的 EA 显示了 15 个月的积极结果。如果我们坚持市场波动的范式,那么在没有重新培训的情况下工作超过一年就是一个非常好的结果。

如果样本足够多,您建议的实验是可行的,但在这方面,我的方法不如马克西姆文章中描述的方法--在较小的时间间隔内,根本没有足够的数据进行训练。根据我的观察,我们至少需要 15000 个信号来进行训练,特别是如果我们考虑到没有对预测因子进行单独分析和选择的话。

是的,请注意,测试样本(文章中的 test.csv)仅用作评估所生成模型质量的一种手段,并未对其进行训练,因此,我们仅训练了整个样本的 60%,即从 2014 年 6 月 1 日至 2018 年 4 月 30 日的数据 - 模型并未在其余数据上建立,因此我们应该说,该模型是在 2.5 年前的相关市场信息上运行的。

 
Aleksey Vyazmikin:

很高兴你觉得这篇文章很有趣。

我和 Maxim 在文章 中使用的方法完全不同,除了使用的工具--CatBoost。在我的文章中,样本是按信号准备的,信号之间可以间隔 100 多个条形图,而 Maxim 的文章对每个条形图都有较长的训练期,以搜索一般模式,Maxim 的训练更侧重于趋势,我建议使用复杂的预测器,Maxim 的文章展示了价格序列简单变换的变体。首先,马克西姆展示了如何在 python 中训练模型,并在 MT5 中应用,而无需使用 python,这非常方便--这种方法本身不能用于交易,这就是为什么文章中包含 "天真的方法 "这一短语!我的文章也关注 CatBoost 模型的训练过程和与 MT5 的集成,但训练不是在 python 中完成的,而是在一个单独的独立控制台程序中完成的,该程序是 CatBoost 库的封装程序,允许使用与 python 相同的所有功能。此外,文章还考虑了顾问的结构,以显示从 A 到 Z 的整个信息收集和处理周期。训练的成功与否取决于预测因子,在本文中,我们主要使用了标准振荡器形式的预测因子。和马克西姆一样,我们的目标不是提供一个现成的赚钱方案,而是打好基础。

至于测试--你太不专心了--马克西姆的文章显示了 EA 在 4 个月的训练之外的样本上的行为,而我的 EA 显示了 15 个月的积极结果。如果您坚持市场波动的模式,那么工作超过一年而无需重新培训就是一个非常好的结果。

如果样本足够多,您建议的实验是可行的,但在这方面,我的方法不如马克西姆文章中描述的方法--在时间间隔较小的情况下,根本没有足够的数据进行训练。根据我的观察,我们至少需要 15000 个信号来进行训练,特别是如果我们考虑到预测因子没有被单独分析和选择的话。

是的,请注意,测试样本(文章中的 test.csv)仅用作评估所生成模型质量的一种手段,并未对其进行训练,因此,我们仅训练了整个样本的 60%,即从 2014 年 6 月 1 日至 2018 年 4 月 30 日的数据 - 模型并未在其余数据上建立,因此我们应该说,该模型是在 2.5 年前的相关市场信息上运行的。

我注意到了测试期的长度。但是,稳定的正向结果是在与训练期相邻的短时间内出现的--一个月到两个月。比方说,我们在两年的历史上进行培训。测试 + 一个月。保存结果。在训练(再训练)之前,对这个月进行移位(或添加)。测试 + 月份。保留结果。以此类推。