2. 库存风险阈值触发的价差扩大策略

任务目标

在双边挂单做市场景中,当某一方向的库存净头寸超过设定阈值时,系统自动将对应方向的报价价差扩大,以降低该方向的成交概率;当库存回落至阈值以内后,恢复初始价差。本案例实现该库存风险管理逻辑的最小可运行闭环。

核心逻辑

维护当前净库存(正数表示多仓,负数表示空仓)。设置多空两个方向的库存阈值:当净库存 > 多仓阈值时,将卖单报价的价差扩大(卖价上移);当净库存 < -空仓阈值时,将买单报价的价差扩大(买价下移)。库存回到阈值范围内时,价差恢复为初始值。每次库存变动后重新计算双边报价。

完整代码

class InventorySkewPricer:
    def __init__(self, mid_price, base_spread, long_thresh=10, short_thresh=10,
                 widen_mult=2.0):
        """
        mid_price: 中间价
        base_spread: 初始价差(价格单位)
        long_thresh: 净多仓阈值,超过则扩大卖价差
        short_thresh: 净空仓阈值(值),超过则扩大买价差
        widen_mult: 价差扩大倍数
        """
        self.mid = mid_price
        self.base_spread = base_spread
        self.long_thresh = long_thresh
        self.short_thresh = short_thresh
        self.widen_mult = widen_mult
        self.net_inventory = 0  # 正=净多,负=净空

    def on_trade(self, qty):
        """成交更新库存:买成交+qty,卖成交-qty"""
        self.net_inventory += qty

    def get_quotes(self):
        """根据当前库存计算双边报价,返回(bid, ask)"""
        half = self.base_spread / 2.0

        # 卖价差:净多仓超阈值时扩大
        if self.net_inventory > self.long_thresh:
            ask_offset = half * self.widen_mult
        else:
            ask_offset = half

        # 买价差:净空仓超阈值时扩大
        if self.net_inventory < -self.short_thresh:
            bid_offset = half * self.widen_mult
        else:
            bid_offset = half

        bid = round(self.mid - bid_offset, 2)
        ask = round(self.mid + ask_offset, 2)
        return bid, ask

# 最小验证闭环
if __name__ == "__main__":
    p = InventorySkewPricer(mid_price=100.0, base_spread=0.20,
                            long_thresh=5, short_thresh=5, widen_mult=2.0)

    # 初始状态:库存为0,价差正常
    print("初始报价:", p.get_quotes())          # 预期 (99.90, 100.10)

    # 连续买入成交,净库存达到6(超过多仓阈值5)
    for _ in range(6):
        p.on_trade(+1)
    print("净库存=6 报价:", p.get_quotes())     # 预期 (99.90, 100.20)

    # 卖出一笔,库存回落到5(等于阈值,不触发扩大)
    p.on_trade(-1)
    print("净库存=5 报价:", p.get_quotes())     # 预期 (99.90, 100.10)

    # 连续卖出成交,净库存变为-6(超过空仓阈值5)
    for _ in range(7):
        p.on_trade(-1)
    print("净库存=-6 报价:", p.get_quotes())    # 预期 (99.80, 100.10)

运行方式

python inventory_skew_pricer.py

验证方法

程序直接运行后,观察四行输出是否符合注释中的预期值:

  • 库存为0时,买卖价差为0.20(买99.90 / 卖100.10);
  • 净库存6(>5)时,卖价上移至100.20,买价不变,卖价差扩大为0.30;
  • 净库存回到5(等于阈值)时,卖价恢复100.10;
  • 净库存-6(<-5)时,买价下移至99.80,卖价不变,买价差扩大为0.30。

若输出与预期一致,说明库存阈值触发价差扩大的逻辑正确。阈值判断采用严格大于(>),等于阈值时不触发扩大。

关键说明

  • 本实现以净库存作为唯一状态变量,实际高频做市系统中需将on_trade接入成交回报回调,并考虑未成交撤单对库存的影响。
  • 价差扩大倍数widen_mult和阈值long_thresh/short_thresh为可调参数,实盘需根据历史库存分布和风险偏好确定。
  • 本案例仅覆盖库存阈值触发价差调整的核心决策逻辑,不包含订单管理、交易所接口或行情订阅等外围工程模块。