
DC
858 posts









今天读到一篇 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. 决策窗口约束了模型复杂度 这里要区分两个概念: - 训练时间是离线模型训练时间(一次性) - 推理时间是实盘中每来一条新数据,模型做出预测的时间 推理频率取决于策略设计,决策窗口的时长决定了推理速度的上限,推理速度上限约束了模型复杂度。 论文在摘要和结论里都声称比较了推理延迟,但实际给出的数据只有训练时间,推理延迟没有给出具体数字,只有定性讨论:一个准确率 80% 但出结果要 2 秒的模型,在预测未来 1 秒价格走向的任务里完全没用,因为拿到预测结果的时候,那 1 秒已经过去了。 不过从模型本身的性质可以推断:逻辑回归推理就是一次矩阵乘法,XGBoost 是走几棵决策树,应该是很快的;而深度网络需要层层前向传播,相对慢得多。 --- 论文不足 这篇论文的选题和实验框架都非常好,但是整体感觉是没写完,就草草结束了,所以很多问题挖了坑没有填。作者在这篇论文发布后(2025.5)的三个月(2025.8)又有一篇根据 L3数据研究限价订单权重不平衡(LWI),可能是改变研究方向了 😀 1. 只用了一天数据,样本量和泛化性都有限 2. 摘要说比较了 inference latency,实际只给了训练时间 3. 实验设计缺乏控制变量:100ms 用的是 5 层,500ms/1000ms 用的是 40 层,窗口和深度同时变了,却分别归因 4. 多处结果异常缺乏分析: - Kalman 滤波的结果比原始数据还差,作者解释是因为算力限制只在小样本上做了有限的调参就固定了参数 - CNN+CatBoost 比 CNN+XGBoost 差了 8-10 个点,原理差不多的模型,效果明显差异,完全没分析原因 - 同样 40 层订单簿,不论是二分类还是三分类,500ms 的正确率都好于 1000ms,直觉上更长的窗口应该更容易预测(信号更明显),但数据显示并非如此,没有任何分析 5. 数据归因超出证据:用 L2 数据不足以支持订单簿噪声来自挂单撤单 6. 作者提出序列信息(多个连续快照)作为输入相对单个快照提升极其有限,但只使用了不理解序列信息的简单模型进行比较,跳过了最关键的对比组DeepLOB(模型可以理解序列信息) ,然后直接下了结论 7. 二分类 vs 三分类没有做回测,无法验证三分类的策略价值

说下我的工作流,我是怎么做预测市场的流程。 暂时没办法 分享具体的的策略。 因为第一 没有得到长时间的验证。虽然是15分钟很短。 但是仍然需要长时间验证。 第二就是策略如果直接公开 很可能失效。 希望大家体谅。 我不是搞量化的, 也是摸着石头过河, 1/ 先搓个简单的脚本,抓数据,然后写入到csv。 2/写个模拟盘,别实盘。策略都还没定好 就别实盘 必亏钱。 3/一边看数据,一边想几个简单的策略,进行模拟测试, 从结果反推过程, 为什么这里下单,为什么下单之后输了。 找原因。 4/根据问题 找关键指标,或者叫挖掘因子。 挨个的测试。 15分钟一轮 结果肯定可以很快提现出来。开始上实盘。 5/如果挖掘的因子,能有效改善,说明方向是对的。要分析背后原因,再找相关的因子组合测试, 重复上述步骤。 在我的脚本里,我搜集了币安的k线数据,开盘收盘 成交量 振幅 等所有数据,历史7-30天。 也搜集了期权数据,也搜集了 预测市场自身的数据 包含开盘价格 实时价 和成交量等(一边测试 一边采集写入本地) 由于预测市场 没有历史数据,所以很难做回测。 只能写了一个方案 直接运行测试。 效率不高 很磨人。 最终 实际就是在这堆数据里, 找到最能影响你结果的那个。 不管是多少分钟的, 肯定是没办法 做到百分百胜率 不带一丁点回撤的。 所以 要过滤机会, 只对把握大,趋势明显的订单下手。不要每一轮都玩。 因为手续费太贵。目前来看即便有些事件 暂时没收手续费,未来肯定也会收。高频的事件 收费是必然的。 事件一轮时间越短。提供给你捕捉的机会越多。 但是不能因为机会多,而进行无脑的高频下单。 所以要提取确定性最高的机会。 很多人觉得15分钟难度比较大。是因为玩的人多,但是频率越高 代表机会概率越多。 (5分钟时我写脚本中途出现的 所以我暂时就没弄5分钟) 如果思路卡壳,就跳出来,换换思路。比如 抓下别人的下单记录,从他的下单点位反推策略过程。 从策略延伸策略,当一个策略 哪怕一个因子有效, 应该对他进行放大,多事件进行测试。 好处是 可以提高资金体量。也能pnl 曲线更平滑。(这是我接下来要做的事情) 如果以后有合适的机会的话, 我再给老铁们分享 我挖掘到的关键因子 目前还需要时间验证










