| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- from __future__ import annotations
- from datetime import date
- import unittest
- from dragon_deep_oversold_classifier import (
- deep_oversold_base_entry,
- deep_oversold_requires_confirmation,
- deep_oversold_selective_veto,
- deep_oversold_subtype,
- )
- from dragon_deep_oversold_confirmation import evaluate_pending_confirmation, should_increment_pending
- from dragon_strategy_config import StrategyConfig
- class TestDeepOversoldModules(unittest.TestCase):
- def test_subtype_classification(self) -> None:
- self.assertEqual(deep_oversold_subtype(a1=-0.01, b1=0.01, c1=13.0), "positive_b1_rebound")
- self.assertEqual(deep_oversold_subtype(a1=-0.06, b1=-0.09, c1=10.5), "deep_capitulation")
- self.assertEqual(deep_oversold_subtype(a1=-0.05, b1=-0.07, c1=11.5), "classic_oversold")
- def test_base_entry_and_selective_veto(self) -> None:
- cfg = StrategyConfig(
- deep_oversold_selective_positive_b1_c1_max=15.3,
- deep_oversold_confirm_weak_with_ql=True,
- )
- self.assertTrue(deep_oversold_base_entry(a1=-0.03, b1=-0.08, c1=12.0, config=cfg))
- self.assertTrue(
- deep_oversold_selective_veto(
- subtype="positive_b1_rebound",
- c1=14.0,
- b1=0.02,
- ql_buy=True,
- config=cfg,
- )
- )
- self.assertTrue(
- deep_oversold_requires_confirmation(
- subtype="shallow_false_start",
- ql_buy=False,
- config=cfg,
- )
- )
- def test_pending_confirmation_flow(self) -> None:
- self.assertTrue(
- should_increment_pending(
- active=True,
- subtype="shallow_false_start",
- origin_date=date(2026, 4, 8),
- row_date=date(2026, 4, 9),
- )
- )
- action, reason, clear = evaluate_pending_confirmation(
- active=True,
- subtype="shallow_false_start",
- in_position=False,
- kdj_sell=False,
- ql_sell=False,
- bars_waited=1,
- window_bars=2,
- ql_buy=True,
- )
- self.assertEqual(action, "BUY")
- self.assertIn("confirmed_shallow_false_start", reason)
- self.assertTrue(clear)
- if __name__ == "__main__":
- unittest.main()
|