文章 "利用CatBoost机器学习模型作为趋势跟踪策略的过滤器"

 

新文章 利用CatBoost机器学习模型作为趋势跟踪策略的过滤器已发布:

CatBoost是一种强大的基于树的机器学习模型,擅长基于静态特征进行决策。其他基于树的模型,如XGBoost和随机森林(Random Forest),在稳健性、处理复杂模式的能力以及可解释性方面具有相似特性。这些模型应用广泛,可用于特征分析、风险管理等多个领域。在本文中,我们将逐步介绍如何将训练好的CatBoost模型用作经典移动平均线交叉趋势跟踪策略的过滤器。

在商品交易(CTA)策略开发领域,有一条经验法则:每个策略想法背后都最好有清晰、直观的解释。这不仅是人们最初构思策略想法的方式,更有助于避免过拟合问题。即便在使用机器学习模型时,这一建议也同样适用。我们将尝试解释这一想法背后的直觉。

为何这一方法可能奏效:

CatBoost模型会创建决策树,这些决策树接收特征输入并输出每种结果的概率。在本例中,我们仅针对二元结果(1代表盈利,0代表亏损)进行训练。模型会调整决策树中的规则,以最小化训练数据集中的损失函数。如果模型在样本外测试结果中展现出一定的预测能力,我们就可以考虑用它来过滤掉那些盈利概率较低的交易,从而提升整体盈利能力。

对于像我们这样的散户交易者而言,现实期望是,我们训练的模型不会像先知一样精准无误,而只会比随机游走略胜一筹。提高模型精度的途径有很多,我将在后文讨论,但即便只是微小的改进,也是值得尝试的。

CatBoost机器学习模型

作者:Zhuo Kai Chen

 

根据我自己的经验,我只能补充说,在三个月以上的数据上训练模型不会带来任何好处。模型应该能够捕捉当前的模式,并专注于这些模式。你需要贴近市场。

 
Krzysztof Tadeusz Kanacki #:

根据我自己的经验,我只能补充说,用超过三个月的数据来训练模型不会带来任何好处。模型应该能够捕捉到当前的模式并加以关注。你需要贴近市场。

您的观点完全正确。根据我的经验,我也发现使用最近的数据更容易训练出能产生更好结果的模型。不过,主要问题是这种方法限制了训练集的规模,除非你使用的时间框架很短。根据学术论文,趋势跟踪策略在较长的时间框架内比在较短的时间框架内表现更好。因此,你可能会训练出一个可预测性更高但训练样本更少的模型,这很容易造成过度拟合,而原始策略的优势一开始就比较小。这些因素之间需要权衡,更不用说利差也会产生影响。

我的解决方案是,在保留旧数据的同时,为训练集中的新数据分配更大的权重。这样,我们既能适应制度转变后的新模式,又能从多年来保持一致的旧模式中获益。 不过,正如我之前提到的,这些决策总是需要权衡利弊。

 
Zhuo Kai Chen #:

你的观点完全正确。根据我的经验,我也发现使用最近的数据更容易训练出能产生更好结果的模型。不过,主要问题在于这种方法限制了训练集的规模,除非你使用的时间框架很短。根据学术论文,趋势跟踪策略在较长的时间框架内比在较短的时间框架内表现更好。因此,你可能会训练出一个可预测性更高但训练样本更少的模型,这很容易造成过度拟合,而原始策略的优势一开始就比较小。这些因素之间需要权衡,更不用说利差也会起到一定作用。

我的解决方案是,在保留旧数据的同时,为训练集中的新数据分配更大的权重。这样,我们既能适应制度转变后的新模式,又能从多年来保持一致的旧模式中获益。 不过,正如我之前提到的,这些决策总是需要权衡利弊。

每三个月使用最近三个月的数据对模型进行一次重新训练,或许就能达到目的。我稍后会尝试实现这个滚动模型优化的想法。谢谢你的建议。

 

我正在尝试按照您的说明进行操作,但遗憾的是,由于缺少文件参考和下载链接,我无法继续完成最终输出。

我会花时间教您遗漏了什么,因为这看起来是一个很好的过程。

您缺少:

1. FileCSV.mqh 的直接链接,这需要通过其他文章来获取。

2. 所有处理功能的声明

3.充分解释创建或下载文件的过程

CatOnnx.mqh

"\\Files\\CatBoost_Momentum_test.onnx" 4.

4.关于如何使用 pip 或类似工具安装 catboot 的直接链接和相关说明,确保您已安装了 python 所需的依赖项。(我不需要,但其他人需要知道) 5.

5.指导阅读 CB2.ipynb 说明和工作流程。


总之,这一切导致学生在你的文章读到一半时,只能花几个小时寻找正确的过程来完成教程并复制你的结果。

总的来说,我给这篇文章的信息打 4 分(满分 10 分),并为你的经典趋势跟踪策略加分,因为它编排得很好。

请对文章进行编辑,使其更具指导性和循序渐进性,以便我们都能学习和效仿。


PS

如果能就如何将其应用于其他策略提出建议,那就太好了!

 
Benny Addams 加分,你的策略编排得很好。

请对文章进行编辑,使其更具指导性和循序渐进性,以便我们都能学习和效仿。


PS

如果能就如何将此方法应用于其他策略提出建议,那就再好不过了!

感谢您的反馈。遗憾的是,我最终只简单介绍了相关文章,因为我觉得这会占用太多篇幅,而且由于版权问题,我没有提供下载链接。详细内容最好还是从原文中获取。不过,我确实认为我忽略了一些对我的 python 代码的仔细说明,以及 python 说明的直接链接,尽管我为每一行都添加了注释。如果你在自己的实现过程中遇到具体障碍,可以在这里讨论或加我聊天。

 
在 ML-Momentum.mq5 文件中调用的 CatOnnx.mqh 与我在本文 中引用的 CatBoost.mqh 相同。 很抱歉造成文件名上的混淆。
Data Science and ML (Part 31): Using CatBoost AI Models for Trading
Data Science and ML (Part 31): Using CatBoost AI Models for Trading
  • www.mql5.com
CatBoost AI models have gained massive popularity recently among machine learning communities due to their predictive accuracy, efficiency, and robustness to scattered and difficult datasets. In this article, we are going to discuss in detail how to implement these types of models in an attempt to beat the forex market.
 
Zhuo Kai Chen #:
在 ML-Momentum.mq5 文件中调用的 CatOnnx.mqh 与我在本文 中引用的 CatBoost.mqh 相同。 很抱歉造成文件名上的混淆。

谢谢你的澄清,这看起来非常有趣,当我回去再次尝试完成这篇文章中的指南时,我会保留一些笔记,以便以后在论坛上施肥。

如果还有人对养猫感兴趣...

 

我在玩CatBoost,发现在 2024 年(全部)数据上训练的策略在 2024 年回溯测试(在 MetaTrader 中)时能产生大于 300% 的收益,但在其他年份的表现却很差。有人有这方面的经验吗?直观感觉是过度拟合,但即使我用更低的迭代次数(如 1k)进行训练,也会得到相同的结果。

我使用 ~40 - 50 个特征对分钟数据进行训练,因此每年大约有 250,000 行数据。.cbm 文件的大小往往是迭代次数的 1000 倍(例如,1000 次迭代 = 1MB,10000 次迭代 = 10MB,以此类推)。在 Metatrader 上进行的回溯测试限制了我的回溯测试速度,大约 100,000MB 的回溯测试才会停止。我可以用 C++ 进行任意大容量的回溯测试,但 Metatrader 和 C++ 的收益却大相径庭。

 
johnboy85 CatBoost,发现在 2024 年(全部)数据上训练的策略在 2024 年回溯测试(在 MetaTrader 中)时能产生大于 300% 的收益,但在其他年份的表现却很差。有人有这方面的经验吗?直观感觉是过度拟合,但即使我用更低的迭代次数(如 1k)进行训练,也会得到相同的结果。

我使用 ~40 - 50 个特征对分钟数据进行训练,因此每年大约有 250,000 行数据。.cbm 文件的大小往往是迭代次数的 1000 倍(例如,1000 次迭代 = 1MB,10000 次迭代 = 10MB,以此类推)。在 Metatrader 上进行的回溯测试限制了我的回溯测试速度,大约 100,000MB 的回溯测试才会停止。我可以用 C++ 进行任意大容量的回溯测试,但 Metatrader 和 C++ 的收益却大相径庭。

您好。首先,MetaTrader 反向测试仪会考虑点差和佣金,这可能是它与您在 C++ 中的结果不同的原因。其次,在我看来,机器学习本质上是一个过度拟合的过程。有很多方法可以减少过度拟合,比如集合、剔除和特征工程。但归根结底,样本内总是比样本外要好得多。使用机器学习预测金融时间序列是一个老问题。如果你想预测收益率(我假设是因为你说的是 25 万行),那么噪音是意料之中的,因为你和其他玩家的预测目标是一样的。而我在这篇文章中介绍的是一种金属标签法,由于预测目标仅限于自己的策略,因此噪音较小,但可学习的样本较少,使得复杂性约束更加严格。我建议降低对 ML 方法的期望值,并探索减少过度拟合的方法。

 

谢谢你这么快就回复了一个超过 6 个月的主题。这里有很多值得思考的问题。我正在适应巨大的参数空间,并试图找到减少过度拟合的方法。

再次感谢!