b1ad6f02d2
- 持久化: BUY/SELL 与 SETTLEMENT(WIN/LOSE/UNKNOWN/CLOSED) 均写入 backtest_trade - 重新测试: 已完成任务支持「按当前配置重新测试」,新任务名称可编辑,后端 POST /tasks/rerun + 前端按钮与确认弹窗 - 回测窗口: 首次执行以当前时间为终点、startTime = endTime - backtestDays(局部变量,不修改实体) - 新增错误码 BACKTEST_TASK_NOT_COMPLETED、SERVER_BACKTEST_RERUN_FAILED 及多语言 Co-authored-by: Cursor <cursoragent@cursor.com>
46 lines
2.4 KiB
Markdown
46 lines
2.4 KiB
Markdown
# Polymarket Data API 游标分页验证
|
||
|
||
回测拉取 Leader 历史交易改用 **start 游标分页**(不再使用 offset),避免 `offset` 过大(如 3100+)时 API 报错。
|
||
|
||
## 规则
|
||
|
||
- `limit` 固定为 500(快速验证可用 50)。
|
||
- 首次请求:`start` = 回测开始时间(秒),`end` = 回测结束时间(秒)。
|
||
- 若本批返回 **500 条**:取本批中**最大 timestamp**,下一页 `start = max_timestamp`(**不加 1**:同一秒可能有多笔订单,会漏单)。
|
||
- 若本批 **不足 500 条**:视为最后一页,不再请求。
|
||
- 下一页会与上一页在「最大 timestamp」这一秒重叠,必须按 **tradeId(transactionHash)去重**。
|
||
|
||
## 快速验证(limit=50)
|
||
|
||
```bash
|
||
# 环境变量(替换为实际值)
|
||
USER="0x1979ae6b7e6534de9c4539d0c205e582ca637c9d"
|
||
START=1769961432
|
||
END=1770566207
|
||
LIMIT=50
|
||
|
||
# 第 1 页(游标分页不传 offset)
|
||
curl -s "https://data-api.polymarket.com/activity?user=${USER}&limit=${LIMIT}&type=TRADE&start=${START}&end=${END}&sortBy=TIMESTAMP&sortDirection=ASC" | jq 'length'
|
||
# 若输出 50,则取本批最大 timestamp 作为下一页 start(不加 1,同一秒可能多笔)
|
||
curl -s "https://data-api.polymarket.com/activity?user=${USER}&limit=${LIMIT}&type=TRADE&start=${START}&end=${END}&sortBy=TIMESTAMP&sortDirection=ASC" | jq 'max_by(.timestamp) | .timestamp'
|
||
# 假设得到 1770000000,则下一页 start=1770000000(与上一批重叠,需按 tradeId 去重)
|
||
|
||
# 第 2 页(游标分页,不使用 offset)
|
||
NEXT_START=1770000000
|
||
curl -s "https://data-api.polymarket.com/activity?user=${USER}&limit=${LIMIT}&type=TRADE&start=${NEXT_START}&end=${END}&sortBy=TIMESTAMP&sortDirection=ASC" | jq 'length'
|
||
# 若输出 < 50,则为最后一页
|
||
```
|
||
|
||
## 单条命令示例(第 1 页,limit=50)
|
||
|
||
```bash
|
||
curl -s "https://data-api.polymarket.com/activity?user=0x1979ae6b7e6534de9c4539d0c205e582ca637c9d&limit=50&type=TRADE&start=1769961432&end=1770566207&sortBy=TIMESTAMP&sortDirection=ASC"
|
||
```
|
||
|
||
注意:**不要传 offset**,下一页 `start = 上一批最大 timestamp`(不加 1),同一秒多笔订单不丢,重叠记录按 tradeId 去重。
|
||
|
||
## 代码位置
|
||
|
||
- 拉取批次:`BacktestDataService.getLeaderHistoricalTradesBatch()`,返回 `LeaderTradesBatchResult(trades, nextCursorSeconds)`。
|
||
- 执行循环:`BacktestExecutionService.executeBacktest()`,按 `cursorSeconds` 循环,并用 `seenTradeIds` 去重。
|