Hummingbot 第9章:做市策略详解

做市(Market Making)是 Hummingbot 最核心的功能。本章深入讲解 Pure Market Making 策略的各项参数和优化技巧。

Pure Market Making 策略

Pure Market Making(PMM)是 Hummingbot 最成熟的策略,通过在交易对两侧同时挂出买单和卖单来赚取价差。

策略原理

市场价格: 50,000 USDT

买单 (Bid)              卖单 (Ask)
┌────────┐              ┌────────┐
│ 0.01   │              │ 0.01   │
│ @      │              │ @      │
│ 49,750 │              │ 50,250 │
│ -0.5%  │              │ +0.5%  │
└────────┘              └────────┘
    │                        │
    └──────── 价差 1% ──────┘

每次买卖成交获利 = 价差 - 手续费

核心参数详解

strategy: pure_market_making
exchange: binance
trading_pair: BTC-USDT

# 价差参数
bid_spread: 0.5           # 买单价差(%),相对于中间价
ask_spread: 0.5           # 卖单价差(%),相对于中间价

# 订单参数
order_amount: 0.01        # 每笔订单数量(基础币种)
order_levels: 1           # 订单层级数
order_level_spread: 1.0   # 层级之间的价差增量(%)
order_level_amount: 0.01  # 每层级的订单数量

# 刷新参数
order_refresh_time: 60    # 订单自动刷新间隔(秒)
order_refresh_tolerance_pct: 0.2  # 刷新容忍偏差(%)
filled_order_delay: 60    # 成交后等待时间(秒)

# 超时参数
max_order_age: 300        # 订单最大存活时间(秒)

# 高级参数
split_order_levels_enabled: false  # 是否拆分订单层级
split_order_levels: 1             # 拆分份数

双向报价

订单层级系统

多层级订单可以覆盖更广的价格范围:

层级 3: 卖 0.01 @ 51,250 (+2.5%)
层级 2: 卖 0.01 @ 50,750 (+1.5%)
层级 1: 卖 0.01 @ 50,250 (+0.5%)
────────────────────────────
        中间价: 50,000
────────────────────────────
层级 1: 买 0.01 @ 49,750 (-0.5%)
层级 2: 买 0.01 @ 49,250 (-1.5%)
层级 3: 买 0.01 @ 48,750 (-2.5%)

配置多层级做市:

order_levels: 3              # 买卖各 3 层
order_level_spread: 0.5      # 层级间价差 0.5%
order_level_amount: 0.01     # 每层数量
order_override:
  # 手动覆盖特定订单
  order_1:
    side: buy
    price: 49750
    amount: 0.02  # 第一层更大的数量
  order_2:
    side: buy
    price: 49500
    amount: 0.015
  order_3:
    side: buy
    price: 49250
    amount: 0.01

订单管理

订单刷新策略

Hummingbot 提供多种订单刷新模式:

# 按时间刷新
order_refresh_time: 60  # 每 60 秒取消所有订单并重新挂单

# 按价格变动刷新
order_refresh_tolerance_pct: 0.2  # 价格变动超过 0.2% 时刷新

# 组合策略:时间和价格双重触发
# 两种条件满足任一即刷新

订单超时管理

# 订单超时设置
max_order_age: 300  # 订单最多存活 5 分钟

# 超时后自动取消并重新挂单
# 避免订单在极端行情下被长时间挂在不合理价格

成交后行为

# 买单成交后的处理
filled_order_delay: 60  # 等待 60 秒再重新挂单

# 双向成交平衡
# 当买单成交后,Hummingbot 会调整价格
# 使得卖出方向更容易成交,恢复库存平衡

库存风险

库存偏斜

库存偏斜(Inventory Skew)是管理库存风险的核心功能:

inventory_skew_enabled: true      # 启用库存偏斜
inventory_target_base_pct: 50.0    # 目标基础币种占比 50%
inventory_range_multiplier: 1.0   # 范围倍数

# 工作原理:
# 当 BTC 库存超过 50% 目标时:
#   - 降低买单价(减少买入)
#   - 降低卖单价(鼓励卖出)
# 当 BTC 库存低于 50% 目标时:
#   - 提高买单价(鼓励买入)
#   - 提高卖单价(减少卖出)

库存偏斜示例

# 库存偏斜计算逻辑示例
target_ratio = 0.5  # 50% BTC
current_btc_value = 0.05 * 50000  # 0.05 BTC * $50,000 = $2,500
current_usdt = 1000
total_value = 3500
current_ratio = 2500 / 3500  # 71.4%

# 偏差 = 当前比例 - 目标比例 = 21.4%
# Hummingbot 会将买单调低,卖单价调高
# 促使库存回归目标比例

止损保护

# 止损参数
stop_loss_spread: 5.0     # 当价格偏离超过 5% 时触发止损
price_ceiling: 100000     # 价格上限(高于此价停止买入)
price_floor: 10000        # 价格下限(低于此价停止卖出)

# 止损触发后的行为:
# - 取消所有挂单
# - 停止策略运行
# - 记录日志

做市参数调优

价差优化策略

市场状况建议价差建议层级建议订单量
高波动(波动率 > 3%)1.0% - 2.0%2-3 层正常 50%
中等波动(波动率 1-3%)0.5% - 1.0%2 层正常 75%
低波动(波动率 < 1%)0.2% - 0.5%1-2 层正常 100%
重大新闻事件暂停策略

基于波动率的动态调优

# 动态价差调整示例
def calculate_dynamic_spread(volatility: float) -> tuple:
    """根据波动率计算动态价差"""

    # 基础价差
    base_spread = 0.5

    # 波动率因子
    vol_factor = 1 + (volatility * 10)

    # 限制价差范围
    min_spread = 0.2
    max_spread = 2.0

    adjusted_spread = base_spread * vol_factor
    adjusted_spread = max(min_spread, min(max_spread, adjusted_spread))

    return adjusted_spread

性能指标监控

指标健康范围说明
成交率20% - 40%每轮刷新中成交的比例
价差收益率> 0.1%扣除手续费后的净收益
库存偏离度< 20%当前库存与目标库存的偏差
订单存活时间< 刷新周期的 80%订单在刷新前成交的比例

常见调优问题

问题原因解决方法
无人成交价差太小增大 bid_spread / ask_spread
成交太多亏损价差不够覆盖手续费确保价差 > 手续费率 × 2
库存偏移严重趋势行情持续启用 inventory_skew_enabled
频繁刷新tolerance_pct 太小增大 order_refresh_tolerance_pct