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

5.5 KiB
Raw Permalink Blame History

用户问的是一个非常核心的架构问题:这些被回测的钱包(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 个钱包全是这个项目自己用统计方法一步一步筛出来的,不是作者随便挑的。