| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from __future__ import annotations
- import json
- import unittest
- from pathlib import Path
- from dragon_branch_configs import alpha_first_glued_refined_hot_cap_config
- from dragon_rc1_golden_baseline import (
- EVENTS_CORE_COLUMNS,
- MANIFEST_OUTPUT,
- TRADES_CORE_COLUMNS,
- _df_sha256,
- _load_indicator_snapshot,
- main as build_golden_baseline,
- )
- from dragon_shared import END_DATE, START_DATE
- from dragon_strategy import DragonRuleEngine
- class TestRC1GoldenRegression(unittest.TestCase):
- def setUp(self) -> None:
- self.base_dir = Path(__file__).resolve().parents[1]
- self.manifest_path = self.base_dir / MANIFEST_OUTPUT
- if not self.manifest_path.exists():
- build_golden_baseline()
- def test_rc1_core_hash_and_summary_match_manifest(self) -> None:
- manifest = json.loads(self.manifest_path.read_text(encoding="utf-8"))
- indexed, _ = _load_indicator_snapshot(self.base_dir)
- engine = DragonRuleEngine(config=alpha_first_glued_refined_hot_cap_config())
- events, trades = engine.run(indexed)
- events = events[
- (events["date"] >= START_DATE)
- & (events["date"] <= END_DATE)
- ].copy()
- trades = trades[
- (trades["buy_date"] >= START_DATE)
- & (trades["buy_date"] <= END_DATE)
- & (trades["sell_date"] >= START_DATE)
- & (trades["sell_date"] <= END_DATE)
- ].copy()
- events.sort_values(["date", "side", "layer", "reason"], inplace=True)
- trades.sort_values(["buy_date", "sell_date", "buy_reason", "sell_reason"], inplace=True)
- events_core_hash = _df_sha256(events[EVENTS_CORE_COLUMNS])
- trades_core_hash = _df_sha256(trades[TRADES_CORE_COLUMNS])
- self.assertEqual(events_core_hash, manifest["artifacts"]["events"]["core_sha256"])
- self.assertEqual(trades_core_hash, manifest["artifacts"]["trades"]["core_sha256"])
- returns = trades["return_pct"].astype(float)
- self.assertEqual(int(len(trades)), int(manifest["summary"]["trade_count"]))
- self.assertEqual(int(len(events)), int(manifest["summary"]["event_count"]))
- self.assertAlmostEqual(float((returns > 0).mean()), float(manifest["summary"]["win_rate"]), places=12)
- self.assertAlmostEqual(float(returns.mean()), float(manifest["summary"]["avg_return"]), places=12)
- self.assertAlmostEqual(float(returns.median()), float(manifest["summary"]["median_return"]), places=12)
- if __name__ == "__main__":
- unittest.main()
|