From 5a9786d861415aa82e558f9efb30d4f83b1cdb81 Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 28 Jun 2026 06:52:52 +0800 Subject: [PATCH] Allow named dynamic exit search outputs --- training/scripts/24_search_dynamic_exit_plan.py | 1 + training/tests/test_training_contract.py | 1 + training/trader_training/dynamic_exit_search.py | 5 ++++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/training/scripts/24_search_dynamic_exit_plan.py b/training/scripts/24_search_dynamic_exit_plan.py index bb63d2b..d5dcf4a 100644 --- a/training/scripts/24_search_dynamic_exit_plan.py +++ b/training/scripts/24_search_dynamic_exit_plan.py @@ -30,6 +30,7 @@ def main() -> None: parser.add_argument("--second-target-multipliers", type=_float_tuple) parser.add_argument("--take1-ratios", type=_float_tuple) parser.add_argument("--take2-ratios", type=_float_tuple) + parser.add_argument("--output-dir-name", default="dynamic-exit-search") args = parser.parse_args() setup_logging() search_dynamic_exit_plans(args) diff --git a/training/tests/test_training_contract.py b/training/tests/test_training_contract.py index b738177..98a5f9d 100644 --- a/training/tests/test_training_contract.py +++ b/training/tests/test_training_contract.py @@ -108,6 +108,7 @@ class TrainingContractTest(unittest.TestCase): second_target_multipliers=(2.0,), take1_ratios=(0.5,), take2_ratios=(0.25,), + output_dir_name="dynamic-exit-search", ) ) diff --git a/training/trader_training/dynamic_exit_search.py b/training/trader_training/dynamic_exit_search.py index 6948c03..c741e5a 100644 --- a/training/trader_training/dynamic_exit_search.py +++ b/training/trader_training/dynamic_exit_search.py @@ -123,7 +123,10 @@ def search_dynamic_exit_plans(args: Any) -> None: "robust_candidate_found": bool(best["robust_candidate_found"]), "best_plan": best, } - out_dir = root / "dynamic-exit-search" + output_dir_name = str(getattr(args, "output_dir_name", None) or "dynamic-exit-search") + if output_dir_name in {"", ".", ".."} or "/" in output_dir_name or "\\" in output_dir_name: + raise ValueError(f"output_dir_name must be a run-local directory name: {output_dir_name}") + out_dir = root / output_dir_name write_json(out_dir / "dynamic_exit_search_result.json", _jsonable(payload)) write_text(out_dir / "dynamic_exit_search_rows.csv", result.to_csv(index=False)) write_text(out_dir / "dynamic_exit_search_summary.csv", summary.to_csv(index=False))