4 Empirical Properties of Limit Order Books

LOB 可以揭露很多有趣的微观信息,近年来也有许多研究。但需要注意:高频交易的进化速度极快,让这些研究很多时候比较过时。

Originally Posted at: https://clouder0.com/zh-cn/posts/lob-empirical-properties/

总结性的来说,作者发现了这些特点:

  • 每日交易量大概占市值的 0.5 0.5% 0.5. 从 1995 到 2015,这个比例近乎翻倍了。
  • 在 midprice 1 % 1\% 1% 附近的 volumes(差不多是 daily volatility 的一半的范围)占当日总交易量的 1 % ∼ 3 % 1\% \sim 3\% 1%3%.
  • best quotes 的活动在 ms 级别,large tick 的活动更加频繁。
  • trade-through market orders(吃了 LOB 多档的订单),在 small tick assets 上只有一小部分,而在 large-tick stocks 上则非常稀有。

在任意时刻,LOB 上揭露的订单都只是当天活动的很小一部分。


order flow 和 LOB 的很多属性都有着强烈的 intra-day patterns. 每天的不同时段表现是不同的

比如就成交量而言,每天接近开盘、收盘的时候交易异常活跃。前者可能是为了消化隔夜的信息,而后者则是为了尽快完成当日的交易(比如说规避持仓过夜的风险等)。此外,也有可能有许多交易者选择在流动性好的时候进行交易,从而进一步促成了交易的聚集。

image

large tick stocks 在开盘的交易量小,相比之下 small tick stocks 就大很多。emmm,这是普遍的吗?


Spread 在开盘时较大,而后持续减小。这可以从 Liquidity Providers 面临的 Adverse Selection 来考虑。
开盘时 Overnight News 让 Market Maker 面临强烈的 Adverse Selection 风险,因而需要增加 Spread. 随着交易逐渐消化掉了这部分的信息影响,Spread 就会逐渐缩小。

Liquidity 在开盘时相当稀有,而在收盘时相当充裕。这也意味着如果我们想干票大的、又不想承担太多的 Price Impact,可以选择在接近收盘的时候交易。

image


不同类型的 stocks 的 Spread Distribution 还是有所不同的。对于 large-tick stocks 而言,大部分时候 Spread 就是 1tick,在少数情况下会更大。

而对于 small-tick stocks 而言,取值就更加广泛了。

image

或许是因为 Spread 代表的是 Maker 的 Profit. 如果按 Spread 占市值的 Percentage 来算的话,也许会相对接近一些?

注意 bid-ask distribution 在不同的采样方式下结果是不同的。如果选择在 before-transaction 时统计,得到的 spread distribution 会比随机采样更 narrow 一些。这是因为 Liquidity Takers 会择时下单。

image

所以一个简单的 Taker 执行策略就是:当 Spread 较大的时候少下( 但是为什么?一般而言,如果假定 FairPrice 处于 MidPrice,那么 Taker 去拿 Best Quotes 就需要付出 Half Spread Cost,当 Spread 较大的时候,意味着这个 Cost 也较大。而这个 Cost 就是 Maker 的 Profit.

当然,如果用更 Fair 的 Price Prediction 来衡量这个 Cost,会更好一些。


可以观察 Limit Orders 挂单的分布。same-side quote-relative prices 的定义参见上篇文章 3 Limit Order Books。在 Best Quotes 处的挂单总是最多的,但更深的地方也存在不少。

在 small-tick stocks 中,有更多的挂单会选择挂在 Spread 上,这可能是因为很多时候 spread 相对较大。

image

根据作者的说法,撤单的分布和挂单非常相似,这可能是因为很多订单都是挂了之后,如果没成交就撤。


挂单的 Order Size 呢?这个的分布其实是相当广泛的,注意这是对数坐标。可以发现 OrderSize 没有呈现出 Cluster 聚集的状况,而是越大越少地广泛分布。

image


best quotes 上的 volume 分布:

image

可以发现 tail 和上面的 Order Size 有点像,这可能是因为一个 Large Limit Order 几乎总是会留在 LOB 上被观察到。

Queue Volumes 也可以从 calendar-time、event-time 和 before-transaction 三个角度来考察。

  • 对于 small-tick stocks,在交易发生前 best quote 处的 volume 更大,说明 liquidity taker 更愿意在 opposite volume 相对较高时出手。
  • 对于 large-tick stocks,在交易前的 volume 较小。Queue Volume 自身就带有跟未来价格方向有关的信息,当 ask 的流动性少、bid 流动性大时,价格一般向上移动,liquidity takers 抢着把最后剩的一点流动性拿干净。

接下来是 LOB 上的 Volume Profile:这次使用的是 opposite-side price distance,这是为了避免在 0 处的巨大 peak.

image

可以发现即使在相当远的位置也有许多的流动性,同时,在 small-tick stocks 上可以观察到强烈的 round-number effects:大家比较喜欢挂单在整数上。

当然,要注意,这里的 Volume Profile 是平均值,那么在一个 snapshot 的分布究竟是怎么样的呢?

image

可以发现在 small-tick stocks 上,LOB 实际上稀疏得多,很多时候是因为平均了才显得比较连续。


Tick size 如何影响市场呢?

首先观察:spread 和 stock price 基本上是成比例关系。由于 θ = 0.01 \theta=0.01 θ=0.01 就是最低价了,mean stock price < 10 的离群点没法继续往下。对比较贵的 stocks 相关性还是比较强。

image

tick size 小的话,在 best quote 处的成交量就更少,best quote 处的 depth 也较小。

都是一些 stylized facts. 暂且还没有太反直觉的地方。

1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
### 香农熵的经验计算方法 经验版香农熵的计算通常基于观测数据集中的频率分布来估计概率。具体来说,在信息论中,对于给定的数据样本集合 \( S \),可以通过以下方式估算离散随机变量 X 的香农熵 H(X)[^1]: 设 \( n_i \) 表示符号 i 出现次数,N 是总观察数,则符号 i 发生的概率可以近似为 \( p(i)=\frac{n_i}{N} \)。 香农熵定义如下: \[H(S)=-\sum_{i=0}^{m-1}p(x_i)\log_2(p(x_i))\] 其中 m 代表不同符号的数量。当某些符号从未出现过 (\(n_i = 0\)) ,则其对应的项被忽略不计因为乘积会等于零。 为了更直观理解这一过程,下面给出一段 Python 实现代码用于计算字符串序列的经验熵值: ```python import math from collections import Counter def empirical_entropy(sequence): """Calculate the empirical entropy of a sequence.""" frequency_distribution = Counter(sequence) total_count = sum(frequency_distribution.values()) probabilities = [ count / total_count for count in frequency_distribution.values() ] return -sum( prob * math.log2(prob) for prob in probabilities if prob != 0 ) # Example usage: sequence_example = "abracadabra" print(f"The empirical entropy is {empirical_entropy(sequence_example):.4f}") ``` 此函数接收任意可迭代对象作为输入参数 `sequence` 并返回该序列的经验熵数值。注意这里使用了标准库模块 `collections.Counter` 来统计各个字符出现频次,并利用这些统计数据完成最终的熵值计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值