shy3130
|
e89ea9becf
|
fix: 修复 4 个 P1 issue (#224/#232/#223/#215)
- #224 screener 自定义 SQL 的内存连接关闭 enable_external_access,
注入的 read_parquet/COPY 文件读写直接报错 (安全)
- #232 指数展示缓存百分数口径在消费边界显式 /100:
pipeline._bench_rt_pct_of 与 abnormal_moves._bench_rt_pct 两处,
修复 3/10/30 日偏离值被放大两个数量级
- #223 盘后管道按同日 daily/enriched 行数比较检测实时合并提前
创建的部分分区, 删除后由增量重算全市场补齐
- #215 _basic_filter_for_asset 扩展中和股票专属键 (price_min/max/boards),
并应用到回测/挖掘/策略扫描三个运行期入口, 修复 ETF 静默零信号
|
2026-09-03 13:01:43 +08:00 |
|
SeerGlaucus
|
ba83e0241b
|
fix(backtest): ETF矩阵回测不因缺失换手率字段而失败
非股票资产(etf/index)无股本数据(维表仅 symbol/name/code/asset_type),
数据源也不提供换手率; 但矩阵缓存档 common_filter 强制 turnover_min:0.0,
依赖解析仍为 ETF 请求 turnover_rate(需 float_shares 派生), 导致矩阵缓存
构建失败。实测内置 low_volatility_leader 也报
"matrix turnover_rate requires float_shares"。
- _basic_filter_for_asset 将 turnover_min/max 一并中和(与市值界同族, 上次修复遗漏)
- _populate_matrix_derived_arrays 对无股本的 etf/index 把缺失的 turnover_rate
降级为全 NaN 列(与运行期 _optional_field 语义一致), 股票派生路径行为不变
- 新增回归测试: ETF 无股本时降级 NaN 不报错; 有 float_shares 时仍正常派生
|
2026-09-03 02:37:52 +08:00 |
|
shy3130
|
61130cfdff
|
fix(backtest): ETF/指数矩阵链路不再要求股本字段, 修复因子挖掘准备阶段失败
etf 维表(index_sync)物理上只有 symbol/name/code/asset_type, enriched 窄表
也不落盘股本字段; 而 DEFAULT_BASIC_FILTER 与矩阵缓存档 common_filter 均带
非 None 市值界, 依赖解析会无条件要求 total_shares/float_shares, 导致
_resolve_matrix_storage_fields 抛
"matrix parquet fields unavailable: ['float_shares', 'total_shares']"
(用户反馈: ETF 因子挖掘死于「准备共享撮合矩阵」阶段)。
- 新增 _basic_filter_for_asset: 非股票资产将市值/流通市值四项界置 None,
依赖解析前中和; 运行期过滤本就对缺失股本列降级 no-op, 无需改动
- StrategyDependencyResolver.resolve 新增 asset_type 参数(默认 stock,
旧调用行为不变), 四个调用点传入真实资产类型:
build_matrix_cache_profile / prepare_matrix_optimization /
单次回测 / composite 子计划
- mining_runtime._prepare_base_market 两处 resolve 传入 request.asset_type
- 新增回归测试: ETF 计划与缓存档不含股本字段、股票行为不变、
ETF 维表下字段解析成功、反向对照锁定失败模式
验证: 全量 pytest 976 passed; 真实组件端到端复现用户失败路径已转绿
(ETF enriched + 四列维表, 共享矩阵 (280,3) 构建成功)。
|
2026-08-23 17:46:54 +08:00 |
|