移植 A_Share_DP 引擎;本地缓存与 60s tip;月线由日线 UTC 聚合;不碰主站 analyze/缠论叠层。 Co-authored-by: Cursor <cursoragent@cursor.com>
40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
"""Rule Registry — register Wyckoff rules without modifying engines."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from crypto_wyckoff.rules.base import WyckoffRule
|
|
|
|
|
|
class RuleRegistry:
|
|
def __init__(self) -> None:
|
|
self._rules: dict[str, WyckoffRule] = {}
|
|
|
|
def register(self, rule: WyckoffRule) -> None:
|
|
self._rules[rule.rule_id] = rule
|
|
|
|
def get(self, rule_id: str) -> WyckoffRule | None:
|
|
return self._rules.get(rule_id)
|
|
|
|
def by_category(self, category: str, timeframe: str | None = None) -> list[WyckoffRule]:
|
|
out = [r for r in self._rules.values() if r.category == category]
|
|
if timeframe:
|
|
out = [r for r in out if timeframe in r.timeframes]
|
|
return out
|
|
|
|
def all(self) -> list[WyckoffRule]:
|
|
return list(self._rules.values())
|
|
|
|
|
|
rule_registry = RuleRegistry()
|
|
|
|
|
|
def _register_defaults() -> None:
|
|
from crypto_wyckoff.rules import cycle_rules, event_rules, phase_rules
|
|
|
|
for mod in (cycle_rules, phase_rules, event_rules):
|
|
for rule in mod.build_rules():
|
|
rule_registry.register(rule)
|
|
|
|
|
|
_register_defaults()
|