本页由机器翻译。英文原文为权威版本。 阅读英文版
跳转到主要内容

做市商保护 (MMP)

面向做市商的成交窗口限制与自动撤单行为。

概述

MMP 通过以下方式保护做市商免受快速不利成交的影响:

  1. 在滚动时间窗口内跟踪累计成交指标
  2. 在超出限制时撤销订单
  3. 自动撤销同一钱包+标的资产下所有其他启用了 MMP 的订单

配置

设置 MMP 配置

接口POST /mmp-config

请求SetMmpConfigRequest

{
"wallet": "0x...",
"currency": "BTC",
"interval_ms": 60000,
"frozen_time_ms": 300000,
"qty_limit": 1000000,
"delta_limit": 10.0,
"vega_limit": 5.0,
"enabled": true,
"nonce": 1,
"signature": "0x..."
}

字段

  • wallet:钱包地址
  • currency:标的资产货币(例如 "BTC""ETH"
  • interval_ms:滚动窗口长度(毫秒)
  • frozen_time_ms:触发后的冻结时长(毫秒)
  • qty_limit:可选的数量限制(合约单位)
  • delta_limit:可选的 Delta 限制
  • vega_limit:可选的 Vega 限制
  • enabled:该钱包+货币是否启用 MMP

响应ApiResponse<MmpConfigData>

获取 MMP 配置

接口GET /mmp-config?wallet=...&currency=...

查询参数

  • wallet(必填)
  • currency(可选过滤条件)

响应MmpConfigResponse

{
"success": true,
"data": [
{
"wallet_address": "0x...",
"currency": "BTC",
"interval_ms": 60000,
"frozen_time_ms": 300000,
"qty_limit": 1000000,
"delta_limit": 10.0,
"vega_limit": 5.0,
"enabled": true
}
]
}

删除 MMP 配置

接口DELETE /mmp-config

请求DeleteMmpConfigRequest

{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}

响应ApiResponse<String>

重置 MMP 状态

接口POST /mmp-config/reset

请求ResetMmpRequest

{
"wallet": "0x...",
"currency": "BTC",
"nonce": 1,
"signature": "0x..."
}

响应ApiResponse<String>

说明:重置 MMP 成交窗口状态(清除累计指标,解除货币冻结)。

MMP 行为(务必理解)

成交处理顺序

MMP 评估在成交之后进行(POST-FILL)

  1. 引擎先撮合并接受成交
  2. 然后 MMP 检查累计指标
  3. 如果超出限制:
    • MMP 触发
    • 当前活动订单的剩余数量停止处理
    • 订单变为 CANCELED,撤销原因为 "MMP triggered during fill processing"
    • 引擎发出 MmpTriggered 事件
    • 引擎自动撤销同一钱包+标的资产下所有其他启用了 MMP 的未成交订单

影响:在 MMP 触发之前,您可能收到超出所配置阈值的成交。

触发条件

只要任一已配置的限制被突破,MMP 即触发:

  • 数量限制cumulative_qty > qty_limit
  • Delta 限制|cumulative_delta| > delta_limit
  • Vega 限制|cumulative_vega| > vega_limit

累计指标在滚动窗口(interval_ms)内计算。

撤单行为

当 MMP 触发时:

  1. 活动订单:剩余数量停止处理,订单变为 CANCELED,撤销原因为 "MMP triggered during fill processing"
  2. 其他订单:同一钱包+标的资产下所有其他启用了 MMP 的未成交订单会被自动撤销,撤销原因为 "Order canceled by MMP trigger"

注意:仅撤销启用了 MMP 的订单。mmp_enabled=false 的订单不受影响。

冻结行为

MMP 触发后:

  • 该货币被冻结 frozen_time_ms 毫秒
  • 冻结期间,新的成交可能被拒绝(取决于具体实现)

成交指标计算

数量

  • 来源:成交 size(合约单位)
  • 累计:滚动窗口内所有成交之和

Delta

  • 来源:根据成交合约代码和 GreeksCache 计算
  • 累计:滚动窗口内所有成交 Delta 之和

Vega

  • 来源:根据成交合约代码和 GreeksCache 计算
  • 累计:滚动窗口内所有成交 Vega 之和

滚动窗口

窗口淘汰

超过 interval_ms 时长的成交会自动从窗口中移除:

  • 淘汰机制定期运行(后台任务)
  • 随着旧成交的移除,累计指标相应递减

窗口重置

通过 POST /mmp-config/reset 重置 MMP 状态:

  • 清除窗口内所有成交
  • 将累计指标重置为零
  • 解除货币冻结

MMP 事件

MmpTriggered 事件

内部事件(当前不会转发给 WS 客户端):

MmpTriggeredMessage {
wallet: WalletAddress,
currency: String,
reason: String, // "qty_limit" | "delta_limit" | "vega_limit"
}

最佳实践

配置

  1. 设置合适的限制:根据您的风险承受能力和典型成交规模设定
  2. 使用按货币区分的配置:按标的资产分别配置(BTC、ETH 等)
  3. 监控 MMP 触发情况:高频触发可能表明限制配置不当或市场环境不利

订单管理

  1. 有选择地启用 MMP:仅对需要保护的订单设置 mmp_enabled=true
  2. 保持货币一致:确保同一标的资产的所有订单使用 MMP 配置中相同的货币
  3. 处理 MMP 撤单:实现检测 MMP 触发撤单的逻辑,并调整报价

监控

  1. 跟踪 MMP 触发:监控撤销原因为 "MMP triggered during fill processing""Order canceled by MMP trigger" 的订单
  2. 审查成交窗口:通过 MMP 配置检查累计指标(当前未通过 API 公开)
  3. 调整限制:如果 MMP 触发过于频繁,提高限制;如果触发过少,降低限制

常见问题

MMP 触发过于频繁

原因

  • 相对于典型成交规模,限制设置过低
  • 市场环境不利
  • 高频报价导致大量成交

解决方案

  • 提高 qty_limitdelta_limitvega_limit
  • 增大 interval_ms 以允许窗口内容纳更多成交
  • 降低报价频率

MMP 不触发

原因

  • 限制设置过高
  • 订单未启用 MMP(mmp_enabled=false
  • 货币不匹配(MMP 配置的货币 != 订单标的资产)

解决方案

  • 降低限制
  • 确认订单上 mmp_enabled=true
  • 确认 MMP 配置的货币与订单标的资产一致

意外撤单

现象:订单以 "Order canceled by MMP trigger" 为原因被撤销,但您并未预料到。

原因:同一钱包+标的资产下的另一笔订单触发了 MMP。

解决方案:当某笔订单触发时,审查同一标的资产下所有启用了 MMP 的订单。