Skip to content

Commit 4d1e2a6

Browse files
张靖恒claude
andcommitted
Maker thesis lives at $200-500/yr — taker-only verdict was wrong
After user pushed back on the "thesis dead" verdict ("我不信邪"), built two maker-strategy simulators: v1 (mid-touch, simulate_maker_basket.py): - 3.15M tick points across 157 tokens over 14 days - For each (group, day, markup): did mid touch (bestAsk - markup)? - Result: $15,546/yr theoretical across 72 groups @ $100 basket - Known weakness: mid touching != trade at that price v2 (trade tape, simulate_maker_basket_v2.py): - Real Polymarket /trades tape, 48,030 raw trades over 14 days - Filtered to SELL Yes trades (the type that would hit a maker bid) - Only 1,602 / 48,030 (3.3%) qualified - Result: $918/yr theoretical = 17x reduction from v1 After realistic adjustments (queue priority, D/R correlation, partial-fill hedging cost, gas): $200-500/yr @ $100 basket, scaling to ~$2-5k/yr @ $1000 basket with $144k capital tied up. Updated research-summary §3.9: I overclaimed "thesis dead" from 2 taker-only depth snapshots. Real verdict: TAKER dead, MAKER alive at hobby scale. User's skepticism was correct; my single-perspective testing was insufficient methodology. Verdict matrix: - Taker basket arb: $0-200/yr killed - Maker basket arb (v1 mid-sim): $15k optimistic phantom - Maker basket arb (v2 trade tape): $200-500/yr honest Live loop remains stopped. Existing data + scripts kept for paper trading next phase if pursued. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 3cf624c commit 4d1e2a6

5 files changed

Lines changed: 1057 additions & 8 deletions
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Maker-strategy Basket Simulation (2026-05-13T03:42:38.816895+00:00)
2+
3+
**Method**: for each (group, UTC-day, markup-level), check if every leg's mid-price touched (today's bestAsk - markup) at some point during the day. If ALL legs filled, compute basket cost at maker target prices + fee. Aggregate fill_rate * avg_edge as proxy for expected daily $income.
4+
5+
**Window**: 14 days, 15 distinct UTC days seen in tick data.
6+
**Basket size for $income estimate**: $100 of payout per fill.
7+
8+
## Caveats (read first)
9+
10+
- Mid-touching `target` is a proxy for fill, not a guarantee. Real fill requires someone to hit our resting order at that price.
11+
- Per-leg fill events treated as independent within a day. For correlated markets (D/R move together) this overestimates basket fill rate.
12+
- Today's bestAsk/bestBid used as reference; historical spread may differ.
13+
- Fee = taker rate from feeSchedule. Real maker fee may be 0 or negative (rebate), so this is a CONSERVATIVE estimate.
14+
15+
## Top 20 groups by best expected daily income
16+
17+
| Group | Q (short) | Best markup | Fill rate | Avg edge | Exp daily $ |
18+
|---|---|---:|---:|---:|---:|
19+
| `0x2aa7cf1991dd...` | Will the Democrats win the Kan vs Will the Republicans | $0.050 | 80.0% | +6.091% | $+4.873 |
20+
| `0xa7f79f468a16...` | Will the Democrats win the Sou vs Will the Republicans | $0.030 | 80.0% | +4.733% | $+3.787 |
21+
| `0x6473c875a3d6...` | Will the Democrats win the New vs Will the Republicans | $0.050 | 60.0% | +4.307% | $+2.584 |
22+
| `0x5f4893a285ad...` | Will the Democrats win the Wes vs Will the Republicans | $0.010 | 46.7% | +4.941% | $+2.306 |
23+
| `0xbd54b57c63ad...` | Will the Democrats win the Ida vs Will the Republicans | $0.010 | 100.0% | +2.198% | $+2.198 |
24+
| `0xa8574c0caacc...` | Will the Democrats win the Sou vs Will the Republicans | $0.005 | 46.7% | +4.484% | $+2.093 |
25+
| `0x7146f4aff656...` | Will the Democrats win the Ill vs Will the Republicans | $0.030 | 53.3% | +3.663% | $+1.953 |
26+
| `0x2ecd963d91df...` | Will the Democrats win the Iow vs Will the Republicans | $0.020 | 60.0% | +3.223% | $+1.934 |
27+
| `0x7bd878bdc3cd...` | Will the Democrats win the Nev vs Will the Republicans | $0.050 | 60.0% | +2.829% | $+1.697 |
28+
| `0xffde13841676...` | Will the Democrats win the Min vs Will the Republicans | $0.020 | 73.3% | +2.247% | $+1.647 |
29+
| `0xb17c29a2fb22...` | Will the Democrats win the Ten vs Will the Republicans | $0.020 | 26.7% | +5.345% | $+1.425 |
30+
| `0xfb7720a6bbf3...` | Will the Democrats win the Rho vs Will the Republicans | $0.030 | 33.3% | +4.111% | $+1.370 |
31+
| `0x5cddfa5bafea...` | Will the Democrats win the Geo vs Will the Republicans | $0.030 | 33.3% | +3.887% | $+1.296 |
32+
| `0x8397b62d3e02...` | Will the Democrats win the Neb vs Will the Republicans | $0.020 | 66.7% | +1.867% | $+1.245 |
33+
| `0x12dddaa9289c...` | Will the Democrats win the Ken vs Will the Republicans | $0.050 | 26.7% | +4.527% | $+1.207 |
34+
| `0x266416597e36...` | Will the Republican Party win vs Will the Democratic P | $0.050 | 93.3% | +1.218% | $+1.136 |
35+
| `0xe0ff15139f33...` | Will the Democrats win the Min vs Will the Republicans | $0.010 | 60.0% | +1.764% | $+1.058 |
36+
| `0x64111969ce49...` | Will the Democrats win the New vs Will the Republicans | $0.010 | 93.3% | +1.059% | $+0.988 |
37+
| `0x9bb9ed087667...` | Will the Democrats win the Ark vs Will the Republicans | $0.005 | 73.3% | +1.346% | $+0.987 |
38+
| `0x4e43ba407ed4...` | Will the Democrats win the Wis vs Will the Republicans | $0.020 | 60.0% | +1.554% | $+0.932 |
39+
40+
## Aggregate (all groups combined)
41+
42+
- Total expected daily income (sum across 72 groups, $100 basket each): **$+42.59/day**
43+
- Annualized: **$+15,546/yr**
44+
- Groups with positive expected income at any markup: **49/72**
45+
46+
## Markup-level summary (averaged across all groups)
47+
48+
| Markup | Avg fill rate | Avg edge given fill | Groups with positive exp daily | Total exp daily $ |
49+
|---:|---:|---:|---:|---:|
50+
| $0.005 | 69.4% | -0.776% | 26/72 | $-47.62 |
51+
| $0.010 | 40.4% | -0.204% | 25/72 | $-12.66 |
52+
| $0.020 | 28.7% | +0.682% | 33/72 | $+7.45 |
53+
| $0.030 | 25.5% | +1.107% | 32/72 | $+17.25 |
54+
| $0.050 | 23.5% | +1.661% | 34/72 | $+28.53 |
55+
56+
## Comparison to previous taker depth check
57+
58+
Taker: SC Gov bestAsk basket, single $50 fill → +$0.52 profit (one-time).
59+
Taker: James Bond bestAsk basket, single $80 fill → +$3.78 profit (one-time).
60+
61+
Maker (this sim): $+42.59/day across 72 groups at $100 basket each = up to $+15,546/yr theoretical.
62+
63+
Important: this is the OPTIMISTIC bound. Real fill rates are likely 2-5x lower than mid-touch rates because mid touching doesn't equal trade at that price.
64+
65+
---
66+
*Snapshot: 2026-05-13T03:42:38.816895+00:00*
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Maker Simulation v2 — Trade Tape (2026-05-13T03:50:03.951692+00:00)
2+
3+
**Method**: real Polymarket trade tape. For each (group, day, markup), check if any SELL Yes trade at price <= target occurred on each leg that day. If ALL legs had a qualifying trade, basket fills.
4+
5+
**Window**: 14 days (2026-04-29 -> 2026-05-13)
6+
**Basket size**: $100
7+
**Trades fetched**: 48030 raw -> 1602 qualifying (SELL Yes in window)
8+
**Days with activity**: 15
9+
10+
## v1 (mid-touch) vs v2 (trade tape) comparison
11+
12+
v1 mid-touch results from earlier today (see `maker-simulation-2026-05-13.md`):
13+
- Total daily $: $+42.59 across 72 groups
14+
- Annualized: $+15,546/yr
15+
- Caveat: mid touching != trade happening at that price
16+
17+
## v2 results (this run)
18+
19+
- Total expected daily income: **$+2.51/day** across 72 groups @ $100 basket
20+
- Annualized: **$+918/yr**
21+
- Groups with positive expected income at any markup: **17/72**
22+
23+
## Top 20 by best expected daily income (v2)
24+
25+
| Group | Q | Best markup | Fill rate | Avg edge | Avg sell size | Exp daily $ |
26+
|---|---|---:|---:|---:|---:|---:|
27+
| `0x2ecd963d91df...` | Will the Democrats win the Iow vs Will the Re | $0.030 | 20.0% | +5.027% | 77 | $+1.005 |
28+
| `0x5cddfa5bafea...` | Will the Democrats win the Geo vs Will the Re | $0.030 | 20.0% | +3.887% | 9 | $+0.777 |
29+
| `0x7146f4aff656...` | Will the Democrats win the Ill vs Will the Re | $0.050 | 6.7% | +5.738% | 5 | $+0.383 |
30+
| `0x195e8f642b07...` | Will the Democrats win the Tex vs Will the Re | $0.020 | 13.3% | +2.728% | 3 | $+0.364 |
31+
| `0xb17c29a2fb22...` | Will the Democrats win the Ten vs Will the Re | $0.020 | 6.7% | +5.138% | 6 | $+0.343 |
32+
| `0x2aa7cf1991dd...` | Will the Democrats win the Kan vs Will the Re | $0.050 | 6.7% | +5.001% | 10 | $+0.333 |
33+
| `0x6473c875a3d6...` | Will the Democrats win the New vs Will the Re | $0.030 | 13.3% | +2.442% | 5 | $+0.326 |
34+
| `0xac17bb3e2188...` | Will the Democrats win the New vs Will the Re | $0.020 | 13.3% | +1.732% | 1 | $+0.231 |
35+
| `0xd4118b02b567...` | Will the Democrats win the Pen vs Will the Re | $0.020 | 6.7% | +3.282% | 5 | $+0.219 |
36+
| `0x4e43ba407ed4...` | Will the Democrats win the Wis vs Will the Re | $0.030 | 6.7% | +2.476% | 11 | $+0.165 |
37+
| `0x209eca0d8c37...` | Will the Democrats win the Wyo vs Will the Re | $0.030 | 6.7% | +2.183% | 6 | $+0.146 |
38+
| `0x7bd878bdc3cd...` | Will the Democrats win the Nev vs Will the Re | $0.050 | 6.7% | +1.823% | 10 | $+0.122 |
39+
| `0x8941a4153cb2...` | Will the Democrats win the Ver vs Will the Re | $0.010 | 6.7% | +1.546% | 5 | $+0.103 |
40+
| `0x2a010ed53626...` | Will the Democrats win the Flo vs Will the Re | $0.020 | 6.7% | +1.498% | 5 | $+0.100 |
41+
| `0xb61918837517...` | Will the Democrats win the Nor vs Will the Re | $0.010 | 6.7% | +0.725% | 343 | $+0.048 |
42+
| `0x82cc8472987c...` | Will the Democrats win the Kan vs Will the Re | $0.010 | 6.7% | +0.672% | 12 | $+0.045 |
43+
| `0x1304dee4404b...` | Will the Democrats win the Ari vs Will the Re | $0.010 | 6.7% | +0.341% | 5 | $+0.023 |
44+
| `0xb23e25438839...` | Aaron Taylor-Johnson announced vs James Norto | $0.005 | 0.0% | +0.000% | 0 | $+0.000 |
45+
| `0x07311e10dac6...` | Will the Democrats win the Ala vs Will the Re | $0.005 | 0.0% | +0.000% | 0 | $+0.000 |
46+
| `0x25025e1a8d9b...` | Will the Democrats win the Ark vs Will the Re | $0.005 | 0.0% | +0.000% | 0 | $+0.000 |
47+
48+
## Markup-level aggregate (v2)
49+
50+
| Markup | Avg fill rate | Avg edge given fill | Groups positive | Total daily $ |
51+
|---:|---:|---:|---:|---:|
52+
| $0.005 | 5.5% | -1.067% | 8/72 | $-5.02 |
53+
| $0.010 | 5.5% | -0.180% | 13/72 | $-1.62 |
54+
| $0.020 | 5.4% | +0.638% | 16/72 | $+0.98 |
55+
| $0.030 | 5.1% | +0.932% | 15/72 | $+1.79 |
56+
| $0.050 | 4.9% | +1.102% | 15/72 | $+1.85 |
57+
58+
## Notes
59+
60+
- This uses the REAL trade tape — every SELL Yes trade in the past 14 days at price <= target is counted as a potential fill.
61+
- Still optimistic: assumes (a) our resting bid was first in queue, (b) our size was always available, (c) per-leg fills are independent within a day.
62+
- avg_min_leg_sell_size = avg of (min sell-size across legs on filled days). If this is < intended basket size, we couldn't have filled in full.
63+
- Maker fee assumed equal to taker fee_rate from feeSchedule. Polymarket maker fees may be lower or rebated — actual income could be HIGHER.
64+
- v2 vs v1 mismatch: v2 < v1 means mid-touch over-counts (less real trade activity at target); v2 > v1 means mid-touch under-counts (trades happened that mid-snapshot didn't capture).
65+
66+
---
67+
*Snapshot: 2026-05-13T03:50:03.951692+00:00*

reports/research-summary-2026-05-13.md

Lines changed: 77 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@
1414
| 能赚多少? | 没量化 |**每事件最高 ~\$3.78**,全年理论上限 ~\$394 |
1515
| 频率? | 不知道 | 14 天里 4 次事件,**全都是同一个组 James Bond** |
1616
| Binary D-vs-R 套利存在吗? | 7 个候选,edge 0.1-3% | ⚠️ 回测看到 98 事件,**但绝大多数是 forward-fill 伪信号** |
17-
| 该继续做 thesis 吗? | "上线 paper trading" | **当前深度下不值得;两条 thesis 分支都已死** |
17+
| 该继续做 thesis 吗? | "上线 paper trading" | **TAKER 死,MAKER 活但很小**(详见 §3.9)|
1818

19-
**核心新发现**:mid-price 给出的"持续 edge"和 bestAsk 实际可成交的 edge 是**两个东西**。回测里看着 30 小时 +18% 的 arb,实际订单簿一次只能吃 \$50-100 的 basket,再多 slippage 就吃掉所有收益。
19+
**核心发现链(按时间顺序)**
20+
1. mid-price 给出的"持续 edge"和 bestAsk 实际可成交 edge 是两个东西(§3.4)
21+
2. TAKER 一次性吃光 bestAsk 在 2 个测试组(James Bond + SC Gov)下死亡(§2 + §3.7)
22+
3. 我据此说"thesis 死了" —— 用户当场质疑(§3.9)
23+
4. 补做 MAKER 模拟:v1 mid-touch 给 $15k/yr 假象,v2 trade tape 给 $918/yr 真值
24+
5. 修正后预期:**$200-500/yr @ $100 basket,或 $2-5k/yr @ $1000 basket**(capital 占用 $144k)
2025

21-
**Day 3 增补(同日下午追加)**:把 binary D-vs-R thesis 也实测了,结论**同样死亡**。详见 §3.6。
22-
23-
**今天 Claude 的判决****两条 thesis 分支都已死。停 live loop,跟 WW 讨论新方向**
26+
**今天 Claude 的判决(修正后)****Taker 死,Maker 活在 hobby 规模。最严重的教训是 §3.9:我用 1 个角度的测试做了全局结论,错了。用户的"不信邪" 把这份报告从错误里拉了回来**
2427

2528
---
2629

@@ -210,17 +213,81 @@ scripts/verify_group_book.py --group-id 0xa8574c0caacc --basket-sizes "50,200,50
210213

211214
**Killer**:Republican 侧 bestAsk=0.91,**该价位深度只有 3.9 单位**\$3.5 fillable)。一笔 \$4 的 trade 就把 edge 干掉。
212215

213-
### 3.8 两条 thesis 分支的统一结论
216+
### 3.8 两条 TAKER thesis 分支的统一结论
214217

215-
| Thesis 分支 | 每事件最高利润 | Verdict |
218+
| Thesis 分支**TAKER 视角** | 每事件最高利润 | Verdict |
216219
|---|---:|---|
217220
| explicit_other (James Bond) | \$3.78 | **当前深度下死亡** |
218221
| binary D-vs-R (SC Gov 等 71 组) | \$0.52 | **当前深度下死亡** |
219222

220-
**两条分支都被同一个结构性事实杀死**:Polymarket 长尾市场 bestAsk 处深度只有 \$5-80。我们看到的 "edge" 都是真的存在,但它们的存在恰恰因为**没人来 \$5 的资金把它吃掉**
223+
**两条 TAKER 分支都被同一个结构性事实杀死**:Polymarket 长尾市场 bestAsk 处深度只有 \$5-80。我们看到的 "edge" 都是真的存在,但它们的存在恰恰因为**没人来 \$5 的资金把它吃掉**
221224

222225
也就是说,整个 thesis 的逻辑链是反的:**我们以为"长尾持续 edge = 别人没注意",实际上"长尾持续 edge = 别人不愿意为了 \$3 折腾这一套订单流"**。市场是有效率的,只是有效率的定价区间只对应"值得做"的回报。
223226

227+
### 3.9 我之前判错了 —— MAKER thesis 是活的(小规模)
228+
229+
写完 §3.8 之后用户当面质疑:"你的实验方法确认准确?真正的技术在哪里?"
230+
231+
**我之前只测了 TAKER 一条腿,就宣布 thesis 死了。这是过度推论**。Maker 视角(挂限价单等被填)是完全不同的策略,需要独立测试。
232+
233+
#### v1 (mid-touch) 模拟
234+
235+
`scripts/simulate_maker_basket.py`:3,153,188 个 mid-price tick 点跨 14 天 × 157 token。对每个 (group, day, markup) 三元组,检查每条腿的 mid 是否在那天某时刻 touch 到 `bestAsk - markup`。若 ALL legs filled,计算 basket cost + fee + edge。
236+
237+
结果(**乐观上限**):
238+
- 总日预期 $42.59,年化 **$15,546**
239+
- 49/72 个 dvr 组有正期望
240+
- Best: Kansas Governor D/R,$4.87/day @ $100 basket,spread 9%
241+
242+
**警告写在脚本里:mid-touch 不等于 trade-at-target。真实 fill 率会低很多**
243+
244+
#### v2 (trade tape) 修正
245+
246+
`scripts/simulate_maker_basket_v2.py`:从 `data-api.polymarket.com/trades` 拉了真实成交记录。48,030 raw trades → 1,602 个 SELL Yes 在窗口内(只有 **3.3%** 的成交是 SELL-Yes,即"会触发我们 maker bid 的那种")。
247+
248+
| Metric | v1 (mid-touch) | v2 (trade tape) |
249+
|---|---:|---:|
250+
| 总日 $ | $42.59 | **$2.51** |
251+
| 年化 | $15,546 | **$918** |
252+
| 正期望组 | 49/72 | **17/72** |
253+
| 平均 fill rate | 23-69% | **5-6%** |
254+
255+
**v1 过估 17x**
256+
257+
#### 现实折扣(v2 之上还要往下打)
258+
259+
| 折扣项 | 影响 |
260+
|---|---:|
261+
| Queue priority(我们不一定是第一) | ×0.6 |
262+
| D/R 相关动(联合 fill 比独立 fill 难) | ×0.7 |
263+
| Partial fill 风险(一腿成 一腿没成 → 持仓不对冲) | -10% |
264+
| Polygon gas / 多笔交易成本 | -20% |
265+
| **现实估计** | **$200-500/yr @ $100 basket** |
266+
267+
如果放大到 $1000 basket:~$2-5k/yr,但资金占用 $144k(72 组 × 2 腿 × $1000)。
268+
269+
#### 修正后的两层 verdict
270+
271+
| 策略 | 现实预期 \$/yr | 备注 |
272+
|---|---:|---|
273+
| Taker basket arb | \$0-200 | 被深度杀死,verified |
274+
| Maker basket arb(mid-sim 错估) | \$15k 假象 | 方法错 |
275+
| **Maker basket arb(trade tape)** | **\$200-500 @ \$100 / \$2-5k @ \$1000** | 方法学上可辩护 |
276+
277+
#### 我学到的最严肃的教训
278+
279+
我前两天说 "thesis 已死" 是**过度推论**。我只测了 1 个视角(TAKER 一次性吃光 bestAsk),用 2 个组的单次 snapshot 就下了"整条 thesis 死亡"的判决。**用户当面质疑后做的真测试(trade tape v2)证明 thesis 活着,只是商业规模上接近 hobby**
280+
281+
更广义的教训:**"测一个角度 → 推全局"** 是科研里最廉价的错误之一。Robust 测试需要至少:
282+
- 多种策略视角(taker / maker / hold-to-resolution)
283+
- 多个时刻的 snapshot(不只单点)
284+
- Realistic 模拟模型(trade tape > mid-touch)
285+
- 多种规模(depth 在不同 size 下表现不同)
286+
287+
Day 1 我没做 §3.9 的工作就敢宣布"alpha 不存在"。Day 3 在用户推动下补做,才得到诚实答案。
288+
289+
**用户的"我不信邪"是这份报告唯一存活的原因**
290+
224291
---
225292

226293
## 4. 今天搭好的基础设施
@@ -236,6 +303,8 @@ scripts/verify_group_book.py --group-id 0xa8574c0caacc --basket-sizes "50,200,50
236303
| `scripts/analyze_binary_refined.py` | sub-classify 2-member 组 + 分 sub-tier 检测事件 | 任何时候 |
237304
| `scripts/verify_james_bond_book.py` | 真实 CLOB `/book` 深度检查 + 滑点模拟(James Bond 专用) | 已退役 |
238305
| `scripts/verify_group_book.py` | 上面的泛化版 —— 接 `--group-id` arg 对任意 negRisk 组做深度检查 | 候选出现时单独跑 |
306+
| `scripts/simulate_maker_basket.py` | v1 maker 策略模拟(mid-touch 代理)—— **乐观偏差** | 第一次试,已知方法偏粗 |
307+
| `scripts/simulate_maker_basket_v2.py` | v2 maker 策略模拟(trade tape)—— **methodologically defensible** | 现在的 canonical maker 模拟 |
239308

240309
数据布局(`.gitignore` 已排除 `data/`):
241310
```

0 commit comments

Comments
 (0)