WeChat
ai-engineeringcrypto-trading
Original source

模型在回测里赚钱,上线就亏:9000 行代码教我的列架构设计

Summary

深度分析 intelligent-trading-bot (ITB) 开源项目的架构设计,揭示其解决 ML 量化交易中「特征漂移」问题的三个核心架构决策。

核心问题:特征漂移(Feature Drift)

回测时模型表现好、实盘就亏的根本原因往往不是模型本身,而是训练时和生产环境中特征计算逻辑的微妙差异(窗口边界、NaN 处理、talib 不稳定周期等)。

三个架构决策

1. 列即函数(Column = Function)

  • 所有数据(K线、技术指标、标签、ML预测、信号)存在一张 DataFrame
  • 每列要么是源列(OHLCV),要么是派生列(DAG 依赖图)
  • 特征、标签、ML预测在列模型下完全同构——都是「输入列 → 输出列」的函数
  • 区别仅在于数据方向(过去/未来)和参数来源(手填/训练得到)

2. dirty_records — DAG 脏节点追踪

  • 同一个 generate_feature_set 函数,通过 last_rows 参数区分离线全量 vs 在线增量
  • 在线模式逐行调用 talib(性能换正确性),保证每行输入与离线完全一致
  • dirty_records 机制追踪新数据影响的行数,只重算必要部分

3. 声明式生成器 — config 驱动 + 动态解析

  • 配置中用 module:function 格式动态加载生成器
  • 新增特征不需要改框架代码,只需写函数 + 加配置
  • 支持 trainable 生成器(train=true 训练,train=false 预测)

关键洞察

  • 特征、标签、预测被当成三种不同的东西,是所有问题的根源
  • 一旦统一为「列的函数」,漂移就不可能发生
  • 用性能换正确性(在线逐行计算)是刻意的设计选择
  • 项目地址:intelligent-trading-bot(GitHub)