test_bridge_chain_regression.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from __future__ import annotations
  2. import unittest
  3. from pathlib import Path
  4. import pandas as pd
  5. from dragon_branch_configs import alpha_first_glued_refined_hot_cap_config
  6. from dragon_rc1_golden_baseline import _load_indicator_snapshot
  7. from dragon_shared import END_DATE, START_DATE
  8. from dragon_strategy import DragonRuleEngine
  9. class TestBridgeChainRegression(unittest.TestCase):
  10. def setUp(self) -> None:
  11. self.base_dir = Path(__file__).resolve().parents[1]
  12. indexed, _ = _load_indicator_snapshot(self.base_dir)
  13. events, _ = DragonRuleEngine(config=alpha_first_glued_refined_hot_cap_config()).run(indexed)
  14. self.events = events[(events["date"] >= START_DATE) & (events["date"] <= END_DATE)].copy()
  15. self.events["date"] = pd.to_datetime(self.events["date"])
  16. def test_predictive_reentry_requires_recent_predictive_exit(self) -> None:
  17. reentries = self.events[
  18. (self.events["side"] == "BUY")
  19. & (self.events["layer"] == "real_trade")
  20. & (self.events["reason"] == "predictive_error_reentry_buy")
  21. ].copy()
  22. self.assertGreaterEqual(len(reentries), 1)
  23. sells = self.events[
  24. (self.events["side"] == "SELL")
  25. & (self.events["layer"] == "real_trade")
  26. ][["date", "reason"]].copy()
  27. for _, buy_row in reentries.iterrows():
  28. prior = sells[sells["date"] < buy_row["date"]].sort_values("date")
  29. self.assertFalse(prior.empty)
  30. last_sell = prior.iloc[-1]
  31. self.assertEqual(str(last_sell["reason"]), "predictive_b1_break_exit")
  32. self.assertLessEqual((buy_row["date"] - last_sell["date"]).days, 3)
  33. def test_predictive_events_stay_in_bridge_family(self) -> None:
  34. predictive_events = self.events[self.events["reason"].isin(["predictive_b1_break_exit", "predictive_error_reentry_buy"])].copy()
  35. self.assertGreaterEqual(len(predictive_events), 2)
  36. self.assertTrue((predictive_events["reason_layer"] == "bridge").all())
  37. self.assertTrue((predictive_events["reason_family"] == "predictive_break").all())
  38. if __name__ == "__main__":
  39. unittest.main()