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 基于订单簿的弹性估算

这才是今天的重头戏。订单簿弹性,说白了就是「市场能吸收多少订单而不产生显著价格偏移」。

我当年在搭建做市商系统时,最头疼的就是这个指标。为什么?因为订单簿是动态的,弹性每时每刻都在变。

核心思路:

订单簿弹性 = 价格恢复速度 / 初始冲击幅度

具体分三步:

  1. 测量冲击幅度:一个大单进来,价格从 P0 变成 P1。冲击幅度 = |P1 - P0| / P0。
  2. 测量恢复时间:价格从 P1 回到 P0 附近(比如回到 90% 的冲击幅度以内)所需的时间 T。
  3. 计算弹性: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 数据

我个人建议:如果你做高频,用点弹性;做中低频,用弧弹性;做做市或大单拆单,必须用订单簿弹性。三者不是替代关系,而是互补关系。

一句话总结:弹性不是算出来的,是「测」出来的。你选什么方法,取决于你手里有什么数据、要做什么决策。

弹性计算方法知识体系 弹性计算方法 点弹性计算 弧弹性计算 订单簿弹性估算 公式: E = (dQ/Q) / (dP/P) 适用: Tick级别、小范围变化 公式: E_arc = (ΔQ/Q_avg) / (ΔP/P_avg) 适用: 日间策略、中低频交易 核心: 冲击幅度 + 恢复时间 适用: 做市、算法交易、大单拆单 三者互补:高频用点弹性,中低频用弧弹性,做市用订单簿弹性

实战建议:刚开始做弹性分析时,别贪多。先拿一个月的 tick 数据,把三种方法都跑一遍。你会发现,不同方法给出的结论可能完全不同——这本身就是市场微观结构最迷人的地方。

无相订单流研究社 微信Lucian808555