第一章:市场微观结构基础
做量化交易这些年,我越来越觉得一个道理:不懂订单簿,就别谈高频交易。说白了,订单簿就是市场的「心跳图」。你连心跳都看不懂,怎么判断市场是死是活?
这一章,咱们就聊聊订单簿、买卖盘口、撮合引擎这些最底层的东西。嗯,内容有点干,但都是硬货。
1.1 订单簿(Order Book)原理
订单簿是什么?我习惯把它想象成一个「电子记账本」。所有交易者的挂单,都记在这个本子上。买单记左边,卖单记右边。
举个例子。假设现在有几个人想买BTC:
- A想以100元买1个
- B想以99元买2个
- C想以98元买3个
同时有人想卖:
- X想以101元卖1个
- Y想以102元卖2个
- Z想以103元卖3个
把这些数据排好,就是订单簿。买价从高到低排,卖价从低到高排。为什么?因为买方想低价买,但为了成交,得报高价;卖方想高价卖,但为了成交,得报低价。市场就是这么博弈的。
核心要点:订单簿的本质是「价格-数量」的二维映射。每一档价格对应一个累计委托量。
1.2 买卖盘口(Bid/Ask)机制
盘口,就是订单簿最前面那几档数据。Bid是买方最高价,Ask是卖方最低价。
我刚开始做交易系统时,犯过一个低级错误:只看Bid和Ask的价格,忽略了数量。结果有一次,Bid挂了1000手大单,我以为支撑很强,结果瞬间被砸穿。后来才明白——盘口深度比价格更重要。
盘口的关键指标:
- Bid/Ask价差:价差越小,流动性越好。比如价差0.01元,说明市场很活跃。
- 盘口深度:每个价位上的挂单量。深度越厚,越不容易被操纵。
- 买卖比例:买盘总量和卖盘总量的比值。比值大于1,说明买方力量强。
我的经验:做策略时,别只看第一档。我习惯看前五档的累计量。有时候第一档只有10手,但第二档有1000手,那才是真正的支撑位。
1.3 撮合引擎工作流程
撮合引擎,就是交易所的「心脏」。它负责把买单和卖单配对。流程其实不复杂:
- 接收订单:用户提交买单或卖单
- 价格优先:买单价高者先成交,卖单价低者先成交
- 时间优先:同价格,先到先得
- 数量匹配:找到对手单,按最小数量成交
- 更新订单簿:成交后,删除或修改剩余订单
举个例子。假设当前订单簿:
| 方向 | 价格 | 数量 | 时间 |
|---|---|---|---|
| 买 | 100 | 10 | 09:00:01 |
| 买 | 99 | 5 | 09:00:02 |
| 卖 | 101 | 8 | 09:00:03 |
| 卖 | 102 | 12 | 09:00:04 |
现在来了一个买单:价格101,数量5。撮合引擎会怎么做?
它会先看卖一价101,有8个在卖。价格匹配,成交5个。剩余3个继续挂着。就这么简单。
注意:我曾经遇到过一个问题——撮合引擎的延迟。如果延迟超过1毫秒,在高频交易中就可能被套利。所以,撮合引擎必须用C++或Rust写,Java都不行。
1.4 市场深度与流动性
市场深度,说白了就是「你能在不影响价格的情况下,买多少或卖多少」。深度越深,流动性越好。
我习惯用「深度图」来看市场。深度图就是把订单簿的累计量画成曲线。X轴是价格,Y轴是累计量。曲线越陡,说明深度越浅;曲线越平,说明深度越深。
这里我画了一张深度图的SVG,帮你直观理解:
你看这张图。绿色是买方深度,红色是卖方深度。中间那个缺口就是价差。缺口越小,流动性越好。曲线越平缓,深度越厚。
流动性的衡量指标:
- 买卖价差:越小越好。比如0.01元比0.1元好。
- 订单簿深度:前五档的总量。总量越大,越不容易滑点。
- 成交速度:市价单能在多少毫秒内成交。越快越好。
避坑指南:我曾经在流动性差的币种上做策略,结果一个市价单下去,价格直接滑了2%。从那以后,我每个策略都会加一个「最小深度检查」——如果前五档总量小于某个阈值,就拒绝交易。
1.5 实战:如何用订单簿数据做策略
光说不练假把式。我分享一个我常用的策略思路:
订单簿失衡策略
原理很简单:当买盘深度远大于卖盘深度时,说明买方力量强,价格大概率上涨。反之亦然。
具体做法:
- 实时获取订单簿前五档数据
- 计算买盘总量和卖盘总量
- 计算比值:买盘总量 / 卖盘总量
- 当比值大于1.5时,做多;小于0.67时,做空
代码示例(伪代码):
def order_book_imbalance(order_book):
bid_volume = sum(order_book['bids'][i]['qty'] for i in range(5))
ask_volume = sum(order_book['asks'][i]['qty'] for i in range(5))
ratio = bid_volume / ask_volume
if ratio > 1.5:
return 'BUY'
elif ratio < 0.67:
return 'SELL'
else:
return 'HOLD'
这个策略我实盘跑过,胜率大概在60%左右。但要注意,它只适合流动性好的品种。比特币、以太坊这些主流币效果不错,小币种就别用了。
总结一下:订单簿是市场的「显微镜」。看懂它,你就能看到别人看不到的交易机会。但记住——数据是死的,策略是活的。别迷信任何一个指标,多结合盘口变化和成交量来判断。