Compare commits
3 Commits
79b432c3d0
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2cf08c9022 | |||
| f1cc7da714 | |||
| a1b160e1b0 |
@@ -6,8 +6,10 @@ on:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
# Reuse the runner that deploys zhixing-system to the same Docker host.
|
||||
runs-on: ubuntu-latest
|
||||
# Manual runs must also select main before receiving production credentials.
|
||||
if: ${{ github.ref == 'refs/heads/main' }}
|
||||
# Match the label of tencent-prod-runner on server B, not its runner name.
|
||||
runs-on: tencent-prod
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: https://github.com/actions/checkout@v4
|
||||
@@ -22,7 +24,6 @@ jobs:
|
||||
WQ_PASSWORD: ${{ secrets.WQ_PASSWORD }}
|
||||
ENCRYPTION_KEY: ${{ secrets.ENCRYPTION_KEY }}
|
||||
ADMIN_USERNAME: ${{ vars.ADMIN_USERNAME }}
|
||||
DATABASE_NETWORK: ${{ vars.DATABASE_NETWORK }}
|
||||
PUBLIC_ORIGIN: ${{ vars.PUBLIC_ORIGIN }}
|
||||
MCP_ENABLED: ${{ vars.MCP_ENABLED }}
|
||||
run: bash scripts/deploy-production.sh
|
||||
|
||||
@@ -32,9 +32,7 @@ x-backend: &backend
|
||||
AI_OUTPUT_TOKENS: ${AI_OUTPUT_TOKENS:-4096}
|
||||
AI_TIMEOUT: ${AI_TIMEOUT:-180}
|
||||
WQ_BASE_URL: ${WQ_BASE_URL:-https://api.worldquantbrain.com}
|
||||
networks:
|
||||
- default
|
||||
- database
|
||||
# Reach the remote PostgreSQL endpoint through the default network's egress.
|
||||
|
||||
services:
|
||||
backend:
|
||||
@@ -89,10 +87,6 @@ services:
|
||||
start_period: 10s
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
database:
|
||||
external: true
|
||||
name: ${DATABASE_NETWORK:?Set the existing PostgreSQL Docker network}
|
||||
volumes:
|
||||
caddy_data:
|
||||
caddy_config:
|
||||
|
||||
+29
-14
@@ -1,6 +1,8 @@
|
||||
# Gitea 生产部署
|
||||
|
||||
本方案在目标 Linux 服务器上由已有 Gitea Runner 构建并启动 Docker Compose,复用已有 PostgreSQL。入口绑定 `127.0.0.1:8112`,由宿主机反向代理提供公网 HTTPS。现有 `compose.yaml`、`compose.public.yaml` 保持独立,不与生产文件叠加。
|
||||
本方案使用两台服务器:A 服务器托管 Gitea 和项目仓库;B 服务器运行 `tencent-prod-runner`,拉取 A 上的 `main` 分支代码,在 B 上构建镜像并启动 Docker Compose。工作流通过标签 `tencent-prod` 选择该运行器。
|
||||
|
||||
PostgreSQL 位于独立数据库服务器或云数据库,B 上的应用通过 `DATABASE_URL` 访问它,不依赖同机数据库容器或外部 Docker 网络。应用入口绑定 **B 服务器**的 `127.0.0.1:8112`,由 B 的宿主机反向代理提供公网 HTTPS。现有 `compose.yaml`、`compose.public.yaml` 保持独立,不与生产文件叠加。
|
||||
|
||||
## 1. 填写配置和数据库账号密码
|
||||
|
||||
@@ -8,22 +10,23 @@
|
||||
|
||||
| 位置 | 名称 | 填写内容 |
|
||||
| --- | --- | --- |
|
||||
| Secrets(必填) | `DATABASE_URL` | `postgresql+asyncpg://数据库账号:数据库密码@数据库网络别名:5432/数据库名` |
|
||||
| Secrets(必填) | `DATABASE_URL` | `postgresql+asyncpg://数据库账号:数据库密码@远程数据库域名或IP:端口/数据库名`,地址须能从 B 的应用容器访问 |
|
||||
| Secrets(必填) | `ADMIN_PASSWORD` | 系统初始管理员密码,至少 12 字符,与数据库密码独立 |
|
||||
| Secrets(必填) | `ENCRYPTION_KEY` | 下面命令生成的 Fernet 密钥,升级保持不变 |
|
||||
| Secrets(必填) | `WQ_EMAIL` | WorldQuant 登录邮箱 |
|
||||
| Secrets(必填) | `WQ_PASSWORD` | WorldQuant 登录密码,按原样填写,不加引号 |
|
||||
| Variables(必填) | `DATABASE_NETWORK` | PostgreSQL 所在的现有 Docker 网络,例如 `1panel-network` |
|
||||
| Variables(必填) | `PUBLIC_ORIGIN` | 实际 HTTPS 来源,例如 `https://alpha.your-domain.com`,不带路径或末尾 `/` |
|
||||
| Variables(可选) | `ADMIN_USERNAME` | 初始管理员账号,默认 `admin` |
|
||||
| Variables(可选) | `MCP_ENABLED` | 设置 `true` 启用 MCP;未配置时默认关闭 |
|
||||
|
||||
端口与 AI 限制使用 `compose.production.yaml` 的默认值,不需要在 Gitea 配置:`WEB_PORT=8112`、`AI_REQUEST_LIMIT=12`、`AI_TOOL_LIMIT=12`、`AI_OUTPUT_TOKENS=4096`、`AI_TIMEOUT=180`。需要调整时修改 Compose 中对应默认值;工作流不再读取这些同名 Gitea Variables。
|
||||
端口与 AI 限制使用 `compose.production.yaml` 的默认值,不需要在 Gitea 配置:`WEB_PORT=8112`、`AI_REQUEST_LIMIT=12`、`AI_TOOL_LIMIT=12`、`AI_OUTPUT_TOKENS=4096`、`AI_TIMEOUT=180`。需要调整时修改 Compose 中对应默认值;工作流不再读取这些同名 Gitea Variables。原有 `DATABASE_NETWORK` 不再使用,无需在 B 上创建同名外部网络。
|
||||
|
||||
已配置的 `PROD_SSH_KEY`、`PROD_HOST`、`PROD_PORT`、`PROD_USER`、`PROD_KNOWN_HOSTS` 可以继续保留供远程运维使用。本流程由 B 的 Runner 直接部署,不读取这些 SSH Secrets;镜像在 B 本机构建和使用,也不读取 `REGISTRY_USERNAME`、`REGISTRY_PASSWORD`。
|
||||
|
||||
数据库连接串示例(实际填写时替换示例值):
|
||||
|
||||
```text
|
||||
postgresql+asyncpg://wq_user:YOUR_PASSWORD@postgresql:5432/wq_alpha
|
||||
postgresql+asyncpg://wq_user:YOUR_PASSWORD@db.example.com:5432/wq_alpha
|
||||
```
|
||||
|
||||
生成加密密钥:
|
||||
@@ -34,7 +37,9 @@ python3 -c 'import base64,secrets; print(base64.urlsafe_b64encode(secrets.token_
|
||||
|
||||
`DATABASE_URL` 的用户名和密码中的特殊字符须做 URL 百分号编码,例如 `@` → `%40`、`#` → `%23`、`/` → `%2F`、`%` → `%25`。在 Gitea 输入框填写值本身,不添加包裹引号,不填写 `DATABASE_URL=` 前缀。管理员密码中的 `$`、引号等按原样填写,由环境变量传递,无需 shell 转义。不要在日志打印变量,或开启 `set -x`。
|
||||
|
||||
在现有 PostgreSQL 管理界面先创建专用数据库与账号,账号须可连接并拥有该库中应用 schema 的建表和迁移权限。确认网络存在、数据库别名可解析、PostgreSQL 允许该 Docker 网络访问。应用使用异步驱动 `asyncpg`;远程数据库或强制 TLS 的实例需另外按该实例的 TLS 配置调整连接参数,此模板默认同机 Docker 网络。
|
||||
在远程 PostgreSQL 管理界面先创建专用数据库与账号,账号须可连接并拥有该库中应用 schema 的建表和迁移权限。数据库安全组、白名单或防火墙须允许 B 的实际出口地址访问数据库端口,且 B 的应用容器须能解析并访问数据库地址;使用私网地址时先确保 B 与数据库的私网路由连通。不要在连接串中沿用只在 A 上可解析的数据库容器名,也不要使用 `localhost` 或 `127.0.0.1` 指向远程数据库。
|
||||
|
||||
应用使用异步驱动 `asyncpg`;强制 TLS 或自定义 CA 的实例需按该实例要求配置兼容的连接参数及证书,不应直接假定其控制台提供的其他驱动连接串可用。部署脚本会在停止旧服务前,从 B 的后端容器进行真实数据库连接预检。
|
||||
|
||||
如果从已有安装迁移数据,需恢复完整数据库并沿用原 `ENCRYPTION_KEY`;修改管理员环境变量不会重置已有管理员密码。
|
||||
|
||||
@@ -42,19 +47,27 @@ WorldQuant 凭据由环境变量管理,启动时加密写入数据库;页面
|
||||
|
||||
## 2. 配置 Gitea Runner
|
||||
|
||||
沿用已成功部署 `zhixing-system` 的运行器标签 **`ubuntu-latest`**,无需注册新的 `wq-production` 运行器。该运行器的执行环境须能通过 Docker CLI/Compose 操作同一台 1Panel 服务器的 Docker daemon;可以复用现有 Docker 连接方式,不强制 host 模式。
|
||||
使用 B 服务器上已注册的 **`tencent-prod-runner`**,工作流的 `runs-on` 填写其标签 **`tencent-prod`**。只有 B 上用于生产部署的运行器应持有此标签。
|
||||
|
||||
运行器的执行环境须通过 Docker CLI/Compose 操作 **B 宿主机的 Docker daemon**。可以沿用现有 host 或 Docker 执行模式:host 模式需要执行用户有权访问 B 的 Docker;容器模式需要部署步骤所在的作业容器能够访问 B 的 Docker socket(通常是 `/var/run/docker.sock`),且具有 Docker CLI/Compose。只给 Runner 管理容器挂载 socket 并不能证明作业容器内也可访问;不要将部署命令连接到 A 的远程 Docker 或临时 Docker-in-Docker 实例。
|
||||
|
||||
Runner 注册的 Gitea 地址及仓库克隆地址必须能从 B 和作业执行环境访问,应使用 A 的实际域名或可达 IP;不能使用指向 A 本机的 `localhost`、`127.0.0.1` 或仅在 A 的 Docker 网络内可解析的容器名。
|
||||
|
||||
执行环境需要 Git、Bash、Node.js 20(checkout v4)以及支持 `up --wait --wait-timeout` 的 Docker Compose。本流程不需要 `flock` 或预建 `/opt/wq-alpha`。服务器需能访问 checkout action、基础镜像仓库和依赖源。
|
||||
|
||||
在仓库启用 Actions,`main` push 或手动运行会部署。Secrets 通过部署步骤的环境变量注入,`--env-file /dev/null` 防止误读开发 `.env`。构建可并行;构建完成后,以 Docker 唯一容器名 `wq-alpha-production-deploy-lock` 互斥保护预检、迁移和服务切换。锁容器不启动、不携带凭据,正常结束或失败时删除;竞争失败的任务不会删除其他任务的锁。
|
||||
在仓库启用 Actions,向 **`main`** push 会部署;手动运行也须选择 **`main`**,选择其他分支时本版工作流会跳过部署任务。Checkout 使用本次触发的提交,构建和迁移均在 B 的执行环境完成,无需 A 通过 SSH 再复制代码到 B。
|
||||
|
||||
发布统一使用 `main` 分支。`tencent-prod` 是 B 服务器的 Runner 标签,与 Git 分支名无关。
|
||||
|
||||
Secrets 仍在 A 的 Gitea 仓库设置中管理,通过部署步骤的环境变量注入 B 上的作业,`--env-file /dev/null` 防止误读开发 `.env`。构建可并行;构建完成后,以 B 的 Docker 唯一容器名 `wq-alpha-production-deploy-lock` 互斥保护预检、迁移和服务切换。锁容器不启动、不携带凭据,正常结束或失败时删除;竞争失败的任务不会删除其他任务的锁。
|
||||
|
||||
如果 Runner 被强制终止或 Docker 断连,可能留下锁容器。先确认没有本项目部署正在执行,再手动运行 `docker rm wq-alpha-production-deploy-lock` 后重试。不要在部署进行时删除锁。
|
||||
|
||||
## 3. 配置反向代理并首次运行
|
||||
|
||||
为 `PUBLIC_ORIGIN` 对应域名配置 HTTPS,转发至 **`http://127.0.0.1:8112`**(或你的 `WEB_PORT`)。代理须运行在宿主机网络中;独立 bridge 容器中的 `127.0.0.1` 不指向宿主机。若使用容器化 1Panel/OpenResty,先确认其网络模式。AI 流式响应需要关闭代理缓冲,并允许长连接/足够长的读取超时。
|
||||
将 `PUBLIC_ORIGIN` 对应域名解析到 **B 服务器**,在 B 配置 HTTPS 反向代理,转发至 **`http://127.0.0.1:8112`**(或你的 `WEB_PORT`)。此回环地址只对 B 本机有效;A 上的代理不能通过它访问 B。代理须运行在 B 的宿主机网络中;独立 bridge 容器中的 `127.0.0.1` 不指向宿主机。若使用容器化 1Panel/OpenResty,先确认其网络模式。AI 流式响应需要关闭代理缓冲,并允许长连接/足够长的读取超时。
|
||||
|
||||
首次部署建议在 Gitea Actions 页面手动运行工作流。需要在服务器排障运行时,须先从安全渠道将上表必填配置注入当前进程环境,再执行:
|
||||
首次部署建议在 Gitea Actions 页面选择 **`main`** 分支手动运行工作流,确认任务由 `tencent-prod-runner` 接收。需要在服务器排障运行时,在 **B 服务器的 `main` 检出目录**中先从安全渠道将上表必填配置注入当前进程环境,再执行:
|
||||
|
||||
```bash
|
||||
bash scripts/deploy-production.sh
|
||||
@@ -62,6 +75,8 @@ bash scripts/deploy-production.sh
|
||||
|
||||
固定 Compose 项目名为 `wq-alpha-production`,后端保持一个实例、一个 worker。脚本先验证 Compose,构建按 Git 提交标记的镜像,再检查密钥格式和数据库连通性;随后停止 web/backend、执行一次性迁移、启动服务并等待健康检查。Web 健康检查同时覆盖页面和经 Caddy 转发的数据库健康接口。迁移或启动失败时非零退出并显示容器状态,不继续标记成功。
|
||||
|
||||
从旧服务器切换时,若旧实例仍连接同一生产数据库,须在 B 上执行迁移前停止旧实例及其定时任务。脚本和部署锁只管理 B 上的容器,不会停止 A 上的旧应用,也不能协调两台服务器对同一数据库的迁移和写入。
|
||||
|
||||
首次部署完成后,检查公网 `/api/v1/health`,再通过真实域名登录并确认页面、写请求和 Cookie 正常。容器健康通过不能替代 HTTPS、DNS 和真实 Gitea Runner 验收。
|
||||
|
||||
## 4. 升级、备份和失败处理
|
||||
@@ -72,7 +87,7 @@ bash scripts/deploy-production.sh
|
||||
|
||||
如旧代码与当前 schema 兼容,可检出旧提交并指定其镜像标签启动;否则先停止应用,使用经过验证的备份恢复数据库,再用原加密密钥和对应旧版本启动。数据库恢复会丢失备份后的写入,必须人工确认后执行。本配置没有自动数据库降级,也不承诺无停机升级。
|
||||
|
||||
以下排查命令不依赖凭据环境变量(可能含业务信息的日志请勿公开):
|
||||
以下排查命令在 **B 服务器**运行,不依赖凭据环境变量(可能含业务信息的日志请勿公开):
|
||||
|
||||
```bash
|
||||
docker ps -a --filter label=com.docker.compose.project=wq-alpha-production
|
||||
@@ -84,13 +99,13 @@ docker logs --tail=100 wq-alpha-production-web-1
|
||||
|
||||
## 配置依据
|
||||
|
||||
采用 compound 经验 1 中的生产/开发隔离、显式外部网络、必填凭据、固定项目名、独立迁移和部署健康检查。未照搬旧项目端口、业务 Job 或卷权限初始化:本应用后端不写 named volume,已有镜像使用 UID 10001。
|
||||
生产/开发配置隔离,使用必填凭据、固定项目名、独立迁移和部署健康检查。生产服务使用 Compose 默认网络互通,并通过该网络访问远程 PostgreSQL;无需预建数据库 Docker 网络。本应用后端不写 named volume,已有镜像使用 UID 10001。
|
||||
|
||||
凭据存放在 Gitea Secrets,通过步骤级环境变量交给 Compose,不落地到配置文件。Docker 容器仍需持有运行时配置,因此拥有 Runner 或 Docker 管理权限的人仍可能读取它们。若此前手动创建了旧 `.env.production`,新流程不再读取它;确认配置已迁移到 Gitea 并妥善备份密钥后可自行移除旧文件。相关官方资料:[Compose 外部网络](https://docs.docker.com/reference/compose-file/networks/)、[环境变量插值](https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/)、[Gitea Runner 标签](https://gitea.com/gitea/runner/src/branch/main/README.md)。
|
||||
凭据存放在 Gitea Secrets,通过步骤级环境变量交给 Compose,不落地到配置文件。Docker 容器仍需持有运行时配置,因此拥有 Runner 或 Docker 管理权限的人仍可能读取它们。若此前手动创建了旧 `.env.production`,新流程不再读取它;确认配置已迁移到 Gitea 并妥善备份密钥后可自行移除旧文件。相关官方资料:[Compose 网络](https://docs.docker.com/compose/how-tos/networking/)、[环境变量插值](https://docs.docker.com/compose/how-tos/environment-variables/variable-interpolation/)、[Gitea Runner 2.x 标签](https://docs.gitea.com/runner/2/labels/)、[Gitea 分支上下文](https://docs.gitea.com/usage/actions/actions-variables/)。
|
||||
|
||||
## 5. 1Panel 夜间全量目录同步
|
||||
|
||||
在 1Panel 的计划任务中建立 Shell 脚本任务,执行周期由 1Panel 设置,例如每天深夜执行。每次命令明确指定一个范围:
|
||||
在 **B 服务器**的 1Panel 计划任务中建立 Shell 脚本任务,执行周期由 1Panel 设置,例如每天深夜执行。每次命令明确指定一个范围:
|
||||
|
||||
```bash
|
||||
docker exec wq-alpha-production-backend-1 \
|
||||
|
||||
@@ -51,3 +51,9 @@ dateCoverage 只是一项元数据,不告诉你缺失发生在哪几年,也
|
||||
[MAX 与彩票偏好帖](https://support.worldquantbrain.com/hc/en-us/community/posts/43508107778711)(2026-09-15)报告滚动极端涨幅除以自身波动后,Sharpe 从 0.36 到 0.75,最大回撤从 48.96% 到 5.69%;缩短为 5 日窗口虽进一步提高指标,作者也承认与短期反转重叠。可保留“极值相对自身波动”的待验证假设,但窗口更短、更强不等于彩票机制更纯。本轮未复核论文、借券成本或原始回测,也不将标题中的“完整复现”当作已验证结论。
|
||||
|
||||
[DEU 内部人信念强度帖](https://support.worldquantbrain.com/hc/en-us/community/posts/43178926004887)(2026-09-02,本轮补录)提醒:稀疏事件填零后,大块相同排名可能代表没有事件,不能解释为经济信念中等。作者还报告有效持仓主要在 2018–2023,而较早年份为零;应以实际可投资区间评估结果。比较滚动和与均值时须核对有效观测数和缺失处理;完整固定窗口下两者只差常数,不能笼统断言换成均值必然丢失事件信息。原帖的 tail 阈值与性能改善仅是单例,不推广为稀疏数据通用模板。
|
||||
|
||||
## 2026-09-25 补充:非线性变换与覆盖需要分开检验
|
||||
|
||||
[EUR 财报电话会情绪概率差](https://support.worldquantbrain.com/hc/en-us/community/posts/43620895448343)(2026-09-20)报告 signed power 降相关,并描述早期稀疏截面造成权重集中。随附评论明确指出另一字段的成功不能证明“概率差 + signed_power”有效;应固定其余设置分别对照回填窗、覆盖和 truncation,拆开表达式变换与股票池变化。原帖指标属于作者自报,未复现。
|
||||
|
||||
[ASI 借券费率方差案例](https://support.worldquantbrain.com/hc/en-us/community/posts/43624312881943)(2026-09-20)比较方差与标准差版本。即使同一有效样本下平方保持非负值的截面排序,后续线性缩放、中性化或权重处理也可能得到不同持仓,不能由“同一排序”推出整条策略等价。作者由少数 checks 推断的 robust 比率约 0.9 仅是其样本观察,不写成通用平台门槛;每次仍需读取实际 value、limit 和状态。
|
||||
|
||||
@@ -31,3 +31,11 @@ FastExpr 已能表达的简单机制,先用它建立基线。需要自定义
|
||||
来源:[[Python Alpha 挑战赛]Python Alpha两阶段筛选法:FastExpr快速验证 + Python深度优化](https://support.worldquantbrain.com/hc/en-us/community/posts/41135490599063)(发帖 2026-06-11,社区经验);[从 Fast 翻译到 Python Alpha 别急着炫技:截面/时序错位是头号杀手,事件漂移和中性化层级是隐形雷](https://support.worldquantbrain.com/hc/en-us/community/posts/42047259261335)(发帖 2026-07-18,社区经验);[【经验分享】Python Alpha 30名心得:从 FastExpr 到 Python,我用 17 个 alpha 趟出来的一条路](https://support.worldquantbrain.com/hc/en-us/community/posts/42519002511767)(发帖 2026-08-06,社区经验);[Python Alpha 平台限制粗略小结,请大佬指正](https://support.worldquantbrain.com/hc/en-us/community/posts/40742727142679)(发帖 2026-05-26,社区经验)。
|
||||
|
||||
本次没有安装或运行 BRAIN Labs Python SDK,所以这里只提供官方入口与迁移验证设计,不提供宣称可直接运行的 SDK 脚本。
|
||||
|
||||
## 2026-09-25 补充:频域与 PCA 实现先验算
|
||||
|
||||
[FFT 复现纠错帖](https://support.worldquantbrain.com/hc/en-us/community/posts/43640747372695)(2026-09-21)指出一个可直接验算的恒等式:对同一输入 x 的互补频带,slow + fast = x,因此 slow − x 与 −fast 是同一条腿,混合权重不会产生新信息。这只适用于所示互补分解及一致预处理,不能泛化为所有慢快信号必然共线。
|
||||
|
||||
原帖的其余“修正”仍需审查。对称 Hann 窗末端为零只能推出重构后的 slow[-1] + fast[-1] = 0,不能单凭这一点断言两个分量各自为零或必然衰减固定倍数。正文提倡前值填充,但修正版实际用窗口列均值填缺失;二者不是同一种经济假设。代码 `hist[-WIN:]` 在 WIN=65 时取 65 行,与注释宣称的 66 行也不一致。14–17 倍加速、泄漏比例和回测效果均为作者报告,本库未运行代码。
|
||||
|
||||
[PCA 特质残差反转帖](https://support.worldquantbrain.com/hc/en-us/community/posts/43692787685015)(2026-09-23)可作为待验证的自估风险模型思路,但代码 `cs[H-1:] - cs[:-H+1]` 每项相减的累计索引间隔为 H−1,不能直接标成 H 日收益和;它还将非有限收益填零,需核对缺失、上市历史与股票池影响。作者报告 IND 有效而 EUR/USA/HKG 不佳,并将 PnL 相关 0.963 称作“恒等变换”;这是近似经验,非数学恒等。不得照搬其地区结论或部分正交化系数。
|
||||
|
||||
@@ -49,3 +49,11 @@ CSV 本身不保证并发原子性。需要记录任务身份、租约或领取
|
||||
同帖还包含自动 PATCH Alpha 标签的步骤,因而不是纯读取工具。[另一篇 RA 说明](https://support.worldquantbrain.com/hc/en-us/community/posts/43410200668823)(2026-09-11)所述“不设置属性、不提交”不能自动套用到不同脚本。[AlphaSubmitter](https://support.worldquantbrain.com/hc/en-us/community/posts/43299585796247)(2026-09-07,本轮补录)宣传多轮自动重试,但没有给出足够的幂等或受理状态核对证据;POST 超时不能直接解释为服务端未创建,重发前需先对账。
|
||||
|
||||
[意见留言墙](https://support.worldquantbrain.com/hc/en-us/community/posts/42302637812503)本轮新可见评论提出登录过期导致界面状态丢失、回测次数与 Alpha 列表数量不同等问题。它们是用户反馈,不是已确认平台故障:先保存任务引用与界面筛选状态,再分别核对请求次数、失败/取消状态和结果对象数,避免仅凭两个总数推断丢数据。本轮没有复现相关 UI 行为。
|
||||
|
||||
## 2026-09-25 补充:缺失状态不能被默认值掩盖
|
||||
|
||||
[回测用量帖的新增可见评论](https://support.worldquantbrain.com/hc/en-us/community/posts/43058251853847#community_comment_43553064668183)(2026-09-17,本轮补齐)指出,没有匹配到当天活动记录时直接置 used=0,可能把日期错位或接口异常解释成额度充足。适合作为审查项:缺记录保留 UNKNOWN,再核对日期与响应;评论所述日界、固定上限和具体 API 行为未由本轮核验。
|
||||
|
||||
[ProdMemo 桥接帖评论](https://support.worldquantbrain.com/hc/en-us/community/posts/42585946296855#community_comment_43606520549399)(2026-09-19)提出旧缓存覆盖新记录的风险。合并时应保留数据类型、采集时间与来源范围,并核对部分结果是否覆盖完整结果;这是评论提供的待核审查点,本轮没有重新读取并运行桥接脚本,不能直接宣称已确认其实现缺陷。
|
||||
|
||||
[多 Agent 研究流程](https://support.worldquantbrain.com/hc/en-us/community/posts/43623479962007)(2026-09-20)把字段证据、研究假设、实验结果与审计裁定分开,是可用的职责设计:字段存在不证明逻辑成立,回测返回结果不证明通过审计。它是作者的架构方案,不是多代理提高样本外表现的实证。
|
||||
|
||||
@@ -18,3 +18,9 @@
|
||||
大规模搜索时特别检查:收益是否集中在某一年;低 PC 是否只来自缺失或不同日期;高 Sharpe 是否由不可投资的极端持仓产生;同一模板换字段是否仍是同一风险来源;回填是否把旧事件变成持续仓位。
|
||||
|
||||
本知识库中的研究方向没有经过上述实际回测终验,均是待研究候选。
|
||||
|
||||
## 2026-09-25 补充:冻结发生在看结果之前
|
||||
|
||||
[时间前推与冻结流程](https://support.worldquantbrain.com/hc/en-us/community/posts/43638422558103)(2026-09-21,社区方法建议)区分历史分年诊断、时间前推与前瞻观察。看过完整历史后再按年拆分,不能恢复被选择过程用掉的独立性。每个验证段开始前记录表达式、完整 settings、冻结时间和淘汰条件;改动生成新版本,保留失败段,汇总冻结后各段的日收益,而非只展示最好一段或平均各段 Sharpe。
|
||||
|
||||
若标签或持有期跨越分割点,隔离范围应依据实际重叠,而非机械等于最长回看窗口。冻结卡和影子观察是研究建议,不是平台提交规则,也不能据此把个人留出段称为平台隐藏 OS。本轮未复核文中外部论文或运行验证实验。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 来源、覆盖范围与验证记录
|
||||
|
||||
首次采集日期:2026-09-07;最近论坛同步:2026-09-18。下列初轮与扩展轮数字保留为历史记录,最新覆盖见文末周同步记录。时间边界按 Asia/Shanghai 的 2026-01-01 00:00 至整理时点;原始索引时间使用 UTC/带偏移的 ISO 8601。日历日简写通常取原来源 UTC 日期,未把它伪装成本地精确时刻。
|
||||
首次采集日期:2026-09-07;最近论坛同步:2026-09-25(有访问缺口)。下列初轮与扩展轮数字保留为历史记录,最新覆盖见文末周同步记录。时间边界按 Asia/Shanghai 的 2026-01-01 00:00 至整理时点;原始索引时间使用 UTC/带偏移的 ISO 8601。日历日简写通常取原来源 UTC 日期,未把它伪装成本地精确时刻。
|
||||
|
||||
## 邮箱
|
||||
|
||||
@@ -108,3 +108,17 @@ SPC 7 篇官方帮助页按 ID 直接读取;另通过支持站搜索取得 Pyt
|
||||
本轮继续比较全部范围内评论的文本指纹,没有假定帖子更新时间或评论数量能完全反映评论编辑。评论指纹针对去除 HTML、规范化空白后的文字,不覆盖纯排版、链接目标或图片替换;因此“未见评论文本编辑”不能解释为所有媒体与格式均未变化。上周文本保留在本机 `.local/forum-sync/previous-2026-09-11/`,新候选仍由验证后才推进到相应成功基线,图片访问缺口另行保留;状态与采集文本不包含认证响应或会话材料。没有同步邮件、改变平台属性、预约、报名、回测、发帖或推送仓库。
|
||||
|
||||
验证结果:两个 CSV 各有 670 个唯一帖子 ID,评论合计 9,601;采集记录及候选指纹逐项一致,142 篇帖子被知识条目引用,论坛引用均在范围内,本地链接与差异空白检查通过。新增知识内容和本地 JSON/JSONL 状态的账号密码字面值及 JWT 形式扫描通过。实际 API 采集及本周内容比对已运行;社区回测与代码未执行,自动失败恢复、限流退避仍未经过故障演练。文本及索引同步完成,图片正文访问失败保留为独立缺口。
|
||||
|
||||
## 每周论坛同步:2026-09-25
|
||||
|
||||
实际采集时间为北京时间 09:12:33–09:16:29,随后完成筛读和知识整理。认证返回 201,支持站 SSO 落地 403,Community API 正常。完整取得 19 页、1,859 篇可见帖子,排除 1,101 篇早于年初边界的帖子;本次范围内实际取得 758 篇、10,141 条评论,逐帖分页计数一致,无评论抓取失败。
|
||||
|
||||
相对 9 月 18 日内容基线,新收录 89 篇,其中 72 篇发表于上次采集结束后,17 篇为历史补录。新收录帖带来 9 条评论,217 篇旧帖另有 540 个新可见评论 ID;这 549 条中,67 条发表于上次采集后、482 条创建时间更早,是本轮历史覆盖补齐。旧帖元数据更新时间变化 329 篇,但既有正文指纹无变化,可见帖既有评论没有文本编辑或缺失 ID;没有仅凭更新时间或评论数判断未变。
|
||||
|
||||
此前收录的 41208709211671(傅里叶变换在 Alpha 开发中的应用,2026-06-14)本次列表缺失,直接官方 API 请求也返回 404,原因未定。保留原文快照、引用、索引及其历史 9 条评论,不把 404 解释为已删除。因而当前索引有 759 个 ID:758 个本次可见,1 个历史保留;阅读索引评论数合计 10,150,其中 9 条未在本次重新取得,该帖 comments_complete 记为 False。本次实际取得评论比上次增加 540,等于新可见 549 减去未能重新取得的历史 9,不能将净增量称作新发表评论。
|
||||
|
||||
89 篇新收录帖完成标题及正文主旨筛查,专题目录只作导航,未沿目录扩充 2026 年前帖子;福利、收入展示和未答问题保留索引,不扩写为结论。新收录帖的 9 条评论及旧帖新可见的 540 条评论完成筛读,并针对实质纠错和机制建议精读。新增知识集中在冻结后验证、FFT 互补频带恒等式及修正版局限、PCA 窗口索引、聚类代表不能替代逐项 PC 终验、缺失值语义与 UNKNOWN 状态。社区数值仍为作者自述;本次没有复现回测、安装或执行社区代码,也没有将评论中的配额、评分、时区和阈值升级为官方规则。
|
||||
|
||||
图片帖 43287990820375 仍可取得元数据,正文含 12 张图片;本次抽查其中 1 个官方图片地址仍为 403,没有把抽查写成全部重试,继续保留 metadata_only 和待阅读项。评论指纹仍仅覆盖规范化文字,不检测纯格式、链接目标或图片替换。本次保留上周 670 篇文本快照于本机 previous-2026-09-18/;可见记录验证后推进相应基线,不可访问帖保留旧指纹与重试缺口。此次为可见文本及索引完成、来源与媒体仍有缺口的部分同步,不宣称全量无缺失。
|
||||
|
||||
验证结果:两个 CSV 均有 759 个唯一 ID;758 个本次采集记录与候选指纹、逐评论文本哈希及分页计数一致,另 1 个历史保留记录明确标为当前未完成。154 篇帖子被知识条目引用,引用均属于本次可见范围或明确保留的历史来源。本地链接、差异空白、新增内容及本地 JSON/JSONL 的账号密码字面值和 JWT 形式扫描通过。采集脚本语法检查通过;本轮只验证实际采集与静态内容比对,没有故障注入、策略回测或社区代码执行。
|
||||
|
||||
@@ -29,6 +29,349 @@
|
||||
"No source authentication material is included."
|
||||
],
|
||||
"latest_forum_sync": {
|
||||
"collected_at": "2026-09-25",
|
||||
"timezone": "Asia/Shanghai",
|
||||
"status": "partial_sync_with_source_and_media_gaps",
|
||||
"started_at": "2026-09-25T01:12:33.054002+00:00",
|
||||
"collection_finished_at": "2026-09-25T01:16:29.789990+00:00",
|
||||
"previous_successful_collection_finished_at": "2026-09-18T02:16:36.188053+00:00",
|
||||
"raw_visible_posts": 1859,
|
||||
"raw_list_pages": 19,
|
||||
"excluded_older_posts": 1101,
|
||||
"retained_posts": 758,
|
||||
"retained_comments": 10141,
|
||||
"indexed_posts_including_unavailable": 759,
|
||||
"historical_comments_retained_for_unavailable_posts": 9,
|
||||
"newly_indexed_posts": 89,
|
||||
"newly_indexed_posts_created_after_previous_collection": 72,
|
||||
"historical_posts_newly_indexed": 17,
|
||||
"comments_on_newly_indexed_posts": 9,
|
||||
"newly_visible_comments_on_existing_posts": 540,
|
||||
"historical_comments_newly_visible": 482,
|
||||
"newly_visible_comments_created_after_previous_collection": 67,
|
||||
"comment_count_net_change": 540,
|
||||
"metadata_changed_existing_posts": 329,
|
||||
"body_changed_existing_post_ids": [],
|
||||
"comment_changed_existing_post_ids": [
|
||||
"37427295710359",
|
||||
"37473718017175",
|
||||
"37759477785239",
|
||||
"37857879534487",
|
||||
"37858237686167",
|
||||
"38120459173143",
|
||||
"38151220803095",
|
||||
"38669179039255",
|
||||
"38767793594775",
|
||||
"39118594803095",
|
||||
"39183798681239",
|
||||
"39215982466071",
|
||||
"39225718749591",
|
||||
"39249078858647",
|
||||
"39304762113815",
|
||||
"39319955780887",
|
||||
"39367839107095",
|
||||
"39567420541079",
|
||||
"39729140385559",
|
||||
"39756841978519",
|
||||
"39845230299927",
|
||||
"39873247817495",
|
||||
"39922788056343",
|
||||
"40031467208983",
|
||||
"40089426663959",
|
||||
"40287368788375",
|
||||
"40373405530647",
|
||||
"40544447671959",
|
||||
"40734437350679",
|
||||
"40734489248151",
|
||||
"40737593669911",
|
||||
"40790666727575",
|
||||
"40847481080087",
|
||||
"40936186021271",
|
||||
"40962462282007",
|
||||
"40964044763031",
|
||||
"41020681850519",
|
||||
"41065497021335",
|
||||
"41138382717719",
|
||||
"41162636720919",
|
||||
"41236357050903",
|
||||
"41318082888343",
|
||||
"41320039211671",
|
||||
"41363895396247",
|
||||
"41391880122007",
|
||||
"41392995550231",
|
||||
"41396933582231",
|
||||
"41397704497303",
|
||||
"41417418697111",
|
||||
"41418196103191",
|
||||
"41420742165527",
|
||||
"41459028441623",
|
||||
"41510344038551",
|
||||
"41540700959639",
|
||||
"41550783184663",
|
||||
"41551045362071",
|
||||
"41551682155799",
|
||||
"41552805539991",
|
||||
"41553665016983",
|
||||
"41556669366551",
|
||||
"41567966789655",
|
||||
"41625263438999",
|
||||
"41651283176855",
|
||||
"41654205318807",
|
||||
"41655387004439",
|
||||
"41684104419095",
|
||||
"41692781472919",
|
||||
"41706827651991",
|
||||
"41719890581911",
|
||||
"41732813691287",
|
||||
"41801462727191",
|
||||
"41804720051607",
|
||||
"41825836449047",
|
||||
"41849925214231",
|
||||
"41854026316055",
|
||||
"41856507417623",
|
||||
"41877348653335",
|
||||
"41877985926423",
|
||||
"41878175264663",
|
||||
"41880799695127",
|
||||
"41881412101399",
|
||||
"41897133795479",
|
||||
"41898002651287",
|
||||
"41898564566167",
|
||||
"41903649174807",
|
||||
"41908323673111",
|
||||
"41909117583383",
|
||||
"41937689411479",
|
||||
"41939959839895",
|
||||
"41949669579031",
|
||||
"41974186627351",
|
||||
"41992899715607",
|
||||
"41993968062743",
|
||||
"41994809192215",
|
||||
"41995369186455",
|
||||
"41995684431767",
|
||||
"42007074836247",
|
||||
"42015743397655",
|
||||
"42018671130391",
|
||||
"42019010387479",
|
||||
"42019332809111",
|
||||
"42019924663319",
|
||||
"42020342676759",
|
||||
"42021244122775",
|
||||
"42021722069143",
|
||||
"42022555985047",
|
||||
"42029118285847",
|
||||
"42045578950551",
|
||||
"42047259261335",
|
||||
"42060935441943",
|
||||
"42061123738903",
|
||||
"42062231758103",
|
||||
"42064544905495",
|
||||
"42064574062359",
|
||||
"42065262268567",
|
||||
"42065802192023",
|
||||
"42078729821591",
|
||||
"42078917602455",
|
||||
"42160836246039",
|
||||
"42160945573271",
|
||||
"42161798745879",
|
||||
"42184733027991",
|
||||
"42185098677399",
|
||||
"42187744015767",
|
||||
"42187906212247",
|
||||
"42211897526295",
|
||||
"42215210781719",
|
||||
"42215740602135",
|
||||
"42216209199255",
|
||||
"42259186135831",
|
||||
"42274443124119",
|
||||
"42302637812503",
|
||||
"42359440646551",
|
||||
"42406158561943",
|
||||
"42407253630359",
|
||||
"42423399281815",
|
||||
"42423993843735",
|
||||
"42455010729367",
|
||||
"42460800447895",
|
||||
"42487308197783",
|
||||
"42509573118999",
|
||||
"42513455206423",
|
||||
"42513832186263",
|
||||
"42519002511767",
|
||||
"42549574041367",
|
||||
"42585946296855",
|
||||
"42587179348119",
|
||||
"42662873714711",
|
||||
"42686571665303",
|
||||
"42691768951447",
|
||||
"42714622464407",
|
||||
"42720875852439",
|
||||
"42721824181271",
|
||||
"42738237663639",
|
||||
"42740521405463",
|
||||
"42743732814999",
|
||||
"42756136847639",
|
||||
"42756641286295",
|
||||
"42757091114647",
|
||||
"42771962021143",
|
||||
"42772611660823",
|
||||
"42774450536343",
|
||||
"42775887653399",
|
||||
"42801904467607",
|
||||
"42945861800983",
|
||||
"42955680180247",
|
||||
"42972530812183",
|
||||
"42975079714839",
|
||||
"42981290349463",
|
||||
"43002825233687",
|
||||
"43006316208151",
|
||||
"43030071187479",
|
||||
"43031425132823",
|
||||
"43031577079575",
|
||||
"43058251853847",
|
||||
"43067045830679",
|
||||
"43085454784535",
|
||||
"43087031637527",
|
||||
"43147371557015",
|
||||
"43151729306647",
|
||||
"43178926004887",
|
||||
"43179521660823",
|
||||
"43179860065303",
|
||||
"43181411147287",
|
||||
"43208281917591",
|
||||
"43269155035799",
|
||||
"43287990820375",
|
||||
"43299585796247",
|
||||
"43309848501783",
|
||||
"43319649278359",
|
||||
"43319751480599",
|
||||
"43320365312023",
|
||||
"43320471694999",
|
||||
"43322521365143",
|
||||
"43322749748503",
|
||||
"43383826751127",
|
||||
"43410200668823",
|
||||
"43411841446423",
|
||||
"43438866840343",
|
||||
"43467733543319",
|
||||
"43477475833623",
|
||||
"43498120902807",
|
||||
"43499065604247",
|
||||
"43500671638551",
|
||||
"43501264459799",
|
||||
"43502970330647",
|
||||
"43508107778711",
|
||||
"43524498271895",
|
||||
"43524503109655",
|
||||
"43527309427863",
|
||||
"43527457608087",
|
||||
"43529198653719",
|
||||
"43529216017047",
|
||||
"43536370604567",
|
||||
"43541109631895",
|
||||
"43556223197335",
|
||||
"43561782887575"
|
||||
],
|
||||
"edited_existing_comments": 0,
|
||||
"missing_existing_comment_ids_on_visible_posts": 0,
|
||||
"failed_comment_records": 0,
|
||||
"missing_previously_indexed_posts": 1,
|
||||
"unavailable_posts": [
|
||||
{
|
||||
"post_id": "41208709211671",
|
||||
"direct_api_status": 404,
|
||||
"historical_comments_retained": 9
|
||||
}
|
||||
],
|
||||
"posts_cited_in_knowledge": 154,
|
||||
"groups": {
|
||||
"guides": 17,
|
||||
"ai": 160,
|
||||
"ideas": 40,
|
||||
"engineering": 86,
|
||||
"general": 137,
|
||||
"lessons": 141,
|
||||
"optimization": 65,
|
||||
"events": 42,
|
||||
"portfolio": 51,
|
||||
"data": 20
|
||||
},
|
||||
"new_post_texts_screened": 89,
|
||||
"metadata_only_post_ids": [
|
||||
"43287990820375"
|
||||
],
|
||||
"new_or_newly_visible_comments_screened": 549,
|
||||
"official_articles_checked": [],
|
||||
"baseline_state_directory": ".local/forum-sync/",
|
||||
"unread_media": [
|
||||
{
|
||||
"post_id": "43287990820375",
|
||||
"image_count": 12,
|
||||
"images_retried_this_run": 1,
|
||||
"http_status": 403
|
||||
}
|
||||
],
|
||||
"limits": [
|
||||
"758 currently visible posts and 10141 freshly retrieved comments; indexes additionally retain one unavailable post with nine historical comments.",
|
||||
"One previously indexed post returned HTTP 404; its previous fingerprint and records are retained for retry, not deleted or marked freshly complete.",
|
||||
"Newly visible historical posts/comments are backfill; the reason for prior visibility gaps is unknown.",
|
||||
"One image-only post remains unread; one of its twelve official images was retried and returned HTTP 403.",
|
||||
"Comment fingerprints cover normalized text only, not link targets, formatting or media-only changes.",
|
||||
"Community claims and code were reviewed but not executed or backtested; no current platform rules were inferred from comments.",
|
||||
"No email sync, simulation, external publication, submission, credential/session persistence or Git commit/push."
|
||||
]
|
||||
},
|
||||
"forum_sync_history": [
|
||||
{
|
||||
"collected_at": "2026-09-11",
|
||||
"timezone": "Asia/Shanghai",
|
||||
"started_at": "2026-09-11T01:03:40.336597+00:00",
|
||||
"collection_finished_at": "2026-09-11T01:06:33.369594+00:00",
|
||||
"raw_visible_posts": 1730,
|
||||
"raw_list_pages": 18,
|
||||
"excluded_older_posts": 1101,
|
||||
"retained_posts": 629,
|
||||
"retained_comments": 9587,
|
||||
"newly_indexed_posts": 6,
|
||||
"newly_indexed_posts_created_sep_7_or_later": 5,
|
||||
"previously_unindexed_sep_5_posts": 1,
|
||||
"comments_on_newly_indexed_posts": 9,
|
||||
"historical_comments_backfilled_on_existing_posts": 6,
|
||||
"comment_count_net_change": 15,
|
||||
"metadata_changed_existing_posts": 141,
|
||||
"body_edit_count": null,
|
||||
"comment_edit_count": null,
|
||||
"failed_comment_records": 0,
|
||||
"missing_previously_indexed_posts": 0,
|
||||
"posts_cited_in_knowledge": 122,
|
||||
"groups": {
|
||||
"engineering": 69,
|
||||
"guides": 7,
|
||||
"events": 39,
|
||||
"general": 96,
|
||||
"ai": 143,
|
||||
"portfolio": 48,
|
||||
"ideas": 19,
|
||||
"lessons": 128,
|
||||
"optimization": 61,
|
||||
"data": 19
|
||||
},
|
||||
"recent_comment_records_screened": 244,
|
||||
"recent_comment_posts_screened": 87,
|
||||
"official_articles_checked": [
|
||||
"43302575764631",
|
||||
"43302563775127",
|
||||
"43302607437719",
|
||||
"43302607372183"
|
||||
],
|
||||
"baseline_state_directory": ".local/forum-sync/",
|
||||
"limits": [
|
||||
"First content-fingerprint baseline; metadata changes do not establish body edits.",
|
||||
"Historical zero-comment records corrected for three existing posts; net count change is not newly published comments.",
|
||||
"All scoped comments fetched, selective historical body reading; images and attachments not fully verified.",
|
||||
"No simulations, submissions, email sync, public publishing, or credential/session persistence."
|
||||
]
|
||||
},
|
||||
{
|
||||
"collected_at": "2026-09-18",
|
||||
"timezone": "Asia/Shanghai",
|
||||
"started_at": "2026-09-18T02:11:39.967012+00:00",
|
||||
@@ -99,57 +442,6 @@
|
||||
"http_status": 403
|
||||
}
|
||||
]
|
||||
},
|
||||
"forum_sync_history": [
|
||||
{
|
||||
"collected_at": "2026-09-11",
|
||||
"timezone": "Asia/Shanghai",
|
||||
"started_at": "2026-09-11T01:03:40.336597+00:00",
|
||||
"collection_finished_at": "2026-09-11T01:06:33.369594+00:00",
|
||||
"raw_visible_posts": 1730,
|
||||
"raw_list_pages": 18,
|
||||
"excluded_older_posts": 1101,
|
||||
"retained_posts": 629,
|
||||
"retained_comments": 9587,
|
||||
"newly_indexed_posts": 6,
|
||||
"newly_indexed_posts_created_sep_7_or_later": 5,
|
||||
"previously_unindexed_sep_5_posts": 1,
|
||||
"comments_on_newly_indexed_posts": 9,
|
||||
"historical_comments_backfilled_on_existing_posts": 6,
|
||||
"comment_count_net_change": 15,
|
||||
"metadata_changed_existing_posts": 141,
|
||||
"body_edit_count": null,
|
||||
"comment_edit_count": null,
|
||||
"failed_comment_records": 0,
|
||||
"missing_previously_indexed_posts": 0,
|
||||
"posts_cited_in_knowledge": 122,
|
||||
"groups": {
|
||||
"engineering": 69,
|
||||
"guides": 7,
|
||||
"events": 39,
|
||||
"general": 96,
|
||||
"ai": 143,
|
||||
"portfolio": 48,
|
||||
"ideas": 19,
|
||||
"lessons": 128,
|
||||
"optimization": 61,
|
||||
"data": 19
|
||||
},
|
||||
"recent_comment_records_screened": 244,
|
||||
"recent_comment_posts_screened": 87,
|
||||
"official_articles_checked": [
|
||||
"43302575764631",
|
||||
"43302563775127",
|
||||
"43302607437719",
|
||||
"43302607372183"
|
||||
],
|
||||
"baseline_state_directory": ".local/forum-sync/",
|
||||
"limits": [
|
||||
"First content-fingerprint baseline; metadata changes do not establish body edits.",
|
||||
"Historical zero-comment records corrected for three existing posts; net count change is not newly published comments.",
|
||||
"All scoped comments fetched, selective historical body reading; images and attachments not fully verified.",
|
||||
"No simulations, submissions, email sync, public publishing, or credential/session persistence."
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -45,3 +45,11 @@
|
||||
增加同类字段可能只是叠加相关噪声和缺失。帖子记录了同域克隆失败、跨类别组合更好的样本,但没有证明多类别组合必然有效。来源:[字段堆越多alpha越牛?我替你们试过了,真不是这么回事](https://support.worldquantbrain.com/hc/en-us/community/posts/41908323673111)(2026-07-13)。
|
||||
|
||||
保持主字段、方向与覆盖语义后,才讨论删除冗余算子;降低 OpCount 不能靠偷偷改变信号。来源:[【Quant101】OpCount 拯救计划:因子化简](https://support.worldquantbrain.com/hc/en-us/community/posts/41105918774807)(2026-06-10)。详见 [优化流程](../08-alpha-optimization/diagnostic-workflow.md)。
|
||||
|
||||
## 2026-09-25 补充:缺失设置是实验变量
|
||||
|
||||
[按数据类型选择回填](https://support.worldquantbrain.com/hc/en-us/community/posts/43273417454487)(2026-09-05,本轮补录)和 [NanHandling 讨论](https://support.worldquantbrain.com/hc/en-us/community/posts/43562519639063)(2026-09-17,本轮补录)提醒,事件未发生、状态尚未更新与采集缺失不能用同一填法。NanHandling ON/OFF、算子及字段组合可能改变有效股票数和信号含义;文中观测不是平台所有算子的统一定义,尤其不能推广“其他情况无所谓”。
|
||||
|
||||
[新闻密度帖的新增可见评论](https://support.worldquantbrain.com/hc/en-us/community/posts/43541109631895#community_comment_43582240044695)(评论发表于 2026-09-18)提出:若无新闻日为缺失且均值忽略缺失,得到的是有新闻日的条件均值,并非每个交易日的新闻密度。应先核对实际返回值,再比较零填充、原缺失和有限回填,同时观察覆盖与集中度;不能预先把缺失都当无事件。[预处理讨论评论](https://support.worldquantbrain.com/hc/en-us/community/posts/43527457608087#community_comment_43552980010775)(2026-09-17,本轮补齐)进一步提醒,回填后的 Sharpe 提升可能只是股票构成改变,需并看信号年龄、多空数量、换手及分组暴露。这些是评论者的机制建议,不是已确认因果结果。
|
||||
|
||||
历史频域来源 41208709211671 在本次列表缺失,2026-09-25 直接 API 请求返回 404;保留此前归纳和来源,不据此判断作者删除或内容失效。
|
||||
|
||||
@@ -33,3 +33,9 @@
|
||||
Osmosis 社区帖称有多个 Region×Delay、每赛道 Alpha 数量与点数要求;具体资格和锁定时区未由本轮完整核实,不将该帖直接升级为当前官方规则。来源:[🌟 玩转 Osmosis:让你的 Alphas 成为最高 2 倍收益放大器!(机制详解与实操指南)](https://support.worldquantbrain.com/hc/en-us/community/posts/43002825233687)(2026-08-26)。
|
||||
|
||||
关于低 PC 与高 Fitness 的取舍,社区有单变量实验支持按质量预算思考,不能只追最低 PC。来源:[关于降Prod Correlation的实践(一)](https://support.worldquantbrain.com/hc/en-us/community/posts/39118594803095)(2026-03-18)。具体权重和阈值需要依据你的池验证,本任务未修改组合、提交 Alpha 或分配点数。
|
||||
|
||||
## 2026-09-25 补充:聚类代表不能替代每个候选的终验
|
||||
|
||||
[本地 PnL 聚类预筛工具](https://support.worldquantbrain.com/hc/en-us/community/posts/43300341649687)(2026-09-07,本轮补录)按候选间相关性合并簇,只查代表项并把 PC 结果传播给成员。减少重复检查可作为调度思路,但 PASS/FAIL 传播没有充分保证。以同一日期样本上中心化、标准化的 A、B、P 为例,柯西不等式给出 |corr(A,P)−corr(B,P)| ≤ √(2(1−corr(A,B)));即使 corr(A,B)=0.9,上界仍约 0.447,远不能保证跨不过提交门槛。这是本库数学边界,不是平台 PC 公式;链式连通聚类还不保证任意两成员都达到聚类阈值。
|
||||
|
||||
[双桶去相关案例](https://support.worldquantbrain.com/hc/en-us/community/posts/43624302417559)(2026-09-20)报告 PC 下降同时 margin 下降,也给出分桶轴与信号重叠导致信号被抹去的反例。因此比较应同时记录成本、覆盖、子区域与生产相关性,不能只凭某项过线判定改善。[Value Factor 讨论](https://support.worldquantbrain.com/hc/en-us/community/posts/43589077012759)(2026-09-18)区分单体质量、自有池增量和平台全池评价;其教学示例不是实测收益或支付公式。上述数值和工具效果均未复现。
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# WorldQuant 研究重启知识库
|
||||
|
||||
首次整理:2026-09-07;论坛最近同步:2026-09-18,Asia/Shanghai。论坛严格按 **2026-01-01 起的发帖时间**筛选;旧帖即使今年更新、被邮件或合集引用,也不纳入论坛研究来源。面向个人研究,不包含已运行或保证有效的 Alpha。
|
||||
首次整理:2026-09-07;论坛最近同步:2026-09-25(有访问缺口),Asia/Shanghai。论坛严格按 **2026-01-01 起的发帖时间**筛选;旧帖即使今年更新、被邮件或合集引用,也不纳入论坛研究来源。面向个人研究,不包含已运行或保证有效的 Alpha。
|
||||
|
||||
9 月 18 日增量:论坛索引现有 **670 篇帖子、9,601 条评论**。本次新收录 41 篇,其中 29 篇发表于上次采集之后、12 篇为历史补录;通过内容指纹确认 2 篇旧帖正文更新、1 篇旧帖出现新可见评论。新增[差分与类别编码边界](01-alpha-ideas/relationship-and-extension-cards.md)、[代理变量与样本边界](01-alpha-ideas/data-template-cards.md)、[回测恢复风险](03-engineering/2026-operating-lessons.md),并复核 [SPC 当前输出规范](04-platform/spc.md)。一篇图片正文尚未精读,其余覆盖及计数口径见 [来源与覆盖](06-sources/README.md)。
|
||||
9 月 25 日增量:本次实际取得 **758 篇可见帖子、10,141 条评论**。新收录 89 篇,其中 72 篇发表于上次采集后、17 篇为历史补录;217 篇旧帖出现新可见评论,未见既有正文或评论文本编辑。更新[时间前推验证](05-research-practice/validation.md)、[FFT/PCA 实现边界](02-ai-mining/python-alpha.md)、[相关性预筛](08-alpha-optimization/portfolio-and-correlation.md)、[数据语义](07-professional-knowledge/data-and-signal-semantics.md)、[工程状态](03-engineering/2026-operating-lessons.md)和[事件信号对照](01-alpha-ideas/data-template-cards.md)。另有 1 篇旧帖返回 404,历史记录仍保留,索引共 759 篇;1 篇图片正文继续待读。详见[来源与覆盖](06-sources/README.md)。
|
||||
|
||||
**先更新研究方向,再恢复回测规模。** 当前最值得投入的是有经济解释的低相关信号、能保留失败证据的 AI 实验闭环,以及组合层的增量价值。不要把“提交数量”“Token 消耗”当作研究进展。
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ umask 077
|
||||
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")/.."
|
||||
# Fail before touching the host; never read a checkout's local .env file.
|
||||
for key in WQ_EMAIL WQ_PASSWORD DATABASE_URL ADMIN_PASSWORD ENCRYPTION_KEY DATABASE_NETWORK PUBLIC_ORIGIN; do
|
||||
for key in WQ_EMAIL WQ_PASSWORD DATABASE_URL ADMIN_PASSWORD ENCRYPTION_KEY PUBLIC_ORIGIN; do
|
||||
if [[ -z "${!key:-}" ]]; then
|
||||
echo "Missing required Gitea configuration: $key" >&2
|
||||
exit 1
|
||||
|
||||
Reference in New Issue
Block a user