一、微观结构导论:市场到底在「结构」什么?
大家好,我是你们的讲师。做了十几年量化,我越来越觉得——市场微观结构才是真正理解价格波动的「底层密码」。很多人盯着K线看,却不知道订单簿里每一笔挂单都在讲故事。今天我们就来拆开这个黑箱。
一句话定义:市场微观结构,研究的是「交易机制如何影响价格形成」。说白了,就是订单怎么来、怎么匹配、价格怎么跳的整个过程。
1.1 订单簿:市场的「实时心电图」
订单簿(Order Book)是所有买卖意愿的集合。我习惯把它想象成一个「排队大厅」:
- 买单(Bid):想买的人,出价从高到低排
- 卖单(Ask):想卖的人,出价从低到高排
- 中间价(Mid Price):最优买价和最优卖价的平均值
举个例子,某股票当前订单簿长这样:
| 价格 | 买量 | 卖量 | 价格 |
|---|---|---|---|
| 10.01 | 200 | 150 | 10.02 |
| 10.00 | 500 | 300 | 10.03 |
| 9.99 | 800 | 600 | 10.04 |
最优买价是10.01,最优卖价是10.02。价差只有1分钱。嗯,流动性不错。
我的经验:做高频策略时,我习惯把订单簿前5档数据都存下来。别小看第5档,有时候大单就藏在那里,一撤单市场就变脸。
1.2 买卖价差:交易成本的「隐形杀手」
价差(Spread)就是最优卖价减去最优买价。你想想看,如果你同时买进卖出,立刻亏掉的就是这个价差。
价差大小反映了什么?
- 价差小:流动性好,交易成本低。比如大盘蓝筹股。
- 价差大:流动性差,或者信息不对称严重。比如小盘妖股。
我曾经在2015年股灾时做过统计,某只小盘股的价差从平时的0.5%飙到了3%以上。那段时间做高频的同行,基本都亏在价差上了。
避坑指南:千万别只看中间价!我见过有人回测时用中间价成交,实盘一跑发现滑点吃掉所有利润。价差是实打实的成本,必须算进去。
1.3 市场深度:你能「吃」掉多少单?
市场深度(Market Depth)衡量的是「在某个价格水平上,有多少订单等着成交」。深度越大,大单冲击成本越小。
举个例子:
- 深度1000股:你卖5000股,可能把价格砸下去2分钱
- 深度10000股:同样卖5000股,价格可能只动0.5分钱
我常用一个指标叫「深度斜率」——看价格每变动1分钱,订单量变化多少。斜率陡峭说明流动性集中,斜率平缓说明订单分散。
1.4 高频数据特征:每秒都在「爆炸」
微观结构研究离不开高频数据。什么是高频数据?就是每一笔交易、每一次报价变动都记录下来。我处理过的最细数据,每秒有上千条记录。
高频数据有几个典型特征:
- 非均匀时间间隔:交易不是均匀发生的,有时候一秒10笔,有时候10秒一笔
- 离散价格:价格只能按最小变动单位跳,比如0.01元
- 自相关性:相邻的报价变动往往正相关——涨了容易接着涨
- 波动率聚集:大波动后面跟着大波动,平静后面跟着平静
我记得刚入行时,用普通的时间序列模型去拟合高频数据,结果一塌糊涂。后来才明白——高频数据不能用常规的「等间隔」思维去处理。
核心要点:微观结构分析,本质上是在「离散时间、离散价格、非均匀到达」的框架下,还原市场参与者的博弈过程。
1.5 知识体系总览
下面这张图,是我自己梳理的微观结构知识框架。你可以把它当作整个课程的地图:
这张图把本章的核心概念串起来了。从订单簿出发,到价差和深度,再到高频数据的统计特征——每一步都是后续章节的基础。
1.6 一个小练习
最后,给你留个动手的题目。用Python拉一下某只股票的Level-2数据,计算过去5分钟的平均价差和深度。代码框架我写好了:
import pandas as pd
import numpy as np
# 假设你已经有了订单簿数据
# 格式:time, bid_price1, bid_vol1, ask_price1, ask_vol1, ...
def calc_spread_depth(df):
# 计算价差
df['spread'] = df['ask_price1'] - df['bid_price1']
# 计算前5档总深度
depth_cols = [f'bid_vol{i}' for i in range(1,6)] + [f'ask_vol{i}' for i in range(1,6)]
df['total_depth'] = df[depth_cols].sum(axis=1)
return df[['time', 'spread', 'total_depth']].mean()
# 试试看
# result = calc_spread_depth(your_data)
# print(result)
这个练习不难,但能帮你建立对微观结构数据的「手感」。我当年就是靠这种小练习,慢慢摸清了订单簿的脾气。
小提示:如果数据量太大,别一次性全读进内存。用chunksize分批处理,我吃过这个亏——16G内存直接爆了。
公众号:蓝海资料掘金营,微信deep3321