AI 原生量化投研平台AI-native quantitative research platform
正在加载…Loading…
页面仍在加载,可以继续等待,或重新加载。The page is still loading. You can keep waiting or reload.
部分页面资源未能加载,请重新加载。Some page resources could not load. Please reload.
设备当前处于离线状态,恢复连接后可以继续等待或重新加载。Your device is offline. Once connected, you can keep waiting or reload.
11 个字段
衡量个股成交额对市场趋势的跟随性,按股价高低位区分方向的选股因子
研报提出一个问题:个股成交额跟随市场趋势,是否预示未来收益较高?答案取决于情形,研报分两种情形讨论并得出方向相反的两个结论。其一,当个股股价处于相对高位时,成交额与其他股票的关联性越高越好——此时成交额更多由市场趋势带动而非个股独立交易,说明投资者对该股价格看法仍较一致、尚未出现大分歧,上涨趋势可能未结束;据此构造「随波逐流」因子。其二,当市场分化不明显时,成交额与其他股票的关联性越低越好——市场缺乏热点时,那些成交额走出独立趋势的股票更可能在酝酿新热点;据此构造「孤雁出群」因子。两个因子逻辑相反、相关性接近 0,等权合成得到「水中行舟」因子。本表输出研报推进链条上的全部 9 个因子:2 个日频中间量、「随波逐流」、「孤雁出群」族 4 个,以及最终的 boat_in_water 与正交化后的 boat_in_water_pure。
数据区间:2015-01-05 ~ 2026-11-03(每个交易日一条记录)。
cn_stock_factors_hf_fz_boat_in_waterdate + instrument| 字段 | 类型 | 可空 | 含义 |
|---|---|---|---|
date | PlDatetime | 否 | 交易日期 |
instrument | PlString | 否 | 股票代码 |
reasonable_return | PlFloat64 | 是 | 合理收益率,当日及过去 19 个交易日日内收益率(收盘价/开盘价 - 1)的均值,用作划分日内价格高低位的阈值 |
high_low_amount_diff | PlFloat64 | 是 | 高低额差,相对开盘收益率高于合理收益率的分钟成交额之和减去低于合理收益率的分钟成交额之和,再除以当日收盘流通市值 |
go_with_flow | PlFloat64 | 是 | 随波逐流,个股 20 日高低额差序列与全市场其余每只股票对应序列的 Spearman 相关系数,取绝对值后求均值;恒落在 [0, 1],值越大未来收益越高(本表唯一方向为正的因子) |
lone_goose_daily | PlFloat64 | 是 | 日孤雁出群,当日「不分化时刻」内个股分钟成交额序列与全市场其余每只股票对应序列的 Pearson 相关系数,取绝对值后求均值;恒落在 [0, 1] |
lone_goose_mean | PlFloat64 | 是 | 月均孤雁出群,过去 20 个交易日 lone_goose_daily 的均值;值越大越差 |
lone_goose_std | PlFloat64 | 是 | 月稳孤雁出群,过去 20 个交易日 lone_goose_daily 的样本标准差;恒非负,值越大说明关联性越不稳定 |
lone_goose | PlFloat64 | 是 | 孤雁出群,上两者各自截面去极值标准化后等权平均;值越大越差 |
boat_in_water | PlFloat64 | 是 | 水中行舟,孤雁出群与随波逐流各自截面去极值标准化后等权合成(随波逐流取负号),研报的最终合成因子;值越小未来收益越高 |
boat_in_water_pure | PlFloat64 | 是 | 纯净水中行舟,boat_in_water 对申万一级行业哑变量与十个常见风格因子回归后的残差 |
| 依赖表 | 频率 | 用到的字段 | 用途 |
|---|---|---|---|
cn_stock_bar1m_c | 1 分钟 | date、instrument、open、close、amount | 分钟相对开盘收益率与分钟成交额,用于「高低额差」;分钟收益率与分钟成交额,用于「分钟市场分化度」与「日孤雁出群」 |
cn_stock_prefactors | 日频 | date、instrument、open、close、float_market_cap | 日内收益率算「合理收益率」,流通市值作「高低额差」的分母 |
cn_stock_prefactors | 日频 | date、instrument、sw2021_level1、total_market_cap、pb、roe_avg_ttm、total_operating_revenue_ttm、debt_to_asset_lf、turn、daily_return、beta_000300SH_22 | 构造 boat_in_water_pure 回归用的申万一级行业哑变量与十个风格因子 |
cn_stock_prefactors 是聚合日频 view,上表按用途分两行列出,实际只查这一张表、不展开成底层原始表。
「合理收益率」需 20 个交易日、相关系数窗口再需 20 个交易日,故 cn_stock_bar1m_c 与 cn_stock_prefactors 的日频中间量实际读取区间比输出区间向前多 45 个交易日;boat_in_water_pure 的风格因子含 250 个交易日同比项,其读取区间向前多 255 个交易日。lone_goose_daily 另需逐个交易日单独查询当日分钟数据(含输出区间前 19 个交易日,供 20 日滚动预热)。
构建逻辑: 对于股票 A,每天计算 t 日及过去 19 个交易日(t−1、t−2 …… t−19)的日内收益率(收盘价/开盘价 - 1)的均值。
项目实现说明: 日内收益率取 cn_stock_prefactors 的 close / open - 1。该比值在同一交易日内与复权口径无关,用后复权价计算与用原始价一致。停牌日价格为空,窗口统计用忽略空值的变体,避免一个停牌日把此后整个窗口拖成空值。
构建逻辑:
项目实现说明:
open。研报在「剔除集合竞价」之后才使用「当日开盘」,故不取集合竞价价格。cn_stock_bar1m_c(未复权)、分母取自 cn_stock_prefactors(后复权流通市值)。因子是「成交额/市值」的比值,成交额本身不受复权影响,流通市值也是真实金额,两者量纲一致。构建逻辑:
项目实现说明:
correlation_bounds 逐日守护。构建逻辑:
项目实现说明:
correlation_bounds 测试点守护。构建逻辑: 取过去 20 个交易日日孤雁出群的均值。
构建逻辑: 取过去 20 个交易日日孤雁出群的样本标准差。
构建逻辑:
项目实现说明: 研报只写「等权合成」,未披露合成前的标准化口径。本项目两处合成一律先做截面 1%/99% 分位截尾再 z-score,然后算术平均。由于本表两个分量都在 Python 侧算出,该步骤用 polars 按同一口径复刻(同系列之五、之六、之八在 SQL 里用 c_normalize(c_winsorize(...)) 实现,二者等价)。
构建逻辑:
项目实现说明: 研报只说「等权合成」,未写明符号处理,但明确交代两个因子「方向完全相反」——随波逐流越大越好(Rank IC 为正),孤雁出群越小越好(Rank IC 为负)。若直接相加,两者的预测信息会相互抵消。本项目实现为孤雁出群减随波逐流(各自截面截尾 + z-score 后再相减、除以 2),使合成因子统一为「值越小未来收益越高」,与研报给出的 boat_in_water 方向(Rank IC -9.36%)及其强于两个分量的量级一致。
构建逻辑:
项目实现说明: 研报未披露所用风格因子的具体清单与计算口径,本项目选用十个常见风格因子,均取自 cn_stock_prefactors:市值(总市值取对数)、非线性市值(标准化市值的三次方)、估值(市净率倒数)、盈利(roe_avg_ttm)、成长(营业总收入 TTM 相对 250 个交易日前的同比)、杠杆(debt_to_asset_lf)、流动性(20 日换手率均值取对数)、反转(20 日日收益均值)、波动(20 日日收益标准差)、贝塔(beta_000300SH_22)。行业用申万一级,以哑变量形式进入回归并去掉一列以免与截距共线。缺失暴露按当日同行业均值填补;回归前对因子与各风格暴露做 MAD 5 倍去极值与 z-score。某日有效样本数不足设计矩阵列数 2 倍时该日整体置空。
核对口径: 2015-01-01 ~ 2023-01-31;全市场不做任何股票过滤;前向收益取次日开盘到 21 个交易日后开盘(cn_stock_prefactors.open,后复权);Rank IC(因子与前向收益各自取截面百分位排名后求相关,口径同 hfwarehouse.utils.ic.validate_factor_ic);因子按研报口径先做市值 + 行业正交化(申万一级行业 + 流通市值,与 DAI c_neutralize 逐值等价),boat_in_water_pure 已在构建时正交化故不再重复处理。研报为月末截面、本项目逐日,故给出两列:「月末口径」= 每个自然月最后一个交易日截面,共 97 个截面(孤雁出群族 96 个);「逐日全样本」= 区间内全部交易日,约 1950 个截面。多空组合为月末调仓、十分组、组内等权、不扣费;go_with_flow 方向为正,其多空按「做多最高一组、做空最低一组」计算,其余因子方向为负、按相反口径计算。
区间差异(对照前必读): 研报测试区间为 2013 年 1 月至 2023 年 1 月,本项目按需求自 2015-01-01 回填,少了 2013、2014 两年。上游 cn_stock_bar1m_c 自 2005 年起可用,这不是数据限制而是回填起点的选择;需要与研报完全同区间时把 notebook 第一段的 HISTORY_START 改回 2013-01-01 重跑即可。
ICIR 口径差异: 研报的 Rank ICIR 是年化值,本项目的截面 ICIR(IC 均值 / IC 标准差)未年化,两者直接比会差 12 倍(同系列研报一致的口径)。下表「月末口径」列同时给出未年化值与年化值(× 12),与研报可比的是括号里的年化值。
| 因子 | 本项目(月末口径,ICIR 括号内为年化) | 本项目(逐日全样本) | 研报原文 | 出处 |
|---|---|---|---|---|
go_with_flow | IC +0.0605,ICIR +0.98(+3.40),多空年化 17.08%,信息比 2.11,月度胜率 73.20% | IC +0.0604,ICIR +0.99 | Rank IC +5.89%,Rank ICIR +3.29,多空年化 16.26% | 研报 2.1 节 |
lone_goose_mean | IC -0.0783,ICIR -0.87(-3.00),多空年化 28.98%,信息比 2.39,月度胜率 75.00% | IC -0.0850,ICIR -0.92 | Rank IC -8.23%,Rank ICIR -3.17,多空年化 29.25% | 研报 2.2 节 |
lone_goose_std | IC -0.0710,ICIR -1.06(-3.68),多空年化 27.60%,信息比 3.00,月度胜率 83.33% | IC -0.0772,ICIR -1.18 | Rank IC -7.03%,Rank ICIR -3.90,多空年化 27.49% | 研报 2.2 节 |
lone_goose | IC -0.0802,ICIR -0.97(-3.35),多空年化 31.26%,信息比 2.70,月度胜率 79.17% | IC -0.0873,ICIR -1.05 | Rank IC -8.20%,Rank ICIR -3.55,多空年化 31.26% | 研报 2.2 节 |
boat_in_water | IC -0.0952,ICIR -1.45(-5.01),多空年化 34.54%,信息比 3.57,月度胜率 83.33% | IC -0.1012,ICIR -1.47 | Rank IC -9.36%,Rank ICIR -4.95,多空年化 36.24%,信息比 4.40,月度胜率 86.67% | 研报 2.3 节 |
boat_in_water_pure | IC -0.0400,ICIR -1.07(-3.72),多空年化 16.49%,信息比 2.54,月度胜率 79.17% | IC -0.0419,ICIR -1.04 | Rank IC -4.71%,Rank ICIR -4.36,多空年化 17.59%,信息比 3.34 | 研报 2.4 节 |
研报还给出十分组多头年化 26.36% / 空头 -8.35%(2.3 节)、三个宽基成分股内的多头年化超额 9.48% / 9.71% / 18.51%(3.6 节)、三个指数增强组合的年化超额 7.71% / 12.49% / 17.80%(3.6 节)、以及周频调仓下多头 33.72% / 多空 60.22%(3.7 节)。本表不做指数成分股切分、指增组合与周频回测,这些项不列入核对。
整体结论: 这是本系列四篇复现中吻合度最高的一篇,六个因子的 Rank IC 偏差全部在 0.0071 以内,年化 ICIR 偏差在 0.64 以内,多空年化偏差在 1.7 个百分点以内,方向全部一致。
lone_goose 的多空年化 31.26% 与研报 31.26% 两位小数完全一致;lone_goose_mean 28.98% 对 29.25%(差 0.27pp)、lone_goose_std 27.60% 对 27.49%(差 0.11pp)。go_with_flow 的正方向复现无误,这是全系列唯一一个 Rank IC 为正的因子:本项目 +0.0605、年化 ICIR +3.40,研报 +5.89%、+3.29;按正向口径的多空年化 17.08% 对研报 16.26%。boat_in_water:IC -0.0952(研报 -9.36%)、年化 ICIR -5.01(研报 -4.95)、多空年化 34.54%(研报 36.24%)、月度胜率 83.33%(研报 86.67%)。信息比 3.57 低于研报 4.40,是偏差最明显的一项。go_with_flow 与 lone_goose 的 Spearman 相关均值为 -0.046,全样本 Pearson 为 -0.059。正因为相关性极低,合成后 IC 绝对值(0.0952)明显高于两个分量(0.0605 / 0.0802),与研报的提升幅度一致。已知的口径差异:
c_normalize(c_winsorize(...))。其他交叉核对(不依赖区间,可直接验证实现正确性的三处):
| 核对项 | 本项目 | 研报原文 | 出处 |
|---|---|---|---|
| 两个分量的相关性 | 月末截面 Spearman 均值 -0.046,全样本 Pearson -0.059 | 「二者相关性接近于 0」 | 研报 1 节、2.3 节 |
| 相关系数类因子的取值范围 | 全表 1167 万行实测 go_with_flow、lone_goose_daily、lone_goose_mean 均落在 [0, 1],越界 0 行;lone_goose_std 无负值 | 因子定义为相关系数绝对值的均值 | 研报 2.1 节第 7 点、2.2 节第 5 点 |
| 日内有效 bar 数 | 240 根(09:31–15:00),分钟收益率首分钟为空故分化度用 239 个分钟 | 「在全天 240 个交易分钟里」 | 研报 2.1 节第 3 点 |
两个因子的相关系数都用「标准化后一次矩阵乘」实现(ZZ⊤/(n−1) 即相关矩阵),而非逐对循环:N 约 5500 时 5500×20 与 5500×166 两种规模的矩阵乘均在 0.1 秒量级,lone_goose_daily 单个交易日含取数总耗时约 0.8 秒。由 Cauchy–Schwarz 不等式,该写法保证 ∣corr∣≤1,故相关系数类因子的 [0, 1] 上界是构造性的,由入库前测试点 correlation_bounds 逐日守护。
首次回填时门禁拦下的一个实现缺陷(已修,记录备查):序列恒定的个股(如 2016-11-23 的 300567.SZ,当日 161 个不分化分钟成交额全为 0)标准差为 0,早期实现把这类行整体置 0,导致其相关矩阵对角线为 0 而非 1,减去 1 后得到 -0.00036 的负值,被 correlation_bounds 抓出。修法是把退化行标为无效、从相关矩阵中整体剔除、该日置空,并且不计入其他个股求均值的分母。同时把 numpy 侧的 NaN 在产出处立即收敛为 NULL——polars 的 mean / std / quantile 会被 NaN 毒化(null 则跳过),留着会让后续截面标准化整列变 NaN。
覆盖度:2015-01-05 ~ 2026-09-30 共 2855 个交易日、1167 万行,全表无 NaN 与 ±Inf。boat_in_water 逐年有效值占比 88.2%(2016 年)~ 99.6%,go_with_flow 94.3% ~ 99.8%;2016 年偏低来自当年大面积停复牌使 20 日窗口内高低额差有效天数不足 15 天,逐年入库时随机抽日的入库前测试全部通过。
样本外表现(2023-02-01 ~ 2026-09-30,逐日,871 个截面):六个因子方向全部保持,无符号反转。
| 因子 | 样本内逐日 IC | 样本外逐日 IC | 样本内 ICIR | 样本外 ICIR |
|---|---|---|---|---|
go_with_flow | +0.0604 | +0.0510 | +0.99 | +0.60 |
lone_goose_mean | -0.0850 | -0.0488 | -0.92 | -0.60 |
lone_goose_std | -0.0772 | -0.0547 | -1.18 | -0.83 |
lone_goose | -0.0873 | -0.0567 | -1.05 | -0.72 |
boat_in_water | -0.1012 | -0.0743 | -1.47 | -0.96 |
boat_in_water_pure | -0.0419 | -0.0185 | -1.04 | -0.48 |
核心因子 boat_in_water 从 -0.1012 衰减到 -0.0743(27%),仍是全表最强;go_with_flow 衰减 16%、是衰减最少的一个,且方向稳定为正。衰减最明显的是 lone_goose_mean(-0.0850 → -0.0488,43%),说明「市场清淡时成交额独立」这条线路近四年弱化较多,而其稳定性分量 lone_goose_std 衰减较轻(29%)。boat_in_water_pure 从 -0.0419 降到 -0.0185(56%)、ICIR 从 -1.04 降到 -0.48,剥离风格后的增量信息已很薄;这与同系列之四、之五、之六、之八的 _pure 版本是同一模式,使用前应复核当期表现。样本外区间末端约 21 个交易日因前向收益窗口不完整而无 IC,已从序列中剔除。
按 date、instrument 排序后的前 5 行与后 5 行,由 update_docs() 推送文档时自动填充。
| date | instrument | reasonable_return | high_low_amount_diff | go_with_flow | lone_goose_daily | lone_goose_mean | lone_goose_std | lone_goose | boat_in_water | boat_in_water_pure |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026-11-03 00:00:00 | 000001.SZ | 0.002783 | 0.004718 | 0.223046 | 0.092372 | 0.106288 | 0.030574 | -0.877263 | -0.590173 | -0.766230 |
| 2026-11-03 00:00:00 | 000002.SZ | -0.002738 | 0.017328 | 0.226103 | 0.080960 | 0.120248 | 0.047605 | 0.295078 | 0.007599 | 0.116106 |
| 2026-11-03 00:00:00 | 000006.SZ | -0.002875 | 0.002052 | 0.244806 | 0.146753 | 0.124478 | 0.039243 | -0.063281 | -0.499223 | 0.168740 |
| 2026-11-03 00:00:00 | 000007.SZ | -0.007035 | 0.032765 | 0.220125 | 0.066676 | 0.115753 | 0.046419 | 0.144365 | 0.022918 | 0.413120 |
| 2026-11-03 00:00:00 | 000008.SZ | -0.000357 | 0.015398 | 0.215819 | 0.078874 | 0.082639 | 0.023168 | -1.731633 | -0.943302 | -0.595815 |
| 2026-11-03 00:00:00 | 688835.SH | -0.011860 | -0.050670 | 0.216996 | 0.063407 | 0.105138 | 0.040080 | -0.398169 | -0.225420 | -1.465633 |
| 2026-11-03 00:00:00 | 688836.SH | 0.032881 | -0.159202 | 0.189055 | 0.111430 | 0.134561 | 0.042119 | 0.286118 | 0.614053 | -1.234012 |
| 2026-11-03 00:00:00 | 688837.SH | -0.007203 | -0.083619 | 0.178490 | 0.111839 | 0.128729 | 0.042922 | 0.214172 | 0.748648 | -0.155498 |
| 2026-11-03 00:00:00 | 688981.SH | -0.003565 | 0.021409 | 0.198738 | 0.124825 | 0.186964 | 0.045155 | 1.473469 | 1.110768 | 0.896099 |
| 2026-11-03 00:00:00 | 689009.SH | 0.002959 | 0.015720 | 0.205983 | 0.095556 | 0.134860 | 0.044344 | 0.409376 | 0.402841 | -0.141514 |
SELECT date, instrument, reasonable_return, high_low_amount_diff, go_with_flow, lone_goose_daily, lone_goose_mean FROM cn_stock_factors_hf_fz_boat_in_water WHERE date >= '2026-10-06' ORDER BY date LIMIT 100
SELECT date, instrument, reasonable_return, high_low_amount_diff, go_with_flow, lone_goose_daily, lone_goose_mean FROM cn_stock_factors_hf_fz_boat_in_water WHERE date >= '2026-10-06' ORDER BY date LIMIT 100