rl_trading
基于强化学习的巴西利率期货高频交易仿真平台,用真实订单簿数据训练AI交易策略
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于强化学习的巴西利率期货高频交易仿真平台,用真实订单簿数据训练AI交易策略
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2017年,巴西 Fundacao Getulio Vargas(FGV)大学量化金融硕士论文项目催生了这样一个问题:能不能不让AI学习任何市场动态假设,而是直接从真实历史订单簿数据中"自学"交易策略?
这个问题的答案,就是今天要介绍的开源项目——rl_trading。
作者 ucaiado 将整个高频交易环境做成了 Gym 风格的仿真平台,核心创新点在于用 Tile Coding(瓦片编码) 结合 Q-Learning,直接用历史订单簿的微观结构数据训练期货利率交易策略。项目配套论文已入库巴西央行数字图书馆(FGV论文库),代码架构大量参考了 Udacity 的机器学习实战项目 smartcab,以及 OpenAI 的 Gym 设计哲学。
rl_trading 并不是一个拿来就能跑策略赚钱的"自动炒币机器人",而是一个完整的学术研究仿真环境。
它的核心模块分为两大部分:
market_gym(类 Gym 环境):负责订单簿模拟。包含完整的限价订单簿(Limit Order Book)实现,支持匹配引擎(matching_engine.py)、数据解析器(parser_data.py)、订单翻译器(translator.py)。系统会读取预处理的 ZIP 格式历史数据包,重建指定日期的订单簿快照,供智能体交互。
market_sim(智能体层):包含多种交易智能体实现。BasicAgent(基准)、RandomAgent(随机对照)、QLearningAgent(核心)三种。智能体通过观察 OFI(Order Flow Imbalance,订单流不平衡)等特征状态,做出买入/卖出/观望的决策。
简单来说,你可以把这个项目理解为:用真实历史数据喂给强化学习算法,训练AI在高频利率期货市场上做日内交易决策的实验平台。
高频交易环境的状态空间极其庞大——订单簿深度、价差、持仓量、时间窗口……如果用原始数值特征,传统 Q-Learning 会遇到维度灾难(curse of dimensionality)。Tile Coding 是一种高效的函数逼近方法,它将连续状态空间划分为重叠的"瓦片"网格,每个瓦片对应一个查找表条目,大幅压缩了状态表示的复杂度。
在 agent.py 中,OFI_SCALE 通过 pickle 加载预计算的 OFI 累积分布函数(CDF),对订单流不平衡进行标准化;NORMALIZERS 字典则定义了各特征(持仓、价差、相对价格等)的归一化范围,供瓦片编码器使用。
代码中定义了两组期货合约——做多端(DI1F25、DI1F20 等)和做空端(DI1N19、DI1N18),通过 spread_longo / spread_curto 等特征捕捉跨期限价差交易机会。这是巴西利率期货市场的特色:同一标的物有不同到期日的合约,价差蕴含着利率曲线预期。
Env 类从预处理的 ZIP 数据包中重建完整订单簿序列,支持按时间步推进。匹配引擎(BvmfFileMatching)读取原始解析数据,驱动订单簿状态演化,Agent 则在每个时间步接收环境状态(observation)、执行动作(action)、接收奖励(reward),标准的 Gym 交互范式。
项目依赖极简(仅 bintrees==2.0.2),但要求 Python 2.7(注意不是 Python 3),这是一个明显的版本老化问题。运行命令:
pip install bintrees==2.0.2
python -m market_sim.agent [-h] [-t] [-d] [-s] [-m] <OPTION>
参数说明:-t 指定同一文件的试验次数,-d 指定日期,-m 指定月份,-s 指定每次试验的会话数,-h 查看可用智能体选项。
需要从 Dropbox 下载示例数据集(201702.zip),解压后放入 data/preprocessed 目录。数据集包含了巴西期货市场特定日期的订单簿快照,体积较大。
⚠️ 关键限制:项目开发于2017年,使用 Python 2.7,如今大多数环境已不再原生支持 Python 2.7,运行前需要配置 legacy 环境或容器。
Python 2.7 依赖:这是项目最大的技术债务。2024年几乎所有主流 ML 库都已停止 Python 2 支持,直接运行会报错。如果要复现,需要 conda create -n py27 或 Docker 隔离。
数据依赖:项目需要特定的巴西期货订单簿数据格式(ZIP + 预处理),且示例数据托管在 Dropbox(非稳定来源),下载链接可能失效。
无实时交易能力:这是一个离线仿真系统,不支持连接真实交易所或券商 API,无法直接用于实盘。
维护状态:项目自2017年后基本无更新,issues 无人响应,star 增长主要来自推荐列表的自然流量。
rl_trading 代表了量化金融与强化学习结合的经典范式——用真实市场微观结构数据训练交易策略。虽然代码已老,但其设计思路(Tile Coding 处理高维状态空间、Gym 风格仿真框架、多空双向价差捕捉)对今天构建 AI 交易系统仍有参考价值。
近年来,随着 JPM、Two Sigma 等机构发布类似研究,该方向从"学术前沿"演变为"工业标准"。rl_trading 作为最早一批开源实践之一,为后来者提供了宝贵的参考实现。
项目速览
| 项目 | 详情 |
|---|---|
| GitHub | ucaiado/rl_trading |
| Stars | 289 |
| 主语言 | Python 2.7 |
| 核心算法 | Q-Learning + Tile Coding |
| 研究场景 | 巴西利率期货高频订单簿仿真 |
| 许可证 | Apache 2.0 |
| 最新活动 | 2017年(学术项目归档) |