今天读到一篇 2025 年的论文《用订单簿数据预测加密货币短期价格走势》,作者还有 X 账号 @Kev,大家可以去围观一下。论文的核心发现:高频数据预处理优先于模型复杂度,即做好数据清洗之后,手动设计特征+简单模型,表现和全自动(神经网络自动学习特征)的深度模型不相上下,甚至更好。这个发现在传统金融领域是主流共识了,但对加密市场做这方面研究的并不多见。 作者的研究数据是 2025 年 1 月 30 日来自 Bybit 公开接口的原始订单簿L2数据。每 100ms 一个快照,每个快照最多 200 层买卖盘。主实验用了 10 万条(约 166 分钟),序列实验扩到 100 万条(约 28 小时)。数据免费可获取,所以论文的可复现性不错。 研究方法是将数据分为不过滤、SG 滤波、Kalman 滤波三组,然后分别输入 6 个模型,在二分类(涨/跌)和三分类(涨/平/跌)两种标签下,分别预测 100ms / 500ms / 1s 后的价格方向。总共是 3(数据预处理)×6(6 组模型)×2(预测结果为二分类还是三分类)×3(三个预测时间窗口) = 108 组实验。 模型按照复杂度分组如下: - 简单模型(逻辑回归和 XGBoost): 手动设计特征(比如买卖量差、供需不平衡),作为模型输入。速度最快,而且我们能看懂模型如何依据特征做判断,知其然更知其所以然。 - 混合模型(CNN+CatBoost 和 CNN+XGBoost): 不再是手动设计特征,而是让神经网络自己学习数据的特征,然后将这些特征输入决策树。优点是可能发现人工想不到的特征组合,坏处是这些特征难以解释,知其然不尽知其所以然。 - 深度模型(DeepLOB及其简化版): 完全端到端的神经网络,从特征提取(和之前的区别是这次可以提取序列信息作为特征)到最终判断全部自动完成,知其然而不知其所以然。 评估指标是预测正确率(技术上叫 F1 分数,同时衡量"你说涨的时候有多少次真涨了"和"真正涨的时候你抓住了多少次",0 到 1,越高越好)。同时记录训练时间。训练集 80%、测试集 20%,没有做交叉验证,因为时序数据不适合随机打乱。 核心观点1: 数据质量比模型选型重要 以三分类 500ms 40层订单簿的预测为例: - 同样的 XGBoost,输入原始数据时预测正确率 0.45,做了 SG 平滑后升到 0.54,提升约 21%。 - 把模型换成更复杂的 DeepLOB,在原始数据上反而更低(0.43)。即使 DeepLOB 也做了 SG 平滑(0.52),依然不如 XGBoost+SG(0.54)。 数据质量的提升效果远超模型复杂度的提升效果。 SG 滤波为什么效果这么好? 原始订单簿数据非常毛躁,价格和挂单量在毫秒级别剧烈跳动,业界通常认为这是做市商快速调整报价造成的"闪烁"。SG 滤波是拿一个小窗口在数据上滑动,每到一个位置就在窗口内拟合一条平滑曲线,取曲线中心点的值作为平滑结果。和简单移动平均不同的是,它不会把真正的趋势转折点磨掉——因为它是用曲线去贴合数据的形状,而不是粗暴地取平均。scipy 里一行代码能调用,窗口 21、三阶多项式是论文里效果最稳定的参数,可以作为大家研究的起点。 2. 决策窗口约束了模型复杂度 这里要区分两个概念: - 训练时间是离线模型训练时间(一次性) - 推理时间是实盘中每来一条新数据,模型做出预测的时间 推理频率取决于策略设计,决策窗口的时长决定了推理速度的上限,推理速度上限约束了模型复杂度。 ...