84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
"""Central registry for strategy identity and display metadata."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
|
|
MAIN_COMPOSITE_STRATEGY = "main_composite_v1"
|
|
BOX_RETEST_1H_STRATEGY = "box_retest_1h_v1"
|
|
BOX_RETEST_4H_STRATEGY = "box_retest_4h_v1"
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class StrategyDefinition:
|
|
strategy_code: str
|
|
strategy_name: str
|
|
description: str = ""
|
|
mode: str = "paper_only"
|
|
status: str = "active"
|
|
|
|
|
|
STRATEGY_DEFINITIONS: dict[str, StrategyDefinition] = {
|
|
MAIN_COMPOSITE_STRATEGY: StrategyDefinition(
|
|
strategy_code=MAIN_COMPOSITE_STRATEGY,
|
|
strategy_name="综合确认主链路",
|
|
description="迁移期兼容主链路,承载现有综合筛选与确认逻辑。",
|
|
mode="paper_enabled",
|
|
),
|
|
BOX_RETEST_1H_STRATEGY: StrategyDefinition(
|
|
strategy_code=BOX_RETEST_1H_STRATEGY,
|
|
strategy_name="1H箱体突破回踩",
|
|
description="小时级底部箱体突破后回踩箱体上沿或EMA承接的早期结构策略。",
|
|
mode="paper_only",
|
|
),
|
|
BOX_RETEST_4H_STRATEGY: StrategyDefinition(
|
|
strategy_code=BOX_RETEST_4H_STRATEGY,
|
|
strategy_name="4H箱体突破回踩",
|
|
description="底部箱体突破后回踩箱体上沿或EMA承接的结构策略。",
|
|
mode="paper_only",
|
|
),
|
|
}
|
|
|
|
|
|
def normalize_strategy_code(strategy_code: str | None) -> str:
|
|
code = str(strategy_code or "").strip()
|
|
return code or MAIN_COMPOSITE_STRATEGY
|
|
|
|
|
|
def strategy_definition(strategy_code: str | None) -> StrategyDefinition:
|
|
code = normalize_strategy_code(strategy_code)
|
|
return STRATEGY_DEFINITIONS.get(
|
|
code,
|
|
StrategyDefinition(
|
|
strategy_code=code,
|
|
strategy_name=code,
|
|
description="未注册策略,请补充 strategy_registry。",
|
|
status="unknown",
|
|
),
|
|
)
|
|
|
|
|
|
def strategy_label(strategy_code: str | None) -> str:
|
|
return strategy_definition(strategy_code).strategy_name
|
|
|
|
|
|
def registered_strategy_codes() -> list[str]:
|
|
return list(STRATEGY_DEFINITIONS.keys())
|
|
|
|
|
|
def strategy_catalog_seed_rows(strategy_version: str = "") -> list[dict]:
|
|
rows = []
|
|
for item in STRATEGY_DEFINITIONS.values():
|
|
rows.append(
|
|
{
|
|
"strategy_code": item.strategy_code,
|
|
"strategy_name": item.strategy_name,
|
|
"strategy_version": strategy_version or "",
|
|
"status": item.status,
|
|
"mode": item.mode,
|
|
"description": item.description,
|
|
}
|
|
)
|
|
return rows
|