Signal Ready 阶段 - 因子合同冻结
详细版:
../展开讲/SignalReady阶段.md
1. 阶段定位
SignalReady 的职责是冻结横截面因子的正式定义,而不是提前宣布它是赢家。
它回答的问题是:
这个因子到底是什么,以什么角色存在,用什么组合表达,采用什么中性化语义?
SignalReady 是“因子合同层”,不是“统计胜利层”。
推荐主链:
Mandate
-> DataReady
-> SignalReady
-> TrainFreeze
-> TestEvidence
-> BacktestReady
-> HoldoutValidation2. 本阶段只冻结什么
SignalReady 只冻结五组内容:
factor_identityfactor_role_contractfactor_structure_contractneutralization_policydelivery_contract
其中必须显式给出:
factor_role:standalone_alpha | regime_filter | combo_filterfactor_structure:single_factor | multi_factor_scoreportfolio_expression:long_short_market_neutral | long_only_rankneutralization_policy:none | market_beta_neutral | group_neutral
如果是 multi_factor_score,第一版只能是确定性组合公式,不能在这里引入训练后学权重。
3. 本阶段不该做什么
禁止事项:
- 用
IC / IR / Sharpe / 回撤作为 SignalReady formal gate - 在本阶段用全样本结果做因子去重
- 在本阶段根据 Test 或 Holdout 表现回写因子定义
- 在本阶段偷偷重写 DataReady 的 panel key、eligibility 或时间边界
- 用单资产命中率、best horizon 之类时序主线措辞描述横截面因子
SignalReady 可以写“预期方向”和“交付字段”,但不能写“因子已经通过统计检验”。
4. 必需输入
建议至少有以下输入:
panel_manifest.jsonasset_universe_membership.parqueteligibility_base_mask.parquetcsf_data_contract.mdstage_completion_certificate.yaml
5. 必需输出
建议至少产出以下 artifact:
factor_panel.parquetfactor_manifest.yamlfactor_coverage.parquetfactor_contract.mdfactor_field_dictionary.mdsignal_gate_decision.mdartifact_catalog.mdfield_dictionary.md
factor_manifest.yaml 至少应包含:
factor_id: MOM_20D
factor_role: standalone_alpha
factor_structure: single_factor
portfolio_expression: long_short_market_neutral
neutralization_policy: market_beta_neutral
inputs:
raw_factor_fields:
- close
derived_factor_fields:
- ret_20d
time_semantics:
signal_timestamp: close_time
available_after: next_bar_open6. Formal Gate
FG-1: 因子身份明确
- 因子 ID 唯一
- 输入字段明确
- 变换链明确
- 时间语义明确
FG-2: 因子角色明确
- 明确是
standalone_alpha、regime_filter还是combo_filter - 不允许“后面再决定角色”
FG-3: 因子结构明确
- 明确是
single_factor还是multi_factor_score - 若为多因子,组合公式必须确定性、可复现
FG-4: 投组合表达与中性化策略明确
portfolio_expression明确neutralization_policy明确- 若为
group_neutral,所用 taxonomy 版本必须可追溯
FG-5: 交付物真实存在
factor_panel.parquet真实生成factor_manifest.yaml与factor_contract.md一致factor_coverage.parquet能解释缺失与覆盖
7. Audit Gate
SignalReady 可以记录但不应越界的审计项:
- 因子覆盖度
- 因子缺失模式
- 输入字段稳定性
- 新币与稳定币处理语义
这些是合同层审计。
它们不能替代独立样本上的统计证据。
8. 常见反模式
反模式 1:把 SignalReady 写成单因子绩效报告
错误写法:
- “至少 50% 因子 |IC| > 0.02”
- “多空收益年化 > 5% 才能进入下一阶段”
这些都属于 TestEvidence,不属于 SignalReady。
反模式 2:全样本去重
错误写法:
- 用全样本相关性矩阵决定保留哪些因子
- 用未来表现倒推“哪个因子家族该删”
这会把下游信息倒灌回因子定义。
反模式 3:在本阶段学权重
错误写法:
weights = fit_model(X_train, y_train)这已经是 TrainFreeze 之后的事情,不应在 SignalReady 里发生。
反模式 4:角色和表达不冻结
如果没有明确 factor_role 和 portfolio_expression,下游每个人都会按自己的理解消费同一个因子。
9. 与下一阶段的交接
TrainFreeze 只能在已冻结的 Signal 合同上学习训练窗尺子,不能重开以下轴:
- factor expression
- raw / derived fields
- factor role
- factor structure
- portfolio expression
- neutralization policy
下一阶段主要依赖:
factor_panel.parquetfactor_manifest.yamlfactor_coverage.parquetfactor_contract.md
10. 一句话标准
SignalReady 完成后,任何人看到 artifact 都应该能复现同一个因子,而不是各自脑补一版“他真正想表达的信号”。