Improve Trader V4 training pipeline
Align entry labels with max future edge, tune direction labeling, and harden regression evaluation. Add training diagnostics, price-plan search, feature screening, and nonlinear benchmark scripts.
This commit is contained in:
@@ -12,14 +12,14 @@ def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
add_common_args(parser)
|
||||
parser.add_argument("--replay-path", type=Path)
|
||||
parser.add_argument("--fit-inner-start", default="2025-06-20")
|
||||
parser.add_argument("--fit-inner-end", default="2026-01-15")
|
||||
parser.add_argument("--tune-inner-start", default="2026-01-16")
|
||||
parser.add_argument("--tune-inner-end", default="2026-02-28")
|
||||
parser.add_argument("--validation-locked-start", default="2026-03-01")
|
||||
parser.add_argument("--validation-locked-end", default="2026-04-30")
|
||||
parser.add_argument("--latest-stress-start", default="2026-05-01")
|
||||
parser.add_argument("--latest-stress-end", default="2026-06-19")
|
||||
parser.add_argument("--fit-inner-start", default="2025-05-01")
|
||||
parser.add_argument("--fit-inner-end", default="2026-01-31")
|
||||
parser.add_argument("--tune-inner-start", default="2026-02-01")
|
||||
parser.add_argument("--tune-inner-end", default="2026-03-15")
|
||||
parser.add_argument("--validation-locked-start", default="2026-03-16")
|
||||
parser.add_argument("--validation-locked-end", default="2026-05-15")
|
||||
parser.add_argument("--latest-stress-start", default="2026-05-16")
|
||||
parser.add_argument("--latest-stress-end", default="2026-06-25")
|
||||
parser.add_argument("--gap-minutes", type=int, default=60)
|
||||
parser.add_argument("--fold-count", type=int, default=3)
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -5,7 +5,7 @@ from pathlib import Path
|
||||
|
||||
import _bootstrap # noqa: F401
|
||||
from trader_training.features import build_feature_frame
|
||||
from trader_training.io_utils import add_common_args, setup_logging
|
||||
from trader_training.io_utils import DEFAULT_RAW_ROOT, add_common_args, setup_logging
|
||||
|
||||
|
||||
def main() -> None:
|
||||
@@ -13,6 +13,7 @@ def main() -> None:
|
||||
add_common_args(parser)
|
||||
parser.add_argument("--replay-path", type=Path)
|
||||
parser.add_argument("--split-manifest-path", type=Path)
|
||||
parser.add_argument("--raw-root", type=Path, default=DEFAULT_RAW_ROOT)
|
||||
parser.add_argument("--allow-incomplete-days", action="store_true")
|
||||
args = parser.parse_args()
|
||||
setup_logging()
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
|
||||
import _bootstrap # noqa: F401
|
||||
from trader_training.diagnostics import diagnose_training_run
|
||||
from trader_training.io_utils import add_common_args, setup_logging
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
add_common_args(parser)
|
||||
args = parser.parse_args()
|
||||
setup_logging()
|
||||
diagnose_training_run(args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,35 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
from pathlib import Path
|
||||
|
||||
import _bootstrap # noqa: F401
|
||||
from trader_training.io_utils import add_common_args, setup_logging
|
||||
from trader_training.price_plan_search import search_price_plans
|
||||
|
||||
|
||||
def _float_tuple(value: str) -> tuple[float, ...]:
|
||||
return tuple(float(item.strip()) for item in value.split(",") if item.strip())
|
||||
|
||||
|
||||
def _int_tuple(value: str) -> tuple[int, ...]:
|
||||
return tuple(int(item.strip()) for item in value.split(",") if item.strip())
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
add_common_args(parser)
|
||||
parser.add_argument("--feature-path", type=Path)
|
||||
parser.add_argument("--replay-path", type=Path)
|
||||
parser.add_argument("--label-config-path", type=Path)
|
||||
parser.add_argument("--cost-config-path", type=Path)
|
||||
parser.add_argument("--horizons", type=_int_tuple)
|
||||
parser.add_argument("--targets", type=_float_tuple)
|
||||
parser.add_argument("--stops", type=_float_tuple)
|
||||
args = parser.parse_args()
|
||||
setup_logging()
|
||||
search_price_plans(args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,20 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
|
||||
import _bootstrap # noqa: F401
|
||||
from trader_training.entry_feature_screen import screen_entry_features
|
||||
from trader_training.io_utils import add_common_args, setup_logging
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser()
|
||||
add_common_args(parser)
|
||||
parser.add_argument("--min-bucket-rows", type=int, default=300)
|
||||
args = parser.parse_args()
|
||||
setup_logging()
|
||||
screen_entry_features(args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,21 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import logging
|
||||
from pathlib import Path
|
||||
|
||||
import _bootstrap # noqa: F401
|
||||
from trader_training.nonlinear_benchmark import benchmark_nonlinear_models
|
||||
|
||||
|
||||
def main() -> None:
|
||||
parser = argparse.ArgumentParser(description="Run diagnostic nonlinear benchmarks for Direction and Entry.")
|
||||
parser.add_argument("--run-id", required=True)
|
||||
parser.add_argument("--data-root", required=True, type=Path)
|
||||
args = parser.parse_args()
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s event=%(message)s")
|
||||
benchmark_nonlinear_models(args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user