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分)获得最低风险分,符合做市风险预期。