@catalyst-team/poly-mcp 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +384 -221
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +13 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -5
- package/dist/index.js.map +1 -1
- package/dist/sdk-instance.d.ts +27 -0
- package/dist/sdk-instance.d.ts.map +1 -0
- package/dist/sdk-instance.js +64 -0
- package/dist/sdk-instance.js.map +1 -0
- package/dist/server.d.ts +13 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +29 -27
- package/dist/server.js.map +1 -1
- package/dist/tools/guide.d.ts.map +1 -1
- package/dist/tools/guide.js +159 -1
- package/dist/tools/guide.js.map +1 -1
- package/dist/tools/index.d.ts +8 -4
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +20 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insider-detection.d.ts +175 -0
- package/dist/tools/insider-detection.d.ts.map +1 -0
- package/dist/tools/insider-detection.js +654 -0
- package/dist/tools/insider-detection.js.map +1 -0
- package/dist/tools/insider-signals.d.ts +56 -0
- package/dist/tools/insider-signals.d.ts.map +1 -0
- package/dist/tools/insider-signals.js +170 -0
- package/dist/tools/insider-signals.js.map +1 -0
- package/dist/tools/market.d.ts +25 -1
- package/dist/tools/market.d.ts.map +1 -1
- package/dist/tools/market.js +504 -12
- package/dist/tools/market.js.map +1 -1
- package/dist/tools/onchain.d.ts +240 -0
- package/dist/tools/onchain.d.ts.map +1 -0
- package/dist/tools/onchain.js +610 -0
- package/dist/tools/onchain.js.map +1 -0
- package/dist/tools/order.d.ts.map +1 -1
- package/dist/tools/order.js +13 -6
- package/dist/tools/order.js.map +1 -1
- package/dist/tools/trade.d.ts +15 -0
- package/dist/tools/trade.d.ts.map +1 -1
- package/dist/tools/trade.js +216 -39
- package/dist/tools/trade.js.map +1 -1
- package/dist/tools/trader.d.ts +4 -1
- package/dist/tools/trader.d.ts.map +1 -1
- package/dist/tools/trader.js +316 -4
- package/dist/tools/trader.js.map +1 -1
- package/dist/tools/wallet-classification.d.ts +166 -0
- package/dist/tools/wallet-classification.d.ts.map +1 -0
- package/dist/tools/wallet-classification.js +455 -0
- package/dist/tools/wallet-classification.js.map +1 -0
- package/dist/tools/wallet.d.ts +56 -7
- package/dist/tools/wallet.d.ts.map +1 -1
- package/dist/tools/wallet.js +141 -20
- package/dist/tools/wallet.js.map +1 -1
- package/dist/types.d.ts +269 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/wallet-manager.d.ts +67 -0
- package/dist/wallet-manager.d.ts.map +1 -0
- package/dist/wallet-manager.js +180 -0
- package/dist/wallet-manager.js.map +1 -0
- package/docs/01-mcp.md +554 -32
- package/docs/02-wallet-deep-research.md +344 -0
- package/docs/e2e/01-trader-tools.md +159 -0
- package/docs/e2e/02-market-tools.md +180 -0
- package/docs/e2e/03-order-tools.md +166 -0
- package/docs/e2e/04-wallet-tools.md +224 -0
- package/docs/e2e/05-trading-tools.md +327 -0
- package/docs/e2e/06-integration-scenarios.md +481 -0
- package/docs/e2e/coordinator.md +376 -0
- package/docs/e2e-02/00-gap-analysis.md +211 -0
- package/docs/e2e-02/01-test-scenarios.md +530 -0
- package/docs/e2e-02/02-implementation-plan.md +190 -0
- package/docs/e2e-02/README.md +102 -0
- package/docs/reports/simonbanza-strategy-analysis-2025-12-25.md +420 -0
- package/docs/reports/smart-money-analysis-2025-12-23-cn.md +840 -0
- package/docs/reports/smart-money-trading-strategies-2025-12-25.md +440 -0
- package/docs/reports/weekly/01-v2.5.md +352 -0
- package/docs/reports/weekly/01.md +402 -0
- package/docs/reports/weekly/02-deep.md +558 -0
- package/docs/reports/weekly/02.md +505 -0
- package/docs/reports/weekly/03.md +437 -0
- package/docs/reports/weekly/04.md +418 -0
- package/docs/reports/weekly/05.md +485 -0
- package/docs/reports/weekly/06.md +436 -0
- package/docs/reports/weekly/07.md +381 -0
- package/docs/reports/weekly/08.md +502 -0
- package/docs/reports/weekly/09.md +441 -0
- package/docs/reports/weekly/10.md +511 -0
- package/docs/reports/weekly/README.md +188 -0
- package/docs/reports/weekly/prompt-v2.5.md +1019 -0
- package/docs/reports/weekly/prompt-v3.md +432 -0
- package/docs/reports/weekly/prompt.md +841 -0
- package/package.json +3 -2
- package/src/errors.ts +13 -2
- package/src/index.ts +286 -1
- package/src/sdk-instance.ts +78 -0
- package/src/server.ts +30 -28
- package/src/tools/guide.ts +160 -1
- package/src/tools/index.ts +65 -0
- package/src/tools/insider-detection.ts +899 -0
- package/src/tools/insider-signals.ts +213 -0
- package/src/tools/market.ts +569 -12
- package/src/tools/onchain.ts +738 -0
- package/src/tools/order.ts +25 -12
- package/src/tools/trade.ts +265 -53
- package/src/tools/trader.ts +350 -4
- package/src/tools/wallet-classification.ts +587 -0
- package/src/tools/wallet.ts +172 -23
- package/src/types.ts +294 -11
- package/src/wallet-manager.ts +209 -0
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
# 钱包深度分析指南
|
|
2
|
+
|
|
3
|
+
> 核心原则:**分页获取,逐步分析,边分析边输出**。解决仓位过多和上下文不足的问题。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 设计原则
|
|
8
|
+
|
|
9
|
+
### 为什么要分页 + 逐步分析?
|
|
10
|
+
|
|
11
|
+
| 问题 | 原因 | 解决方案 |
|
|
12
|
+
|------|------|---------|
|
|
13
|
+
| 仓位太多获取不完 | API 单次最多返回 50/500 条 | 分页获取:offset + limit |
|
|
14
|
+
| 分析不深入 | 同时处理多个市场,每个都浅尝辄止 | 一次只分析一个市场 |
|
|
15
|
+
| 上下文不足 | 数据太多,信息被挤掉 | 边分析边输出,释放上下文 |
|
|
16
|
+
| 幻觉风险 | 数据太多记不住,开始编造 | 分批处理,及时输出 |
|
|
17
|
+
|
|
18
|
+
### 核心流程
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
基础信息 → 分页获取持仓 → 找核心盈亏来源 → 逐个深入分析 → 逐步输出报告
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 工具参数参考
|
|
27
|
+
|
|
28
|
+
### 持仓相关
|
|
29
|
+
|
|
30
|
+
| 工具 | 关键参数 | 说明 |
|
|
31
|
+
|------|----------|------|
|
|
32
|
+
| `get_trader_positions` | `limit` (max 500) | 当前持仓数量限制 |
|
|
33
|
+
| | `offset` (0-10000) | 分页偏移量 |
|
|
34
|
+
| | `sortBy` | CASHPNL, PERCENTPNL, CURRENT, INITIAL, TOKENS, TITLE, PRICE, AVGPRICE |
|
|
35
|
+
| | `sortDirection` | ASC, DESC |
|
|
36
|
+
| `get_trader_closed_positions` | `limit` (max 50) | 已结算持仓数量限制 |
|
|
37
|
+
| | `offset` (0-100000) | 分页偏移量 |
|
|
38
|
+
| | `sortBy` | REALIZEDPNL, TIMESTAMP, TITLE, PRICE, AVGPRICE |
|
|
39
|
+
| | `sortDirection` | ASC, DESC (找亏钱用 ASC) |
|
|
40
|
+
|
|
41
|
+
### 活动历史
|
|
42
|
+
|
|
43
|
+
| 工具 | 关键参数 | 说明 |
|
|
44
|
+
|------|----------|------|
|
|
45
|
+
| `get_trader_activity` | `limit` (max 500) | 活动数量限制 |
|
|
46
|
+
| | `offset` (0-10000) | 分页偏移量 |
|
|
47
|
+
| | `start` | Unix 秒,过滤此时间之后的活动 |
|
|
48
|
+
| | `end` | Unix 秒,过滤此时间之前的活动 |
|
|
49
|
+
| | `type` | TRADE, SPLIT, MERGE, REDEEM, REWARD, CONVERSION |
|
|
50
|
+
| | `side` | BUY, SELL |
|
|
51
|
+
| | `market` | 按 conditionId 过滤 |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 完整分析流程
|
|
56
|
+
|
|
57
|
+
### Phase 1: 账户概览(快速)
|
|
58
|
+
|
|
59
|
+
**目标**:了解账户规模和基本特征
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
工具调用(并行):
|
|
63
|
+
1. get_trader_profile(address) → 排名、总 PnL、胜率
|
|
64
|
+
2. get_account_value(address) → 账户总价值
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**立即输出**:
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
## 1. 账户概览
|
|
71
|
+
|
|
72
|
+
| 指标 | 值 |
|
|
73
|
+
|------|-----|
|
|
74
|
+
| 地址 | 0x... |
|
|
75
|
+
| 全站排名 | #X |
|
|
76
|
+
| 总 PnL | $X |
|
|
77
|
+
| 账户价值 | $X |
|
|
78
|
+
| 胜率 | X% |
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
### Phase 2: 持仓全景(分页获取)
|
|
84
|
+
|
|
85
|
+
**目标**:获取完整的持仓和历史数据,找出核心盈亏来源
|
|
86
|
+
|
|
87
|
+
#### Step 2.1: 获取当前持仓
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
工具调用:
|
|
91
|
+
get_trader_positions(address, limit=100, offset=0, sortBy='CASHPNL', sortDirection='DESC')
|
|
92
|
+
→ 如果返回 100 条,可能还有更多,继续:
|
|
93
|
+
get_trader_positions(address, limit=100, offset=100, sortBy='CASHPNL', sortDirection='DESC')
|
|
94
|
+
→ 直到返回少于 limit 条
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
#### Step 2.2: 获取已结算持仓 - TOP 盈利
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
工具调用:
|
|
101
|
+
get_trader_closed_positions(address, limit=50, offset=0, sortBy='REALIZEDPNL', sortDirection='DESC')
|
|
102
|
+
→ 获取 TOP 50 最赚钱的市场
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
#### Step 2.3: 获取已结算持仓 - TOP 亏损
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
工具调用:
|
|
109
|
+
get_trader_closed_positions(address, limit=50, offset=0, sortBy='REALIZEDPNL', sortDirection='ASC')
|
|
110
|
+
→ 获取 TOP 50 最亏钱的市场
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**立即输出**:
|
|
114
|
+
|
|
115
|
+
```markdown
|
|
116
|
+
## 2. 持仓全景
|
|
117
|
+
|
|
118
|
+
### 当前持仓 (X 个)
|
|
119
|
+
| 市场 | 方向 | 价值 | 未实现盈亏 |
|
|
120
|
+
|------|------|------|-----------|
|
|
121
|
+
| ... | Yes/No | $X | +$X |
|
|
122
|
+
|
|
123
|
+
### 历史战绩
|
|
124
|
+
- 已结算市场: X 个
|
|
125
|
+
- 盈利市场: X 个
|
|
126
|
+
- 亏损市场: X 个
|
|
127
|
+
|
|
128
|
+
### TOP 5 盈利来源 (待深入分析)
|
|
129
|
+
1. [市场名] +$X ← 接下来重点分析
|
|
130
|
+
2. [市场名] +$X
|
|
131
|
+
3. [市场名] +$X
|
|
132
|
+
4. [市场名] +$X
|
|
133
|
+
5. [市场名] +$X
|
|
134
|
+
|
|
135
|
+
### TOP 5 亏损来源 (待分析)
|
|
136
|
+
1. [市场名] -$X
|
|
137
|
+
2. [市场名] -$X
|
|
138
|
+
3. [市场名] -$X
|
|
139
|
+
4. [市场名] -$X
|
|
140
|
+
5. [市场名] -$X
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
### Phase 3: 逐个市场深度分析
|
|
146
|
+
|
|
147
|
+
**关键原则**:一次只分析一个市场!分析完立即输出,再进入下一个。
|
|
148
|
+
|
|
149
|
+
#### 对每个重点市场:
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
工具调用:
|
|
153
|
+
1. get_market(conditionId) → 市场详情
|
|
154
|
+
2. get_trader_activity(address, market=conditionId, limit=100) → 该钱包在此市场的操作
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**分析要点**:
|
|
158
|
+
- 入场时间和价格
|
|
159
|
+
- 加仓/减仓行为
|
|
160
|
+
- 退出方式(止盈/持有到结算)
|
|
161
|
+
- 持仓周期
|
|
162
|
+
|
|
163
|
+
**立即输出(每个市场单独输出)**:
|
|
164
|
+
|
|
165
|
+
```markdown
|
|
166
|
+
### 3.1 [市场名称] (+$X)
|
|
167
|
+
|
|
168
|
+
**市场信息**
|
|
169
|
+
- 标题: ...
|
|
170
|
+
- 状态: 已结算/进行中
|
|
171
|
+
- 最终结果: Yes/No @ $X
|
|
172
|
+
|
|
173
|
+
**操作时间线**
|
|
174
|
+
| 时间 | 操作 | 方向 | 价格 | 数量 |
|
|
175
|
+
|------|------|------|------|------|
|
|
176
|
+
| 2024-03-15 | BUY | Yes | $0.35 | 1000 |
|
|
177
|
+
| 2024-06-20 | BUY | Yes | $0.42 | 500 |
|
|
178
|
+
| 2024-11-06 | REDEEM | - | $1.00 | 1500 |
|
|
179
|
+
|
|
180
|
+
**策略分析**
|
|
181
|
+
- 入场时机: 价格在 $0.35 时入场,处于低位
|
|
182
|
+
- 加仓行为: 价格上涨到 $0.42 时加仓
|
|
183
|
+
- 退出策略: 持有到结算
|
|
184
|
+
- 持仓周期: 约 8 个月
|
|
185
|
+
- 盈亏: +$X (+X%)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**完成一个后,再分析下一个市场...**
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### Phase 4: 行为模式总结
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
基于已分析的市场数据总结,无需额外 API 调用
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**立即输出**:
|
|
199
|
+
|
|
200
|
+
```markdown
|
|
201
|
+
## 4. 行为画像
|
|
202
|
+
|
|
203
|
+
| 维度 | 特征 |
|
|
204
|
+
|------|------|
|
|
205
|
+
| 交易风格 | 保守/激进 |
|
|
206
|
+
| 持仓周期 | 短期(<1周) / 中期(1-4周) / 长期(>1月) |
|
|
207
|
+
| 入场偏好 | 低价抄底 / 趋势跟随 / 事件驱动 |
|
|
208
|
+
| 退出策略 | 止盈 / 持有到结算 |
|
|
209
|
+
| 市场偏好 | 政治 / 加密 / 体育 |
|
|
210
|
+
| Bot 可能性 | 低/中/高 (基于 SPLIT/MERGE 占比) |
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
### Phase 5: 可复制策略提取
|
|
216
|
+
|
|
217
|
+
```markdown
|
|
218
|
+
## 5. 可复制策略
|
|
219
|
+
|
|
220
|
+
### 入场策略
|
|
221
|
+
- 价格条件: 当 Yes 价格 < $0.X 时入场
|
|
222
|
+
- 时机选择: ...
|
|
223
|
+
|
|
224
|
+
### 仓位管理
|
|
225
|
+
- 初始仓位: 总资金的 X%
|
|
226
|
+
- 加仓条件: ...
|
|
227
|
+
|
|
228
|
+
### 退出策略
|
|
229
|
+
- 止盈条件: 价格达到 $X 或涨幅 X%
|
|
230
|
+
- 止损条件: 价格跌破 $X
|
|
231
|
+
- 持有到结算比例: X%
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### Phase 6: 总结
|
|
237
|
+
|
|
238
|
+
```markdown
|
|
239
|
+
## 6. 总结
|
|
240
|
+
|
|
241
|
+
[地址简称] 是一个 [风格] 型交易者,主要通过 [策略] 在 [市场类型] 获利。
|
|
242
|
+
核心优势是 [优势],可学习的策略是 [策略要点]。
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Agent Prompt 模板
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
请对 Polymarket 钱包 [地址] 进行深度分析。
|
|
251
|
+
|
|
252
|
+
## 核心原则
|
|
253
|
+
1. **分页获取**:使用 offset 参数分页获取完整数据
|
|
254
|
+
2. **逐步分析**:一次只深入分析一个市场
|
|
255
|
+
3. **边分析边输出**:每个步骤完成后立即输出对应部分的报告
|
|
256
|
+
4. **释放上下文**:输出后不要保留原始数据,只保留结论
|
|
257
|
+
|
|
258
|
+
## 执行步骤
|
|
259
|
+
|
|
260
|
+
### Phase 1: 账户概览
|
|
261
|
+
并行调用 get_trader_profile 和 get_account_value
|
|
262
|
+
→ 输出: 账户概览表格
|
|
263
|
+
|
|
264
|
+
### Phase 2: 持仓全景
|
|
265
|
+
|
|
266
|
+
#### 2.1 获取当前持仓
|
|
267
|
+
get_trader_positions(address, limit=100, offset=0, sortBy='CASHPNL', sortDirection='DESC')
|
|
268
|
+
→ 如果满 100 条,继续 offset=100, 200... 直到返回不足 100 条
|
|
269
|
+
|
|
270
|
+
#### 2.2 获取 TOP 盈利持仓
|
|
271
|
+
get_trader_closed_positions(address, limit=50, sortBy='REALIZEDPNL', sortDirection='DESC')
|
|
272
|
+
→ 输出: TOP 5 最赚钱市场列表
|
|
273
|
+
|
|
274
|
+
#### 2.3 获取 TOP 亏损持仓
|
|
275
|
+
get_trader_closed_positions(address, limit=50, sortBy='REALIZEDPNL', sortDirection='ASC')
|
|
276
|
+
→ 输出: TOP 5 最亏钱市场列表
|
|
277
|
+
|
|
278
|
+
### Phase 3: 逐个市场深度分析
|
|
279
|
+
|
|
280
|
+
对 TOP 5 盈利 + TOP 3 亏损市场,依次执行:
|
|
281
|
+
1. 调用 get_market(conditionId) 获取市场信息
|
|
282
|
+
2. 调用 get_trader_activity(address, market=conditionId, limit=100) 获取操作历史
|
|
283
|
+
3. 分析入场/加仓/退出策略
|
|
284
|
+
4. **立即输出该市场的分析报告**
|
|
285
|
+
5. **完成后再进入下一个市场**
|
|
286
|
+
|
|
287
|
+
### Phase 4: 行为画像
|
|
288
|
+
基于已分析内容,总结行为特征
|
|
289
|
+
→ 输出: 行为画像表格
|
|
290
|
+
|
|
291
|
+
### Phase 5: 策略提取
|
|
292
|
+
提炼可复制的交易策略
|
|
293
|
+
→ 输出: 策略清单
|
|
294
|
+
|
|
295
|
+
### Phase 6: 总结
|
|
296
|
+
一句话概括
|
|
297
|
+
→ 输出: 总结
|
|
298
|
+
|
|
299
|
+
## 注意事项
|
|
300
|
+
- 如果仓位超过 500 个,只分析 TOP 相关的即可
|
|
301
|
+
- 每个市场分析完就输出,不要等到全部完成
|
|
302
|
+
- 输出后释放详细数据,只保留结论
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## 简化版 Prompt(快速分析)
|
|
308
|
+
|
|
309
|
+
```
|
|
310
|
+
分析 Polymarket 钱包 [地址]。
|
|
311
|
+
|
|
312
|
+
要求:
|
|
313
|
+
1. 先获取 profile 和 account_value 了解概况
|
|
314
|
+
2. 用 get_trader_closed_positions(sortBy='REALIZEDPNL', limit=50) 找 TOP 5 最赚钱市场
|
|
315
|
+
3. 用 get_trader_closed_positions(sortBy='REALIZEDPNL', sortDirection='ASC', limit=50) 找 TOP 5 最亏钱市场
|
|
316
|
+
4. 对 TOP 3 盈利市场,逐个分析操作历史
|
|
317
|
+
5. 边分析边输出报告
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Activity 类型说明
|
|
323
|
+
|
|
324
|
+
| 类型 | 说明 | 策略含义 |
|
|
325
|
+
|------|------|----------|
|
|
326
|
+
| `TRADE` | 买卖交易 | 正常交易 |
|
|
327
|
+
| `SPLIT` | 1 USDC → 1 YES + 1 NO | 做市/套利 |
|
|
328
|
+
| `MERGE` | 1 YES + 1 NO → 1 USDC | 套利收割 |
|
|
329
|
+
| `REDEEM` | 结算后赎回 | 盈利兑现 |
|
|
330
|
+
| `REWARD` | 流动性奖励 | 做市收益 |
|
|
331
|
+
|
|
332
|
+
**Bot 检测**:如果 SPLIT/MERGE 占比 > 20%,大概率是套利 Bot。
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
## 分页策略汇总
|
|
337
|
+
|
|
338
|
+
| 数据类型 | 推荐策略 | 说明 |
|
|
339
|
+
|----------|----------|------|
|
|
340
|
+
| 当前持仓 | limit=100, 循环直到 < limit | 获取完整持仓 |
|
|
341
|
+
| 已结算持仓-盈利 | limit=50, sortDirection=DESC | TOP 50 最赚钱 |
|
|
342
|
+
| 已结算持仓-亏损 | limit=50, sortDirection=ASC | TOP 50 最亏钱 |
|
|
343
|
+
| 特定市场活动 | limit=100, market=conditionId | 单市场完整历史 |
|
|
344
|
+
| 时间段活动 | limit=500, start/end | 指定时间范围 |
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# Trader Tools E2E Test
|
|
2
|
+
|
|
3
|
+
> 交易者分析工具端到端测试
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 工具清单
|
|
8
|
+
|
|
9
|
+
| 工具 | 功能 | 认证 | 优先级 |
|
|
10
|
+
|------|------|------|--------|
|
|
11
|
+
| `get_leaderboard` | 获取 PnL 排行榜 | 无 | P1 |
|
|
12
|
+
| `get_trader_profile` | 获取交易者资料 | 无 | P1 |
|
|
13
|
+
| `get_trader_positions` | 获取持仓和 PnL | 无 | P0 |
|
|
14
|
+
| `get_trader_trades` | 获取交易历史 | 无 | P1 |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Test Case 1: get_leaderboard
|
|
19
|
+
|
|
20
|
+
### 1.1 默认参数
|
|
21
|
+
```
|
|
22
|
+
调用: get_leaderboard()
|
|
23
|
+
预期: 返回 10 个交易者,按 PnL 排序
|
|
24
|
+
验证:
|
|
25
|
+
- traders 数组长度 = 10
|
|
26
|
+
- 每个 trader 有 rank, address, pnl, volume
|
|
27
|
+
- rank 从 1 开始递增
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 1.2 自定义 limit
|
|
31
|
+
```
|
|
32
|
+
调用: get_leaderboard(limit=5)
|
|
33
|
+
预期: 返回 5 个交易者
|
|
34
|
+
验证:
|
|
35
|
+
- traders 数组长度 = 5
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 1.3 分页测试
|
|
39
|
+
```
|
|
40
|
+
调用: get_leaderboard(limit=5, offset=5)
|
|
41
|
+
预期: 返回第 6-10 名交易者
|
|
42
|
+
验证:
|
|
43
|
+
- 第一个 trader 的 rank = 6
|
|
44
|
+
- 与 offset=0 的结果不重叠
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Test Case 2: get_trader_profile
|
|
50
|
+
|
|
51
|
+
### 2.1 有效地址
|
|
52
|
+
```
|
|
53
|
+
前置: 从 leaderboard 获取一个地址
|
|
54
|
+
调用: get_trader_profile(address=<top_trader>)
|
|
55
|
+
预期: 返回完整的交易者资料
|
|
56
|
+
验证:
|
|
57
|
+
- trader.address 匹配
|
|
58
|
+
- ranking.rank 存在
|
|
59
|
+
- performance.officialPnl 存在
|
|
60
|
+
- stats.positionCount >= 0
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 2.2 无效地址
|
|
64
|
+
```
|
|
65
|
+
调用: get_trader_profile(address="0x0000000000000000000000000000000000000000")
|
|
66
|
+
预期: 返回空数据或错误
|
|
67
|
+
验证:
|
|
68
|
+
- 错误信息清晰
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Test Case 3: get_trader_positions
|
|
74
|
+
|
|
75
|
+
### 3.1 有持仓的交易者
|
|
76
|
+
```
|
|
77
|
+
前置: 从 leaderboard 获取顶级交易者
|
|
78
|
+
调用: get_trader_positions(address=<top_trader>)
|
|
79
|
+
预期: 返回持仓列表和汇总
|
|
80
|
+
验证:
|
|
81
|
+
- positions 是数组
|
|
82
|
+
- 每个 position 有 market, holding, pnl
|
|
83
|
+
- summary.totalPositions 匹配 positions.length
|
|
84
|
+
- unrealizedPnl 和 realizedPnl 有值
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 3.2 无持仓的地址
|
|
88
|
+
```
|
|
89
|
+
调用: get_trader_positions(address=<new_address>)
|
|
90
|
+
预期: 返回空持仓列表
|
|
91
|
+
验证:
|
|
92
|
+
- positions = []
|
|
93
|
+
- summary.totalPositions = 0
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Test Case 4: get_trader_trades
|
|
99
|
+
|
|
100
|
+
### 4.1 默认参数
|
|
101
|
+
```
|
|
102
|
+
前置: 从 leaderboard 获取活跃交易者
|
|
103
|
+
调用: get_trader_trades(address=<active_trader>)
|
|
104
|
+
预期: 返回最近 20 笔交易
|
|
105
|
+
验证:
|
|
106
|
+
- trades 数组长度 <= 20
|
|
107
|
+
- 每笔交易有 side, outcome, size, price, timestamp
|
|
108
|
+
- 按时间倒序排列
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 4.2 过滤 BUY
|
|
112
|
+
```
|
|
113
|
+
调用: get_trader_trades(address=<trader>, side="BUY")
|
|
114
|
+
预期: 只返回买入交易
|
|
115
|
+
验证:
|
|
116
|
+
- 所有 trade.side = "BUY"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 4.3 过滤 SELL
|
|
120
|
+
```
|
|
121
|
+
调用: get_trader_trades(address=<trader>, side="SELL")
|
|
122
|
+
预期: 只返回卖出交易
|
|
123
|
+
验证:
|
|
124
|
+
- 所有 trade.side = "SELL"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 4.4 自定义 limit
|
|
128
|
+
```
|
|
129
|
+
调用: get_trader_trades(address=<trader>, limit=5)
|
|
130
|
+
预期: 返回 5 笔交易
|
|
131
|
+
验证:
|
|
132
|
+
- trades.length <= 5
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 执行记录
|
|
138
|
+
|
|
139
|
+
| Test Case | 状态 | 结果 | 备注 |
|
|
140
|
+
|-----------|------|------|------|
|
|
141
|
+
| 1.1 get_leaderboard 默认 | - | - | - |
|
|
142
|
+
| 1.2 get_leaderboard limit | - | - | - |
|
|
143
|
+
| 1.3 get_leaderboard 分页 | - | - | - |
|
|
144
|
+
| 2.1 get_trader_profile 有效 | - | - | - |
|
|
145
|
+
| 2.2 get_trader_profile 无效 | - | - | - |
|
|
146
|
+
| 3.1 get_trader_positions 有持仓 | - | - | - |
|
|
147
|
+
| 3.2 get_trader_positions 无持仓 | - | - | - |
|
|
148
|
+
| 4.1 get_trader_trades 默认 | - | - | - |
|
|
149
|
+
| 4.2 get_trader_trades BUY | - | - | - |
|
|
150
|
+
| 4.3 get_trader_trades SELL | - | - | - |
|
|
151
|
+
| 4.4 get_trader_trades limit | - | - | - |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 发现的问题
|
|
156
|
+
|
|
157
|
+
| ID | 问题描述 | 严重性 | 状态 |
|
|
158
|
+
|----|---------|--------|------|
|
|
159
|
+
| - | - | - | - |
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# Market Tools E2E Test
|
|
2
|
+
|
|
3
|
+
> 市场查询工具端到端测试
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 工具清单
|
|
8
|
+
|
|
9
|
+
| 工具 | 功能 | 认证 | 优先级 |
|
|
10
|
+
|------|------|------|--------|
|
|
11
|
+
| `search_markets` | 搜索市场 | 无 | P1 |
|
|
12
|
+
| `get_trending_markets` | 趋势市场 | 无 | P3 |
|
|
13
|
+
| `get_market` | 市场详情 | 无 | P0 |
|
|
14
|
+
| `get_market_trades` | 市场成交 | 无 | P1 |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Test Case 1: search_markets
|
|
19
|
+
|
|
20
|
+
### 1.1 热门关键词搜索
|
|
21
|
+
```
|
|
22
|
+
调用: search_markets(query="Trump")
|
|
23
|
+
预期: 返回与 Trump 相关的市场
|
|
24
|
+
验证:
|
|
25
|
+
- markets 是数组
|
|
26
|
+
- 每个市场的 question 或 slug 包含搜索词
|
|
27
|
+
- 按 volume 排序
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 1.2 技术关键词搜索
|
|
31
|
+
```
|
|
32
|
+
调用: search_markets(query="Bitcoin")
|
|
33
|
+
预期: 返回加密货币相关市场
|
|
34
|
+
验证:
|
|
35
|
+
- 结果与 Bitcoin/BTC 价格预测相关
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 1.3 active 过滤
|
|
39
|
+
```
|
|
40
|
+
调用: search_markets(query="2024", active=false)
|
|
41
|
+
预期: 包含已结束的市场
|
|
42
|
+
验证:
|
|
43
|
+
- 可能返回已关闭的 2024 年市场
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 1.4 limit 参数
|
|
47
|
+
```
|
|
48
|
+
调用: search_markets(query="election", limit=3)
|
|
49
|
+
预期: 最多返回 3 个市场
|
|
50
|
+
验证:
|
|
51
|
+
- markets.length <= 3
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Test Case 2: get_trending_markets
|
|
57
|
+
|
|
58
|
+
### 2.1 按交易量排序
|
|
59
|
+
```
|
|
60
|
+
调用: get_trending_markets(sortBy="volume")
|
|
61
|
+
预期: 返回高交易量市场
|
|
62
|
+
验证:
|
|
63
|
+
- markets 按 volume24h 降序排列
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 2.2 按流动性排序
|
|
67
|
+
```
|
|
68
|
+
调用: get_trending_markets(sortBy="liquidity")
|
|
69
|
+
预期: 返回高流动性市场
|
|
70
|
+
验证:
|
|
71
|
+
- 返回的市场流动性较高
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 2.3 最新市场
|
|
75
|
+
```
|
|
76
|
+
调用: get_trending_markets(sortBy="newest")
|
|
77
|
+
预期: 返回最近创建的市场
|
|
78
|
+
验证:
|
|
79
|
+
- 按创建时间排序
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 2.4 自定义数量
|
|
83
|
+
```
|
|
84
|
+
调用: get_trending_markets(limit=5)
|
|
85
|
+
预期: 返回 5 个市场
|
|
86
|
+
验证:
|
|
87
|
+
- markets.length = 5
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Test Case 3: get_market
|
|
93
|
+
|
|
94
|
+
### 3.1 使用 slug
|
|
95
|
+
```
|
|
96
|
+
调用: get_market(identifier="presidential-election-winner-2024")
|
|
97
|
+
预期: 返回完整市场信息
|
|
98
|
+
验证:
|
|
99
|
+
- market.slug 匹配
|
|
100
|
+
- prices.yes + prices.no ≈ 1.0
|
|
101
|
+
- tokens.yes 和 tokens.no 都有 tokenId
|
|
102
|
+
- status 字段存在
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 3.2 使用 conditionId
|
|
106
|
+
```
|
|
107
|
+
前置: 从 search_markets 获取一个 conditionId
|
|
108
|
+
调用: get_market(identifier=<conditionId>)
|
|
109
|
+
预期: 返回同样的市场信息
|
|
110
|
+
验证:
|
|
111
|
+
- 与使用 slug 返回的数据一致
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 3.3 无效标识符
|
|
115
|
+
```
|
|
116
|
+
调用: get_market(identifier="invalid-slug-12345")
|
|
117
|
+
预期: 返回错误
|
|
118
|
+
验证:
|
|
119
|
+
- 错误信息清晰说明市场不存在
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Test Case 4: get_market_trades
|
|
125
|
+
|
|
126
|
+
### 4.1 热门市场成交
|
|
127
|
+
```
|
|
128
|
+
前置: 获取一个高交易量市场的 conditionId
|
|
129
|
+
调用: get_market_trades(conditionId=<id>)
|
|
130
|
+
预期: 返回最近成交
|
|
131
|
+
验证:
|
|
132
|
+
- trades 是数组
|
|
133
|
+
- 每笔交易有 trader, side, outcome, size, price, timestamp
|
|
134
|
+
- 按时间倒序
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 4.2 自定义数量
|
|
138
|
+
```
|
|
139
|
+
调用: get_market_trades(conditionId=<id>, limit=5)
|
|
140
|
+
预期: 返回 5 笔成交
|
|
141
|
+
验证:
|
|
142
|
+
- trades.length <= 5
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 4.3 冷门市场
|
|
146
|
+
```
|
|
147
|
+
调用: get_market_trades(conditionId=<low_volume_market>)
|
|
148
|
+
预期: 返回较少或空的成交
|
|
149
|
+
验证:
|
|
150
|
+
- 即使没有成交也不报错
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 执行记录
|
|
156
|
+
|
|
157
|
+
| Test Case | 状态 | 结果 | 备注 |
|
|
158
|
+
|-----------|------|------|------|
|
|
159
|
+
| 1.1 search_markets Trump | - | - | - |
|
|
160
|
+
| 1.2 search_markets Bitcoin | - | - | - |
|
|
161
|
+
| 1.3 search_markets active=false | - | - | - |
|
|
162
|
+
| 1.4 search_markets limit | - | - | - |
|
|
163
|
+
| 2.1 trending volume | - | - | - |
|
|
164
|
+
| 2.2 trending liquidity | - | - | - |
|
|
165
|
+
| 2.3 trending newest | - | - | - |
|
|
166
|
+
| 2.4 trending limit | - | - | - |
|
|
167
|
+
| 3.1 get_market slug | - | - | - |
|
|
168
|
+
| 3.2 get_market conditionId | - | - | - |
|
|
169
|
+
| 3.3 get_market invalid | - | - | - |
|
|
170
|
+
| 4.1 market_trades 热门 | - | - | - |
|
|
171
|
+
| 4.2 market_trades limit | - | - | - |
|
|
172
|
+
| 4.3 market_trades 冷门 | - | - | - |
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 发现的问题
|
|
177
|
+
|
|
178
|
+
| ID | 问题描述 | 严重性 | 状态 |
|
|
179
|
+
|----|---------|--------|------|
|
|
180
|
+
| - | - | - | - |
|