125470b24a
Synced from github/main: aebcfa2d copybot: live paper feed [skip ci]
Our additions: serve_dashboard.py, bot_dashboard.html, mihomo-healthcheck.sh,
中文文档, 我们的钱包配置
7.2 KiB
7.2 KiB
1. 回测的是哪些钱包?
默认:live/backtest.json 里配置的 10 个钱包,比你 bot 跟踪的 5 个更多:
| 钱包 | 昵称 |
|---|---|
0x41558102a... |
LSB1 |
0xd96750bf8d... |
imwalkinghere |
0xe8ca3f758c... |
Kruto2027 |
0xbadaf31941... |
0xbadaf319 |
0xd7d36345c... |
gkmgkldfmg |
0x921433c935... |
AIcAIc |
0xa1d57d3292... |
1kto1m |
0x2d462b2912... |
Vahan88 |
0x215adbb63b... |
BikesAreTheBikes |
0x0c3e55cf50... |
EdwardIN |
参数:30 天窗口,$1000 起始资金,volume 类每注 4%。
也可以手动指定钱包(不走配置文件):
python portfolio.py --wallets 0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb,0xbadaf319415c17f28824a43ae0cd912b9d84d874 --days 30 --bank 1000 --out result.json
2. 回测结果保存在哪?
live/portfolio.json
结构大致是:
{
"bank": 1000,
"equity": 3456.78, // 最终权益
"realized": 2456.78, // 已结算盈亏
"deployed": 1000.00, // 当前持仓金额
"days": 30,
"wallets": [ { "name": "Kruto2027", "bets": 23, ... }, ... ]
}
同时会在 live/history/ 目录(如果你之前跑过 daily.sh)追加校准行。
3. 全流程链
跑 python portfolio.py 时内部发生的完整链路:
┌─────────────────────────────────────────────────────────────────────┐
│ 1. 读取配置 │
│ → live/backtest.json (10 个钱包 + 30 天窗口 + 4%/注) │
│ → live/copybot.paper.json (读取已 pin 的信念门槛) │
└─────────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ 2. 拉取每钱包的历史 bets (data-api.polymarket.com) │
│ 每个钱包 → GET /positions?trader=0x...&closed=True │
│ 每笔 bet 含: 市场、方向、入场价、金额、结算状态 │
│ 新钱包首次会慢(全量拉取),后续缓存到本地无需重拉 │
└─────────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ 3. 过滤"可信结算"的交易 │
│ - 跳过数据 API 无法判断结算时间的条目(高频做市商的"卖出即盈利" │
│ 伪装,这个项目专门用 trust.py 防御) │
│ - 只保留真正已结算(winner 已知)的 bets 参与盈亏计算 │
└─────────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ 4. 按时间轴"回放"每一笔交易 —— 钱包入场时 bot 也入场 │
│ 对每个钱包的每笔 BUY: │
│ - 检查信念门槛(Kruto2027 是 $80,其他各不相同) │
│ - 检查入场价上限 0.95 │
│ - 计算 stake = 当时权益 × 4% │
│ - 扣除 taker fee(fee = shares × 0.03 × price × (1-price)) │
│ - 记录到 paper ledger │
│ 对钱包卖出/结算: │
│ - bot 以同样比例平仓 │
│ - 计算 exit 收益 - 再扣一次 taker fee │
└─────────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ 5. 实时结算 │
│ 每次市场结算时(链上决定胜负),bot 以该时刻为准: │
│ - 标记 held position 为 WON/LOST │
│ - 释放成本 + 结算盈利 │
│ - 链上赎回免费(无 fee) │
└─────────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────────┐
│ 6. 输出 portfolio.json │
│ { bank, equity, realized, deployed, per-wallet stats, misseds } │
└─────────────────────────────────────────────────────────────────────┘
一句话总结
读
live/backtest.json的 10 个钱包 → 从 Polymarket 拉取他们过去 30 天的全部 bets → 用与真实 bot 完全相同的"4%/注 + 信念门槛 + taker fee + 价格保护"规则回放 → 结果写入live/portfolio.json。
所以,portfolio.py 的输出数字就是"如果过去 30 天你真的在用 copybot 跟踪这些钱包,你会赚到/亏掉多少钱"的最诚实估计。
现在可以直接跑:
cd live
python portfolio.py
首次跑需要几分钟拉数据,之后有缓存就快了。跑完后打开 portfolio.json 看 equity 字段。