已按要求删除对应章节并重新编号: # 七日关注人气排名因子 · 文档 ## 1. 因子定义 ### 1.1 取数口径 结果集 = 条件选股方案 xc13e6afaf46c200b3c9(「7日关注」)的全部命中股票 = 「7日关注排名 1~4650」 ∩ 非 ST/退市 ∩ 非北交所 ∩ 非科创板 stockrank = 页面「7日关注排名」(CONCERN_RANK_7DAYS{YYYY-MM-DD}),1 = 人气最高 ### 1.2 因子取值 factor = -stockrank factor_direction = 1:值越大越看多。排名第 1 -> factor = -1(最大); 排名第 4650 -> factor = -4650(最小)。 示例日分布:4189 行,stockrank ∈ [1, 4650](跳号 461 个), factor ∈ [-4650.0, -1.0]。 每行头部示例: | date | instrument | factor | |---|---|---| | 2026-09-16 | 000823.SZ | -1.0 | | 2026-09-16 | 000993.SZ | -2.0 | | 2026-09-16 | 000978.SZ | -3.0 | | 2026-09-16 | 002585.SZ | -4.0 | | 2026-09-16 | 000980.SZ | -5.0 | ### 1.3 名次跳号(为什么要解释它) stockrank 的最大值 4650 > 结果集行数 4189,差值即跳号: 跳号数 = (最大名次 − 最小名次 + 1) − 行数 = (4650 − 1 + 1) − 4189 = 461 原因:「7日关注排名」是全市场口径的人气名次,方案条件只是把 ST / 退市 / 北交所 / 科创板从结果里过滤掉,但这些个股仍在全市场榜单里占着名次, 所以结果集里的名次会出现空档。这不影响因子可用性(同一口径下的绝对名次仍可跨日比较), 但不能把它当作「1..4189 的连续排名」使用。 ## 2. 因子分析 本地不做。脚本只负责产出因子数据源与提交,以下内容全部由平台完成: - IC / RankIC(逐日 Spearman)、IC 均值/IR/胜率; - 因子分层(group_num 组,默认 10)收益、单调性; - 多头 / 空头 / 多空组合绩效(年化、夏普、最大回撤等)。 提交时 performance_report="",performance_index 只带口径参数(见第 3 节)。 ## 3. 参数 params submit_factor(performance_index=params) 的内容(键名与脚本 run() 一致): | 参数 | 脚本默认值 | 说明 | |---|---|---| | factor_field | factor | 因子值列名 | | factor_direction | 1 | 因子方向:正(值越大越看多) | | group_num | 10 | 因子分析分层组数 | | instruments | 全市场 | 股票池 | | benchmark | 中证500 | 绩效基准 | | data_process | True | 交由平台做数据预处理 | 命令行参数: | 参数 | 默认 | 说明 | |---|---|---| | --date | 无 | 日期 YYYY-MM-DD;缺省 = 接口给出的「7日关注排名」口径日 | | --limit | 0 | 只取前 N 行(调试用,勿据此落库) | | --page-size | 1000 | 单页条数 | | --gap | 1.2 | 翻页间隔秒数;被限流(code=307)时可调到 3~5 | | --out | a_7ri_focus.csv | 明细 CSV 路径 | | --from-csv | 关 | 不联网,直接用已落盘明细表做落库/提交(AIStudio 端回补用) | | --no-submit | 关 | 只抓不提交(非 AIStudio 环境本就会自动跳过) | | --group-num | 10 | 提交参数:分层组数 | | --instruments | 全市场 | 提交参数:股票池 | | --benchmark | 中证500 | 提交参数:基准 | ## 4. 产物清单 | 产物 | 规模(示例日 2026-09-16) | 说明 | |---|---|---| | a_7ri_focus.csv | 4189 行 × 4 列 | 主产物:date, instrument, name, stockrank,增量追加、按 (date,instrument) 去重 | 要点: - 文件名以 ASCII a_ 开头、扩展名 .csv:中文名在提交/上传链路会被截断或编码损坏; - 编码 utf-8-sig(带 BOM),Excel 双击不乱码;列名固定为小写 date/instrument/name/stockrank; - 追加语义:首次运行写入表头;之后按 (date, instrument) 比较,只追加新行 (第二次运行同一口径日输出「增量 0 行」,不改动文件); - 不生成任何按日分片文件,全部日期同表共存,date 列即分区键。 ## 5. 定时运行 | 项 | 值 | |---|---| | 计划任务名 | Xuangu7RiFocus_DailyUpdate | | 触发时间 | 每天 21:00:00 | | 执行 | run_7ri_focus_daily.bat(与本文件同目录) | | 日志 | 7ri_focus.log(追加) | 为什么选 21:00: - A 股 15:00 收盘,当日用户的「加自选」行为在盘后已沉淀完毕,21:00 取到的是当日口径的 完整排名快照,不会像盘中那样边跑边变; - 晚于本机其它定时任务(20:40 EastMoneyYYBPH_DailyUpdate 龙虎榜、20:45 LianbanFactor_DailyUpdate 连板因子),不抢网络与 CPU; - 非交易日:接口给出的口径日仍是上一交易日,脚本按 (date, instrument) 去重后 「增量 0 行」,不会产生脏数据,属预期行为。 注册命令(管理员 PowerShell,只登记一次): ```powershell $bat = "c:\Users\Administrator\Documents\trae_projects\7日关注\run_7ri_focus_daily.bat" $act = New-ScheduledTaskAction -Execute "cmd.exe" -Argument "/c `"$bat`"" $trg = New-ScheduledTaskTrigger -Daily -At 21:00 $set = New-ScheduledTaskSettingsSet -StartWhenAvailable -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries Register-ScheduledTask -TaskName "Xuangu7RiFocus_DailyUpdate" -Action $act -Trigger $trg ` -Settings $set -User "SYSTEM" -RunLevel Highest -Force ``` 运行身份用 SYSTEM(LogonType = ServiceAccount),不依赖当前用户是否登录, 与本机已有的 LianbanFactor_DailyUpdate 一致。注册后可自查: ```powershell Get-ScheduledTask -TaskName "Xuangu7RiFocus_DailyUpdate" | Select-Object State, @{n="User";e={$_.Principal.UserId}}, @{n="Trig";e={$_.Triggers.StartBoundary}} ``` 实测结果:State=Ready | User=SYSTEM | LogonType=ServiceAccount | Trig=2026-09-16T21:00:00+08:00。 .bat 内容(要点:cd /d "%~dp0"、chcp 65001、PYTHONIOENCODING=utf-8、写死 Python 绝对路径、 :step 子过程 + errorlevel 非 0 即 goto fail、日志追加 OK - / FAILED - 标记): ```bat @echo off chcp 65001 >nul setlocal cd /d "%~dp0" set "PY=C:\Users\Administrator\AppData\Local\Programs\Python\Python314\python.exe" set "LOG=%~dp07ri_focus.log" set PYTHONIOENCODING=utf-8 call :log "===== START daily 7ri focus =====" call :step xuangu_7ri_focus.py if errorlevel 1 goto fail call :log "OK - daily run finished, see row counts in the log below" exit /b 0 :fail call :log "FAILED - aborted, a_7ri_focus.csv NOT refreshed" exit /b 1 :step call :log "RUN %*" "%PY%" %* >>"%LOG%" 2>&1 exit /b %errorlevel% :log >>"%LOG%" echo [%date% %time%] %~1 exit /b 0 ``` .bat 必须保持 ASCII-only:cmd 按 ANSI 代码页解析批处理文件,中文字符会导致解析错乱。 ## 6. 已知限制 - 不做本地回测:脚本不含 IC / 分层 / 绩效计算,因子有效性需提交后在平台评估。 - 依赖接口:接口字段(尤其 CONCERN_RANK_7DAYS{日期} 这种“日期写进列名”的设计) 一旦改版,需要同步调整 data_date_from_columns / parse_rows;已做的是 多页普通重试(3 次)、风控退避(code=307 时 5/20/60/120 秒)与 SERIAL 兜底, 但不保证覆盖所有改版形式。 - 出口 IP 被持续限流:接口风控是按 IP 计的,若某个出口 IP(如 AIStudio 环境) 长期返回 code=307,退避也会耗尽。此时的解法是把 --gap 调到 3~5 秒, 或改在能正常访问的机器上采集,再上传 CSV 用 --from-csv 回补落库/提交。 - fingerprint 为固定值:脚本沿用页面同款固定指纹,未做动态生成; 若接口未来校验指纹,需要更新。 - 排名口径绑定方案:keyWordNew 必须与页面上保存的方案条件一致, 在页面上改动方案条件后,需同步更新脚本里的 KEY_WORD。 - 无历史回补:接口只返回当前快照,无法回溯历史日期的「7日关注排名」, 因此只能靠定时任务每日累积;缺失的历史日无法补齐。 - 跳号不可消除:stockrank 含被排除个股占用的空档,若需要 1..N 连续排名, 须自行在因子侧做 rank() 重排(会改变口径,本因子不做)。 - 未提交验证:alpha_7ri_focus / alpha_7ri_focus_data 的全局唯一性尚未在平台侧实测。
今日浏览排名因子 (alpha_today_view_rank_data)
数据描述: 该方案本身就是「当日被用户浏览最多」的选股办法——条件文本为 今日浏览排名前4650名;不要ST股及不要退市股;不要北交所;不要科创板;, 即在全市场当日浏览榜里剔除 ST / 退市 / 北交所 / 科创板后取前 4650 名。 取值:factor = -stockrank,其中 stockrank = 页面**「今日浏览排名」**列(1 = 当日浏览量最高)。 因排名越小人气越高,取负号以满足平台约定 factor_direction = 1(因子值越大越看多)。 示例日值域 factor ∈ [-4769.0, -1.0],非稀疏(每个口径日约 3877 只全部有值)。 跨日可比性:stockrank 是全市场口径的绝对名次(含跳号), 因此同一只票在不同交易日的 factor 可直接纵向比较(名次是否上升), 便于做「当日热度变化」类的时序加工。 与「7日关注」的区别:本项目(today_view_rank)是当日浏览名次,衰减快、换手高; 「七日关注」(alpha_7ri_focus)是近 7 日加自选的滚动人气,更平滑。两者属于同一族 (选股人气榜)但口径窗口不同,可互为验证。
文档
用例
表结构
| 字段 | 字段类型 | 字段描述 |
| factor | double | - |
| date | timestamp[ns] | - |
| instrument | string | - |
表名:alpha_today_view_rank_data
起始时间:
最近更新时间: