文章 "因果推断与量化交易中的回归模型探索"

 

新文章 因果推断与量化交易中的回归模型探索已发布:

本文探究了将回归模型应用于算法交易的可行性。与二分类模型不同,回归模型能够通过量化价格的预期波动幅度,构建灵活性更强的交易策略。

二分类是机器学习的基础任务,核心目标是将输入数据划分至两个不同类别中的任意一个。应用于外汇交易EA时,该模型通常用于预测买入信号(标记为0)或卖出信号(标记为1)。这种方式将复杂的市场运行逻辑,简化为单一的方向决策。

但在量化交易场景中,二分类模型存在一个核心的固有缺陷:无法量化价格波动的幅度与力度。二分类器仅能预判价格上涨或下跌的方向,无法给出价格的预期波动幅度。这种精细化数据的缺失,从根本上限制了交易决策的有效性。

仅依靠分类器的预测准确率,而忽略了价格波动幅度,因此对实盘交易参考价值有限。这一点至关重要,因为极高的方向预测准确率(例如70%),并不代表交易能够盈利。 

我们可以发现一个重要的市场规律:方向预测精准度高,无法保证交易盈利。举例而言,交易胜率30%依旧可以实现盈利,而胜率70%也可能面临亏损。这说明交易策略的最终盈亏结果,取决于盈利单的利润规模与亏损单的亏损规模之比,而非单纯的交易胜率。


作者:dmitrievsky

 
我认为,在你的方法中,将测试数据纳入模型筛选过程,容易导致过拟合。最好是利用两组数据量足够大的数据集分别进行两轮测试:一组用于筛选模型,另一组用于验证筛选出的最优模型,且不参与模型筛选过程。
 

关于交易、自动交易系统及交易策略测试的论坛

关于文章《开发多币种交易机器人(第25部分):接入新策略(II)》的讨论

Rashid Umarov,2025年7月5日 12:58

请在俄语版块用俄语发帖。所有文章评论都会在各语言分支中自动翻译。

此外,此处还设有“自动翻译”按钮,若您希望在此处阅读英文版本,可点击该按钮。


[删除]  
zhainan #:
我觉得在你的方法中,将测试数据纳入模型筛选过程,容易导致过拟合。最好是利用两组足够大的数据分别进行两轮测试:一组用于筛选模型,另一组用于验证筛选出的最优模型,且不参与模型筛选。

可以这样做。实际上,这里在训练阶段并没有进行模型筛选。只是调整阈值,然后用新数据对模型进行验证。

 
马克西姆·德米特里耶夫斯基 #:

可以这样做。实际上,在训练阶段这里并不涉及模型选择。只需设置阈值,然后在新数据上对模型进行测试即可。

马克西姆·德米特里耶夫斯基 #:

可以这样做。实际上,在训练阶段这里没有模型选择。只是设置阈值,然后在新数据上测试模型。

差不多,因为是在循环中根据阈值保留在测试样本中表现优秀的模型,我的做法也大同小异。我目前采用的方法是:使用多个交易品种,以2015~2020年的数据作为训练数据,这样可以补充更多市场形态,并确保统一尺度,再利用2020~2022年的目标交易品种数据构建筛选模型,最后使用2022至2025年的目标交易品种数据进行最终验证
[删除]  
zhainan #:
差不多,因为是在循环中根据阈值保留在测试样本中表现优秀的模型,我的方法也大同小异。我目前采用的方法是:使用多个交易品种,以2015年至2020年的数据作为训练数据,这样可以补充更多市场形态,并确保统一的衡量标准,再利用2020~2022年的目标交易品种数据构建筛选模型,最后使用2022至2025年的目标交易品种数据进行最终验证
本文中,前瞻数据不参与模型选择。本文探讨了回归模型相对于分类器可能具有的优势。令人惊讶的是,此前竟无人就此撰写过类似内容。等我休假回来——如果大家对此感兴趣,我会再写几篇相关文章。
 
在附带的 Python 代码中,缺少名为 bots 的模块。
[删除]  
Omega J Msigwa #:
在附带的 Python 代码中,缺少名为 bots 的模块。

这是一个文件夹,您可以自行创建。或者将导入路径修改为您模块所在的位置。

或者阅读一些关于导入模块的入门教程,相关内容非常简单。

 

你好,Maxim,我下载了文件,使用现有的csv文件进行了训练,并运行了生成的EA,发现结果与zip文件夹中附带的那个EA不同。

我检查了参数,但没找到任何线索。

能否请您告诉我造成这种情况的原因?

谢谢

[删除]  
zhuifeng123 #:

你好,Maxim,我已经下载了文件,使用现有的csv文件进行了训练,并运行了生成的EA,发现结果与zip文件夹中附带的那个EA不同。

我检查了参数,但没找到造成这种情况的原因。

请问这究竟是什么原因造成的?

谢谢

你好。请指出具体有哪些不同之处,这样很难猜出你在说什么。

 
Maxim Dmitrievsky #:

你好。请告诉我它们有什么区别,光靠猜测真的很难弄清楚我们在谈论什么。

我使用 causal_regression_orig.py 生成 ea 头文件,然后编译 ea。

结果如下图所示的 test_result。

交易次数比你发布的要少得多。

那么这两者之间有什么区别呢?

附加的文件:
src.zip  2372 kb