订单流数据基础:逐笔成交、订单簿与市场深度
做量化交易这些年,我越来越觉得——订单流数据才是市场的“心电图”。K线图是加工过的信息,而订单流是原始信号。今天咱们就来拆解一下,订单流数据到底长什么样,怎么用。
一、逐笔成交数据:最细颗粒度的交易记录
逐笔成交数据,说白了就是交易所把每一笔真实的成交都记录下来。你想想看,每一秒可能发生几百笔交易,每一笔都有价格、数量、时间、买卖方向。
我个人习惯把逐笔成交数据比作“流水账”。它不加工,不汇总,就是最原始的交易记录。
核心字段:
- 时间戳:精确到毫秒甚至微秒
- 成交价格:这笔交易实际成交价
- 成交量:这笔交易成交了多少手/股
- 成交方向:主动买还是主动卖(Buy/Sell)
- 成交编号:交易所给的唯一ID
举个例子,我在做A股高频策略时,曾经遇到过一个问题:为什么同样的K线形态,有时候赚钱有时候亏钱?后来我看了逐笔数据才发现——同样的价格波动,背后的资金流向完全不同。有的上涨是散户堆起来的,有的上涨是机构大单扫货。这两者的后续走势,天差地别。
# 逐笔成交数据示例(Python伪代码)
tick_data = {
'timestamp': '2024-01-15 09:30:01.234',
'price': 15.68,
'volume': 200,
'side': 'Buy', # 主动买
'trade_id': 'T123456789'
}
我的经验:逐笔数据量非常大,一天可能几千万条。存储和查询是个挑战。我建议用列式存储(比如Parquet)来压缩,查询时按时间分区。
二、订单簿数据:市场的“挂单墙”
订单簿就是当前所有未成交的限价单。它告诉你——在什么价位上,有多少人想买,有多少人想卖。
嗯,这里要注意:订单簿是动态变化的。每一秒都在变。你看到的订单簿,其实是某个瞬间的快照。
订单簿结构:
- 买盘(Bid):按价格从高到低排列
- 卖盘(Ask):按价格从低到高排列
- 价差(Spread):最优买价和最优卖价的差值
- 深度(Depth):每个价位上的挂单量
我曾经踩过一个坑:用订单簿数据做策略时,没考虑“冰山订单”。有些大机构会把大单拆成小单,只显示一部分。你看到的深度可能只是冰山一角。后来我加了订单簿变化率检测,才把这个问题解决。
# 订单簿快照示例
orderbook = {
'asks': [ # 卖盘,价格从低到高
{'price': 15.70, 'volume': 500},
{'price': 15.71, 'volume': 1200},
{'price': 15.72, 'volume': 800}
],
'bids': [ # 买盘,价格从高到低
{'price': 15.68, 'volume': 1000},
{'price': 15.67, 'volume': 600},
{'price': 15.66, 'volume': 900}
]
}
三、市场深度与流动性分析
市场深度,说白了就是订单簿上各个价位的挂单总量。它直接反映了市场的流动性状况。
你想想看,如果一个股票在买一价只有100手挂单,而你想卖1000手——那价格肯定会被打穿好几档。这就是深度不够,流动性差。
避坑指南:我曾经在流动性差的品种上做回测,策略表现很好。但实盘一跑,滑点直接吃掉所有利润。后来我强制要求:策略必须考虑订单簿深度,计算预期滑点。
流动性分析的几个关键指标:
| 指标 | 含义 | 我的用法 |
|---|---|---|
| 买卖价差 | 最优买价与最优卖价之差 | 价差越小,流动性越好 |
| 市场深度 | 各价位挂单总量 | 计算大单冲击成本 |
| 订单簿斜率 | 价格变化与挂单量的关系 | 斜率陡峭说明深度不足 |
| 成交率 | 挂单被成交的概率 | 判断挂单策略的有效性 |
四、核心逻辑:订单流数据如何串联起来?
下面这张图,是我自己总结的订单流数据流转逻辑。你看一遍就能明白:逐笔成交、订单簿、市场深度,这三者是怎么配合的。
五、实战中的几个关键点
做订单流分析,我总结了三个必须注意的地方:
- 数据延迟:逐笔数据和订单簿数据都有延迟。你看到的“当前”订单簿,其实是几十毫秒前的快照。做高频策略时,这个延迟会要命。
- 数据清洗:交易所的数据偶尔会有错误。比如成交价格异常、成交量对不上。我习惯加一道校验逻辑,把明显异常的数据过滤掉。
- 存储策略:订单流数据量巨大。我建议只保留关键字段,按天分区存储。历史数据可以压缩后归档。
一个小技巧:做回测时,别直接用逐笔数据。先把数据聚合成1秒或100毫秒的切片,这样既能保留订单流特征,又不会让回测跑得太慢。
好了,订单流数据的基础就讲到这里。记住一句话:数据是死的,但你对数据的理解是活的。多花时间看原始数据,比看任何指标都管用。