dragon_rules_core.py 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. from __future__ import annotations
  2. from dragon_decision_types import StrategyDecision
  3. from dragon_reason_types import DecisionReason, RuleLayer
  4. from dragon_rule_catalog import classify_aux_reason, classify_entry_reason, classify_exit_reason
  5. def _classify_reason(side: str, event_layer: str, reason: str) -> DecisionReason:
  6. if event_layer == "aux_signal":
  7. return classify_aux_reason(reason)
  8. if side == "BUY":
  9. return classify_entry_reason(reason)
  10. return classify_exit_reason(reason)
  11. class CoreRuleLayer:
  12. layer = RuleLayer.CORE
  13. def route(self, side: str, event_layer: str, reason: str) -> StrategyDecision | None:
  14. meta = _classify_reason(side, event_layer, reason)
  15. if meta.layer != self.layer:
  16. return None
  17. action = "BUY" if side == "BUY" and event_layer == "real_trade" else (
  18. "SELL" if side == "SELL" and event_layer == "real_trade" else (
  19. "AUX_BUY" if side == "BUY" else "AUX_SELL"
  20. )
  21. )
  22. return StrategyDecision(
  23. action=action,
  24. reason=meta,
  25. metadata={"orchestrated_layer": self.layer.value},
  26. )