40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
from fastapi import APIRouter, BackgroundTasks, Query
|
|
from .. import backtest, db
|
|
|
|
router = APIRouter(prefix="/api/lotto/backtest", tags=["backtest"])
|
|
|
|
|
|
@router.get("/track-record")
|
|
def track_record():
|
|
return backtest.track_record()
|
|
|
|
|
|
@router.get("/calibration")
|
|
def calibration(weeks: int = Query(52, ge=1, le=520)):
|
|
return {"history": db.get_calibration_history(limit=weeks)}
|
|
|
|
|
|
@router.get("/review/{draw_no}")
|
|
def review(draw_no: int):
|
|
if db.get_draw(draw_no) is None:
|
|
from fastapi import HTTPException
|
|
raise HTTPException(404, f"no draw {draw_no}")
|
|
return backtest.build_review_payload(draw_no)
|
|
|
|
|
|
@router.post("/run-forward")
|
|
def run_forward(
|
|
background_tasks: BackgroundTasks,
|
|
draw_no: int = Query(...),
|
|
k: int = Query(5000, ge=1, le=5000),
|
|
pool_n: int = Query(20000, ge=1000, le=20000),
|
|
):
|
|
background_tasks.add_task(backtest.run_forward_purchase, draw_no, k, pool_n)
|
|
return {"ok": True, "queued": True, "draw_no": draw_no}
|
|
|
|
|
|
@router.post("/backfill")
|
|
def backfill(background_tasks: BackgroundTasks, batch: int = 50, sample_m: int = 2000):
|
|
background_tasks.add_task(backtest.backfill_calibration, batch, sample_m)
|
|
return {"ok": True, "message": f"backfill 시작 (batch={batch})"}
|