| 1234567891011121314151617181920212223242526272829303132 |
- from __future__ import annotations
- from dragon_decision_types import StrategyDecision
- from dragon_reason_types import DecisionReason, RuleLayer
- from dragon_rule_catalog import classify_aux_reason, classify_entry_reason, classify_exit_reason
- def _classify_reason(side: str, event_layer: str, reason: str) -> DecisionReason:
- if event_layer == "aux_signal":
- return classify_aux_reason(reason)
- if side == "BUY":
- return classify_entry_reason(reason)
- return classify_exit_reason(reason)
- class SecondaryRuleLayer:
- layer = RuleLayer.SECONDARY
- def route(self, side: str, event_layer: str, reason: str) -> StrategyDecision | None:
- meta = _classify_reason(side, event_layer, reason)
- if meta.layer != self.layer:
- return None
- action = "BUY" if side == "BUY" and event_layer == "real_trade" else (
- "SELL" if side == "SELL" and event_layer == "real_trade" else (
- "AUX_BUY" if side == "BUY" else "AUX_SELL"
- )
- )
- return StrategyDecision(
- action=action,
- reason=meta,
- metadata={"orchestrated_layer": self.layer.value},
- )
|