diff --git a/apps/api/routes/stats.py b/apps/api/routes/stats.py index 368d452..fd434d2 100644 --- a/apps/api/routes/stats.py +++ b/apps/api/routes/stats.py @@ -38,6 +38,17 @@ def _validate_min_hours(min_hours: float) -> float: return float(int(round(h))) +def _validate_min_leverage(min_leverage: float) -> float: + # 90–300,步进 10 + v = float(min_leverage) + if v < 90 or v > 300 or abs(v - round(v)) > 1e-9 or int(round(v)) % 10 != 0: + raise HTTPException( + status_code=400, + detail="min_leverage must be multiple of 10 in [90, 300]", + ) + return float(int(round(v))) + + @router.get("/leverage") def leverage_stats( range: str = Query(default="day", pattern="^(day|week|month)$"), @@ -50,9 +61,16 @@ def leverage_stats( le=48, description="采样时距离到期 ≥ 该小时数才计入", ), + min_leverage: float = Query( + default=100, + ge=90, + le=300, + description="杠杆达标线(≥ 该值计入达标占比)", + ), ) -> dict: s = get_settings() mh = _validate_min_hours(min_hours) + ml = _validate_min_leverage(min_leverage) info = _range_info(range, date) repo = Repository(s.db_path) try: @@ -67,7 +85,7 @@ def leverage_stats( rows, range_info=info, bucket_minutes=bucket_minutes, - min_leverage=float(s.min_option_leverage), + min_leverage=ml, side=side, ) payload["min_hours"] = mh @@ -135,10 +153,12 @@ def ops_map( side: str = Query(default="both", pattern="^(C|P|both)$"), bucket_minutes: int = Query(default=60, ge=15, le=120), min_hours: float = Query(default=12, ge=8, le=48), + min_leverage: float = Query(default=100, ge=90, le=300), ) -> dict: # 直接算一遍,避免路由函数互相调用时 Query 默认值问题 s = get_settings() mh = _validate_min_hours(min_hours) + ml = _validate_min_leverage(min_leverage) info = _range_info(range, date) repo = Repository(s.db_path) try: @@ -153,7 +173,7 @@ def ops_map( rows, range_info=info, bucket_minutes=bucket_minutes, - min_leverage=float(s.min_option_leverage), + min_leverage=ml, side=side, ) lev["min_hours"] = mh @@ -185,6 +205,7 @@ def ops_map( "side": side, "bucket_minutes": bucket_minutes, "min_hours": mh, + "min_leverage": ml, "expiry_filter": filt, "leverage": lev, "move_points": mov, diff --git a/web/dist/index.html b/web/dist/index.html index ff25258..6fa72b8 100644 --- a/web/dist/index.html +++ b/web/dist/index.html @@ -126,6 +126,9 @@ +
范围
@@ -214,7 +217,7 @@