5. 弹性计算方法:点弹性计算、弧弹性计算、基于订单簿的弹性估算
说到弹性计算,我得先跟你聊聊一个常见的误区。
很多人以为弹性就是「价格变了,成交量变了,除一下完事」。嗯,真这么简单就好了。我在做高频策略回测时,就吃过这个亏——用错了弹性计算方法,导致策略在实盘时完全跑偏。
弹性计算,说白了就是衡量「价格变化对订单流冲击的敏感度」。你想想看,一个订单打进去,价格弹了多大?又花了多久弹回来?这两个维度,就是我们今天要聊的核心。
5.1 点弹性计算
点弹性,也叫瞬时弹性。它描述的是在某个价格点上,需求或供给对价格变化的敏感程度。
公式很简单:
E = (dQ / Q) / (dP / P)
其中 dQ 和 dP 是微小的变化量。在实际交易中,我们通常用相邻两笔交易的数据来近似。
举个例子:
假设当前价格是 100 元,成交量是 1000 手。下一笔交易价格变成 101 元,成交量变成 980 手。那么:
dP = 1, P = 100 → 价格变化率 = 1%
dQ = -20, Q = 1000 → 数量变化率 = -2%
点弹性 E = (-2%) / (1%) = -2.0
这个 -2.0 意味着:价格每上涨 1%,需求量会下降 2%。绝对值大于 1,说明这个价位附近的需求是「富有弹性」的。
关键点:点弹性只适用于小范围变化。如果价格跳了 5% 以上,点弹性的误差就会很大。我一般只在 tick 级别数据上用点弹性,超过 3 个 tick 我就换方法了。
5.2 弧弹性计算
弧弹性解决的就是点弹性的「小范围」限制。它用两个点之间的「弧」来近似整段曲线。
公式长这样:
E_arc = (ΔQ / Q_avg) / (ΔP / P_avg)
其中 Q_avg = (Q1 + Q2) / 2,P_avg = (P1 + P2) / 2。
还是刚才的例子,但价格变化大一点:
| 变量 | 点 A | 点 B |
|---|---|---|
| 价格 | 100 | 110 |
| 成交量 | 1000 | 800 |
ΔP = 10, P_avg = 105 → 价格变化率 = 10/105 ≈ 9.52%
ΔQ = -200, Q_avg = 900 → 数量变化率 = -200/900 ≈ -22.22%
弧弹性 E_arc = (-22.22%) / (9.52%) ≈ -2.33
你看,用点弹性算的话,选 A 点还是 B 点做基准,结果会不一样。弧弹性用平均值,结果就唯一了。
我的习惯:做日间策略时,我几乎只用弧弹性。因为日线级别的价格波动通常超过 2%,点弹性已经不太靠谱了。弧弹性虽然计算量稍大,但结果更稳健。
5.3 基于订单簿的弹性估算
这才是今天的重头戏。订单簿弹性,说白了就是「市场能吸收多少订单而不产生显著价格偏移」。
我当年在搭建做市商系统时,最头疼的就是这个指标。为什么?因为订单簿是动态的,弹性每时每刻都在变。
核心思路:
订单簿弹性 = 价格恢复速度 / 初始冲击幅度
具体分三步:
- 测量冲击幅度:一个大单进来,价格从 P0 变成 P1。冲击幅度 = |P1 - P0| / P0。
- 测量恢复时间:价格从 P1 回到 P0 附近(比如回到 90% 的冲击幅度以内)所需的时间 T。
- 计算弹性:E_orderbook = 恢复幅度 / 恢复时间。恢复幅度通常取 0.8(恢复 80% 就算弹性好)。
代码实现(Python 伪代码):
def orderbook_elasticity(l2_snapshot, trade):
"""
l2_snapshot: 订单簿快照,包含买卖各10档
trade: 成交记录,包含价格和数量
"""
# 1. 计算冲击前的中价
mid_price_before = (l2_snapshot['ask1'] + l2_snapshot['bid1']) / 2
# 2. 模拟吃掉最优档后的新中价
# 假设买单吃掉了卖一档
new_ask1 = l2_snapshot['ask2'] # 卖二变成新的卖一
new_mid = (new_ask1 + l2_snapshot['bid1']) / 2
# 3. 冲击幅度
impact = abs(new_mid - mid_price_before) / mid_price_before
# 4. 恢复时间(这里简化,实际需要持续监控)
recovery_time = monitor_recovery(l2_snapshot, mid_price_before)
# 5. 弹性系数
elasticity = 0.8 / (impact * recovery_time)
return elasticity
避坑指南:我曾经在计算订单簿弹性时,直接用「恢复时间」作为弹性指标。结果发现,有些股票恢复很快但冲击也很大,有些恢复慢但冲击小。后来我改成「恢复幅度/冲击幅度/时间」的三维指标,才真正抓住了弹性的本质。
5.4 三种方法的对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 点弹性 | Tick 级别、高频交易 | 计算快、实时性强 | 只适合小范围变化 |
| 弧弹性 | 日间策略、中低频 | 结果唯一、稳健 | 计算稍慢 |
| 订单簿弹性 | 做市、算法交易 | 反映真实市场深度 | 需要实时 L2 数据 |
我个人建议:如果你做高频,用点弹性;做中低频,用弧弹性;做做市或大单拆单,必须用订单簿弹性。三者不是替代关系,而是互补关系。
一句话总结:弹性不是算出来的,是「测」出来的。你选什么方法,取决于你手里有什么数据、要做什么决策。
实战建议:刚开始做弹性分析时,别贪多。先拿一个月的 tick 数据,把三种方法都跑一遍。你会发现,不同方法给出的结论可能完全不同——这本身就是市场微观结构最迷人的地方。