test_followthrough_mid_exit_probe.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from __future__ import annotations
  2. import unittest
  3. from pathlib import Path
  4. from dragon_branch_configs import alpha_first_glued_followthrough_mid_exit_probe_config
  5. from dragon_rc1_golden_baseline import _load_indicator_snapshot
  6. from dragon_shared import END_DATE, START_DATE
  7. from dragon_strategy import DragonRuleEngine
  8. class TestFollowthroughMidExitProbe(unittest.TestCase):
  9. def setUp(self) -> None:
  10. self.base_dir = Path(__file__).resolve().parents[1]
  11. self.indexed, _ = _load_indicator_snapshot(self.base_dir)
  12. def test_mid_exit_probe_promotes_single_reentry_trade_to_late_high_regime_exit(self) -> None:
  13. _, trades = DragonRuleEngine(config=alpha_first_glued_followthrough_mid_exit_probe_config()).run(self.indexed)
  14. trades = trades[
  15. (trades["buy_date"] >= START_DATE)
  16. & (trades["buy_date"] <= END_DATE)
  17. & (trades["sell_date"] >= START_DATE)
  18. & (trades["sell_date"] <= END_DATE)
  19. ].copy()
  20. target = trades[
  21. trades["buy_reason"].astype(str).str.startswith("glued_followthrough_reentry_buy:confirmed_mid_zone_very_weak_b1")
  22. ].copy()
  23. self.assertEqual(len(trades), 91)
  24. self.assertEqual(len(target), 1)
  25. row = target.iloc[0]
  26. self.assertEqual(row["buy_date"], "2020-12-01")
  27. self.assertEqual(row["sell_date"], "2021-02-19")
  28. self.assertEqual(row["sell_reason"], "high_regime_confirmed_exit:kdj_sell")
  29. self.assertEqual(int(row["holding_days"]), 80)
  30. self.assertAlmostEqual(float(row["return_pct"]), 0.266486841392223, places=12)
  31. if __name__ == "__main__":
  32. unittest.main()