第二章:市场微观结构——订单簿原理、买卖价差分析、市场深度与流动性
各位同学,大家好。我是你们的老朋友,一个在量化交易坑里摸爬滚打多年的工程师。今天咱们聊点硬核的——市场微观结构。
很多人做策略,上来就撸K线,看MACD,金叉死叉玩得飞起。但我得说句实话,如果你不懂订单簿,不懂价差和深度,你的策略就像蒙着眼睛开车。我见过太多人,策略回测漂亮得像朵花,一上实盘就亏成狗。为什么?因为回测用的是收盘价,而实盘你得跟订单簿里的对手盘真刀真枪地干。
好,咱们不扯虚的,直接进入正题。
2.1 订单簿原理:市场的“实时快照”
订单簿是什么?说白了,就是交易所里所有未成交的买单和卖单的集合。它实时反映了市场参与者的“意愿”。
我个人习惯把订单簿想象成一个“排队系统”。
- 买单(Bid):一群人举着牌子喊“我要买!”,价格高的排前面。
- 卖单(Ask):另一群人喊“我要卖!”,价格低的排前面。
交易所的撮合引擎,就是不停地看买单的最高价和卖单的最低价。一旦价格交叉,啪,成交一笔。
核心概念:
- 买一(Best Bid):当前最高的买入价格。
- 卖一(Best Ask):当前最低的卖出价格。
- 价差(Spread):卖一价 - 买一价。
嗯,这里要注意。订单簿不是静态的。它每时每刻都在变化。有人挂单,有人撤单,有人吃掉你的单子。我刚开始做高频交易时,最头疼的就是这个。你看到的订单簿,其实是“过去时”。等你程序反应过来,市场可能已经变样了。
我曾经犯过一个低级错误:直接拿订单簿的深度数据去算“可成交数量”,结果因为网络延迟,我算出来的量比实际多了10倍。一梭子进去,直接把价格打穿了,亏了不少。所以,处理订单簿数据,一定要考虑延迟和快照的时效性。
2.2 买卖价差分析:交易成本的“隐形杀手”
价差,就是买一和卖一之间的差距。它就是你来回交易一次需要付出的“过路费”。
你想想看,如果你买在卖一价,卖在买一价,你直接就亏了一个价差。对于高频策略来说,价差就是最大的敌人。
我一般把价差分为两类:
- 绝对价差:卖一价 - 买一价。比如买一100.00,卖一100.01,价差就是0.01。
- 相对价差:绝对价差 / 中间价。这个更能反映交易成本的比例。
举个例子:
| 股票 | 买一价 | 卖一价 | 绝对价差 | 中间价 | 相对价差 |
|---|---|---|---|---|---|
| 茅台 | 1500.00 | 1500.10 | 0.10 | 1500.05 | 0.0067% |
| 某小盘妖股 | 5.00 | 5.05 | 0.05 | 5.025 | 1.00% |
看到了吗?茅台的绝对价差虽然大(0.10元),但相对价差极小。而小盘股绝对价差小,但相对价差高达1%。这意味着,你交易小盘股,光来回一次就亏掉1%!
所以,做策略前,先看看标的的价差。如果价差太大,你的策略利润可能全被交易所和流动性提供商吃掉了。
避坑指南:
我曾经在回测中忽略了价差,结果策略年化收益20%,实盘跑下来只有5%。后来一查,全被价差和滑点吃掉了。所以,回测时一定要模拟真实的价差环境,别用收盘价算收益。
2.3 市场深度与流动性:你能“吃”下多少单?
市场深度,指的是在订单簿上,不同价格档位上的挂单数量。它告诉你:如果你想买1000股,会不会把价格打飞?
流动性,说白了就是“你想买的时候,有人卖给你;你想卖的时候,有人买你的”。流动性好的市场,深度大,价差小。
我一般用以下几个指标来衡量:
- 深度(Depth):某个价格附近的总挂单量。比如买一到买五的总和。
- 订单簿斜率(Order Book Slope):价格变化与挂单量的关系。斜率越陡,说明深度越差,一点小单就能把价格打飞。
- 流动性比率(Amihud Illiquidity Ratio):衡量价格对成交额的敏感度。
咱们用Python来模拟一下,看看订单簿长什么样:
import pandas as pd
import numpy as np
# 模拟一个简单的订单簿
def simulate_order_book(mid_price=100.0, spread=0.01, depth=1000):
# 卖单:价格从卖一开始,逐渐升高
ask_prices = [mid_price + spread/2 + i*0.01 for i in range(5)]
ask_sizes = [depth - i*100 for i in range(5)] # 深度递减
# 买单:价格从买一开始,逐渐降低
bid_prices = [mid_price - spread/2 - i*0.01 for i in range(5)]
bid_sizes = [depth - i*100 for i in range(5)]
order_book = {
'ask_prices': ask_prices,
'ask_sizes': ask_sizes,
'bid_prices': bid_prices,
'bid_sizes': bid_sizes
}
return order_book
book = simulate_order_book()
print("卖单深度:", book['ask_sizes'])
print("买单深度:", book['bid_sizes'])
这段代码很简单,但能帮你理解深度是怎么分布的。实际生产中,订单簿数据量巨大,每秒可能有上千次变化。你需要用高效的数据结构(比如红黑树)来维护。
警告:
千万别以为订单簿的深度是“真实”的。很多做市商会挂虚假订单(Spoofing),看起来深度很大,等你一撤单,他们就撤单。这是违法的,但确实存在。所以,不要完全相信你看到的深度。
2.4 知识体系总览
为了让大家更直观地理解这一章的知识结构,我画了一张图。它把订单簿、价差、深度和流动性的关系串起来了。
这张图把本章的核心逻辑串起来了。你从订单簿出发,分析价差,评估深度,最终判断流动性。每一步都环环相扣。
好了,这一章的内容就到这里。记住,订单簿是市场的“心电图”。看不懂它,你就别谈什么量化交易了。下一章,咱们聊聊如何用这些数据构建一个简单的做市策略。