fix: 品种推荐改为最大手数并补算旧缓存。

- 最大手数 = floor(权益×保证金上限%÷1手保证金)
- 加载与 SSE 推送时实时补算,旧缓存缺字段时自动刷新

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-25 12:24:10 +08:00
parent 9875ee6d44
commit 074551490f
7 changed files with 109 additions and 23 deletions
+25 -5
View File
@@ -20,7 +20,12 @@ from position_sizing import (
calc_order_tick_metrics,
normalize_sizing_mode,
)
from recommend_store import load_recommend_cache, recommend_payload, refresh_recommend_cache
from recommend_store import (
load_recommend_cache,
recommend_payload,
refresh_recommend_cache,
rows_missing_max_lots,
)
from recommend_stream import recommend_hub, start_recommend_worker
from ctp_reconnect import start_ctp_reconnect_worker
from ctp_premarket_connect import start_ctp_premarket_connect_worker
@@ -400,7 +405,13 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
).fetchone()["n"]
conn.commit()
sizing = get_sizing_mode(get_setting)
rec_cache = recommend_payload(conn, live_capital=capital)
max_pct = get_max_margin_pct(get_setting)
rec_loaded = load_recommend_cache(conn)
if rec_loaded.get("stale") or rows_missing_max_lots(rec_loaded.get("rows") or []):
refresh_recommend_cache(
conn, capital, _main_quote, trading_mode=mode, max_margin_pct=max_pct,
)
rec_cache = recommend_payload(conn, live_capital=capital, max_margin_pct=max_pct)
return render_template(
"trade.html",
trading_mode=mode,
@@ -979,7 +990,11 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
"""只读数据库缓存,不在请求时拉行情。"""
conn = get_db()
try:
payload = recommend_payload(conn, live_capital=_capital(conn))
payload = recommend_payload(
conn,
live_capital=_capital(conn),
max_margin_pct=get_max_margin_pct(get_setting),
)
return jsonify({"ok": True, **payload})
finally:
conn.close()
@@ -994,7 +1009,11 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
try:
conn = get_db()
try:
payload = recommend_payload(conn, live_capital=_capital(conn))
payload = recommend_payload(
conn,
live_capital=_capital(conn),
max_margin_pct=get_max_margin_pct(get_setting),
)
finally:
conn.close()
yield sse_format("recommend", {"ok": True, **payload})
@@ -1030,7 +1049,8 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
conn, capital, _main_quote, trading_mode=mode,
max_margin_pct=get_max_margin_pct(get_setting),
)
payload = recommend_payload(conn, live_capital=capital)
max_pct = get_max_margin_pct(get_setting)
payload = recommend_payload(conn, live_capital=capital, max_margin_pct=max_pct)
recommend_hub.broadcast("recommend", {"ok": True, **payload})
return jsonify({"ok": True, "count": len(rows), **payload})
finally: