fix(factor): window_start对11月月末产非法日期2026-00-01——月数学0-based化根治(1-based减法%12归零;11月每夜班日度批+12月月度班start全非法流入vnpy查询,12-01首炸);回归锚钉2025-12-01 [vps] [no-doc]
This commit is contained in:
@@ -37,8 +37,8 @@ def month_end(as_of: str) -> str:
|
|||||||
def window_start(end: str, window_months: int = 12) -> str:
|
def window_start(end: str, window_months: int = 12) -> str:
|
||||||
"""闭区间起点:含 end 当月共 window_months 个月的月初(起步默认 12M)."""
|
"""闭区间起点:含 end 当月共 window_months 个月的月初(起步默认 12M)."""
|
||||||
y, m = int(end[:4]), int(end[5:7])
|
y, m = int(end[:4]), int(end[5:7])
|
||||||
total = y * 12 + m - (window_months - 1)
|
total = y * 12 + (m - 1) - (window_months - 1)
|
||||||
return f"{total // 12:04d}-{total % 12:02d}-01"
|
return f"{total // 12:04d}-{total % 12 + 1:02d}-01"
|
||||||
|
|
||||||
|
|
||||||
def resolve_with_yaml(registry: dict):
|
def resolve_with_yaml(registry: dict):
|
||||||
|
|||||||
@@ -44,6 +44,15 @@ def test_window_start_twelve_months():
|
|||||||
assert window_start("2026-09-30", 12) == "2025-10-01"
|
assert window_start("2026-09-30", 12) == "2025-10-01"
|
||||||
|
|
||||||
|
|
||||||
|
def test_window_start_december_month_math():
|
||||||
|
"""11 月月末回归锚:1-based 月减法 %12 归零曾产 '2026-00-01'(月=00 非法)."""
|
||||||
|
from sanguo_factor.monthly_batch import window_start
|
||||||
|
assert window_start("2026-11-30") == "2025-12-01" # 含 11 月共 12 个月
|
||||||
|
assert window_start("2026-12-31") == "2026-01-01"
|
||||||
|
assert window_start("2026-01-31") == "2025-02-01"
|
||||||
|
assert window_start("2026-09-30") == "2025-10-01" # 既有正确值不变
|
||||||
|
|
||||||
|
|
||||||
def test_plan_batch_excludes_dead_and_labels(registry):
|
def test_plan_batch_excludes_dead_and_labels(registry):
|
||||||
plan = plan_batch(registry, "2026-09-30")
|
plan = plan_batch(registry, "2026-09-30")
|
||||||
assert plan["factor_names"] == ["vol_ma5"]
|
assert plan["factor_names"] == ["vol_ma5"]
|
||||||
|
|||||||
Reference in New Issue
Block a user