feat: 因子引擎字段验证改进、股票池过滤修复及实验模块增强
1. 因子引擎字段验证改进 - 新增 SchemaCache.get_all_fields() 方法,返回所有可用字段集合 - 修改 match_fields_to_tables(),对不存在的字段抛出明确错误 - 错误信息包含可用字段列表提示,帮助用户检查拼写 2. 股票池过滤修复 - 修复北交所股票排除逻辑:将识别方式从代码前缀(8/4开头)改为.BJ后缀 - 更新文档注释,明确北交所股票识别规则 3. 实验模块增强 - 新增 regression.py 实现回归实验逻辑 - 新增 output/ 目录存放实验输出结果
This commit is contained in:
@@ -179,6 +179,17 @@ class SchemaCache:
|
||||
return False
|
||||
return field_name in self._field_to_table_map
|
||||
|
||||
def get_all_fields(self) -> Set[str]:
|
||||
"""获取所有可用字段的集合。
|
||||
|
||||
Returns:
|
||||
所有可用字段名的集合
|
||||
"""
|
||||
self._ensure_scanned()
|
||||
if self._field_to_table_map is None:
|
||||
return set()
|
||||
return set(self._field_to_table_map.keys())
|
||||
|
||||
def match_fields_to_tables(self, field_names: Set[str]) -> Dict[str, List[str]]:
|
||||
"""将字段集合按表分组。
|
||||
|
||||
@@ -199,10 +210,13 @@ class SchemaCache:
|
||||
table_to_fields[table] = []
|
||||
table_to_fields[table].append(field)
|
||||
else:
|
||||
# 字段不存在于任何表,归入 "daily" 表(默认表)
|
||||
if "daily" not in table_to_fields:
|
||||
table_to_fields["daily"] = []
|
||||
table_to_fields["daily"].append(field)
|
||||
# 字段不存在于任何表,报错
|
||||
available_fields = self.get_all_fields()
|
||||
raise ValueError(
|
||||
f"字段 '{field}' 不存在于数据库的任何表中。\n"
|
||||
f"可用字段: {sorted(available_fields)[:20]}...\n"
|
||||
f"请检查字段名拼写或同步相关数据表。"
|
||||
)
|
||||
|
||||
# 对字段列表排序以保持确定性输出
|
||||
for fields in table_to_fields.values():
|
||||
|
||||
Reference in New Issue
Block a user