name: mm description: “市场做市 - 带库存管理的双向报价” emoji: “📊” gates: envs: anyOf: - POLY_API_KEY - KALSHI_API_KEY
市场做市技能
在预测市场进行自动化双向报价,包含库存倾斜、波动性调整价差和风险控制。
支持平台
- Polymarket(仅发单做市订单,零吃单费用)
- Kalshi
聊天命令
生命周期
/mm start <platform> <marketId> <tokenId> [flags] 启动市场做市
/mm stop <id> 停止并取消所有订单
/mm list 列出活跃做市商
监控
/mm status 所有活跃做市商概览
/mm status <id> 单一做市商详细状态
配置
/mm config <id> 以 JSON 格式查看当前配置
/mm config <id> --spread 3 更新配置(下次重报价生效)
启动标志
| 标志 | 默认值 | 描述 |
|---|---|---|
--spread N |
2 | 基础半价差(美分) |
--min-spread N |
1 | 最小价差下限(美分) |
--max-spread N |
10 | 最大价差上限(美分) |
--size N |
50 | 每边订单大小(股数) |
--max-inventory N |
500 | 激进倾斜前的最大库存 |
--skew N |
0.5 | 库存倾斜因子(0-1) |
--vol-mult N |
10 | 价差扩大波动性乘数 |
--alpha N |
0.3 | 公平值平滑 EMA 的 alpha 值(0-1) |
--fv-method M |
weighted_mid | 公平值方法:mid_price、weighted_mid、vwap、ema |
--interval N |
5000 | 重报价间隔(毫秒) |
--threshold N |
1 | 触发重报价的最小价格变化(美分) |
--max-pos N |
1000 | 最大头寸价值(美元) |
--max-loss N |
100 | 自动停止前的最大损失(美元) |
--max-orders N |
1 | 每边订单数(层级) |
--level-spacing N |
(=spread) | 价格层级间的美分间隔 |
--level-decay N |
0.5 | 每层级大小衰减(0-1,例如 0.5 = 每层级为前一级的一半) |
--neg-risk true |
false | 启用负风险模式(Polymarket 加密货币) |
--name "Name" |
auto | 结果的显示名称 |
示例
# 使用默认值启动
/mm start polymarket 0xabc123 98765
# 自定义价差和大小
/mm start polymarket 0xabc123 98765 --spread 3 --size 100 --max-inventory 1000
# 为流动性市场设置紧凑价差
/mm start polymarket 0xabc123 98765 --spread 1 --min-spread 1 --max-spread 5 --interval 2000
# 三层报价:L1=50 股,L2=25,L3=12 — 间隔 2 美分
/mm start polymarket 0xabc123 98765 --max-orders 3 --level-spacing 2 --level-decay 0.5 --size 50
# 检查所有运行中的做市商
/mm status
# 动态扩大价差
/mm config polymarket_98765678 --spread 4
# 关闭
/mm stop polymarket_98765678
工作原理
- 公平值 从订单簿计算(加权中点、VWAP 或 EMA)
- 价差 根据近期波动性调整(波动性大的市场价差更大)
- 倾斜 将报价移离超重侧以管理库存
- 报价 作为仅发单做市订单放置(买单和卖单)
- 重报价 循环:取消所有,重新计算,放置新订单
- 自动停止 如果实现盈亏超过最大损失阈值
API 使用
import { createMMStrategy, type MMConfig } from '../trading/market-making';
const config: MMConfig = {
id: 'btc-yes',
platform: 'polymarket',
marketId: '0x...',
tokenId: '12345',
outcomeName: 'BTC > 100k',
baseSpreadCents: 2,
minSpreadCents: 1,
maxSpreadCents: 10,
orderSize: 50,
maxInventory: 500,
skewFactor: 0.5,
volatilityMultiplier: 10,
fairValueAlpha: 0.3,
fairValueMethod: 'weighted_mid',
requoteIntervalMs: 5000,
requoteThresholdCents: 1,
maxPositionValueUsd: 1000,
maxLossUsd: 100,
maxOrdersPerSide: 1,
};
const strategy = createMMStrategy(config, { execution, feeds });
botManager.registerStrategy(strategy);
await botManager.startBot(strategy.config.id);