Files
gavindiaz 125470b24a sync: upstream + our customizations (dashboard, healthcheck, docs)
Synced from github/main: aebcfa2d copybot: live paper feed [skip ci]
Our additions: serve_dashboard.py, bot_dashboard.html, mihomo-healthcheck.sh,
中文文档, 我们的钱包配置
2026-07-21 07:35:48 +08:00

111 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
用户问的是一个非常核心的架构问题:这些被回测的钱包(backtest.json 里的 10 个钱包)是不是这个项目自己"发现"的?如果是,完整流程是怎样的?
这是一个端到端的选择链路问题。我需要梳理整个项目的核心流程链:
1. 从 Polymarket 上的全量交易者
2. enumerate.py 怎么发现候选池
3. trust.py 过滤可信数据
4. skill.py 的 5 门漏斗(z-score 等)
5. conviction_scan.py 信念交易扫描
6. validate_timing.py fee-aware 复制复现
7. sync_floors.py 同步信念门槛
8. backtest.json/copybot.paper.json 到 portfolio.py 回测
9. 再到 copybot.py 实时执行
让我快速看一下关键文件的入口,确保流程说的准确。
## 完整答案。是的,这 10 个钱包是这个项目自己**一步一步筛出来的**。不是手动选的。
---
## 全流程:从"Polymarket 上所有交易者"→"backtest.json 的 10 个钱包"
```
Polymarket 全部交易者(~百万级)
┌────────────────┴────────────────┐
│ │
enumerate.py(步骤 1 其他来源(gamma/polymarket-ui
最近 180 天已结算且流动性 > $20,000 的市场
每个市场取 Top 30 名义金额交易者(insider.market_traders
去重 → 候选池 ~3.5 万个钱包
附加信号:按"出现在多少个不同市场中"倒序(熟练玩家会在多个市场出现)
collect.py(步骤 2)— DuckDB 缓存
对候选池中每个钱包拉取 /positions 历史
含每笔 bet:市场 slug、方向、入场价、stake、结算状态
第一次:全量拉(几个小时),之后增量
trust.py(步骤 3)— "可信数据"过滤器
防御做市商钱包把"卖出盈利"伪装成"结算胜利"
只保留:有明确 res_t(结算时间戳) + resolved=True +
跨钱包共识 winner 的条目
(数据 API 的 cached 字段对高频做市商不可靠)
skill.py(步骤 4)— 5 门统计漏斗
对每个钱包计算 z-score: z = (实际胜利数 - Σ入场价) / σ
( Σ入场价 = 市场对胜率的估计,z=0 表示无优势 )
门限:
① n ≥ 15 已结算交易
② z > 0
③ Benjamini-Hochberg FDR @ 5%
④ 前半 vs 后半样本外持续性 (z_oos > 0)
⑤ 排除纯做市钱包(trade direction flips 太频繁)
→ 输出 watch_skilled.json ~100-200 个候选)
conviction_scan.py(步骤 5)— 信念画像
"信念 bet" = 该钱包自己下注金额 Top 20% 的那些 bet
(小 bet 可能是随机玩,大 bet 才是认真的)
p80 截止线只在 TRAIN 数据上计算
过滤:
• ≥ 12 个训练期信念 bet
• 中位信念 stake ≥ $50(排除 $2-$6 小钱包)
• 训练期 + 前瞻期 ROI 双正
→ 输出 conviction_wallets.json ~20-40 个)
validate_timing.py(步骤 6)— fee-aware 复制复现
用与实时 bot 完全相同的逻辑复现:
• 按钱包的 p80 信念 stake 作为门槛
• 每注 = 当前权益 × 4%,上限 ≤ 信号钱包自己下注
• taker fee = shares × rate × price × (1-price)
• 价格保护:比信号价高 0.05 以上才跳过
• 价格带 0.00-0.95
输出 watch_sharps.json ~10-20 个 fee 后仍盈利的钱包)
sync_floors.py(步骤 7)— 同步信念门槛到配置
watch_sharps.json 里每个钱包的 p80 信念金额
→ 写入 copybot.paper.json 的 floor 字段
→ 写入 backtest.jsonportfolio.py 用同样门槛)
portfolio.py(步骤 8)— 滚动回测
$1000 起步,过去 30 天
对每个钱包,按时间顺序"回放"每一笔符合条件的 bet
用完全相同的 sizing / fee / 价格保护逻辑
实时结算每个市场胜负
→ 输出 portfolio.json(最终权益)
人工筛选 + git commit → backtest.json10 个)
copybot.py / deploy_bot.sh(运行时)
用 copybot.paper.json / copybot.paper.json 配置
跟踪 Set E5 个 volume 类 + 5 个 conviction 类)
实时 paper 账本 wwf_state.json
真实资金 ledger_live.json
```
---
## 一句话总结
> **这个项目从 Polymarket 近期流动市场的 Top 30 交易者中挖出 ~3.5 万个候选 → 用 z-score + FDR + 样本外持续性过滤做市者和运气 → 只保留"自己大金额下注时才跟"的信念 bet → 扣除 fee 复现后仍盈利的才进入 backtest.json → portfolio.py 做滚动回测 → 最终挑 10 个进 copybot 实时跟踪。**
所以答案是:**是的,这 10 个钱包全是这个项目自己用统计方法一步一步筛出来的**,不是作者随便挑的。