第一章:微观结构基础
做量化这些年,我越来越觉得,市场微观结构就像交易世界的「原子结构」。你不懂它,策略就是空中楼阁。今天咱们就从头捋一捋这些最基础、也最容易被忽视的东西。
核心观点:订单簿是市场的「心电图」,价差是流动性的「体温」,成交量是市场的「脉搏」。这三样搞不明白,因子挖掘就是瞎蒙。
1.1 订单簿结构与限价订单簿
说白了,订单簿就是一个「买家 vs 卖家」的实时擂台。左边是买单,右边是卖单,中间是当前成交价。我刚开始做高频策略时,总觉得这东西太简单,结果第一次回测就吃了大亏——忽略了订单簿的「厚度」变化。
限价订单簿(LOB)的核心要素就这几个:
- 价格档位:每个价格上的挂单量
- 买卖方向:Bid(买方)和 Ask(卖方)
- 订单类型:限价单、市价单、冰山订单等
- 时间优先级:先到先得,价格优先
嗯,这里要注意一点:很多新手只看最优买卖价(Top of Book),但真正的微观结构信息藏在「深度」里。我曾经踩过一个坑——某只股票最优价差只有1分钱,但第二档深度差了10倍,结果一进去就被滑点吃掉了利润。
我的习惯:构建因子时,至少看3-5档深度。单看Top of Book就像只看冰山一角,会漏掉大量信息。
来,我画个图帮你理解订单簿的结构:
1.2 买卖价差与市场深度
价差(Spread)就是最优卖价减去最优买价。你想想看,如果价差是0.01元,你一买一卖就亏了1分钱——这还没算手续费。我见过有些小盘股,价差能到5%以上,那基本就是「流动性荒漠」。
市场深度(Market Depth)则衡量的是「抗冲击能力」。深度越大,大单进去价格波动越小。我习惯用这个公式来量化:
# 计算加权平均深度
def calc_weighted_depth(order_book, n_levels=5):
"""
计算前n档的加权市场深度
权重按距离最优价的距离递减
"""
total_depth = 0
total_weight = 0
for i in range(n_levels):
bid_vol = order_book['bids'][i]['volume']
ask_vol = order_book['asks'][i]['volume']
weight = 1 / (i + 1) # 越近权重越大
total_depth += (bid_vol + ask_vol) * weight
total_weight += weight
return total_depth / total_weight
我曾经踩过的坑:只看价差不看深度。有一次我发现某只股票价差只有0.01,以为流动性很好,结果一进去发现深度只有几百股,大单直接打穿了3个档位。从那以后,我构建因子时一定把「价差×深度」结合起来看。
1.3 交易量与成交额
交易量是「股数」,成交额是「金额」。这两个指标看似简单,但用法大有讲究。
| 指标 | 含义 | 我的用法 |
|---|---|---|
| 交易量 | 成交的股票数量 | 判断市场活跃度,配合价格变化看 |
| 成交额 | 成交的总金额 | 衡量资金流向,比交易量更准确 |
| 量比 | 当前量 / 过去5日均量 | 发现异常放量,往往是信号 |
我个人习惯把成交额拆成「大单」和「小单」来看。为什么?因为大单往往是机构行为,小单是散户行为。这两者的比例变化,能提前反映资金动向。
一个小技巧:用成交额除以交易量,得到「平均成交价」。如果这个价格偏离了当前市价,说明有大资金在「吃单」——这是很好的微观结构因子。
1.4 交易频率与时间间隔
交易频率就是「单位时间内的交易笔数」。高频交易看毫秒级,日频交易看分钟级。你选什么频率,决定了你能捕捉到什么级别的信号。
我记得有一次做因子测试,发现一个因子在5分钟K线上效果很好,但换到1分钟K线上就完全失效。后来一查,原来是这个因子捕捉的是「订单簿恢复速度」——5分钟足够恢复了,1分钟还在波动中。
时间间隔的选择,我建议遵循这个原则:
- 高频策略(< 1秒):关注订单簿变化、价差波动
- 日内策略(1秒-1小时):关注成交量变化、大单流向
- 日频策略(> 1天):关注日间价差变化、流动性指标
嗯,这里要特别提醒一下:时间间隔越短,噪音越大。我刚开始做高频时,恨不得看微秒级数据,结果发现大部分都是市场噪音。后来我学乖了——先看大周期确定方向,再看小周期找入场点。
总结一下:微观结构的基础,说白了就是「谁在什么时候、以什么价格、买了多少」。订单簿告诉你「挂单情况」,价差和深度告诉你「交易成本」,成交量和频率告诉你「市场热度」。这四个维度组合起来,就能构建出很多有效的因子。
好了,这一章的内容就到这里。记住,微观结构不是死记硬背的概念,而是你每天盯盘时能「看到」的东西。多观察、多思考,这些基础会变成你的直觉。