技术

行情风控阈值分析:做市滑点保护机制

By karp 8 Views 24 MIN READ 0 Comments

image.png

视角:做市商(Market Maker)风控。分析范围限定在已获得真实数据的 7 类指标(index_type 1/2/3/4/5/6/7)。
前置文档:market_wind_tables.md(4 张表的字段结构与基础调用链)。本文聚焦阈值本身的设计逻辑与做市保护效果,不重复表结构细节。
数据来源:market_wind_config 全局默认配置(symbol_id=0)截图数据 + 代码静态分析,未跑线上 SQL 核对,如有出入以线上为准。

1. 问题背景:为什么做市商需要"动态滑点"

做市商在撮合引擎里挂单/对手价成交时,面对的核心风险是信息不对称下的逆向选择(adverse selection):当行情发生剧烈单边波动或盘口流动性骤降时,做市商的报价会滞后于真实市场价,被套利者/高频交易者用滞后报价薄利甚至倒贴成交,也就是常说的"被扫单""被撸滑点"。

固定滑点表(仅按保证金规模分档,见 contract_symbol_step_slippage)无法应对这种风险——平静行情下滑点太大会劝退正常用户,剧烈行情下滑点太小则做市商被反复收割。

行情风控体系(market_wind_* 4 表)的作用就是给"行情异常程度"打分,再把分数转换成滑点加成倍率,实现滑点随行情动态收紧/放松,本质上是做市商对冲逆向选择风险的一层自动化保护机制。


2. 阈值设计总览(已知 7 类指标)

market_wind_config 把行情异常拆成 7 个独立维度,每个维度用 2-4 个区间给出阶梯权重(0 分 = 正常,权重越高越异常)。全局默认配置(symbol_id=0)截图数据如下:

index_type指标区间 1区间 2区间 3区间 4权重梯度特征
1日涨跌幅0-5% → 05-10% → 510-100% → 10梯度最平缓,日级别波动容忍度最高
2小时涨跌幅0-3% → 03-8% → 158-100% → 30中等梯度
3分钟涨跌幅0-0.3% → 00.3-1.2% → 401.2-100% → 90梯度最陡,短周期波动一旦超阈值直接给到接近满分
4盘口价格间隔数量0-10 → 010-50 → 4050-999万 → 90反映盘口"跳价"档位数,跳价越多流动性越差
55% 深度(万U)20-1万 → 05-10 → 300-5 → 60注意:区间顺序是反的(详见 §3.1),数值越小权重越高
6盘口价格万分比0-20‱ → 020-60‱ → 5060-10000‱ → 90价差越大权重越高,梯度陡峭
715分钟涨跌幅0-0.5% → 00.5-1.5% → 301.5-3% → 453-100% → 604 档最细,介于分钟线和小时线之间的"缓冲带"

单交易对可覆盖全局默认(如 symbol_id=1012 trx 对分钟 15 线单独配置到 90 分,但该记录 status=2 已停用),说明规则支持"全局兜底 + 币种定制"两级,为流动性差/波动大的长尾币种预留了单独收紧的能力。


3. 各维度设计逻辑解读

3.1 短周期指标(day / hour / minute / minute_15):捕捉"速度"而非"幅度"

四个涨跌幅指标本质上是同一件事(价格波动)在不同时间尺度下的采样,但权重梯度差异巨大:

  • 日涨跌幅 10% 只给 10 分,分钟涨跌幅 1.2% 就给 90 分。
  • 这不是"厚此薄彼",而是做市商真正关心的是波动速度:10% 的日内累计涨跌可能是缓慢趋势,用户/套利者难以利用;但 1 分钟内涨跌 1.2%,说明存在瞬时冲击(大单/插针/极端行情事件),做市商挂出的报价大概率已经"过期",被扫损失的确定性极高。
  • minute_15_change(15 分钟线)是分钟线和小时线之间的缓冲带,4 档设计比其他指标更细(0.5/1.5/3 三个切点),推测是为了避免"分钟级噪音"和"小时级趋势"之间出现风控空窗——15 分钟窗口能过滤单笔大单造成的瞬时抖动,同时又能在真正的中期趋势启动时及时响应。

做市保护作用:分钟级指标一旦触发高权重,slippageByWeight() 会让滑点迅速放大,等价于做市商在极端行情下自动"拉宽报价点差",减少继续按旧价成交的敞口——这是做市商标准的"行情剧烈波动时主动走宽点差"策略的自动化实现。

3.2 盘口指标(ab_price_num / ab_price_rate / depth_5p):捕捉"流动性质量"

三个盘口维度与涨跌幅维度正交,衡量的不是价格变化本身,而是当前盘口能不能承接正常交易

  • ab_price_num(盘口价格间隔数量):买卖一档之间隔了多少个最小变动单位的"空档"。空档越多说明挂单稀疏,正常成交容易直接打穿到远价,属于流动性枯竭信号。
  • ab_price_rate(盘口价格万分比):把价差换算成相对幅度(‱),解决了 ab_price_num 在不同精度/不同价格量级交易对之间不可比的问题。代码里 MarketWindRiskRating::run() 有一个关键判断:sign_price_rate < 1‱ 时用 ab_price_num 口径,否则用 ab_price_rate 口径——即单笔最小变动单位本身占比很小时用绝对数量判断,占比较大时用相对比例判断,避免了低价高精度币种(数量维度虚高)和高价币种(数量维度虚低)之间的口径失真。
  • depth_5p(5% 深度额):买卖两侧价格 ±5% 区间内的挂单总额,取买卖较小值("木桶短板"逻辑)。这是最直接的"承接能力"指标——深度越薄,做市商自己的大额平仓/对冲单也越容易打穿盘口造成滑点损失。

做市保护作用:这三个维度共同构成"流动性质量护城河"。即使价格本身没有剧烈波动(涨跌幅维度权重为 0),只要盘口变薄、价差拉大,风控权重依然会上升——防止在"横盘但流动性枯竭"场景下按正常滑点成交,这类场景恰恰是做市商最容易被隐蔽吃单(比如对手方分批试探流动性上限)的场景,靠涨跌幅指标是发现不了的。

3.3 depth_5p 区间顺序反常,是特意设计还是笔误?

对比其他 6 个维度(数值越大权重越高),depth_5p唯一一个数值越小权重越高的维度(20-10000万→00-5万→60),逻辑自洽——深度额本身就是"越多越安全",与其他"异常程度指标"方向相反是必然的,不是配置错误。但这也意味着运营在新增/修改此维度阈值时容易因惯性按其他维度的思维配反,属于人工维护该表时的风险点,建议在后台配置页面对该字段做特殊说明或独立校验。


4. 权重汇总与滑点转换:从"异常分数"到"实际保护动作"

4.1 汇总公式

total_weight = day_weight + hour_weight + minute_weight
              + minute_15_weight + ab_price_weight + depth_5p_weight

六个维度简单相加、无归一化、无最大值封顶,意味着:

  • 多个维度同时触发中高权重时会产生叠加放大效应(例如分钟线 90 + 盘口价差 90 + 深度 60 = 240),风控response 会比单一维度异常更激进,这是有意为之——多维度共振通常代表更高确定性的极端行情。
  • 但也意味着理论上限没有硬约束,market_weight_slippage_configmax_weight 若配置不当(比如最高档区间上限过低),超出配置范围的极端权重会落不到任何区间,multipleSlippageRate() 返回 0(详见 §4.3 风险点)。

4.2 滑点转换公式

最终滑点 = 基础滑点 + 基础滑点 × 权重倍率
        = 基础滑点 × (1 + multipleSlippageRate(total_weight))

Service\Monitor\MarketDepthService::slippageByWeight()script/src/Service/Monitor/MarketDepthService.php:190-203

基础滑点来自 contract_symbol_step_slippage 表(按保证金规模分档,与本文风控体系是两套独立配置),风控倍率是乘法叠加而非替换——即无论保证金多大,风控异常时都会等比例放大滑点,大额仓位在极端行情下获得的绝对滑点保护也更大,这与做市商在大额敞口下更需要保护的直觉一致。

4.3 潜在风险点(非本次改动范围,仅供风控/运营参考)

  1. 权重表和滑点倍率表是两套独立人工维护的配置market_wind_configmarket_weight_slippage_config),两者之间没有校验联动——如果 market_wind_config 上调了某档权重上限(如把 90 分改到 150 分),但 market_weight_slippage_configmax_weight 最高档仍停留在 100,超出部分会匹配不到任何区间,multipleSlippageRate() 直接返回 0(详见 SlippageConfigModel.php:26-42 循环逻辑,无区间兜底),相当于风控在最极端行情下反而失效,属于配置耦合的隐藏风险,建议两表联动检查或加最高档兜底区间(max_weight 设为无穷大等价值)。
  2. market_wind_index 是定时任务覆盖式更新(existUpdate)而非流水表CheckMarketKline / CheckMarketDepth 的采集频率决定了风控的响应时延——如果定时任务间隔较长(需查具体 cron 配置,本次未在代码中找到调度频率定义),分钟级指标的"瞬时冲击捕捉"能力会打折扣,风控存在滞后窗口。
  3. market_wind_weight 无权重历史,只有最新快照,无法做"权重持续上升趋势"这类更精细的预警(比如权重从 20 分钟内匀速上升到 80,和权重突然从 0 跳到 80,风险性质不同,但当前机制无法区分)。

5. 对做市策略的实际意义总结

维度组捕捉的风险类型做市侧对应动作
涨跌幅四件套(日/时/分/15分)价格剧烈波动、报价滞后分钟级触发权重 → 滑点迅速放大 → 等价于自动拉宽点差
盘口价差(数量/万分比)盘口稀疏、跳价异常即使价格未剧烈波动,盘口质量下降也会推高滑点保护
5% 深度流动性枯竭、木桶短板深度不足时收紧滑点,防止大单/对冲单打穿盘口

整体来看,这套机制让做市商的滑点策略从"静态、只看保证金规模"升级为"动态、感知行情异常 + 流动性质量"的双因子模型,核心价值是把逆向选择风险的敞口控制自动化,减少人工盯盘/手动调整滑点表的运营成本,同时把响应速度压缩到定时任务的采集周期级别。

局限性在于:两套配置表(阈值权重 + 滑点倍率)依赖人工联动维护,且当前无权重趋势/历史追踪能力,属于"基于快照的被动响应"而非"基于趋势的主动预测",如需进一步提升保护能力,可考虑引入权重变化率或滑动窗口预警。


附录:涉及表结构(内部参考,字段名据代码读写推断,未跑线上 DDL 核对)

market_wind_config — 风控指标阈值配置表

字段说明
mwc_id主键
symbol_id交易对 ID,0 为全局默认配置
index_type指标类型:1=day_change 2=hour_change 3=minute_change 4=ab_price_num 5=depth_5p 6=ab_price_rate 7=minute_15_change
condition阈值区间,"min-max" 字符串
weight该区间对应权重分
status1=open 2=close

market_wind_index — 交易对行情原始指标表

字段说明
mwi_id主键
symbol_id / symbol_type交易对 ID + 类型(1=现货 3=U本位合约 5=币本位合约),唯一性条件
remark类型-交易所-交易对 拼接说明
day_change / day_change_time / day_change_index日涨跌幅(%)/ K线时间 / 涨跌绝对值
hour_change / hour_change_time / hour_change_index小时涨跌幅同上
minute_change / minute_change_time / minute_change_index分钟涨跌幅同上
minute_15_change / minute_15_change_time / minute_15_change_index15分钟涨跌幅同上
ask_price / bid_price卖一价 / 买一价
ab_price_num盘口价格差数量
ab_price_rate盘口价格差万分比
ask_5p_volume / bid_5p_volume卖/买盘深度 5% 区间成交额
depth_5p_volumemin(ask_5p_volume, bid_5p_volume)
sign_price_rate单价格跳动万分比

market_wind_weight — 交易对风控权重结果表

字段说明
mww_id主键
symbol_id / symbol_type交易对 ID + 类型,唯一性条件
day_weight / hour_weight / minute_weight / minute_15_weight对应涨跌幅指标权重分
ab_price_weight盘口价差权重
depth_5p_weight深度权重
status1=open 2=close

total_weight 为运行时 SQL 表达式现算(六字段求和),非落库字段。

market_weight_slippage_config — 权重-滑点倍率映射配置表

字段说明
mwsc_id主键
min_weight / max_weight权重区间 [min_weight, max_weight)
slippage_rate该权重区间对应滑点倍率
status1=open 2=close

本文由 karp 原创

采用 CC BY-NC-SA 4.0 协议进行许可

转载请注明出处:https://ikarp.top/index.php/archives/877.html

标签: 做市

相关推荐

  • 暂无相关推荐,看看别的吧。

0 评论