目标:在“未知趋势、上下 50/50”场景下,通过对称化的网格控制实现稳定的做市收益与库存安全。本框架总结当前设计要点,并列出下一版本需要落地的研发任务。
fills/min ≥ f*,同时 maker 成交通道占比 ≥ m*。maker 返佣 – taker 手续费 – 滑点 ≥ 0。| 项目 | 建议值 | 说明 |
|---|---|---|
| 挂单价格 | mid 或 mid±1 tick 对称 | 以中价为基准构建对称网格 |
网格间距 ΔP |
≥ 0.8 × 最优价差 S=a₁-b₁ |
tick 对齐,确保 maker-only |
单格数量 Q |
0.05%~0.10% NAV | 再按盘口深度缩放 |
层数 N |
单侧 4–8 层(总 8–16) | 初期密度控制 |
撤单刷新 τ |
2–5 s 或订单簿事件驱动 | 避免队列过度滞后 |
| maker-only | 默认开启 | taker 仅作纠偏/止损 |
| 自成交保护 | 双账户互挂或同账户 price+nonce 过滤 | 防止 self-trade |
δ = |Q_long - Q_short| / Q_total。δ_max = 1.5%(建议 1–2%)。δ > δ_max:
Q(例如乘以 0.7)。δ < 0.5 · δ_max 时,恢复完全对称。e_f = f* - f(t),采用 30–60 s 滑窗。ΔP ← clip(ΔP - Kp·e_f - Ki·Σe_f, ΔP_min, ΔP_max)。ΔP 或增加 N。ΔP 或减小 Q。Kp=0.2,Ki=0.05,ΔP_min = S,ΔP_max = 4S。ΔP ≥ c1 · S(c1 ∈ [0.8, 1.2]),防止太靠近而失去 maker 资格。Q 与深度相关:Q ∝ depth₁₋₃,深度浅 → 降 Q/加层,深度深 → 提 Q/减层。I = (bidDepth - askDepth) / (bidDepth + askDepth),仅作为库存闭环的辅助信号。f*,收紧 ΔP,加快 τ,专注于 maker 成交。f*,放大 ΔP,依靠价差弥补成本。ΔP、放慢 τ。| 分类 | 指标 | 说明 |
|---|---|---|
| 库存 | δ, net_position, inventory_pnl |
保持在阈值内 |
| 成交 | fills/min, maker_ratio, cancel_ratio |
驱动 PI 控制 |
| 盘口 | S, depth₁₋₃, queue_position |
决定间距与数量 |
| 费用 | rebate - fee - slippage, funding_pnl |
验证费用拨盘 |
| 稳定性 | cancel_latency, ws_error_rate, rate_limiter_hits |
用于退避与降级 |
fills/min:最近 window 秒内成交笔数 / window × 60(默认 window=60s)。maker_ratio:同期 Maker 成交量 / (Maker+Taker) 成交量。cancel_ratio:撤单成功次数 / 尝试撤单次数。S(最优价差):bestAsk - bestBid,按 tick 归一化。depth₁₋₃:从一级到三级价位的累积挂单数量(按 base 或 quote 选一单位)。queue_position:同价位挂单中的顺序排名 / 同价位总挂单量。δ:abs(net_position) / total_notional,其中 total_notional 取当前网格所有未成交委托总名义。rebate - fee - slippage:按成交明细汇总;若 API 未返回实际返佣,需使用费率配置估算。cancel_latency:cancel_ack_ts - cancel_submit_ts 的滑动平均与 95 分位。fills/min、maker_ratio、δ、S、depth₁₋₃、queue_position 等指标。GridMaker.getStatus()、globalOrderCoordinator 与 ShadowBook 数据;统计窗口需支持配置与热更新。ShadowBook.snapshot。GridMaker 中实现库存偏移检测与参数偏置(价格外移、数量缩放)。buildTargetLevels/placeGridOrder 增加偏置钩子;taker 对冲需调用 router 并和风险限额协同。δ 回落到阈值内;日志记录偏置动作和原因。fills/min 滑窗统计。Kp/Ki/ΔP_min/ΔP_max,驱动 ΔP 与 N 自动调整。fills/min 偏差 < 10%,ΔP 收敛无明显震荡;真实跑 30 分钟指标稳定。ΔP/Q 调整策略。Q 改变且日志包含调节原因。f* 与刷新节奏 τ。f*。risk 模块共享状态。| 里程碑 | 范围 | 预计周期 | 验收要点 |
|---|---|---|---|
| M1:Telemetry 基线 | 完成 T1 指标采集、Grafana 面板、报警规则 | 1 sprint | 指标齐全,报警触发有效 |
| M2:核心闭环上线 | 部署 T2/T3,实现库存与成交率自调 | 1–2 sprint | δ 自动回归阈值,fills/min 收敛 |
| M3:结构/费用调节 | 上线 T4/T5,完成深度跟随与费用拨盘 | 1 sprint | 深度变动有响应,费用拨盘动作记录完整 |
| M4:稳定性收尾 | 上线 T6/T7,与风险/退避逻辑整合 | 1 sprint | 队列退避有效、kill-switch 验证通过 |
δ、fills/min 收敛过程。| 模块 | 需求内容 | 目前状态 | 备注 |
|---|---|---|---|
| 行情数据 | 实时 L2 盘口、成交推送、资金费率 | ShadowBook 已支撑 L2,需补齐队列位置 |
若交易所暂不提供队列数据,需研发本地估算 |
| 指标存储 | 时序数据库(Prometheus)与报警 | 待建设 | 评估是否重用现有监控平台 |
| 仿真环境 | 历史回放、事件驱动模拟 | 部分回放脚本 | 需要支持滑窗指标钩子与闭环控制注入 |
| 配置管理 | 支持热更新、环境隔离 | config.yaml 基础完成 |
后续考虑拆成模块化配置 |
| 风险系统 | Kill-switch、限额协同 | 风险模块已存在 | T7 集成时需扩充接口 |
基础设施优先级:Prometheus + Grafana (P0) → 历史仿真工具 (P1) → 队列数据/估算 (P1) → 配置热更新 (P2)。
grid_control:
fills_per_min_target: 30
maker_ratio_target: 0.85
inventory:
delta_max_pct: 0.015
delta_recover_pct: 0.0075
price_bias_ticks: 2
qty_scale_on_bias: 0.7
taker_hedge:
enabled: true
max_notional_usd: 200
cooldown_ms: 60000
fill_rate_pi:
kp: 0.2
ki: 0.05
dp_min_multiplier: 1.0 # × S
dp_max_multiplier: 4.0
smoothing_window_sec: 60
deadband_fills_per_min: 2
depth_following:
min_depth_ratio: 0.3
max_depth_ratio: 1.5
rebalance_interval_ms: 5000
fee_dial:
maker_rebate_bps: 2.0
taker_fee_bps: 1.5
funding_weight: 0.5
tighten_threshold_bps: 0.3
loosen_threshold_bps: -0.2
queue_management:
max_queue_percent: 0.6
low_turnover_threshold: 0.1
retry_backoff_ms: 300
safety:
max_self_trade_ratio_pct: 0.5
max_slippage_loss_usd_per_min: 50
api_error_threshold_pct: 3
上述参数仅供参考,落地时需结合交易所费率、资金规模进行校准。
若需讨论或补充,请在 PR/Issue 中引用本文件并注明章节。欢迎对控制逻辑与参数提出进一步优化建议。