feat(factors): 基础行情字段默认从 pro_bar 表获取
- 修改 Symbol 名称与数据库字段对齐:volume->vol, pct_change->pct_chg - 修改 ExecutionPlanner._infer_data_specs,将基础行情字段路由到 pro_bar 表 - 支持的基础字段:open, high, low, close, vol, amount, pre_close, change, pct_chg 等
This commit is contained in:
@@ -27,8 +27,8 @@ high = Symbol("high")
|
|||||||
#: 最低价
|
#: 最低价
|
||||||
low = Symbol("low")
|
low = Symbol("low")
|
||||||
|
|
||||||
#: 成交量
|
#: 成交量(数据库字段名为 vol)
|
||||||
volume = Symbol("volume")
|
vol = Symbol("vol")
|
||||||
|
|
||||||
#: 成交额
|
#: 成交额
|
||||||
amount = Symbol("amount")
|
amount = Symbol("amount")
|
||||||
@@ -39,8 +39,8 @@ pre_close = Symbol("pre_close")
|
|||||||
#: 涨跌额
|
#: 涨跌额
|
||||||
change = Symbol("change")
|
change = Symbol("change")
|
||||||
|
|
||||||
#: 涨跌幅
|
#: 涨跌幅(数据库字段名为 pct_chg)
|
||||||
pct_change = Symbol("pct_change")
|
pct_chg = Symbol("pct_chg")
|
||||||
|
|
||||||
|
|
||||||
# ==================== 时间序列函数 (ts_*) ====================
|
# ==================== 时间序列函数 (ts_*) ====================
|
||||||
|
|||||||
@@ -409,6 +409,8 @@ class ExecutionPlanner:
|
|||||||
"""从依赖推导数据规格。
|
"""从依赖推导数据规格。
|
||||||
|
|
||||||
根据表达式中的函数类型推断回看天数需求。
|
根据表达式中的函数类型推断回看天数需求。
|
||||||
|
基础行情字段(open, high, low, close, vol, amount, pre_close, change, pct_chg)
|
||||||
|
默认从 pro_bar 表获取。
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
dependencies: 依赖的字段集合
|
dependencies: 依赖的字段集合
|
||||||
@@ -421,16 +423,48 @@ class ExecutionPlanner:
|
|||||||
max_window = self._extract_max_window(expression)
|
max_window = self._extract_max_window(expression)
|
||||||
lookback_days = max(1, max_window)
|
lookback_days = max(1, max_window)
|
||||||
|
|
||||||
# 假设所有字段都来自 daily 表
|
# 基础行情字段集合(这些字段从 pro_bar 表获取)
|
||||||
columns = list(dependencies)
|
pro_bar_fields = {
|
||||||
|
"open",
|
||||||
|
"high",
|
||||||
|
"low",
|
||||||
|
"close",
|
||||||
|
"vol",
|
||||||
|
"amount",
|
||||||
|
"pre_close",
|
||||||
|
"change",
|
||||||
|
"pct_chg",
|
||||||
|
"turnover_rate",
|
||||||
|
"volume_ratio",
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
# 将依赖分为 pro_bar 字段和其他字段
|
||||||
|
pro_bar_deps = dependencies & pro_bar_fields
|
||||||
|
other_deps = dependencies - pro_bar_fields
|
||||||
|
|
||||||
|
data_specs = []
|
||||||
|
|
||||||
|
# pro_bar 表的数据规格
|
||||||
|
if pro_bar_deps:
|
||||||
|
data_specs.append(
|
||||||
DataSpec(
|
DataSpec(
|
||||||
table="daily",
|
table="pro_bar",
|
||||||
columns=columns,
|
columns=sorted(pro_bar_deps),
|
||||||
lookback_days=lookback_days,
|
lookback_days=lookback_days,
|
||||||
)
|
)
|
||||||
]
|
)
|
||||||
|
|
||||||
|
# 其他字段从 daily 表获取
|
||||||
|
if other_deps:
|
||||||
|
data_specs.append(
|
||||||
|
DataSpec(
|
||||||
|
table="daily",
|
||||||
|
columns=sorted(other_deps),
|
||||||
|
lookback_days=lookback_days,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return data_specs
|
||||||
|
|
||||||
def _extract_max_window(self, node: Node) -> int:
|
def _extract_max_window(self, node: Node) -> int:
|
||||||
"""从表达式中提取最大窗口大小。
|
"""从表达式中提取最大窗口大小。
|
||||||
|
|||||||
Reference in New Issue
Block a user