feat: 品种推荐与下单显示主力合约
推荐列表展示当前主力代码;下单品种支持中文/代码搜索并按交易所分组选择主力合约。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+16
-5
@@ -3,7 +3,7 @@ from __future__ import annotations
|
||||
|
||||
import json
|
||||
from datetime import datetime
|
||||
from typing import Any, Callable
|
||||
from typing import Any, Callable, Optional
|
||||
|
||||
from flask import flash, jsonify, redirect, render_template, request, url_for, Response, stream_with_context
|
||||
|
||||
@@ -69,7 +69,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
def _capital(conn) -> float:
|
||||
return get_account_capital(conn, get_setting)
|
||||
|
||||
def _main_price(product_ths: str):
|
||||
def _main_quote(product_ths: str) -> Optional[dict]:
|
||||
for p in PRODUCTS:
|
||||
if p["ths"] == product_ths:
|
||||
main = resolve_main_contract(p)
|
||||
@@ -77,8 +77,19 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
return None
|
||||
sym = main.get("ths_code") or ""
|
||||
codes = ths_to_codes(sym)
|
||||
price = None
|
||||
if codes:
|
||||
return fetch_price(sym, codes.get("market_code", ""), codes.get("sina_code", ""))
|
||||
price = fetch_price(
|
||||
sym,
|
||||
codes.get("market_code", ""),
|
||||
codes.get("sina_code", ""),
|
||||
)
|
||||
return {
|
||||
"ths_code": sym,
|
||||
"price": price,
|
||||
"display": main.get("display") or sym,
|
||||
"name": main.get("name") or p.get("name"),
|
||||
}
|
||||
return None
|
||||
|
||||
def _ctp_account(mode: str) -> dict:
|
||||
@@ -670,7 +681,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
try:
|
||||
init_strategy_tables(conn)
|
||||
capital = _capital(conn)
|
||||
rows = refresh_recommend_cache(conn, capital, _main_price)
|
||||
rows = refresh_recommend_cache(conn, capital, _main_quote)
|
||||
payload = load_recommend_cache(conn)
|
||||
recommend_hub.broadcast("recommend", {"ok": True, **payload})
|
||||
return jsonify({"ok": True, "count": len(rows), **payload})
|
||||
@@ -1001,7 +1012,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
start_recommend_worker(
|
||||
db_path=DB_PATH,
|
||||
get_capital_fn=_capital,
|
||||
price_fn=_main_price,
|
||||
quote_fn=_main_quote,
|
||||
init_tables_fn=_init_tables,
|
||||
)
|
||||
start_ctp_reconnect_worker(get_mode_fn=lambda: get_trading_mode(get_setting))
|
||||
|
||||
Reference in New Issue
Block a user