Files
sanguo_vnpy_v2/sanguo_factor/registry.py
T
claude_dev f93621e3fc feat(factor): 因子表达式注册 + Alpha158 子集内置库
- 实现因子表达式注册表(registry.py)
- 实现 Alpha158 子集内置因子库(library.py)
- 使用 vnpy.alpha ts_ 算子语法(ts_mean, ts_delta, ts_max, ts_min)
- 修正列名:close/open/high/low/volume(非 _price 后缀)
- TDD 实现:8 测试全部通过
- 支持因子分类过滤(custom/builtin)
- 防止重复注册

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 08:06:10 +08:00

51 lines
1.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""因子表达式注册表(包装 vnpy.alpha AlphaDataset 范式)."""
from typing import Any
_REGISTRY: dict[str, dict[str, Any]] = {}
def register_factor(name: str, expression: str, category: str = "custom") -> None:
"""注册因子表达式.
Args:
name: 因子名称
expression: 因子表达式字符串(使用 ts_/cs_/math 算子 + 列名)
category: 因子分类(默认 "custom"
Raises:
ValueError: 当因子名称已存在时
"""
if name in _REGISTRY:
raise ValueError(f"因子已存在: {name}")
_REGISTRY[name] = {
"name": name,
"expression": expression,
"category": category
}
def get_factor(name: str) -> dict[str, Any] | None:
"""获取因子表达式.
Args:
name: 因子名称
Returns:
因子信息字典,不存在时返回 None
"""
return _REGISTRY.get(name)
def list_factors(category: str | None = None) -> list[dict[str, Any]]:
"""列出因子表达式.
Args:
category: 分类过滤器,None 表示返回所有因子
Returns:
因子信息字典列表
"""
if category is None:
return list(_REGISTRY.values())
return [f for f in _REGISTRY.values() if f["category"] == category]