Polymarket
exchange.IO("SetTokenID")
Polymarket 专属。设置全局 Token ID,之后下单、挂单查询和不带 symbol 的行情查询都直接使用该 Token ID,不再请求 Gamma API 解析 SetCurrency() 的标的。
语法
python
result = exchange.IO("SetTokenID", token_id)参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| token_id | str | 是 | CLOB Token ID,十进制大整数字符串(不是 0x 地址),来自 Gamma 市场数据的 clobTokenIds,与 outcomes 按下标对应 |
返回值
dict:{"token_id": "..."}None:失败(如传入空字符串),错误写入策略日志
作用范围
设置后以下方法优先使用 Token ID:
| 方法 | 说明 |
|---|---|
Buy() / Sell() | 下单标的 |
GetOrders() / GetPendingOrders() / CancelAllOrders() | 挂单查询与撤单范围 |
GetTicker() / GetDepth() / GetTrades() | 仅在不传 symbol 时生效 |
说明
- 省去解析开销:只用
SetCurrency()时,每次调用上述方法都会请求一次 Gamma API(约 100~300ms);设置 Token ID 后为 0 额外请求,适合高频策略。 - 不做校验:只检查是否为非空字符串,不校验 Token 是否存在,错误要到下单或查询时才暴露。
- 优先级高于 SetCurrency:设置后再调用
SetCurrency()不会改变下单标的。切换标的时必须重新SetTokenID或先 exchange.IO("ClearTokenID")。 - GetTicker 的 Volume:不带 symbol 的
GetTicker()此时拿不到 Gamma 数据,Volume为 0;需要成交量时传GetTicker(symbol)。 - 生命周期:保存在当前交易所实例中,实盘重启后失效。
IO()在 gRPC 层固定作用于exchanges[0]。
示例
从 GetMarkets 取得 Token ID
python
markets = exchange.GetMarkets()
symbol = next(k for k in markets if k.startswith("btc-updown-5m-") and k.endswith("_USDC.Up"))
info = markets[symbol]["info"]
# outcomes / clobTokenIds 可能是 JSON 字符串,也可能已是列表
outcomes = info["outcomes"] if isinstance(info["outcomes"], list) else json.loads(info["outcomes"])
token_ids = info["clobTokenIds"] if isinstance(info["clobTokenIds"], list) else json.loads(info["clobTokenIds"])
token_id = token_ids[[o.lower() for o in outcomes].index("up")]
exchange.SetCurrency(symbol) # 保留 symbol 便于 GetCurrency / 日志
exchange.IO("SetTokenID", token_id) # 之后下单不再请求 Gamma API从持仓取得 Token ID 并平仓
python
for p in exchange.GetPosition():
if p["Info"].get("redeemable"):
continue # 已结算的仓位走 Redeem
exchange.IO("SetTokenID", p["Info"]["asset"]) # asset 即 Token ID
exchange.Sell(-1, p["Amount"], "平仓")
exchange.IO("ClearTokenID")高频网格挂单
python
exchange.IO("SetTokenID", token_id)
for price in [0.40, 0.39, 0.38]:
exchange.Buy(price, 10, f"网格 {price}")相关方法
- exchange.IO("GetTokenID") - 查询全局 Token ID
- exchange.IO("ClearTokenID") - 清除全局 Token ID
- exchange.SetCurrency() - 设置标的
- exchange.GetMarkets() - 获取市场与 Token ID
- Polymarket 总览