darkeril

PolyScout 技术文档

架构、技术栈、API对接、数据库Schema、部署方案

PolyScout 技术文档

版本:v1.0 更新日期:2026-02-25 作者:小周(GPT-5.3-Codex) 审阅:露露(Claude Opus 4.6)


1. 目标与范围

PolyScout 是一个用于 Polymarket 机会扫描的轻量系统,目标是:

  1. 定时抓取市场数据
  2. 按规则筛选候选机会
  3. 记录全量扫描/信号/决策日志
  4. 在 Web 面板可视化给范总查看
  5. 通过 Discord 推送高价值信号

本阶段不做全自动下单,先做"扫描 + 决策支持 + 记录闭环"。


2. 系统架构(MVP)

Polymarket API → scanner → SQLite → signal-engine → SQLite(signals) → notifier + web-panel
组件职责
scanner定时抓取 Polymarket 市场数据(REST)
signal-engine按阈值与规则计算信号
notifierDiscord 推送(仅高置信度)
storageSQLite 持久化(后续可升 PostgreSQL)
web-panel查看市场、信号、日志、日报
decision-hook仅在需要时调用模型做一次决策建议(可开关)

3. 技术栈

技术
语言Python 3.11+
HTTPhttpx
定时APScheduler 或 cron
存储sqlite3 / SQLAlchemy
Web APIFastAPI
前端面板Next.js(可复用现有风格)
进程管理PM2
反代Caddy(80/443放通后)

4. Polymarket API 对接

4.1 拉取对象

  • 市场列表(含状态、结束时间、流动性、价格)
  • 单市场详情(必要时补拉)
  • 历史成交/价格(可选,Phase 1增强)

4.2 采样策略

  • 默认每 60 分钟全量扫描一次
  • 临近结算窗口(<24h)可额外 15 分钟增量扫描

4.3 失败重试

  • 单请求超时:8s
  • 重试:指数退避最多3次
  • 连续失败写入 run_logs 并告警 Discord

5. 信号规则(MVP)

候选进入条件(可配置):

  1. 市场状态可交易
  2. 距离结算在配置窗口内(例如 6h~72h)
  3. 流动性 >= 最小阈值
  4. 盘口价格偏差/风险收益比达到阈值
  5. 过滤异常市场(极端低流动性、异常波动)

输出字段:

字段说明
signal_score0-100 综合评分
expected_edge预期收益率
risk_levellow / med / high
reason_tags命中规则标签(JSON)

6. 数据库 Schema(SQLite)

6.1 markets

字段类型说明
idINTEGER PK自增
market_idTEXT UNIQUEPolymarket市场ID
titleTEXT市场标题
categoryTEXT分类
statusTEXT状态
close_timeDATETIME结算时间
liquidityREAL流动性
price_yesREALYES价格
price_noREALNO价格
volume_24hREAL24h交易量
fetched_atDATETIME抓取时间

6.2 scans

字段类型说明
idINTEGER PK自增
run_idTEXT运行批次ID
started_atDATETIME开始时间
finished_atDATETIME结束时间
total_marketsINTEGER总市场数
qualified_marketsINTEGER合格市场数
error_countINTEGER错误数
statusTEXT状态

6.3 signals

字段类型说明
idINTEGER PK自增
run_idTEXT关联扫描批次
market_idTEXT关联市场
signal_scoreREAL信号评分
expected_edgeREAL预期收益
risk_levelTEXT风险等级
reason_tagsTEXT规则标签(JSON)
decision_neededBOOLEAN是否需要决策
created_atDATETIME创建时间

6.4 decisions

字段类型说明
idINTEGER PK自增
signal_idINTEGER关联信号
decision_sourceTEXTrule/ai/manual
decisionTEXTwatch/enter/skip
noteTEXT备注
created_atDATETIME创建时间

6.5 run_logs

字段类型说明
idINTEGER PK自增
run_idTEXT关联批次
levelTEXTinfo/warn/error
messageTEXT日志内容
created_atDATETIME创建时间

6.6 trades(预留)

字段类型说明
idINTEGER PK自增
market_idTEXT关联市场
sideTEXTYES/NO
sizeREAL金额
entry_priceREAL入场价
exit_priceREAL出场价
pnlREAL盈亏
statusTEXT状态
created_atDATETIME创建时间
closed_atDATETIME关闭时间

7. Cron 调度

任务频率cron表达式说明
scan_hourly每小时0 * * * *全量扫描
daily_report每日10 0 * * *UTC 00:10 汇总日报
health_check每5分钟*/5 * * * *检查最近运行状态,异常告警

8. Web 面板设计(范总可视)

页面功能
Dashboard今日扫描次数、信号数、异常数、最新运行状态
Markets市场列表、筛选、临近结算标记
Signals信号分数排序、原因标签、风险等级
Decisionswatch/enter/skip 记录与备注
Logs运行日志、错误日志、重试状态
Reports日报/周报(命中率、候选转化、风险事件)

9. 部署方案(34.84.9.167)

目标主机34.84.9.167(GCP东京)
部署目录/home/fzq1228/polyscout
域名polyscout.darkerilclaw.com

PM2 进程规划

进程名说明
polyscout-apiFastAPI后端
polyscout-workerscanner + signal-engine
polyscout-webNext.js 面板

端口规划

服务端口
API4310
Web4311
Worker无对外端口

反向代理(80/443放通后)

  • polyscout.darkerilclaw.com → web:4311
  • polyscout.darkerilclaw.com/api → api:4310

10. 80/443未放通时临时访问方案

  1. SSH隧道ssh -L 4311:127.0.0.1:4311 user@34.84.9.167
  2. 或临时开放高位端口(如4311)给白名单IP(短期)
  3. 所有公网暴露前不放敏感配置,不放写操作接口

11. 安全与密钥管理

  • API Key 不入库、不写文档正文,统一环境变量
  • .env 权限最小化(600)
  • 生产日志脱敏(token、cookie、secret)
  • 发现密钥疑似泄露:立即轮换并作废旧密钥
  • Web 面板默认只读,交易动作需二次确认(后续)

12. 里程碑与验收(技术侧)

T+6h(MVP-Alpha)

  • ✅ 可拉取市场
  • ✅ 可落库
  • ✅ 可按规则产出信号
  • ✅ 控制台可见结果

T+24h(MVP-Beta)

  • ✅ Discord通知可用
  • ✅ 去重与失败重试可用
  • ✅ 日报自动生成

T+48h(MVP)

  • ✅ Web面板核心页可用
  • ✅ 日志链路完整
  • ✅ 配置化阈值可调
  • ✅ 可支撑2周观察期运行

13. 风险清单(技术)

风险应对
API限流加退避与缓存
数据不一致增加run_id快照与重跑机制
内容与交易节奏冲突解耦,先发观察日志
端口未放通先走隧道/内网查看,不阻塞开发

14. 下一步(立即执行)

  1. 初始化仓库结构(api/worker/web/scripts/docs)
  2. 建立 SQLite schema + migration 脚本
  3. 接通第一条市场抓取链路
  4. 输出首批信号样本到Discord测试频道
  5. 同步Web面板最小Dashboard

On this page