收盘后动量排序因子
(alpha_closing_momentum_rank_data)
数据描述:
综合强度分 = ROUND(P1 + P2 + ... + P14)
factor = 中性分 = 综合强度分 对「行业哑变量 + ln(流通市值)」回归后的残差
文档
数据简介
收盘后动量排序因子 · 文档
1. 因子定位
收盘后动量排序因子(closing_momentum_rank)是一个收盘后全市场横截面排序因子。
思路:每个交易日收盘后,在 BigQuant AIStudio 内用 dai.query 直读平台宽表 cn_stock_prefactors(后复权行情,一次查询取全市场,不落地任何中间 CSV), 按通达信【历史行情排序公式】《趋势动量综合强度分》(本目录上级 趋势动量综合强度分.txt) 逐票打分,把「趋势 + 动量 + 量能 + 位置 + 涨停活跃度 + 质量」六个维度加权成一个 综合强度分;再在口径日全市场截面上对「行业(申万一级)+ ln(流通市值)」做一次 最小二乘中性化,取残差作为因子值,最后按残差降序排序 —— 剔除行业 beta 与 小盘 beta 之后动量最强的排在最前面。
取值:factor = 中性分,即综合强度分在口径日全市场截面上对 「行业哑变量 + ln(流通市值)」做 OLS 回归后的残差(连续值,可正可负), 本因子方向为正(factor_direction = 1,残差越大动量越强、排名越靠前)。 明细表另保留未经中性化的原始强度分列 总分(ROUND(P1+...+P14),理论满分 225) 仅供对照追溯。
产物:两张表 —— 可读的排序明细表 a_closing_momentum_rank.csv (26 列,含分项 P1~P14 便于归因,另加 总分/中性分/行业/流通市值亿) 与提交用的因子面板 a_closing_momentum_factor.csv(date/instrument/factor 三列)。
与上级文件的关系:公式口径逐字来自 趋势动量综合强度分.txt (与 xinjiangongshi__趋势动量历史排序.txt 逐字节相同);输出列与排序格式对齐样例 排序_趋势动量_2026-09-14_30只.csv。本脚本只是把「通达信公式」变成「每天自动跑的 Python」。
本脚本不做本地因子回测。IC/IR、分层收益、多空绩效、因子报告等一律不在本地计算, 由 AIStudio 平台的因子分析流程(AlphaMiner)在提交后基于因子面板完成。
用例
默认(最新交易日,全市场)
python closing_momentum_rank.py --no-submit
预期:口径日自动判定为最新交易日,全市场遍历(实测待算 5130 只、有效样本 4929 只 = 并发取到 4798 只 + 单连接补采 131 只),耗时约 16 分钟(实测 970s)。
3.2 指定交易日(复盘/校验)
python closing_momentum_rank.py --date 2026-09-14 --no-submit
预期:口径日 end_date=2026-09-14,只保留最后一根 K 线日期恰为 2026-09-14 的票。
检查点:重复执行同一 --date 时,第二次日志为「替换旧行 N 行(覆盖 N + 清理陈旧 0)」, 总行数不变(幂等)。
3.3 小样本快速自测(只跑前 N 只 + 只留前 N 名)
python closing_momentum_rank.py --date 2026-09-16 --limit 120 --top 20 --workers 4 --no-submit --out-dir D:\tmp\cmr_test
预期输出(示例,行数与耗时随当日行情而定)
收盘后动量排序因子 closing_momentum_rank.py [构建 2026-09-17 平台直读 v3]
[环境] python 3.11.0 | dai=不可用(import dai -> ModuleNotFoundError: No module named 'dai' || from bigquant import dai -> ModuleNotFoundError: No module named 'bigquant.dai') | baostock=已安装
[警告] 未检测到平台 SDK dai,将走 baostock 外部接口;BigQuant 沙箱无外网,baostock 必然失败。
当前解释器 = C:\Users\Administrator\AppData\Local\Programs\Python\Python314\python.exe
口径日 end_date=2026-09-16,回溯起点 start_date=2025-11-20,复权=前复权
取数路径 = baostock 降级(外部接口,仅本地环境使用)
待算股票 120 只(type=1 且 status=1,不含北交所,已剔除上市不足 365 自然日的次新股)
行业分类(证监会门类,直连 baostock 未落地文件):1002 行 / 19 个门类,分类更新日 2026-09-16
开始取数:1 块 x <=120 只,1 进程并发
进度 1/1 块,累计有效 112 只,待补采 0 只(149s)
自动判定口径日 = 2026-09-16
剔除 0 只非口径日个股(停牌 / 退市 / 数据滞后)
行业/市值中性化:110 只入回归 / 12 个行业(含「其他」)/ 2 只缺行业或市值退化;原始分 std=41.30 -> 残差分 std=37.35
明细表 a_closing_momentum_rank.csv:本次 20 行,替换旧行 0 行(覆盖 0 + 清理陈旧 0),累计 20 行
去重自检通过:20 行 / 1 个交易日 / 20 只股票,无重复(日期,代码)
因子面板 a_closing_momentum_factor.csv:本次 20 行,替换旧行 0 行(覆盖 0 + 清理陈旧 0),累计 20 行
去重自检通过:因子面板 20 行 / 1 个交易日,无重复(date,instrument)
--no-submit:跳过平台落库与提交
口径日 2026-09-16 动量排序 Top10(共 20 只,按中性分降序):
#1 600059 古越龙山 中性分=37.9820 总分=149 涨幅%=10.0225 换手%=6.3500 P1=30 P2=20 P3=15
#2 600088 中视传媒 中性分=35.4415 总分=149 涨幅%=4.2244 换手%=13.8231 P1=30 P2=20 P3=15
#3 600105 永鼎股份 中性分=12.6690 总分=117 涨幅%=9.9976 换手%=10.2194 P1=30 P2=20 P3=15
完成,用时 149s
表结构
| 字段 |
字段类型 |
字段描述 |
| date |
timestamp[ns] |
-
|
| factor |
double |
-
|
| instrument |
string |
-
|
表名:alpha_closing_momentum_rank_data
起始时间:
最近更新时间: