PMWallets
EN

SDK 与跟单机器人

官方开源(MIT)客户端,Node.js 与 Python 各一套;以及基于它们、开箱即用的 Polymarket 跟单机器人。

SDK 封装了 API 文档里的全部接口,并替你处理 WebSocket:断线重连与保活、按 session/seq 发现漏帧并从最后一笔已送达的成交补回、按 eventId 去重,游标落盘, 重启后从停下的地方续上。投递语义是至少一次:游标在你的回调返回之后才保存,两者之间崩溃的话, 重启会再交付一次那笔成交 —— 你的处理逻辑要按 eventId 做幂等。需要一把 API key,在 API key 页创建。

部署建议:爱尔兰(AWS eu-west-1)。我们的服务器在英国, 成交推送从那里发出,都柏林就在隔壁。要下单的话服务器所在地区也有讲究:Polymarket 的 API 对来自英国、美国和部分 欧盟国家的请求只允许平仓,爱尔兰可以正常下单 —— 跟单机器人就是在那里实盘跑通的。这是服务器选址建议,不是绕过所在地限制的办法:你能不能交易取决于你本人 所在地和 Polymarket 的条款,条款禁止用 VPN 等方式绕过地域限制。实盘前请先确认它最新的规定。

Node.js SDK

GitHub pmwallets-node,npm pmwallets。 Node.js ≥ 20,自带 TypeScript 类型。

shell
npm install pmwallets
typescript
import { PmwClient, FillStream, FileStateStore, verifyWebhook } from 'pmwallets';

const pmw = new PmwClient({ apiKey: process.env.PMW_API_KEY! });

// who is making money on Polymarket, and how
const board = await pmw.leaderboard({ minWinLo: 0.55, minEligible: 30, style: 'taker', status: 'active', limit: 50 });

// follow one (billed per entity per hour; 402 = balance too low, 409 = dormant)
await pmw.subscribe({ entityId: board.rows[0].entityId, channels: ['ws'] });

// every fill of every entity you follow
const stream = new FillStream({
  client: pmw,
  store: new FileStateStore('./stream.json'),    // a restart resumes from the last saved cursor
  onFill: async (fill, { source }) => console.log(source, fill.side, fill.price, fill.tokenId),
  onEvent: (e) => e.type === 'replaced' && console.warn('another connection took the stream'),
});
await stream.start();
作用
PmwClient榜单、实体、解锁地址、订阅、成交补发(fills、fillsSince)、交易历史导出
FillStreamWebSocket,带重连与保活;发现断档并补回;去重;游标落盘
verifyWebhook(rawBody, signature, secret)校验 x-pmw-signature(原始 body 的 HMAC-SHA256)

Python SDK

GitHub pmwallets-python,PyPI pmwallets。 Python ≥ 3.10,同步与 asyncio 两种客户端。

shell
pip install pmwallets
python
import asyncio
from pmwallets import AsyncClient, Client, FillStream, FileStateStore

# synchronous REST
with Client(api_key="pmw_...") as pmw:
    board = pmw.leaderboard(minWinLo=0.55, minEligible=30, style="taker", status="active", limit=50)
    pmw.subscribe(board["rows"][0]["entityId"], channels=["ws"])   # billed per entity per hour

# every fill of every entity you follow
async def main():
    async with AsyncClient(api_key="pmw_...") as pmw:
        stream = FillStream(
            client=pmw,
            store=FileStateStore("stream.json"),     # a restart resumes from the last saved cursor
            on_fill=lambda fill, meta: print(meta.source, fill["side"], fill["price"], fill["tokenId"]),
        )
        await stream.run()

asyncio.run(main())
作用
Client / AsyncClient榜单、实体、解锁地址、订阅、成交补发(fills、fills_since)、交易历史导出
FillStreamasyncio WebSocket,带重连与保活;发现断档并补回;去重;游标落盘
verify_webhook(raw_body, signature, secret)校验 x-pmw-signature(原始 body 的 HMAC-SHA256)

Polymarket 跟单机器人

基于 SDK。你在榜单上挑交易者并订阅,机器人通过 WebSocket 收到他们的每一笔成交,用你自己的账户在 Polymarket CLOB 上按你设的限额跟单。私钥只在你自己的机器上 —— PMWallets 看不到,也从不替你下单。 默认 dry-run:每个决定都记日志,不真的交易。

Node.js

polymarket-copy-trading-bot · npm pmwallets-copytrade

shell
# Node.js ≥ 20
npm install -g pmwallets-copytrade
pmwallets-copytrade init            # writes config.yaml
export PMW_API_KEY=pmw_...          # https://pmwallets.com/keys
pmwallets-copytrade run             # dry-run: logs every decision, trades nothing

Python

polymarket-copy-trading-bot-python · PyPI pmwallets-copytrade

shell
# Python ≥ 3.10
pip install pmwallets-copytrade
pmwallets-copytrade init            # writes config.yaml
export PMW_API_KEY=pmw_...          # https://pmwallets.com/keys
pmwallets-copytrade run             # dry-run: logs every decision, trades nothing

切到实盘

dry-run 的日志看着没问题后,把 config.yaml 里的 mode 改成 live;Polymarket 账户怎么配见仓库 README。

yaml
mode: live
polymarket:
  privateKey: ${POLY_PRIVATE_KEY}        # signs your orders
  signatureType: 3
  funderAddress: ${POLY_FUNDER_ADDRESS}  # your Polymarket profile address (holds the USDC)

跟谁、机器人拿到成交后怎么决定:见跟单指南。

在哪儿跑

每个账户一条推送流:API key 的连接优先于网站推送页;两个 API 连接之间,后连上的顶掉先连的 —— 所以一个账户只跑一个消费者。PMWallets 的服务器在英国;对本身有资格使用 Polymarket API 的用户,同时要下单的程序 建议跑在爱尔兰(AWS eu-west-1),因为 Polymarket 的 API 不接受来自英国、美国和部分欧盟国家的下单。 服务器放在哪里,不改变你本人能否交易。

API 文档 · 实测推送延迟 · 常见问题