Files
TradeBot/tests/test_torch_candidate_guard.py
2026-06-25 06:19:14 +03:00

45 lines
1.4 KiB
Python

from __future__ import annotations
from tools.accept_torch_candidate import _decision
def _report(*, validation_passed: bool = True, trades: int = 30, total: float = 10.0) -> dict:
return {
"recommended": {"score": 0.5},
"full_replay": {
"trades": trades,
"avg_net_percent": 0.4,
"total_net_percent": total,
"profit_factor": 2.0,
"max_drawdown_percent": 1.0,
},
"walk_forward": {"summary": {"trades": trades, "avg_net_percent": 0.3}},
"validation": {"passed": validation_passed, "status": "pass" if validation_passed else "fail"},
}
def test_guard_rejects_candidate_without_honest_validation() -> None:
decision = _decision(
_report(),
_report(validation_passed=False),
min_trades=8,
min_profit_factor=1.05,
min_avg_net_percent=0.0,
max_score_regression=0.05,
)
assert decision == {"accepted": False, "reason": "candidate_failed_honest_validation"}
def test_guard_accepts_candidate_that_passes_honest_validation() -> None:
decision = _decision(
_report(total=9.0),
_report(total=12.0),
min_trades=8,
min_profit_factor=1.05,
min_avg_net_percent=0.0,
max_score_regression=0.05,
)
assert decision == {"accepted": True, "reason": "candidate_passed_guard"}