1. 识别多板块分散做市的基础框架

任务目标

构建一个包含至少5个不同板块的做市框架,为每个板块定义流动性特征(买卖价差、订单深度)与波动性参数(波动率、价格跳动幅度),并输出各板块的风险评分,用于后续多板块分散做市策略的基础配置。

实现方案

本案例使用Python实现一个纯数据结构的做市框架定义模块。每个板块通过字典配置其做市参数,框架核心功能包括:
1. 定义5个典型板块(加密货币、美股、外汇、商品期货、国债)的流动性特征与波动性参数;
2. 根据流动性(价差、深度)与波动性(波动率、跳动幅度)计算每个板块的做市风险评分;
3. 输出结构化配置,供后续仓位分配与做市策略模块调用。

完整代码

# market_making_framework.py
from dataclasses import dataclass, field
from typing import Dict, List

@dataclass
class SectorConfig:
    """板块做市配置"""
    name: str
    base_spread_bps: float      # 基础买卖价差(基点)
    order_depth: float          # 订单簿深度(基准单位)
    volatility: float           # 年化波动率
    tick_size_pct: float        # 最小价格跳动(%)
    risk_weight: float = 0.0    # 风险评分(计算后填充)

    def compute_risk_score(self) -> float:
        """计算板块做市风险评分:价差越小、深度越大、波动越低,风险越小"""
        spread_risk = self.base_spread_bps / 10.0          # 价差风险(10bps为基准)
        depth_risk = 100.0 / max(self.order_depth, 1e-6)   # 深度风险(深度100为基准)
        vol_risk = self.volatility * 100.0                 # 波动率风险(1.0=100%)
        tick_risk = self.tick_size_pct * 50.0              # 跳动风险(0.1%为基准)
        return round(spread_risk + depth_risk + vol_risk + tick_risk, 2)

def build_default_framework() -> Dict[str, SectorConfig]:
    """构建5个板块的默认做市框架"""
    sectors = {
        "crypto": SectorConfig(
            name="加密货币",
            base_spread_bps=5.0,
            order_depth=50.0,
            volatility=0.80,
            tick_size_pct=0.05
        ),
        "us_equity": SectorConfig(
            name="美股",
            base_spread_bps=3.0,
            order_depth=200.0,
            volatility=0.25,
            tick_size_pct=0.01
        ),
        "fx": SectorConfig(
            name="外汇",
            base_spread_bps=1.0,
            order_depth=500.0,
            volatility=0.10,
            tick_size_pct=0.005
        ),
        "commodity": SectorConfig(
            name="商品期货",
            base_spread_bps=8.0,
            order_depth=80.0,
            volatility=0.35,
            tick_size_pct=0.02
        ),
        "treasury": SectorConfig(
            name="国债",
            base_spread_bps=2.0,
            order_depth=300.0,
            volatility=0.08,
            tick_size_pct=0.005
        )
    }
    # 计算风险评分
    for cfg in sectors.values():
        cfg.risk_weight = cfg.compute_risk_score()
    return sectors

def print_framework_summary(framework: Dict[str, SectorConfig]) -> None:
    """打印框架摘要"""
    print("=" * 70)
    print(f"{'板块':<8} {'价差(bps)':>10} {'深度':>8} {'波动率':>8} {'跳动(%)':>8} {'风险评分':>8}")
    print("=" * 70)
    for key, cfg in framework.items():
        print(f"{cfg.name:<8} {cfg.base_spread_bps:>10.1f} {cfg.order_depth:>8.1f} "
              f"{cfg.volatility:>8.2f} {cfg.tick_size_pct:>8.3f} {cfg.risk_weight:>8.2f}")

if __name__ == "__main__":
    framework = build_default_framework()
    print_framework_summary(framework)
    # 输出JSON格式配置(供其他模块调用)
    import json
    json_output = {k: {"name": v.name, "spread_bps": v.base_spread_bps,
                       "depth": v.order_depth, "volatility": v.volatility,
                       "tick_pct": v.tick_size_pct, "risk_score": v.risk_weight}
                   for k, v in framework.items()}
    print("\nJSON配置输出:")
    print(json.dumps(json_output, indent=2, ensure_ascii=False))

运行与验证

运行方式:

python market_making_framework.py

验证方法:
1. 程序正常输出5个板块的表格,包含价差、深度、波动率、跳动和风险评分列;
2. 检查风险评分合理性:外汇(低波动、高深度)风险评分应显著低于加密货币(高波动、低深度);
3. 确认JSON输出包含全部5个板块且字段完整,可直接被后续仓位分配模块读取。

预期输出(节选):

板块     价差(bps)      深度   波动率   跳动(%)   风险评分
----------------------------------------------------------------------
加密货币        5.0     50.0     0.80    0.050     87.50
外汇           1.0    500.0     0.10    0.005     12.25
...

风险评分计算逻辑:价差/10 + 100/深度 + 波动率*100 + 跳动*50。加密货币板块因高波动(0.80×100=80分)和低深度(100/50=2分)获得最高风险分,外汇因低波动(10分)和高深度(0.2分)获得最低风险分,符合做市风险预期。