Hummingbot 第4章:策略基础
Hummingbot 提供了丰富的策略框架,从简单的 V1 策略模板到灵活的 V2 策略框架,满足不同交易需求。
V1 策略模板概览
V1 策略是 Hummingbot 最初的内置策略,采用 YAML 配置文件驱动:
内置 V1 策略清单
| 策略名称 | 说明 | 适用场景 |
|---|---|---|
pure_market_making | 纯做市策略 | 在单一交易所提供买卖深度 |
cross_exchange_market_making | 跨交易所做市 | 同时在两个交易所做市 |
arbitrage | 简单套利 | 监控两个交易所的价格差 |
amm_arb | AMM 套利 | 在 DEX 和 CEX 之间套利 |
amm_price_estimation | AMM 价格预估 | 估算 DEX 交易价格 |
celo_arb | Celo 套利 | 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)