Polymarket Trading - 自进化交易机器人
与用户一起设计交易策略,运行自动化模拟交易(dry-run),在表现不佳时自动改进参数,并在达到 edge 目标时征求许可切换到实盘交易。
支持任意市场类型:政治、体育、加密价格、科学、娱乐等。
关键规则
- 绝不要默认选择任何特定市场——始终询问用户想交易什么
- 绝不展示捏造的价格或信号——只展示真实脚本输出
- DRY RUN 默认始终开启——仅在用户明确确认后才切换到实盘
- 静默自动改进——调整参数并通知用户
- 未经用户明确确认,绝不创建策略或设置定时任务
多用户支持
每个用户拥有自己的 credentials/{USER_ID}.json:
{ "private_key": "0x...", "funder_address": "0x...", "dry_run": true }
调用脚本时设置 USER_ID 或 TELEGRAM_USER_ID 环境变量。
或设置 POLYMARKET_PRIVATE_KEY 环境变量。
首次用户流程
- 检查凭据
USER_ID=$TELEGRAM_USER_ID python3 {baseDir}/scripts/polymarket.py check
如果未配置,运行交互式设置:
USER_ID=$TELEGRAM_USER_ID python3 {baseDir}/scripts/polymarket.py setup
- 询问他们想交易什么
不要假设。询问:
- 什么市场类型?(政治、体育、加密、科技等)
- 是否有任何特定关键词要关注?
- 提出策略——等待确认
根据对话推导并提出具体数值。停止并等待用户确认后再执行任何操作。
- 创建策略(仅在确认后)
USER_ID=$TELEGRAM_USER_ID python3 {baseDir}/scripts/strategy_manager.py create --json '{ "name": "<strategy name>", "market_filter": { "keywords": ["<keywords>"], "min_liquidity_usdc": 1000, "max_days_to_expiry": 30, "min_days_to_expiry": 1 }, "signal": { "method": "orderbook_imbalance", "params": { "threshold": 0.15, "max_entry_price": 0.60 } }, "sizing": { "max_size_usdc": 5 }, "targets": { "min_sample_size": 30, "min_edge": 0.05 } }'
- 设置定时任务
SKILL_PATH={baseDir} STRATEGY_ID=<id from step 4>
信号扫描:每 15 分钟
(crontab -l 2>/dev/null; echo "*/15 * * * * USER_ID=$TELEGRAM_USER_ID python3 $SKILL_PATH/scripts/signal_cron.py $STRATEGY_ID >> $SKILL_PATH/state/$TELEGRAM_USER_ID.$STRATEGY_ID.log 2>&1") | crontab -
绩效评估:每天 09:00 UTC
(crontab -l 2>/dev/null; echo "0 9 * * * USER_ID=$TELEGRAM_USER_ID python3 $SKILL_PATH/scripts/review_cron.py $STRATEGY_ID >> $SKILL_PATH/state/$TELEGRAM_USER_ID.review.log 2>&1") | crontab -
策略生命周期
dry_run → improving → pending_live → live
进入实盘条件:edge = win_rate - avg_entry_price >= min_edge 且 total_pnl > 0
策略管理
USER_ID=$TELEGRAM_USER_ID python3 {baseDir}/scripts/strategy_manager.py status USER_ID=$TELEGRAM_USER_ID python3 {baseDir}/scripts/strategy_manager.py review <strategy_id> USER_ID=$TELEGRAM_USER_ID python3 {baseDir}/scripts/strategy_manager.py activate-live <strategy_id>
自动改进规则
条件 | 操作
edge < min_edge - 10% | 提高 threshold(信号更少但更强)
edge < min_edge - 3% | 降低 max_entry_price(更便宜的入场)
3+ 次调整仍失败 | 通知用户重新考虑
edge >= min_edge 且 pnl > 0 | 标记 pending_live,通知用户
信号方法
方法 | 最适合
orderbook_imbalance | 任何有活跃订单簿的流动市场
新方法可以添加到 scripts/signals.py。
故障排除
错误 | 解决方案
未安装 py-clob-client | pip3 install py-clob-client
未设置 USER_ID | 添加 USER_ID=xxx 前缀
未找到配置 | 运行 python3 {baseDir}/scripts/polymarket.py setup
API Error 401 | 重新运行 setup 以重新派生密钥
未找到市场 | 放宽关键词或降低 min_liquidity_usdc
文件结构
polymarket-trading/ ├── SKILL.md ├── scripts/ │ ├── strategy_manager.py # 生命周期:create/review/status/activate-live │ ├── signal_cron.py # 定时任务:扫描市场、运行信号、记录交易 │ ├── review_cron.py # 定时任务:每日评估 + 自动改进 │ ├── signals.py # 可插拔信号方法 │ ├── market_scanner.py # Gamma API 市场发现 │ └── polymarket.py # CLOB API 原语 ├── credentials/ │ └── {USER_ID}.json ├── strategies/ │ └── {USER_ID}/{strategy_id}.json └── state/ └── {USER_ID}.{strategy_id}.perf.json