市场微观结构:订单簿、盘口深度、交易对与流动性分析
各位同学,今天我们来聊聊市场微观结构。说白了,就是交易所底层那套数据是怎么组织起来的。我刚开始做套利系统时,觉得这东西不就是个买一卖一嘛,有什么好研究的?结果第一次实盘就被打脸了——订单簿更新慢了50毫秒,直接导致我开了个反向仓位,亏了一台MacBook Pro的钱。
嗯,从那以后,我再也不敢小看这块了。
订单簿:市场的骨架
订单簿,英文叫Order Book。它记录了所有未成交的买卖挂单。每个交易所的订单簿结构大同小异,但细节上能坑死人。
一个典型的订单簿长这样:
// 简化版订单簿结构
struct OrderBookLevel {
double price; // 价格
double quantity; // 数量
int orderCount; // 挂单笔数(有些交易所提供)
};
struct OrderBook {
vector<OrderBookLevel> bids; // 买单,按价格从高到低排列
vector<OrderBookLevel> asks; // 卖单,按价格从低到高排列
int64_t timestamp; // 快照时间戳
};
这里有个关键点:价格精度。我在项目中遇到过,某交易所的BTC价格精度是小数点后2位,但另一个交易所是8位。你拿2位精度的价格去对8位精度的订单簿,撮合逻辑直接崩掉。
盘口深度:别只看买一卖一
很多新手做套利,眼睛只盯着买一卖一。我告诉你,这是大忌。
盘口深度,说白了就是看某个价格区间内有多少流动性。举个例子:
| 档位 | 买价 | 买量 | 卖价 | 卖量 |
|---|---|---|---|---|
| 1 | 100.00 | 1.5 BTC | 100.10 | 2.0 BTC |
| 2 | 99.90 | 3.0 BTC | 100.20 | 1.8 BTC |
| 3 | 99.80 | 5.0 BTC | 100.30 | 4.0 BTC |
| 4 | 99.70 | 2.0 BTC | 100.40 | 3.5 BTC |
| 5 | 99.60 | 1.0 BTC | 100.50 | 2.2 BTC |
你看,买一只有1.5 BTC,但如果你要卖5个BTC,实际成交价会滑到99.80。这就是市场冲击成本。
我个人习惯用加权深度来评估流动性:
// 计算前N档的加权平均价格
double calcWeightedPrice(const vector<OrderBookLevel>& levels, double totalQty) {
double sumPriceQty = 0.0;
double sumQty = 0.0;
for (const auto& level : levels) {
double takeQty = min(level.quantity, totalQty - sumQty);
sumPriceQty += level.price * takeQty;
sumQty += takeQty;
if (sumQty >= totalQty) break;
}
return sumQty > 0 ? sumPriceQty / sumQty : 0.0;
}
这个函数算出来的,就是你吃掉N档深度后的实际成交均价。我建议你把这个值作为套利策略的输入,而不是直接用买一卖一。
交易对:命名规则里的坑
交易对,就是两个资产之间的兑换关系。比如BTC/USDT。但不同交易所的命名规则能让你抓狂:
- Binance:BTCUSDT(没有斜杠)
- Coinbase:BTC-USD(用短横线)
- OKX:BTC-USDT(也是短横线,但稳定币后缀不同)
- Bybit:BTCUSDT(和Binance一样,但永续合约有后缀)
我曾经因为没处理好这个映射关系,把BTC/USDT的订单发到了BTC/ETH的交易对上。嗯,那笔单子到现在还挂在那里当教训。
流动性分析:别被表面数据骗了
流动性,不是看订单簿有多厚,而是看你能以多小的滑点成交多少量。
我常用的几个流动性指标:
- 买卖价差:买一卖一之间的差距。越小越好。
- 市场深度:某个价格区间内的总挂单量。
- 订单簿斜率:价格变化与对应深度的比值。斜率越陡,说明深度越差。
- 成交速度:大单被吃掉的速度。这个需要实时监控。
这里有个实战经验:别只看静态深度。有些交易所的订单簿看起来很厚,但都是机器人挂的假单。你一撤单,它们也跟着撤。我管这叫「幽灵流动性」。
怎么识别?看订单簿更新频率。如果某个价位上的挂单每秒钟都在变,大概率是假的。真正的流动性,挂单是相对稳定的。
核心逻辑:一张图说清楚
下面这张图,是我自己总结的市场微观结构分析流程。你照着这个思路来,基本不会跑偏:
你看,整个流程是串行的。数据从交易所进来,先解析订单簿,然后并行做三件事:算深度、做映射、算流动性。最后汇总到套利信号。任何一个环节出问题,后面的策略都是白搭。
实战中的几个坑
最后,分享几个我踩过的坑:
- 时间戳对齐:不同交易所的订单簿时间戳可能差几秒。你拿A交易所10:00:00的数据和B交易所10:00:02的数据做比较,得出的价差毫无意义。
- 数据频率:有的交易所每秒推送100次订单簿,有的只推10次。你的策略必须能处理最慢的那个,否则会出现数据真空期。
- 深度快照 vs 增量更新:大部分交易所同时提供全量快照和增量更新。我个人建议用增量更新来维护本地订单簿,但每10秒用快照做一次校验,防止累积误差。
嗯,今天就先聊这么多。市场微观结构这块,说白了就是「知己知彼」。你只有把交易所的底层数据摸透了,套利策略才能跑得稳。下次我们聊聊订单簿的增量更新算法,那个更刺激。
公众号:蓝海资料掘金营,微信deep3321