test_deep_oversold_modules.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from __future__ import annotations
  2. from datetime import date
  3. import unittest
  4. from dragon_deep_oversold_classifier import (
  5. deep_oversold_base_entry,
  6. deep_oversold_requires_confirmation,
  7. deep_oversold_selective_veto,
  8. deep_oversold_subtype,
  9. )
  10. from dragon_deep_oversold_confirmation import evaluate_pending_confirmation, should_increment_pending
  11. from dragon_strategy_config import StrategyConfig
  12. class TestDeepOversoldModules(unittest.TestCase):
  13. def test_subtype_classification(self) -> None:
  14. self.assertEqual(deep_oversold_subtype(a1=-0.01, b1=0.01, c1=13.0), "positive_b1_rebound")
  15. self.assertEqual(deep_oversold_subtype(a1=-0.06, b1=-0.09, c1=10.5), "deep_capitulation")
  16. self.assertEqual(deep_oversold_subtype(a1=-0.05, b1=-0.07, c1=11.5), "classic_oversold")
  17. def test_base_entry_and_selective_veto(self) -> None:
  18. cfg = StrategyConfig(
  19. deep_oversold_selective_positive_b1_c1_max=15.3,
  20. deep_oversold_confirm_weak_with_ql=True,
  21. )
  22. self.assertTrue(deep_oversold_base_entry(a1=-0.03, b1=-0.08, c1=12.0, config=cfg))
  23. self.assertTrue(
  24. deep_oversold_selective_veto(
  25. subtype="positive_b1_rebound",
  26. c1=14.0,
  27. b1=0.02,
  28. ql_buy=True,
  29. config=cfg,
  30. )
  31. )
  32. self.assertTrue(
  33. deep_oversold_requires_confirmation(
  34. subtype="shallow_false_start",
  35. ql_buy=False,
  36. config=cfg,
  37. )
  38. )
  39. def test_pending_confirmation_flow(self) -> None:
  40. self.assertTrue(
  41. should_increment_pending(
  42. active=True,
  43. subtype="shallow_false_start",
  44. origin_date=date(2026, 4, 8),
  45. row_date=date(2026, 4, 9),
  46. )
  47. )
  48. action, reason, clear = evaluate_pending_confirmation(
  49. active=True,
  50. subtype="shallow_false_start",
  51. in_position=False,
  52. kdj_sell=False,
  53. ql_sell=False,
  54. bars_waited=1,
  55. window_bars=2,
  56. ql_buy=True,
  57. )
  58. self.assertEqual(action, "BUY")
  59. self.assertIn("confirmed_shallow_false_start", reason)
  60. self.assertTrue(clear)
  61. if __name__ == "__main__":
  62. unittest.main()