# Alpha Seer **Repository Path**: SawyerJan14/alpha-seer ## Basic Information - **Project Name**: Alpha Seer - **Description**: Alpha Seer(Alpha 相面师):给 WorldQuant BRAIN 的 alpha 曲线"相面"——自动叠加平滑趋势线,用真实数据给 PnL 和 Sharpe 打分,最终五档定级(夯爆了/人上人/顶级/NPC/拉完了),列表页直接挂标签,帮你一眼筛出能打的曲线。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2026-08-12 - **Last Updated**: 2026-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Alpha Seer(Alpha 相面师)— 浏览器插件(Chrome / Edge / Firefox) > 当前版本:**v1.9.25** 在 WorldQuant BRAIN 平台(`platform.worldquantbrain.com`)的 alpha 详情页 / 列表页(含右侧半版面板)图表上,自动叠加**可配置的平滑趋势线**,并按曲线类型给出**量化评分面板**(续航力评分 / Sharpe 曲线判断 / 换手率不显示)。 --- ## 更新日志 完整版本记录见 **[CHANGELOG.md](CHANGELOG.md)**(按时间倒序)。 ## 核心亮点 | 亮点 | 说明 | |---|---| | 直连 BRAIN 原生 API | 列表定档 / FAIL 判定直接读 `is`(含 `failedNumRA` / `failedNumPPA`)、`riskNeutralized`、`recordsets` 原生接口(v4.0),不靠解析 DOM 列、不靠像素猜值,平台改版也不易失效 | | 多重门槛一键筛 FAIL | 列表页自动判定三重门槛:FailedRA/PPA + riskNeutralized(Sharpe>1 / Fitness>0.7 / Margin>5bp)+ operatorCount<8,任一不达标即标红 FAIL;**Region Agnostic** 自动走子区域聚合判定(4 个 child 的 failedRA/PPA 之和) | | 悬停秒懂原因与明细 | Element UI 风格深色 tooltip:FAIL 标签 hover 逐条列出每项门槛 ✓/✗ 与实值;定档标签 hover 展示挂钩金字塔 + 实时点塔数 + PnL / Sharpe 四维得分明细与各自等级;**RA 标签 hover 出分区卡片**(每区 Sharpe/Fit/TO/Ret/MDD + 子区 RA/PPA 失败数) | | 量纲无关的量化评分 | 续航力评分(K-Ratio / 轨迹 / Hurst / 健康)+ Sharpe 统计显著性(Lo 2002 框架),纯数学量纲无关,像素坐标与真实数值结论一致 | | 零凭证、纯本地 | 复用浏览器会话,不读取 / 不存储 / 不上传任何 cookie;评分与门槛判定全部在本地完成 | | 列表页批量定档 | unsubmitted / submitted 列表自动为每个 alpha 注入定档标签,扫一眼就能定位值得点进去的候选 | --- ## 功能总览 | 功能 | 说明 | |---|---| | 平滑趋势线 | 中心化滚动平均,默认 252 交易日,叠加在主曲线上 | | 滑线加载动画 | 趋势线从左向右绘制(Web Animations API) | | 曲线类型自动识别 | 读取图表右上角下拉框(PnL / Sharpe / Turnover),按类型分流 | | PnL 模式评分 | 四维"续航力评分"(K-Ratio / 轨迹 / Hurst / 健康),0~100 分 + 等级 | | Sharpe 模式评分 | 基于 Lo (2002) 统计理论的四维判断(显著性 / 趋势 / 动能 / 自相关),**API 真实数据** | | **最终定档** | Sharpe 模式下综合 PnL + Sharpe 得分,五档定级(拉完了 / NPC / 人上人 / 顶级 / 夯爆了) | | **列表定档标签** | alpha 列表页(unsubmitted / submitted)Competition 列自动注入定档标签(悬停展示挂钩金字塔 + 实时点塔数 + PnL / Sharpe 四维得分明细) | | **列表 FAIL 智能门槛** | 多重门槛自动判定(FailedRA/PPA、riskNeutralized、operatorCount、**IS returns/drawdown 比率 > 1.5(默认开启)**),任一不过标红 FAIL,悬停看逐项失败原因;阈值可在设置面板「指标门槛」自定义(risk 三项 / operatorCount / IS sharpe·fitness·margin·turnover 下限 / returns·drawdown 比率开关与阈值),并支持 **risk 豁免开关**(无 riskNeutralized 数据的 alpha 默认豁免,可关闭改为 FAIL);**Super Alpha 自动识别**(`type=SUPER`,无操作符数/riskNeutralized):金色 `👑 SUPER` 标签 + hover 专属美化卡片(Sharpe / Fitness / Turnover / Margin 指标网格 + 关键检查项摘要),仅按 RA/PPA 判定;**Region Agnostic 自动识别**(`type=RA_PARENT`,region=ALL):绿色 `🌍 RA ✓N区` 标签 + hover 分区卡片(子区域 USA/EUR/ASI/GLB 各自指标与 RA/PPA 失败数),判定 = 子区域 failedRA/PPA 聚合:全部子区域干净 = 全过;**≥2 个子区域干净 = 蓝色 `⚑ 可提交 N/M区` 等级标签**(符合竞赛提交条件);否则 FAIL | | **列表加载态** | 切换 alpha 重新拉数据时,标签先显示 Element Loading 风格旋转圆环 + "加载中",就绪后再变 FAIL / 等级 | | **Alpha 分析(弹窗)** | 设置面板最下方粘贴任意 Alpha ID(或 `/alpha/` 链接),直接拉取该 alpha 的 PnL、Sharpe 两条真实曲线各成一个面板(迷你曲线 + 四维评分 + 趋势),底部给综合定档 | | **回测额度悬浮球** | 全站左上角悬浮球,实时显示当日已用回测额度(每日 5000,美东 0 点重置),可拖动;点击展开今日剩余 / 本周已回测 / 本周日均;看板标题「回测额度」右侧显示当前账号的顾问 ID(`ID:xxx`,取自 `/users/self`,每会话缓存一次)。看板「今日已用」标签右侧带**「快/稳/慢」配速徽章**:按美东时间把全天切成 5 分钟一格(288 格,均匀基准 ≈17.4 个/格),实际速度 = 今日已用 ÷ 已过格数,超基准 10% 显「快」(红)、低 10% 显「慢」(蓝灰)、居中显「稳」(绿);hover 徽章弹提示解释含义与照此速度的展望(不足 15 分钟不出徽章) | | **批量扫描结果分组** | 筛出的 alpha 按 **Region Agnostic / Super Alpha / 普通 Alpha** 分组展示(RA 带绿色徽章、SUPER 带金色徽章),组内按 **region 字典序降序 + delay 数值降序** 排列;支持按 **type(含 RA)/ region / delay / 等级 / 金字塔 / Cluster Alpha 筛选**(结果上方两行下拉条,新扫描自动重置);精确评级遇 429 自动退避重试(1s/3s/8s、2 路并发)不再整轮放弃,失败条目显示原因并支持**行内 ↻ 单条重试 / 一键重试全部**;加入清单后弹 toast 轻提示 | | **扫描结果金字塔 / CA 筛选与标签** | 金字塔筛选两种口径:**含此塔**(命中该塔,含并列另一座)与 **仅此塔**(恰好只命中这一座);命中 **3 座以上**(官方规则:点不亮任何金字塔)两种口径一律排除,行内显示红字 `⚠3塔`;CA 筛选三态(全部 / 仅 CA / 非 CA)。结果行在 region / delay 后显示塔名缩写(`SI|FUND`,hover 给全名 + 官方系数),CA 条目在 ID 右侧挂绿色 `CA` 徽章——判据、缩写与列表页完全同源(`shared-gates.js` 单一口径)。**同样的两类也能作为扫描条件**:「自定义筛选条件」区新增 `Pyramid / CA` 字段组(`pyramid(含此塔)` / `pyramid(仅此塔)` / `Cluster Alpha(CA)`,运算符 `包含 / ≠`),塔的取值是**点开勾选的下拉**——含此塔为复选(一次可勾多座,条件 = 任一命中)、仅此塔为单选,选项列出平台全部 17 个 category 的「缩写 + 全名」;CA 写 `yes` / `no`。条件在扫描前就把不想要的条目挡掉 | | **推荐点塔 + 金字塔系数** | 悬浮球看板底部展示未满级的金字塔与点塔进度条(**含 0/3 尚未起步的塔**,满级及以上不列),**按官方系数降序**(收益最高的优先点),最多 **17 个(默认 17 = 平台全量 category 一次列全**,可在设置面板调整 1~17);标题升级为与「回测额度」同款大标题,右侧两个各占一半宽度的原生下拉分别按 **region 与 delay** 筛选(首项均为「全部」= 不筛选,**region 默认 EUR、delay 默认 D1**,点选即生效,选择持久化;**delay 选项随 region 变化** —— 只有 D1 的 region 就只列 D1,delay 偏好跨 region 保留;未筛选 = 全局前 N、筛选后 = 该范围前 N);每项实时标注官方系数徽章(如 `EUR/D1/ANALYST ×1.3`),系数来自 `pyramid-multipliers` 接口,随官网随时更新;**点击小标题一键复制挖塔提示词**(如点击 `KOR/D1/OTHER×1.7` 自动复制 `/goal 请你挖掘:KOR/D1/OTHER×1.7 这一点塔目标的 alpha…` 全文到剪贴板,toast 反馈) | | **昨日进账卡片** | 悬浮球看板新增每日收益展示:昨日进账大字 + Regular / Super 分项徽章(Super 金色高亮);近 19 天**堆叠柱状图**(下段绿=Regular、上段金=Super,hover 弹出分色金额 tooltip,溢出时自动翻转方向避免裁切);底部季度累计与日期区间;数据来自 `base-payment` 接口(USD),随悬浮球轮询/手动刷新同步更新 | | **今日已交 alpha** | 悬浮球看板展示美东当日提交数进度条:Regular 4 绿格 / Super 1 金格(顾问每日限额),数据来自 `activities/submissions` 接口(v2.0);Regular 满 4 时标题右侧显示「今日 alpha 任务完毕 🎉」,超额时悬停查看实际计数;随轮询/手动刷新同步更新 | | **账号数据预览** | 悬浮球看板「昨日进账」上方,展示顾问榜个人行的账号级数据(字段名缩写 + 悬停看全名):主区四等分大数值显示 `DF` 数据字段数、`WF` 权重因子、`VF` 价值因子、`Osm` 每日 Osmosis 排名;分割线下方次区以两列小字显示 `Regular alpha` / `Super alpha` 的 `提交` / `Prod C` / `Self C`。数据来自 `consultant/boards/leader` 接口(`user~` 过滤,无需 board 参数,v2.0),小数位跟随接口元数据的 rounding,ID 取当前登录账号 | | **比赛实时预览** | 悬浮球看板「今日已交 alpha」下方,逐个比赛一张卡片:比赛名 + 绿色「Leaderboard」按钮(新标签页打开 `competition/spc` 或 `competition/power-pool`)、两个大数(当前排名 / 分值)、徽章 + 明细。SPC 卡片显示名次 + `SCORE` + 「TOP50 ✓」徽章(每月前 50 名有 $200 津贴,榜外提示「距 TOP50 差 N 名」)+ `Prompt N` / `有效 N 天`;Power Pool 卡片显示名次 + `AC COMBO IR` + `N Tagged Power Pool Alpha(s)` + `Merged PNL` / `BC COMBO IR`。榜单 ID 与名称取自平台 `OPTIONS .../boards/{spc,power-pool}` 元数据(不写死、自动换月),自己那行用 `user~` 过滤,ID 取当前登录账号换号即变 | | **比赛每日记录(本地历史曲线页)** | 悬浮球每张比赛卡片(SPC / Power Pool / 全球比赛)带绿色「📈 历史」chip,点开对应本地页面(`history.html` / `ppa.html` / `glob.html`,三页共用一套脚本与视觉),入口带 `?board=` 参数直达该场次。每个交易日自动记录一条(同一场次当天覆盖、值未变不写、周末记到最近交易日);按场次分桶(换期 / 换场不混线),**横轴按赛事分两口径**:SPC 走整月轴(1 日 → 月末,刻度 1 / 8 / 15 / 22 / 月末),PPA / 全球比赛走**实际跨度轴**(首条 → 末条铺满,两周与跨月赛期不再被压缩);各线独立缩放(量纲差几个数量级),**名次类曲线取反**(线向上 = 排名上升),曲线用单调三次插值的平滑路径(穿过每个数据点且不过冲),hover 出当日真实数值浮层;右上角常驻场次筛选 + 导出 / 导入(一个 JSON 打包三赛事记录,可跨浏览器迁移) | | **SPC 批量权重(提交列表页)** | 官方 SPC 提交页(`/competition/spc/submissions`)表格「Weight」表头右侧注入「批量权重」小按钮,点开面板按状态批量改权重:勾要覆盖的状态(失败 / 警告 / 正常 / 失败·校验,取值与中文名都取自平台 `OPTIONS` 元数据)、可选「仅当前有权重(weight > 0)」,新权重按平台口径校验(0~1、最多两位小数)。**范围是全簿**(分页拉全量,不只当前 10 条一页),执行前**必须先预览**(列出将改条数与各状态明细、逐项跳过原因),执行中显示进度 / 预计剩余 / 可停止,写完**回读验证**是否真的生效。每次批量前把原值落进回滚点(`chrome.storage.local`),面板底部可「撤销」——只回滚当前值仍等于本次写入值的条目,期间被手动改过的不碰 | | **登录后自动跳转** | 登录成功后平台默认路由到 `/simulate*`,插件在 `document_start` 拦截并跳转到 `/alphas/unsubmitted`(含 SPA pushState 轮询检测);每次会话只跳一次,刷新不重复 | | **人民币换算** | `/profile/performance` 页 Payment 金额(`US$203.56`)右侧注入实时人民币换算(`≈ ¥1,366.30`,亮绿 `#47B74A` 加粗、字号与金额同号);汇率五源兜底实时抓取(jsDelivr → pages.dev → er-api → exchangerate-api → frankfurter,单源 6s 超时),缓存 30 分钟,hover 看汇率/来源/更新时间,点击换算值强制刷新;全源不可达时沿用上次汇率并置灰 | | **批量改名复制 ID** | 批量改名面板「已选」行新增「复制 ID」按钮,一键将选中 alpha 的 ID 以逗号分隔复制到剪贴板(toast 反馈) | | **扫描结果导出 CSV** | 扫描完成后底部「导出 CSV」按钮,文件名 `alpha_scan_YYYY-MM-DD_HH-mm-ss.csv`(美东时间),包含 ID / Name / Type / Region / Delay / **Pyramids** / **CA** / Sharpe / Fitness / Turnover / Margin / Returns / OpCount / FailedRA / FailedPPA 列;**导出范围跟随结果筛选条**(与全选 / 加入同口径),未筛选时导出全部 | | **金字塔系数涨跌箭头** | 每日拉取金字塔系数存入浏览器本地存储,与美东昨日对比:红色 ↑ 表示上升、绿色 ↓ 表示下降(方向与股票一致);自动清理 2 天前旧数据 | | **金字塔 ≥3 警示** | alpha 已关联 ≥3 个金字塔时,该金字塔显示禁用态(半透明 + 禁止点击),tooltip 提示无法再点塔 | | **一键选中 FAIL alpha** | 扫描面板「选中 FAIL」按钮,一键勾选所有评级失败或违反门槛的 alpha | | **扫描筛选 name = / ≠** | 自定义筛选「name」字段支持 = / ≠ / 包含三个运算符:= 与 ≠ 为全等比较(区分大小写,与批量改名面板的「按名称筛选」同口径),如 `name ≠ anonymous` 扫描时直接剔除匿名 alpha | | **列表页金字塔 inline 信息** | 定档标签旁灰色小字显示金字塔系数与实时点塔数(如 `◆ ×1.3 (2/3)`),无需 hover | | **列表页 Cluster Alpha 图标** | 详情 `classifications` 含 `CLUSTER:CLUSTER` 的 alpha,ID 列右侧挂一个主题绿(`#67c23a`)的 CA 图标(悬停显示「Cluster Alpha(CA)」);**alpha 被标 GREEN 时图标自动换深紫 `#7B2D8E`**(平台 GREEN 就是 `#67C23A`,同色相撞会看不见;紫对浅绿底约 7.2:1);数据取自每行本来就要拉的详情,**零额外请求**,与等级/FAIL 标签互不影响 | | **列表页「选非CA」按钮** | ID 表头的小按钮,一键勾选当前页所有非 Cluster Alpha 的 alpha(复用官方复选框;CA 行与详情未判定完的行都会跳过,toast 报数) | | **面板「按名称筛选选中」** | 批量改名面板「已选」行下方的筛选行:`name` + 运算符下拉(**不等于 / 等于**)+ 名称输入框 + 「执行」。**名称值与等于/不等于都由用户填**(默认 `≠ anonymous`,打开面板直接点「执行」就是原来「选非anonymous」的行为)。结果态**整体替换**勾选:先用平台全选,再点「执行」即得「条件命中的全选中、其余全取消」;全等比较、区分大小写;空名称与「一行没读到」都会拦下并提示 | | **扫描双进度条(分页 / 评级)** | 批量扫描面板状态行下左右两条独立进度条:左「分页扫描 已获取 x / y」、右「精确评级 x / y」,并行时同时可见、各自推进,不再混在同一行文案里互相覆盖 | | **评级限流韧性** | 精确评级撞 429 不再逐条判失败:写入**共享冷却**(跨 worker / 跨重试轮同一时间点),快退避用尽后等冷却再试最后一次;冷却期内「重试全部未评级」按秒倒计时等待后再发请求;失败项标注「限流」并与「数据未就绪」分开文案 | | **Self 自相关(本地预检)** | 批量改名面板相关性区块新增 Tab:勾选候选 alpha 后一键对比**已提交(OS)池**的自相关(同 region 分桶**仅 Regular Alpha**——排除纯 Power Pool 豁免成员、4 年窗口、Pearson 取 signed max,镜像平台口径且不消耗平台相关性接口),按可调门槛(默认 0.5,比平台提交线 0.7 更严)分「高风险 / 安全」两组并**算完自动选中高风险组**;PnL 三级持久缓存(7 天 TTL + 断点续传),两 Tab 结果互不串清 | | 评分依据查看 | 点击评分表格任意维度行,展开公式、中间量、计算过程与结论 | | Turnover 模式 | 不显示评分面板 | | 设置面板 | 平滑窗口、颜色(取色器 + HEX 粘贴)、粗细、线型、评分开关,`chrome.storage.sync` 持久化 | 评分等级(所有模式统一): | 分数 | 等级 | 颜色 | |---|---|---| | 75~100 | STRONG BUY | `#B77AC8` | | 55~74 | BUY | `#5F8FC0` | | 35~54 | HOLD | `#000000` | | 0~34 | AVOID | `#CA494B` | --- ## 安装 ### Chrome / Edge 1. 打开 `chrome://extensions`(Edge 为 `edge://extensions`),开启左下角**开发人员模式** 2. 点击**加载解压缩的扩展**,选择本目录(`alpha-seer/`) 3. 登录 `platform.worldquantbrain.com`(插件复用浏览器会话,无需任何手动凭证) 4. 打开任意 alpha 详情页,或 `/alphas/unsubmitted` / `/alphas/submitted` 列表页点击 alpha > 提示:修改插件文件后,需在扩展管理页面点**刷新**按钮重新加载。 ### Firefox 1. 打开 `about:debugging#/runtime/this-firefox` 2. 点击**临时载入附加组件**,选择本目录中的 `manifest.json` 3. 登录 `platform.worldquantbrain.com`(插件复用浏览器会话,无需任何手动凭证) 4. 打开任意 alpha 详情页即可使用 > **注意:** Firefox 的临时载入在浏览器关闭后会失效,需重新载入。如需持久安装,可通过 `about:config` 设置 `xpinstall.signatures.required = false` 后打包为 `.xpi` 安装。 --- ## 使用说明(设置面板) | 设置 | 默认 | 说明 | |---|---|---| | 平滑窗口 | 252 天 | 30~500 可调,滚动平均窗口(约一年交易日) | | 线条颜色 | `#e8772e` | 取色器 或 粘贴 HEX(支持 `#e8772e` / `e8772e` / `#f80`) | | 线条粗细 | 2.6 | 0.5~8 | | 线条样式 | 实线 | 实线 / 虚线 / 点线 / 点划线 | | 续航力评分 | 开 | 显示评分表格(按曲线类型分流) | | 调试日志 | 关 | 把 API 请求失败详情输出到浏览器控制台(F12),排查问题用 | | 自动抓取数据 | 开 | 关闭时暂停自动请求 BRAIN 数据(限流时暂时不请求),已缓存数据仍显示;重新开启后自动恢复抓取 | | 指标门槛 | 见下 | 「指标门槛设置」区块:列表页 FAIL 判定与悬浮球扫描共用同一套阈值,改动实时生效 | **指标门槛默认值**(0 = 不启用该项): | 指标 | 默认 | 判定 | |---|---|---| | risk sharpe | 1 | riskNeutralized Sharpe 严格大于该值 | | risk fitness | 0.7 | riskNeutralized Fitness 严格大于该值 | | risk margin(bp) | 5 | riskNeutralized Margin(bp)严格大于该值 | | operatorCount | 8 | 表达式操作符数严格小于该值 | | 去重算子数 | 6 | 通过 RA/PPA 且表达式可算出去重算子数时**改用该值**判定(严格小于),此时 operatorCount 不参与 | | IS sharpe / fitness / margin(bp) | 0 | alpha 本体下限(≥),填 >0 启用 | | IS turnover | 0 | alpha 本体换手率上限(≤,小数如 0.7 = 70%),填 >0 启用 | | returns / drawdown 比率 | **1.5** | alpha 的 IS 年化收益率与最大回撤幅度之比(`returns / |drawdown|`)须大于该阈值,**默认开启**、默认 1.5;下限 1(低于则回落 1.5)。任一数据缺失时豁免该项;`drawdown=0` 视为比率 ∞(只要 `returns>0` 即过);SUPER / RA 父级不参与 | | risk 豁免 | 开 | 无 riskNeutralized 数据的 alpha 豁免 risk 三项;关闭后此类直接 FAIL | | 操作符过滤 | 开 | 统计表达式中 `+`、`*`、`add`、`multiply` 数量,超过阈值即判 FAIL | | + 数量上限 | 0 | 表达式中 `+` 操作符最大数量 | | * 数量上限 | 0 | 表达式中 `*` 操作符最大数量 | | add 数量上限 | 0 | 表达式中 `add` 函数最大数量 | | multiply 数量上限 | 0 | 表达式中 `multiply` 函数最大数量 | | 显示悬浮球 | 开 | 回测额度悬浮球开关,关闭后全站隐藏 | | 每日额度上限 | 5000 | 悬浮球的额度基准,默认 5000,可按实际账号额度调整 | | 人民币换算 | 开 | `/profile/performance` 页 Payment 金额右侧实时显示人民币换算(`fx-rate.js`);关闭后立即清掉已注入的换算值,汇率仍缓存在本地 | | Alpha 分析 | — | 最下方粘贴 Alpha ID → 获取 PnL / Sharpe 2 面板 + 分析(无需打开对应页面,复用浏览器会话) | --- ## 算法与参考 ### 1. 平滑趋势线(中心化滚动平均) 对主曲线每个点取**前后各 N/2 个点**的均值(N = 平滑窗口),两端窗口自适应收缩。相比"过去 N 天平均",中心化窗口无滞后。 - 参考:[Moving average — Wikipedia](https://en.wikipedia.org/wiki/Moving_average) ### 2. 滑线动画 `stroke-dasharray` 设为曲线全长 + Web Animations API 将 `stroke-dashoffset` 从全长动画到 0。动画结束后应用用户线型。 - 参考:[Web Animations API — MDN](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API)、[stroke-dashoffset — MDN](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset) ### 3. PnL 模式:续航力评分(四维加权) 思路来自 WorldQuant BRAIN 论坛高赞工具帖「"看一眼线",那是在看啥,Alpha"续航力评分"工具」(作者 VC17729,25 票): - 链接:https://support.worldquantbrain.com/hc/en-us/community/posts/39223135297431 核心观点:**IS 回测的累计收益再高也只是模拟数字,决定 OS 表现的是 IS 末段的状态**——趋势还在吗?最后一个月是赚是亏?"最后半年走平 / 最后 3 个月亏钱 = 策略已死"。 | 维度 | 权重 | 算法 | 参考文献 | |---|---|---|---| | D1 K-Ratio | 30% | 近 126 点回归斜率 / 标准误 × √(252/n),≥2 满分 | Kestner (2013), *"(Re)Introducing the K-Ratio"*, [SSRN #2230949](https://ssrn.com/abstract=2230949) | | D2 趋势轨迹 | 25% | 两年分 4 段:后两段斜率一致性 + 尾段强度 + R² | Bai & Perron (1998), *Econometrica* 66(1)(结构断裂分段) | | D3 Hurst 持续性 | 20% | 日度收益 R/S 分析,H≥0.7 强持续 | Hurst (1951);Mandelbrot (1968), *SIAM Review* 10(4) | | D4 近期健康度 | 25% | 近 3 月日均 vs 两年日均 + 末月 Sharpe + 滚动 Sharpe 斜率(5%/年自然衰减基准) + 过拟合敏感性(极端日/子集依赖) | Falck, Rej & Thesmar (2022), *Quantitative Finance* 22(11)(过拟合预警与 5ppt/年衰减,[全文](research/When_do_systematic_strategies_decay.md));McLean & Pontiff (2016), *J. Finance* 71(1)(发表后衰减总量) | ### 4. Sharpe 模式:统计显著性判断(Lo 2002 框架) Sharpe 曲线为**累积 Sharpe**(数据源:`GET https://api.worldquantbrain.com/alphas/{id}/recordsets/sharpe`,插件直接以浏览器会话获取**真实全量数据**评分,5 分钟缓存;像素坐标仅用于趋势线绘制)。判断依据融合了 William Sharpe 本人对夏普率统计性质的经典文献(中文解读见石川知乎回答)与论坛实战经验: - 石川(知乎)夏普率统计性质解读:https://www.zhihu.com/question/264210987/answer/421333614 - 论坛「火眼金睛:我提交了怎样的 alpha」(13 票):Sharpe 走势**平稳或向上攀升**才提交,明显向下会"拉崩 combine":https://support.worldquantbrain.com/hc/zh-cn/community/posts/37319749642775 - 论坛「OS comb 从稳健提升到雪崩」(18 票):警惕"历史 Sharpe 好看但最近转负"的 alpha:https://support.worldquantbrain.com/hc/zh-cn/community/posts/41476771798039 | 维度 | 权重 | 算法 | 依据 | |---|---|---|---| | S1 显著性 | 30% | 近 504 天日度增量 t 检验 `t_all` | Lo (2002):样本 Sharpe 的标准误 SE≈√((1+SR²/2)/T),**短样本 + 高 Sharpe 不可信** | | S2 趋势 | 30% | 近 126 天增量 t 检验 `t126`(走平=中分,显著回落扣分) | 论坛:"走势平稳/向上才提交";累积 Sharpe 高位收敛属正常 | | S3 动能 | 25% | 近 21 天增量 t 检验 `t21`(近月显著转负 → 低分) | 论坛:"最近转负但历史好看最危险" | | S4 自相关 | 10% | 日度增量一阶自相关 ρ₁,正相关扣分 | Lo (2002) η(q):收益正自相关时年化 Sharpe 被**高估**,曲线"虚高" | | 全程惩罚 | 乘数 | `t_all<0` 时总分 ×(1+t_all/8),下限 0.3 | 全程显著下跌的曲线一票否决 | ### 5. 核心参考文献(Sharpe 理论) - Sharpe, W. F. (1966). *Mutual Fund Performance.* Journal of Business, 39(1), 119–138. - Sharpe, W. F. (1994). *The Sharpe Ratio.* Journal of Portfolio Management, 21(1), 49–58. - Lo, A. W. (2002). *The Statistics of Sharpe Ratios.* Financial Analysts Journal, 58(4), 36–52. - Lin, M.-C. & Chou, P.-H. (2003). *The Pitfall of Using Sharpe Ratio.* Finance Letters, 1, 84–89. ### 5a. 核心参考文献(策略衰减) - Falck, A., Rej, A. & Thesmar, D. (2022). *When do systematic strategies decay?* Quantitative Finance, 22(11), 1955–1969. doi:10.1080/14697688.2022.2098810([全文](research/When_do_systematic_strategies_decay.md):发表后 Sharpe 约衰减一半;发表年份、对离群值/子集的敏感性、公式复杂度是衰减的最强样本内预测因子) - McLean, R.D. & Pontiff, J. (2016). *Does Academic Research Destroy Stock Return Predictability?* Journal of Finance, 71(1), 5–32.(发表后收益可预测性衰减约 58%,套利与过拟合两假说的原始出处) - Broderick, T., Giordano, R. & Meager, R. (2021). *An Automatic Finite-Sample Robustness Metric.* arXiv:2011.14999.(剔除最影响 top 0.1% 观测后性能损失的度量,D4 过拟合敏感性采纳其思想) ### 5b. 最终定档(综合 PnL 与 Sharpe) Sharpe 模式下右上角显示"最终定档"面板:`综合 = PnL×50% + Sharpe×50%`,五档定级: | 综合分 | 定档 | 颜色 | |---|---|---| | ≥ 80 | 夯爆了 | 紫 `#B77AC8` | | 65~79 | 顶级 | 紫 `#9B59B6` | | 50~64 | 人上人 | 蓝 `#2563EB` | | 30~49 | NPC | 绿 `#16A34A` | | < 30 | 拉完了 | 红 `#CA494B` | PnL 得分使用 `recordsets/pnl`(或 returns)真实数据计算(与 PnL 模式主面板同一口径),Sharpe 得分同 Sharpe 模式评分。 ### 5c. 列表页智能门槛(FAIL 判定) 列表页每个 alpha 的标签,除了"最终定档",还有一道**提交资格门槛**——直接读 BRAIN 原生 `is` / `regular` 字段判定,任一不满足即标红 FAIL(悬停可看逐项原因): | 门槛 | 条件 | 数据来源 | |---|---|---| | FailedRA / FailedPPA | 均为 0 | `is.failedNumRA` / `is.failedNumPPA` 或 `ra.failed_ra_count` / `failed_ppa_count`(平台原生检查失败数;缺省时按白名单从 `is.checks` 本地统计,软提示类不计入) | | riskNeutralized Sharpe | > 1 | `is.riskNeutralized.sharpe`(剥离风险因子暴露后的真实 alpha 能力) | | riskNeutralized Fitness | > 0.7 | `is.riskNeutralized.fitness` | | riskNeutralized Margin | > 5bp | `is.riskNeutralized.margin`(5bp = 0.0005) | | operatorCount | < 8 | `regular.operatorCount`(表达式操作符数,过滤过度复杂的表达式) | | 操作符过滤 | 开 | 统计表达式中 `+`、`*`、`add`、`multiply` 数量,超过阈值即判 FAIL(**默认各项上限均为 0 = 出现即 FAIL**;表达式未取到则豁免,hover 卡片会写明豁免原因) | > **特殊豁免**:部分 alpha(如某些数据源)没有 `riskNeutralized` 字段。默认自动豁免 risk 三项门槛(仅按 FailedRA/PPA 与 operatorCount 判定);可在设置面板关闭「risk 豁免」,此类 alpha 将直接判 FAIL。 数据来源:按需 `GET /alphas/{id}`(v4.0 + referrer,`cache: "no-store"`)拉取详情——不抓 DOM、不拉全量列表(全量深分页会触发 429/400 限流),只拉当前可见行,请求量从数百页降到十几条。 > **CA(Cluster Alpha)标记**:详情响应顶层 `classifications` 里含 `CLUSTER:CLUSTER` 时,在 ID 列右侧挂一个主题绿(`#67c23a`)的 CA 图标(悬停看名称)。同一份详情响应里就能拿到,**不额外发请求**;列表接口 `/users/self/alphas` 的返回里没有 `classifications`,所以只有拉过详情的行才有标记。图标是纯图形(不含文本节点)——ID 列的 `textContent` 必须保持"只有 alpha id",否则行 id 识别会被污染、整页标签静默失效(`test/table-refresh.js` T17 锁住这条)。 **判定结果的存活期**(v1.8.11 起:**取一次,页面内永不重拉**): 口径一句话:**每个 alpha 的详情只取一次,取到后就用到页面关闭**。标签跟着 alpha id 走,不跟 DOM 行位置走。 | 触发 | 行为 | |---|---| | 行内指标被平台改写(同一 id、内容变了) | **不重拉**。只从内存重渲染标签(判定沿用首次成功拉取的结果) | | 列位置漂移 / 表头重排 / React 抹掉标签节点 | **不重拉**。从 `alphaFailCache`(判定)+ `listCache`(曲线)零网络补回标签,hover 明细同样重建 | | 行集合变化(筛选 / 排序 / 翻页) | 重建全部标签,但**详情走内存缓存、零请求**(曲线缺失时才拉曲线) | | popup 改门槛阈值 | 只重判不重拉(沿用缓存条目重跑 `evalGates`) | | 想拿到平台侧最新判定 | **刷新页面**(内存缓存随 JS 上下文一起清掉) | | 拉取失败 | 不留缓存,按 30s 冷却逻辑重试(唯一的重试入口) | > 历史沿革:v1.8.8 曾引入 `ALPHA_FAIL_TTL`(30s 过期重拉)与「行内变化 → 失效重拉」;v1.8.11 按用户要求**移除全部 TTL 重拉逻辑**,改为上述"取一次"语义 —— 代价是平台侧数据变了也不重判,换来标签稳定不闪烁、不因行重绘而换结论。 ### 6. 其他参考 - 论坛「信号衰减曲线的三种形态及其对 Alpha 设计的启示」(指数 / 驼峰 / 幂律,对应持仓窗口与换手):https://support.worldquantbrain.com/hc/en-us/community/posts/41449203802519 - BRAIN 数据接口:`GET https://api.worldquantbrain.com/alphas/{alpha_id}/recordsets/sharpe` --- ## 架构 ``` alpha-seer/ ├── manifest.json MV3 清单(storage / unlimitedStorage 权限、双 content script、图标) ├── shared-gates.js 跨 world 共享模块:门槛判定 / 表达式提取 / alpha id 校验(原 browser-compat.js,Firefox storage 适配段仍保留在文件头部) ├── analysis.js 公共算法模块(续航力评分 / Sharpe 评分 / 定档 / 趋势,纯函数,content 与 popup 共用) ├── content.js MAIN world:趋势线绘制、滑线动画、曲线识别、评分面板、列表页定档 + FAIL 门槛判定(按需拉详情) ├── settings.js ISOLATED world:chrome.storage.sync → DOM data-* 属性桥 ├── redirect.js ISOLATED world:document_start 拦截 /simulate*,登录后自动跳转 unsubmitted(每会话一次) ├── quota-ball.js ISOLATED world:全站回测额度悬浮球(拖动 + 进度环 + 详情面板,美东时区重置;含推荐点塔 + 官方金字塔系数) ├── batch-rename.js ISOLATED world:全部 /alphas/* 列表路由批量改名面板(react-table 选中态提取,PATCH /alphas/{id};相关性 Tab:种子两两 + Self 自相关对已提交池) ├── fx-rate.js ISOLATED world:/profile* 页 Payment 金额右侧实时人民币换算(五源兜底抓汇率 + 30 分钟缓存,点击强制刷新) ├── spc-weights.js ISOLATED world:官方 SPC 提交列表页「Weight」表头注入「批量权重」面板(按状态全簿批量 PATCH │ 权重,预览 → 执行 → 回读验证 → 可撤销;表头类名与该页 API 口径取自平台前端实测) ├── popup.html/js 设置面板 + Alpha 分析(粘贴 ID 获取 PnL / Sharpe 面板) ├── history.html/js 本地历史曲线页(三赛事共用一套脚本):history.html=SPC / ppa.html=Power Pool / glob.html=全球比赛, │ 靠 选赛事;悬浮球各卡片「📈 历史」入口带 ?board= 参数直达场次,数据存 storage.local ├── test/ 回归测试(28 个脚本,node 直跑,零依赖/无需浏览器与网络) └── icons/ 紫色底 + α 符号图标(16/32/48/128) ``` 要点: - 平台将 Highcharts 打包隐藏(无全局 `window.Highcharts`),插件从 SVG 曲线 `path.highcharts-graph` 的像素坐标提取数据,**所有评分算法均量纲无关**(t 统计量、比值、R²、Hurst、自相关),不依赖数据绝对值 - `analysis.js` 为纯算法模块(`AlphaSeerAnalysis` 命名空间),content.js 与 popup 共用同一套评分口径;popup 的 Alpha 分析通过 `GET api.worldquantbrain.com/alphas/{id}/recordsets/{pnl|sharpe}` 以浏览器会话直接取数(manifest `host_permissions` 已覆盖,无需额外凭证) - `content.js` 每秒轮询对比曲线签名 + 配置签名,图表切换指标 / 缩放 / 配置变化时自动重建 - 凭证安全:不读取、不存储、不上传任何 cookie,仅复用浏览器会话 ## 开发 / 验证(可选) ### 回归测试总览(零依赖,不联网) 全部测试都是 Node 直跑,无需浏览器 / 网络: ```bash node test/table-refresh.js # 71/71 列表页标签刷新(真实 content.js + 最小 DOM 桩 + CA 图标配色 T20) node test/pyramid-toggle.js # 6/6 金字塔开关注入与即时事件 node test/pyramid-column-write.js # 10/10 独立金字塔列端到端(开关/四类文案/不打断标签/零未处理异常) node test/pyramid-abbr.js # 24/24 金字塔塔名缩写(17 个 category 全收录 · 沙箱真跑) node test/pyramid-overcap.js # 30/30 命中 >2 座点不亮警告(判定/文案/tooltip 沙箱真跑 + 变异校验) node test/pyramid-nonparticipation.js # 24/24 SA / RA 父级「不参与金字塔」文案与 hover 成因 node test/batch-scan-incremental.js # 9/9 批量扫描分页增量与 1000 条上限 node test/scan-page-diagnostics.js # 5/5 扫描分页诊断 node test/scan-grade-diagnostics.js # 5/5 评级失败诊断 node test/scan-grade-done.js # 8/8 扫描完成态(含限流未评级的区分提示) node test/scan-grade-429.js # 17/17 评级限流韧性(共享冷却 / 冷却后重试 / 中止 / 请求阶梯) node test/analysis-module-visibility.js # 10/10 评级模块 window / globalThis 可见性 node test/analysis-module-fallback.js # 7/7 评级模块动态导入兜底 node test/dual-progress.js # 9/9 扫描双进度条(分列/分源/失败也推进/收起契约) node test/name-filter.js # 9/9 扫描 name = / ≠ 精确筛选(全等/大小写/null 归一化) node test/scan-pyramid-ca-filter.js # 155/155 扫描金字塔 / CA(结果筛选两口径 + 自定义条件下拉勾选 · 三处口径漂移锁 · 接线) node test/self-corr.js # 39/39 Self 自相关 Tab(结构/口径/缓存/互不串清/暂停取消契约) node test/pyr-config.js # 16/16 推荐点塔展示上限/默认 17(含旧默认迁移)与 delay 默认 D1 契约 node test/br-name-select.js # 16/16 批量改名「按名称筛选选中」(自定义名称 + =/≠ · 结果态收敛契约) node test/p2-hardening.js # 32/32 P1/P2 加固契约(wqbFetch/RATE429 收敛 · O(1) 索引 · 缓存上限 · 护栏开关) node test/glob-competition.js # 59/59 全球比赛板块(在期筛选 / user~ 拼接 / 期外隐藏 / 刷新态 / inflight 竞态 / 本国名次二分) node test/cmp-status-lines.js # 10/10 比赛卡片状态行(徽章与小字分行 · 空徽章不占位) node test/spc-weekend.js # 13/13 SPC 周末提示(etParts/etIsWeekend 沙箱真跑 + 接入位置) node test/spc-daily-log.js # 114/114 三赛事每日记录 + 历史曲线页(分桶 upsert / 平滑曲线 / 整月横轴 / Rank 取反 / v2 迁移 / 三页 DOM 桩渲染 / 双端到端) node test/fx-rate.js # 61/61 人民币换算(金额解析/格式化/五源兜底/缓存降级 + 最小 DOM 桩跑真实脚本的端到端) node test/gate-return-drawdown.js # 50/50 IS returns/drawdown 比率门槛(vm 真跑 evalGates + 除零防护 + 跨文件接线契约) node test/ca-icon-contrast.js # 20/20 CA 图标配色(沙箱真跑 caIconColor + WCAG 真算对比度 + 不撞色不变式) node test/spc-weights.js # 69/69 SPC 批量权重(表头锚点 / PATCH 口径 / 回滚点 / 撤漂移护栏 + 选条目与校验纯逻辑沙箱真跑 + 25 条最小 DOM 桩端到端) node test/grade-tiers.js # 24/24 定档五档(vm 真跑 calcVerdict 锁边界与名次 · SCAN_LEVELS / HEAD_ICONS / LEVEL_BG 跨文件漂移锁) ``` `table-refresh.js` 还带 `BSH_NO_COMPAT=1` 档位(故意不加载 `shared-gates.js`,验证本地兜底是否顶得上)。 ### 列表页标签刷新的回归测试(零依赖) ```bash node test/table-refresh.js # 71/71 通过则退出码 0 ``` 用最小 DOM 桩加载真实的 `content.js`,覆盖:首屏判定与标签生成、空转不重建不新增请求(行指纹不自激)、行内数据变化重拉、残留旧 badge 识别重建、FAIL 判定、`await` 期间行被换走时放弃写入。改 `content.js` 的列表相关逻辑后先跑它。 ### 端到端(Playwright,可选) 仓库内提供免登录的 Playwright 端到端验证脚本(复用浏览器已保存的 `_session_cookies.json` 实现免登录)。脚本文件与本仓库目录同级(插件所在工作区的上级目录),你可以把它们放到任意位置运行: | 脚本 | 验证内容 | |---|---| | `verify4.cjs` | 详情页趋势线注入与坐标对齐 | | `verify_panel.cjs` | 列表页右侧面板趋势线注入与可见性 | | `verify_config.cjs` | 设置项(颜色/线型/窗口/评分开关)逐项生效 | | `verify_mode.cjs` | 曲线类型分流(PnL / Sharpe / Turnover) | 依赖:Node.js + `npm install playwright`;浏览器通道(Chrome: `"chromium"`,Edge: `"msedge"`,Firefox: `"firefox"`)。 ## 免责声明 本插件为研究辅助工具。评分基于 IS 曲线形态推断 OS 表现,本质是用过去预测未来,不构成任何投资建议;不同 region / universe 的 alpha 可能适用不同标准。请结合 Sharpe、Fitness、Margin 等传统指标综合判断。 ## 开源许可证 本项目基于 [MIT License](LICENSE) 开源。Copyright (c) 2026 SawyerJan14。