跳到正文

研究指南

股票因子研究

股票行业内因子排序:检验选股结果是否只来自行业偏重

行业内排序要回答一个具体决策问题:同一股票因子,在每个行业预留名额后,会不会换成不同公司?从同一时点面板生成两套篮子,一套全市场排序,另一套先分行业再各自排序,比较成员、暴露、实际订单和净权益。只有行业回归系数,不能交付这份持仓对照。

本例使用六只虚构美股和美元账户,分数、行业、价格全部合成。CoTrading行业诊断能力仍为规划或待核实,不声称内置评估器已经提供行业中性优化。交付物是带时点标签表、两份确定名单和两套独立费用账,结果只验证构造机制,不代表历史因子收益。

先取得当时存在的行业标签

每条记录保留证券标识、分类体系、行业代码、生效日、公布日和版本。后来才生效的分类,不能因为今天文件已经包含,就用来重新组织过去股票池。缺历史版本时,先写明限制,再决定研究能否称为历史行业对照。当前分类可以用于当前观察,不能自动证明旧时期的归属。

SEC官方SIC说明介绍公司申报中的行业代码。它是一种可能来源,不保证当前列表还原所有历史变动,也不保证与另一供应商分类一致。本研究固定同一体系,不把名称相近的行业标签混用。分类来源本身也需要版本与有效区间。

样例使用自行定义的Tech和Utility,不把它们冒称正式SIC归类。D在一月三十日仍属于Utility,另有记录从二月一日起属于Tech。一月选择必须保留旧标签。这条测试把行业时点与因子数字隔离,防止标签回填改变结果后,被误解释成评分模型更新。

冻结两种名额规则

全市场篮子从六只合格股票取最高两只;行业内篮子给Tech和Utility各预留一只,取该行业最高分。两者均先分数降序,再证券标识升序处理同分,不读取后续估值。全市场与行业内不是同一种排序的两种展示,而是明确不同的持仓构造,需要独立订单。

本例要求行业至少有两只有效股票才填预留位。小于两只就留现金,不把名额转给大行业。它是预先指定的小样本政策,不是最优门槛。此时股票暴露降低,应直接报告,不能假装两套组合除行业排序外各方面始终相同。真实研究可以另选门槛,但要在观察结果前确定。

决策信息可得性、价格口径和交易日期保持一致,不能一边调整行业,另一边同时修改成本或使用不同数据。Python排序官方文档支持样例使用的多字段键。仅依赖排序稳定性还不够,如果输入顺序没有经过批准,它仍可能成为隐藏决胜规则。

重建六只股票截面

Tech的A、B、C分别九、八、七分,Utility的D、E、F分别三、二、一分。全市场选择A、B;行业预留选择A、D。前者股票部分全部来自Tech,后者两个股票名额分属两个自定义行业。原始六行保留,不只保存一个行业平均分或最后权重图。

这不证明全市场因子错误。分数可能真实反映行业经济差异,也可能跨行业量纲不适合直接比较。行业内排序主动丢弃行业间水平信息,换取每行业固定代表。需要把取舍写清,不能把约束说成免费的改进,更不能因为样例D后来涨得多,就断言行业调整普遍有效。

逐行标记两套入选状态及理由。B仍合格,只是没有拿到约束后的第二个行业位;D因为是Utility最高分进入。它们与行情缺失、失去资格、订单被拒绝不同。原因表能让读者看到规则究竟在哪一步改变了成员,而不必从净值差异反向猜测。

从同一已有账户分别核账

两个对照账户都从四十股A、四十股E、现金二百开始,参考价均十,起始权益一千。这是给定期初状态,没有补造更早买入成本,也不测量完整投资生命周期。比较的是从同一持仓出发的下一次调仓,避免因不同期初资金掩盖实际规则差异。

全市场保留A,以十卖四十股E,费一,净入三百九十九;再以十买四十股B,连费共四百零一。现金剩一百九十八。后续给定A十点二、B十点一,价值分别四百零八、四百零四,总权益一千零一十。两笔费用分别落入真实模拟订单,不从其他篮子复制。

行业内账户改为卖E买D,同样参考开盘十、每笔费一,现金也是一百九十八。A仍值四百零八,D按十点五估值四百二十,权益一千零二十六。两者相差十六,是人为价格下的决策后果,不是行业中性因子溢价估计。共同成员A没有产生重复买单。

小行业反例改变的是覆盖和暴露

从有效截面移除E与F,Utility仅余D,达不到两只门槛,因此预留位空缺,即使D本身有数值分数。行业内目标只剩A。从相同旧持仓卖E,支付一,现金变五百九十九,仍有四十股A。A十点二时权益一千零七,只发生一次收费,没有替换买入。

这属于覆盖与暴露变化,不只是排序。若系统把空余四百全加给A,就成了另一策略,不能悄悄混入本例结果。分类回填是另一个反例:若把D二月Tech标签提前用于一月,行业有效成员就会变。标签时点与样本数需分别检查,现金账通过不会证明分类历史正确。

执行完整双篮子样例

下载完整示例,保存为R563.py,用Python 3.12及以上运行python R563.py。仅用标准库和合成数据,仓库源文件为docs/growth/research/round-5/examples/R563.py,不连接行情、账户或产品服务。

断言要求全市场A/B、行业内A/D、D的一月与二月标签正确,小行业分支仅A。每个账户重新构造订单与费用,期末分别一千零一十、一千零二十六、一千零七。它们不是由同一个毛收益换名字得到。检查者可以逐项用四十股乘价格与带符号现金独立重算。

解释与更新时保留范围

收益旁报告股票和现金比例、行业权重、换手与空名额。净差异可能同时包含选择、暴露和费用,没有进一步受控拆分,不能全部归给某一种机制。各行业相同名额不等于基准行业权重,不等于回归残差化,也不等于风险优化。文章和图表使用准确构造名称。

扩大研究前抽一个真实日期,从历史标签贯穿到订单账。分类体系、股票池或名额政策变化后重跑并保存两版。A股、港股和美股分别使用自己的行业覆盖与执行假设。完成条件是两种明确构造可以被独立复现,不是宣称所有行业风险都已消除;无法恢复的标签和未验证交易条件应持续列入研究限制。

区分成员变化能够证明什么

解释从成员出发,不从最后收益差出发。保持期初账户与执行约定不变,分别列全市场规则和行业预留产生的退出与进入。本例共同保留A,共同退出E,只有替换成员不同,所以可以清楚追到决策桥,但不能假装后来价格路径事前可以预测。把共同动作与不同动作分开,也能防止重复归因费用。

更大历史对照需检查现金暴露是否因为行业覆盖不足而不同。若不同,把观察到的合并结果与另行设计的等暴露实验区分开。不能悄悄把小篮子归一到满仓,因为那会改变数量与成本。等暴露变体可以另行研究,但必须有自己的构造和现金账,不能当成原规则只是换一种画法。

分类可得性也有两个时间。行业归属可能在某天生效,研究管线却晚些才观察到。历史决策需要同时满足所选生效约定和信息截止。今天标签有充分说明,不代表过去不知道的分类可以按假设补齐。未知状态应排除,或明确把研究标成使用当前分类的回溯,不能称恢复了当时知识。

如果有人问因子是不是“只押行业”,先用成员原因表说明本次约束改变了什么。它只展示对一种明确行业限制的敏感度,不提供普遍收益来源结论。多种拆分方式都可能合理,报告必须让读者看清实际测试的两条规则、覆盖和费用,而不是把一个简化比较包装成因果鉴定。

审阅时可以分开签收标签时点、入选名单、执行账和解释范围。某一项不通过,不应因为其他表格漂亮就忽略。尤其小行业名单是否留现金,必须在看到其后价格前定好;事后只对下跌行业启用样本门槛,会把数据政策变成另一种选择规则。冻结这些细节,才有条件继续扩大真实样本并诚实比较结果。

常见问题

行业内排序保证行业中性吗?

不保证。固定名额既不等于基准权重,也不会中和全部风险。

行业样本不足怎么办?

本契约留现金并报告暴露变化,不自动把名额转给其他行业。

相关阅读