一、做市数据概览:高频做市数据来源、频率与字段解析
做市交易,说白了就是跟市场流动性打交道。你报出去的单子,能不能被吃掉?你的库存风险有多大?这些问题的答案,全都藏在数据里。
我刚开始做高频做市那会儿,最头疼的不是策略逻辑,而是数据本身。交易所给的数据长什么样?券商的数据又有什么坑?第三方数据商的数据能不能直接用?嗯,今天咱们就把这些底层的「数据家底」翻个底朝天。
核心观点:做市数据的质量,直接决定了你的回测可信度和实盘稳定性。数据清洗不是「锦上添花」,而是「生死攸关」。
1.1 数据来源:三条腿走路
做市数据来源,我习惯分成三类:交易所直连、券商通道、第三方数据商。每条路都有自己的脾气。
| 来源 | 特点 | 典型场景 | 我踩过的坑 |
|---|---|---|---|
| 交易所直连 | 延迟最低,数据最原始,但接入成本高 | 自营做市、高频策略 | 曾经因为交易所行情快照的「时间戳」是本地生成而非交易所时间,导致回测偏差 |
| 券商通道 | 经过一层封装,可能带延迟,但接口友好 | 中小做市商、量化私募 | 券商的数据有时会「丢tick」,尤其是行情剧烈波动时 |
| 第三方数据商 | 数据经过清洗和标准化,但可能丢失细节 | 回测研究、策略开发 | 第三方数据商对「逐笔成交」的合并逻辑,跟交易所原始数据不一样 |
我个人建议:实盘用交易所直连,回测用第三方数据商做基准,再用券商数据做交叉验证。三条腿走路,才不容易摔跟头。
小技巧:如果你刚开始做做市,可以先从第三方数据商入手。比如某数据商的「Tick级行情」数据,虽然延迟比直连高几毫秒,但做回测研究完全够用。等策略跑通了,再考虑上直连。
1.2 数据频率:Tick级、秒级、分钟级,各有用处
做市数据频率,我一般分三个层级。你想想看,不同频率的数据,就像不同倍数的放大镜——看的东西不一样。
- Tick级数据:每一笔成交或每一次行情变化都记录。这是做市策略的「显微镜」。我曾在Tick级数据里发现过「订单簿幽灵挂单」——某个价位挂单量突然暴增又瞬间消失,明显是试探性挂单。
- 秒级数据:每秒聚合一次。适合做日内趋势判断和波动率计算。我记得有一次做波动率建模,用Tick级数据算出来的结果噪声太大,换成秒级数据反而更稳定。
- 分钟级数据:每分钟一个快照。适合做中低频策略的基准分析,或者用来做风险监控的「粗筛」。
为什么会这样?因为Tick级数据里包含了大量的「市场微观结构噪声」——比如做市商之间的博弈、算法交易的试探性订单。这些噪声对高频策略是信号,但对中低频策略就是干扰。
注意:千万不要以为「频率越高越好」。我见过有人用Tick级数据做日频策略的回测,结果过拟合得一塌糊涂。频率选择要跟策略持仓周期匹配。
1.3 数据字段解析:行情快照、逐笔成交、订单簿深度
做市数据里,最核心的三个字段类型:行情快照、逐笔成交、订单簿深度。咱们一个一个说。
行情快照(Snapshot)
行情快照就是「某个时间点上的市场全貌」。包括最新价、涨跌幅、成交量、持仓量等。我习惯把它当作「基准数据」——用来校准其他数据源的时间对齐。
# 一个典型的行情快照字段结构(以某交易所为例)
{
"symbol": "BTCUSDT",
"timestamp": 1700000000000, # 毫秒级时间戳
"last_price": 50000.00,
"volume_24h": 1234567.89,
"open_interest": 987654.32,
"bid_price_1": 49999.50,
"ask_price_1": 50000.50,
"bid_volume_1": 12.34,
"ask_volume_1": 8.76
}
关键点:行情快照的「时间戳」一定要搞清楚是交易所时间还是本地时间。我曾经因为这个问题,回测时发现策略「穿越」了——明明还没发生的行情,策略却已经做出了反应。
逐笔成交(Trade by Trade)
逐笔成交记录的是每一笔真实的成交。这是做市策略的「黄金数据」——你能看到谁在买、谁在卖、成交速度有多快。
我记得有一次做「订单流分析」,发现某个大单一直在「拆单买入」。逐笔成交数据里,连续几十笔都是小额买单,但累计成交量巨大。这就是典型的「冰山订单」——表面上看是小单,实际上是大资金在悄悄建仓。
# 逐笔成交字段示例
{
"trade_id": "123456789",
"symbol": "BTCUSDT",
"timestamp": 1700000000001,
"price": 50000.00,
"volume": 0.5,
"side": "buy", # 主动买还是主动卖
"aggressor": "buyer" # 谁主动吃单
}
避坑指南:我曾经发现第三方数据商的「逐笔成交」里,side字段跟交易所原始数据不一致。原因是数据商把「主动买」和「被动买」搞混了。所以,拿到数据后第一件事:用行情快照的成交量和逐笔成交的累计量做交叉验证。
订单簿深度(Order Book Depth)
订单簿深度就是「挂在盘口上的所有买卖单」。做市策略的核心就是跟订单簿打交道——你在哪个价位挂单?挂多少?别人在哪个价位埋伏?
订单簿深度数据,我一般关注三个维度:
- 价差(Spread):买一和卖一之间的差距。价差越小,流动性越好。
- 深度分布:不同价位上的挂单量。我曾经在某个山寨币上发现,买一到买五的挂单量分布极不均匀——买一只有0.1个币,买二却有100个币。这就是典型的「薄壁订单簿」,很容易被大单打穿。
- 订单簿斜率:挂单量随价格变化的速率。斜率越陡,说明市场在这个价位上的「阻力」越大。
# 订单簿深度数据示例(前5档)
{
"symbol": "BTCUSDT",
"timestamp": 1700000000002,
"bids": [
[49999.50, 12.34], # [价格, 数量]
[49999.00, 45.67],
[49998.50, 89.01],
[49998.00, 23.45],
[49997.50, 67.89]
],
"asks": [
[50000.50, 8.76],
[50001.00, 34.56],
[50001.50, 78.90],
[50002.00, 12.34],
[50002.50, 56.78]
]
}
警告:订单簿深度数据是「快照」而非「流」。两个快照之间可能发生了多次挂单和撤单。如果你用订单簿深度数据做「订单流重建」,一定要小心——你看到的可能是「中间状态」而非「完整过程」。
知识体系总览
下面这张图,是我自己梳理的做市数据知识体系。你可以把它当作「地图」——每次遇到数据问题,先看看自己站在哪个位置。
嗯,这张图其实是我自己刚入行时画的。每次带新人,我都会先让他们看这张图——先搞清楚数据怎么来的,再谈怎么用。很多做市策略的失败,根源不在策略逻辑,而在数据源头就出了问题。