跳转到主要内容
做市商通过 CLOB API 与 Polymarket 交互——发布双向报价、跨市场管理库存、重新平衡仓位。SDK 客户端处理订单签名和提交,因此你可以专注于策略。
本页涵盖做市商特定的工作流程和最佳实践。有关完整订单机制,请参阅创建订单取消订单

双向报价

核心做市工作流程是在你的公允价值附近发布买价和卖价。使用 createAndPostOrder 来下单每一侧:
import { ClobClient, Side, OrderType } from "@polymarket/clob-client";

const client = new ClobClient(
  "https://clob.polymarket.com",
  137,
  wallet,
  credentials,
  signatureType,
  funder,
);

// Bid at 0.48
const bid = await client.createAndPostOrder({
  tokenID: "3409705850427531082723332342151729...",
  side: Side.BUY,
  price: 0.48,
  size: 1000,
  orderType: OrderType.GTC,
});

// Ask at 0.52
const ask = await client.createAndPostOrder({
  tokenID: "3409705850427531082723332342151729...",
  side: Side.SELL,
  price: 0.52,
  size: 1000,
  orderType: OrderType.GTC,
});

批量订单

对于跨多个价格档位的更紧密价差,使用 postOrders 在单个请求中提交最多 15 个订单:
const orders = await Promise.all([
  client.createOrder({ tokenID, side: Side.BUY, price: 0.48, size: 500 }),
  client.createOrder({ tokenID, side: Side.BUY, price: 0.47, size: 500 }),
  client.createOrder({ tokenID, side: Side.SELL, price: 0.52, size: 500 }),
  client.createOrder({ tokenID, side: Side.SELL, price: 0.53, size: 500 }),
]);

const response = await client.postOrders(
  orders.map((order) => ({ order, orderType: OrderType.GTC })),
);
批量提交通过在单个请求中提交多个报价来减少延迟。始终优先使用 postOrders() 而不是多次单独调用 createAndPostOrder()

选择订单类型

类型行为何时使用
GTC挂在订单簿上直到成交或取消被动报价的默认选择
GTD在指定时间自动过期在已知事件前让报价过期
FOK必须立即全部成交,否则取消激进的重新平衡——全有或全无
FAK立即成交可用部分,取消剩余部分成交可接受的重新平衡
GTCGTD 是被动做市的主要工具——它们以你指定的价格挂在订单簿上。FOKFAK 用于针对现有流动性重新平衡库存。

使用 GTD 的限时报价

在已知事件(如市场关闭或判定)前自动让报价过期:
// Expire in 1 hour
const expiringOrder = await client.createOrder({
  tokenID,
  side: Side.BUY,
  price: 0.5,
  size: 1000,
  orderType: OrderType.GTD,
  expiration: Math.floor(Date.now() / 1000) + 3600,
});

管理订单

取消

取消单个订单、按市场取消或一次性取消所有订单:
await client.cancelOrder(orderId); // Single order
await client.cancelOrders(orderIds); // Multiple orders
await client.cancelMarketOrders(conditionId); // All orders in a market
await client.cancelAll(); // Everything
有关包括链上取消在内的完整详情,请参阅取消订单

监控未成交订单

const order = await client.getOrder(orderId);

const orders = await client.getOpenOrders({
  market: "0xbd31dc8a...",
  asset_id: "52114319501245...",
});

Tick 大小

你的订单价格必须符合市场的 tick 大小,否则会被拒绝。在报价前使用 SDK 查询:
const tickSize = await client.getTickSize(tokenID);
// Returns: "0.1" | "0.01" | "0.001" | "0.0001"

费用

大多数市场对 Maker 和 Taker 都是零费用。但是,以下市场类型有 Taker 费用:
  • 5 分钟加密货币市场
  • 15 分钟加密货币市场
  • 特定体育市场(例如 NCAAB、Serie A)
有关完整费用表和计算详情,请参阅费用

最佳实践

报价管理

  • 双向报价——发布买价和卖价以获得最多流动性奖励
  • 根据库存倾斜——根据当前仓位调整报价价格以管理风险敞口
  • 取消过时报价——市场条件变化时立即撤单
  • 对事件使用 GTD——在已知催化剂前自动让报价过期以避免过时敞口

延迟

  • 批量订单——使用 postOrders() 在单个请求中提交多个报价
  • WebSocket 获取数据——订阅实时推送而不是轮询 REST 端点

风险控制

  • 规模限制——报价前检查代币余额,不要超过可用库存
  • 价格保护——根据订单簿中间价验证价格并拒绝异常值
  • 紧急开关——出现错误或仓位突破时立即调用 cancelAll()
  • 监控成交——订阅 WebSocket 用户频道以获取实时成交通知

下一步