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为可调参数,实盘需根据历史库存分布和风险偏好确定。 - 本案例仅覆盖库存阈值触发价差调整的核心决策逻辑,不包含订单管理、交易所接口或行情订阅等外围工程模块。