Hummingbot 第4章:策略基础

Hummingbot 提供了丰富的策略框架,从简单的 V1 策略模板到灵活的 V2 策略框架,满足不同交易需求。

V1 策略模板概览

V1 策略是 Hummingbot 最初的内置策略,采用 YAML 配置文件驱动:

内置 V1 策略清单

策略名称说明适用场景
pure_market_making纯做市策略在单一交易所提供买卖深度
cross_exchange_market_making跨交易所做市同时在两个交易所做市
arbitrage简单套利监控两个交易所的价格差
amm_arbAMM 套利在 DEX 和 CEX 之间套利
amm_price_estimationAMM 价格预估估算 DEX 交易价格
celo_arbCelo 套利Celo 生态套利策略
liquidity_mining流动性挖矿提供流动性赚取奖励

V1 策略通用参数

# 通用策略配置模板
strategy: pure_market_making
exchange: binance
trading_pair: BTC-USDT

# 交易所连接配置
connector: binance

# 日志级别
log_level: INFO

# 最大订单数量上限
max_orders_per_side: 5

# 取消后的等待时间(秒)
filled_order_delay: 60

# 委托策略
order_override:
  # 自定义订单覆盖规则
  enabled: false

V1 策略配置详解

以 Pure Market Making 为例,展示核心配置参数:

# 价差配置
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  # 刷新容忍偏差

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

# 库存管理
inventory_skew_enabled: false     # 是否启用库存偏斜
inventory_target_base_pct: 50.0    # 基础币种库存目标百分比
inventory_range_multiplier: 1.0   # 库存范围倍数

# 止损
stop_loss_spread: 5.0        # 止损价差
price_ceiling: 100000        # 价格上限
price_floor: 10000           # 价格下限

V2 策略框架

V2 策略是 Hummingbot 的新一代策略框架,基于脚本模式运行,提供更大的灵活性。

V2 核心概念

概念说明
Controller控制核心,负责策略逻辑和参数管理
Script脚本文件,定义策略执行流程
Config配置模型,使用 Pydantic 定义参数结构
Executor执行器,管理订单生命周期

V2 策略架构

from hummingbot.core.data_type.common import OrderType, PriceType
from hummingbot.strategy_v2.controllers import ControllerBase
from hummingbot.data_feed.candles_feed.candles_factory import CandlesFactory
from pydantic import BaseModel, Field
from typing import Optional

class PMMControllerConfig(BaseModel):
    """V2 做市策略控制器配置"""
    controller_name: str = "pmm_v2"
    connector_name: str = "binance"
    trading_pair: str = "BTC-USDT"
    candles_interval: str = "1m"
    candles_length: int = 30

    # 做市参数
    bid_spread: float = Field(default=0.5, ge=0.0)
    ask_spread: float = Field(default=0.5, ge=0.0)
    order_amount: float = Field(default=0.01, gt=0.0)

    # 动态调整
    dynamic_spread: bool = True
    dynamic_target_intensity: float = 0.8

V2 Controller 示例

class PMMController(ControllerBase):
    """V2 纯做市控制器"""

    def __init__(self, config: PMMControllerConfig):
        super().__init__(config)
        self.config = config
        self.candles = CandlesFactory.get_candles(
            connector=config.connector_name,
            trading_pair=config.trading_pair,
            interval=config.candles_interval
        )
        self.candles.start()

    async def update_strategy(self, strategy):
        """更新策略状态"""
        if not self.candles.ready:
            return

        # 获取最新价格
        close_prices = self.candles.close_prices
        current_price = close_prices[-1]

        # 计算动态价差
        volatility = self._calculate_volatility(close_prices)
        bid_spread = self.config.bid_spread * (1 + volatility)
        ask_spread = self.config.ask_spread * (1 + volatility)

        # 创建订单
        bid_price = current_price * (1 - bid_spread / 100)
        ask_price = current_price * (1 + ask_spread / 100)

        strategy.place_order(
            connector_name=self.config.connector_name,
            trading_pair=self.config.trading_pair,
            order_type=OrderType.LIMIT,
            side=TradeType.BUY,
            price=bid_price,
            amount=self.config.order_amount
        )

        strategy.place_order(
            connector_name=self.config.connector_name,
            trading_pair=self.config.trading_pair,
            order_type=OrderType.LIMIT,
            side=TradeType.SELL,
            price=ask_price,
            amount=self.config.order_amount
        )

    def _calculate_volatility(self, prices) -> float:
        """计算波动率"""
        if len(prices) < 2:
            return 0.0
        returns = [(prices[i] - prices[i-1]) / prices[i-1]
                   for i in range(1, len(prices))]
        import statistics
        return statistics.stdev(returns)

策略生命周期

策略状态机

┌──────────┐     import/start     ┌──────────┐
│  Created  │ ──────────────────► │  Running  │
└──────────┘                     └──────────┘
                                      │
                                   stop │
                                      ▼
                               ┌──────────┐
                               │  Stopped  │
                               └──────────┘

生命周期管理

阶段操作说明
创建create通过向导或手动创建 YAML 配置
导入import加载策略配置文件
启动start开始执行策略逻辑
运行持续监控和执行交易
停止stop取消所有挂单,停止策略
修改config运行时修改部分参数
删除文件管理删除配置文件

策略选择指南

根据交易风格选择

交易风格推荐策略理由
保守型Pure Market Making低风险赚取价差,适合新手
进取型Cross Exchange MM利用交易所间价差,收益更高
机会型Arbitrage捕捉短期套利机会
专业型V2 Controller完全自定义策略逻辑

根据市场条件选择

  • 高波动市场:建议使用较宽的价差和较小的订单量
  • 低波动市场:可以缩小价差,增加订单量
  • 趋势市场:启用库存偏斜,调整买卖比例
  • 震荡市场:纯做市策略表现最佳

策略组合建议

不要只依赖单一策略,可以根据资金规模同时运行多个策略:

# 组合示例
策略1: 50%资金 - Pure Market Making on Binance (BTC-USDT)
策略2: 30%资金 - Pure Market Making on Binance (ETH-USDT)
策略3: 20%资金 - Cross Exchange Market Making (Binance vs OKX)