Files

71 lines
2.0 KiB
Python
Raw Permalink Normal View History

2026-05-27 21:40:26 +08:00
#!/usr/bin/env python3
"""Run versioned DEB backtests from runtime SQLite daily records."""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from src.analysis.deb_evaluation import ( # noqa: E402
backtest_deb_versions,
flatten_daily_records,
write_backtest_report,
)
from src.database.runtime_state import DailyRecordRepository, RuntimeStateDB # noqa: E402
def main() -> int:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--db", default=str(ROOT / "data" / "polyweather.db"))
parser.add_argument(
"--output-json",
default=str(ROOT / "data" / "deb_backtest_latest.json"),
)
parser.add_argument(
"--output-csv",
default=str(ROOT / "data" / "deb_backtest_latest.csv"),
)
parser.add_argument("--train-lookback-days", type=int, default=30)
parser.add_argument("--min-train-samples", type=int, default=2)
args = parser.parse_args()
db = RuntimeStateDB(args.db)
daily_records = DailyRecordRepository(db).load_all()
history = flatten_daily_records(daily_records)
report = backtest_deb_versions(
history,
train_lookback_days=args.train_lookback_days,
min_train_samples=args.min_train_samples,
)
write_backtest_report(
report,
json_path=args.output_json,
csv_path=args.output_csv,
)
print(
json.dumps(
{
"schema_version": report.get("schema_version"),
"versions": report.get("versions"),
"rows": len(report.get("rows") or []),
"output_json": args.output_json,
"output_csv": args.output_csv,
},
ensure_ascii=False,
indent=2,
)
)
if not report.get("rows"):
return 2
return 0
if __name__ == "__main__":
raise SystemExit(main())