根据我自己的经验,我只能补充说,在三个月以上的数据上训练模型不会带来任何好处。模型应该能够捕捉当前的模式,并专注于这些模式。你需要贴近市场。
您的观点完全正确。根据我的经验,我也发现使用最近的数据更容易训练出能产生更好结果的模型。不过,主要问题是这种方法限制了训练集的规模,除非你使用的时间框架很短。根据学术论文,趋势跟踪策略在较长的时间框架内比在较短的时间框架内表现更好。因此,你可能会训练出一个可预测性更高但训练样本更少的模型,这很容易造成过度拟合,而原始策略的优势一开始就比较小。这些因素之间需要权衡,更不用说利差也会产生影响。
我的解决方案是,在保留旧数据的同时,为训练集中的新数据分配更大的权重。这样,我们既能适应制度转变后的新模式,又能从多年来保持一致的旧模式中获益。 不过,正如我之前提到的,这些决策总是需要权衡利弊。
你的观点完全正确。根据我的经验,我也发现使用最近的数据更容易训练出能产生更好结果的模型。不过,主要问题在于这种方法限制了训练集的规模,除非你使用的时间框架很短。根据学术论文,趋势跟踪策略在较长的时间框架内比在较短的时间框架内表现更好。因此,你可能会训练出一个可预测性更高但训练样本更少的模型,这很容易造成过度拟合,而原始策略的优势一开始就比较小。这些因素之间需要权衡,更不用说利差也会起到一定作用。
我的解决方案是,在保留旧数据的同时,为训练集中的新数据分配更大的权重。这样,我们既能适应制度转变后的新模式,又能从多年来保持一致的旧模式中获益。 不过,正如我之前提到的,这些决策总是需要权衡利弊。
每三个月使用最近三个月的数据对模型进行一次重新训练,或许就能达到目的。我稍后会尝试实现这个滚动模型优化的想法。谢谢你的建议。
我正在尝试按照您的说明进行操作,但遗憾的是,由于缺少文件参考和下载链接,我无法继续完成最终输出。
我会花时间教您遗漏了什么,因为这看起来是一个很好的过程。
您缺少:
1. FileCSV.mqh 的直接链接,这需要通过其他文章来获取。
2. 所有处理功能的声明
3.充分解释创建或下载文件的过程
CatOnnx.mqh
"\\Files\\CatBoost_Momentum_test.onnx" 4.
4.关于如何使用 pip 或类似工具安装 catboot 的直接链接和相关说明,确保您已安装了 python 所需的依赖项。(我不需要,但其他人需要知道) 5.
5.指导阅读 CB2.ipynb 说明和工作流程。
总之,这一切导致学生在你的文章读到一半时,只能花几个小时寻找正确的过程来完成教程并复制你的结果。
总的来说,我给这篇文章的信息打 4 分(满分 10 分),并为你的经典趋势跟踪策略加分,因为它编排得很好。
请对文章进行编辑,使其更具指导性和循序渐进性,以便我们都能学习和效仿。
PS
如果能就如何将其应用于其他策略提出建议,那就太好了!
请对文章进行编辑,使其更具指导性和循序渐进性,以便我们都能学习和效仿。
PS
如果能就如何将此方法应用于其他策略提出建议,那就再好不过了!
感谢您的反馈。遗憾的是,我最终只简单介绍了相关文章,因为我觉得这会占用太多篇幅,而且由于版权问题,我没有提供下载链接。详细内容最好还是从原文中获取。不过,我确实认为我忽略了一些对我的 python 代码的仔细说明,以及 python 说明的直接链接,尽管我为每一行都添加了注释。如果你在自己的实现过程中遇到具体障碍,可以在这里讨论或加我聊天。

- www.mql5.com
我在玩CatBoost,发现在 2024 年(全部)数据上训练的策略在 2024 年回溯测试(在 MetaTrader 中)时能产生大于 300% 的收益,但在其他年份的表现却很差。有人有这方面的经验吗?直观感觉是过度拟合,但即使我用更低的迭代次数(如 1k)进行训练,也会得到相同的结果。
我使用 ~40 - 50 个特征对分钟数据进行训练,因此每年大约有 250,000 行数据。.cbm 文件的大小往往是迭代次数的 1000 倍(例如,1000 次迭代 = 1MB,10000 次迭代 = 10MB,以此类推)。在 Metatrader 上进行的回溯测试限制了我的回溯测试速度,大约 100,000MB 的回溯测试才会停止。我可以用 C++ 进行任意大容量的回溯测试,但 Metatrader 和 C++ 的收益却大相径庭。
我使用 ~40 - 50 个特征对分钟数据进行训练,因此每年大约有 250,000 行数据。.cbm 文件的大小往往是迭代次数的 1000 倍(例如,1000 次迭代 = 1MB,10000 次迭代 = 10MB,以此类推)。在 Metatrader 上进行的回溯测试限制了我的回溯测试速度,大约 100,000MB 的回溯测试才会停止。我可以用 C++ 进行任意大容量的回溯测试,但 Metatrader 和 C++ 的收益却大相径庭。
您好。首先,MetaTrader 反向测试仪会考虑点差和佣金,这可能是它与您在 C++ 中的结果不同的原因。其次,在我看来,机器学习本质上是一个过度拟合的过程。有很多方法可以减少过度拟合,比如集合、剔除和特征工程。但归根结底,样本内总是比样本外要好得多。使用机器学习预测金融时间序列是一个老问题。如果你想预测收益率(我假设是因为你说的是 25 万行),那么噪音是意料之中的,因为你和其他玩家的预测目标是一样的。而我在这篇文章中介绍的是一种金属标签法,由于预测目标仅限于自己的策略,因此噪音较小,但可学习的样本较少,使得复杂性约束更加严格。我建议降低对 ML 方法的期望值,并探索减少过度拟合的方法。
谢谢你这么快就回复了一个超过 6 个月的主题。这里有很多值得思考的问题。我正在适应巨大的参数空间,并试图找到减少过度拟合的方法。
再次感谢!
新文章 利用CatBoost机器学习模型作为趋势跟踪策略的过滤器已发布:
在商品交易(CTA)策略开发领域,有一条经验法则:每个策略想法背后都最好有清晰、直观的解释。这不仅是人们最初构思策略想法的方式,更有助于避免过拟合问题。即便在使用机器学习模型时,这一建议也同样适用。我们将尝试解释这一想法背后的直觉。
为何这一方法可能奏效:
CatBoost模型会创建决策树,这些决策树接收特征输入并输出每种结果的概率。在本例中,我们仅针对二元结果(1代表盈利,0代表亏损)进行训练。模型会调整决策树中的规则,以最小化训练数据集中的损失函数。如果模型在样本外测试结果中展现出一定的预测能力,我们就可以考虑用它来过滤掉那些盈利概率较低的交易,从而提升整体盈利能力。
对于像我们这样的散户交易者而言,现实期望是,我们训练的模型不会像先知一样精准无误,而只会比随机游走略胜一筹。提高模型精度的途径有很多,我将在后文讨论,但即便只是微小的改进,也是值得尝试的。
作者:Zhuo Kai Chen