27、期货与外汇订单流交易:CME订单流数据、外汇ECN订单流、跨市场订单流分析
订单流交易,说白了就是看「谁在什么价位干了多少事」。
我做了这么多年量化,越来越觉得:价格本身是结果,订单流才是原因。你想想看,一根K线背后,是多空双方真金白银的博弈痕迹。今天这一章,我们就来拆解期货和外汇市场里,订单流数据到底怎么用。
一、CME订单流数据:期货市场的「透视镜」
CME(芝加哥商品交易所)是全球最大的期货交易所。它的订单流数据,我个人认为是目前最透明、最完整的。
CME 提供的是 Market by Order(MBO) 和 Market by Price(MBP) 两种数据。MBP 是聚合后的,告诉你每个价位上有多少单子。MBO 更细,能看到每一笔订单的增删改。
核心字段:
- 价格(Price)
- 数量(Size)
- 方向(Bid/Ask)
- 订单ID(Order ID)
- 动作(Add/Execute/Delete)
举个例子,我曾在项目中处理过CME的原油期货数据。当时遇到一个坑:CME的订单ID是全局唯一的,但不同交易日会重置。如果你做跨日回测,一定要加上日期前缀,否则订单ID会冲突。
# 伪代码:处理CME MBO数据
def parse_cme_mbo(raw_line):
# 解析原始数据行
# 格式:Timestamp|OrderID|Price|Size|Side|Action
parts = raw_line.split('|')
return {
'timestamp': parts[0],
'order_id': f"{date}_{parts[1]}", # 加日期前缀防冲突
'price': float(parts[2]),
'size': int(parts[3]),
'side': parts[4],
'action': parts[5]
}
我的经验:CME的MBO数据量极大,一天原油期货的数据可能超过10GB。建议用列式存储(如Parquet)来压缩,查询速度能快10倍以上。
二、外汇ECN订单流:分散市场的「拼图」
外汇市场和期货不一样。CME是中心化交易所,数据统一。外汇是分散的ECN(电子通信网络),比如EBS、Reuters、Hotspot等。每个ECN的数据格式、深度、甚至时间戳精度都不一样。
我刚开始做外汇订单流时,以为能像期货一样拿到全量数据。后来发现,ECN只提供部分深度数据,而且不同ECN的流动性分布差异很大。
| ECN | 数据深度 | 时间戳精度 | 主要货币对 |
|---|---|---|---|
| EBS | 10层 | 毫秒 | EUR/USD, USD/JPY |
| Reuters | 5层 | 毫秒 | GBP/USD, AUD/USD |
| Hotspot | 20层 | 微秒 | EUR/USD, USD/CAD |
为什么会这样?因为外汇市场没有统一的撮合引擎。每个ECN有自己的订单簿,流动性分散在各处。做跨ECN分析时,必须做时间对齐和价格对齐。
避坑指南:我曾经在整合EBS和Hotspot数据时,发现同一时刻的EUR/USD报价差了0.2个点。后来查出来,是因为两个ECN的时间戳基准不同——一个用GPS时钟,一个用NTP。一定要统一时间源。
三、跨市场订单流分析:把碎片拼成地图
真正的交易机会,往往藏在市场之间的联动里。比如,CME的标普500期货和EBS的美元指数,它们的订单流经常互相影响。
我习惯用 Delta(买卖量差) 和 CVD(累积成交量差) 来做跨市场分析。举个例子:
- 如果CME标普期货的Delta突然转正,同时EBS美元指数的Delta转负,说明资金在流入股市、流出美元。这时候做多股指、做空美元,胜率往往不错。
- 如果两个市场的Delta同步变化,说明是宏观驱动,趋势性更强。
# 跨市场Delta对比
def cross_market_delta(futures_data, fx_data):
# futures_data: CME期货订单流
# fx_data: EBS外汇订单流
futures_delta = futures_data['bid_volume'] - futures_data['ask_volume']
fx_delta = fx_data['bid_volume'] - fx_data['ask_volume']
# 计算相关性
correlation = np.corrcoef(futures_delta, fx_delta)[0, 1]
return correlation
核心逻辑:跨市场订单流分析,不是看价格涨跌,而是看资金流向的「加速度」。Delta的变化率,比Delta本身更有预测价值。
四、实战中的数据处理流程
嗯,这里要注意。不同市场的订单流数据,时间戳格式、字段命名、数据粒度都不一样。我建议统一做一层抽象:
- 数据接入层:分别解析CME、EBS、Reuters的原始数据
- 标准化层:统一字段名、时间戳格式、价格精度
- 对齐层:按毫秒级时间戳对齐,处理缺失值
- 计算层:生成Delta、CVD、订单簿不平衡等指标
下面是我画的一张流程图,展示了跨市场订单流分析的整体架构:
我的建议:别一上来就搞全量数据。先拿一个货币对(比如EUR/USD)和一个期货(比如标普500)做试点。跑通了再扩展。我当初就是贪多,同时搞了5个市场,结果光数据对齐就花了两个月。
最后说一句:订单流数据是金矿,但挖矿需要工具。CME的数据相对规整,外汇ECN的数据比较「脏」。做跨市场分析时,一定要先做数据质量检查。我曾经因为一个ECN的时间戳少了毫秒位,导致相关性计算全错。嗯,这种坑踩过一次就够了。
无相订单流研究社 微信Lucian808555