Speed up equity/position display after CTP reconnect and auto-refresh stale sessions before market open.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2583,7 +2583,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
since_connect = time.time() - float(
|
||||
getattr(get_bridge(), "_last_connect_ok_ts", 0) or 0,
|
||||
)
|
||||
if since_connect < 45:
|
||||
if since_connect < 90:
|
||||
payload = dict(payload)
|
||||
payload["sync_state"] = "syncing"
|
||||
payload["sync_label"] = "持仓同步中…"
|
||||
@@ -2771,7 +2771,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
position_hub.broadcast("positions", payload)
|
||||
|
||||
def _slow_sync() -> None:
|
||||
time.sleep(20)
|
||||
time.sleep(8)
|
||||
try:
|
||||
pl = _refresh_trading_live_snapshot(fast=False)
|
||||
position_hub.set_snapshot(pl)
|
||||
@@ -2828,13 +2828,17 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
conn.close()
|
||||
|
||||
def _slow_sync() -> None:
|
||||
time.sleep(8)
|
||||
time.sleep(3)
|
||||
try:
|
||||
_push_position_snapshot_async(fast=False)
|
||||
except Exception as exc:
|
||||
logger.debug("ctp connected slow sync: %s", exc)
|
||||
|
||||
threading.Thread(target=_slow_sync, daemon=True, name="ctp-slow-sync").start()
|
||||
threading.Timer(
|
||||
1.2,
|
||||
lambda: _push_position_snapshot_async(fast=False),
|
||||
).start()
|
||||
except Exception as exc:
|
||||
logger.debug("ctp connected monitor restore: %s", exc)
|
||||
|
||||
@@ -2954,9 +2958,11 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
@app.route("/api/trading/live")
|
||||
@login_required
|
||||
def api_trading_live():
|
||||
mode = get_trading_mode(get_setting)
|
||||
snap = position_hub.get_snapshot()
|
||||
if snap:
|
||||
return jsonify(_normalize_live_payload(snap))
|
||||
payload = _apply_live_account(dict(snap), mode)
|
||||
return jsonify(_normalize_live_payload(payload))
|
||||
payload = _refresh_trading_live_snapshot(fast=True)
|
||||
payload = _normalize_live_payload(payload)
|
||||
position_hub.set_snapshot(payload)
|
||||
@@ -2984,7 +2990,11 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
yield sse_format("positions", payload)
|
||||
_push_position_snapshot_async(fast=True)
|
||||
else:
|
||||
yield sse_format("positions", snap)
|
||||
mode = get_trading_mode(get_setting)
|
||||
yield sse_format(
|
||||
"positions",
|
||||
_apply_live_account(dict(snap), mode),
|
||||
)
|
||||
while True:
|
||||
try:
|
||||
msg = q.get(timeout=25)
|
||||
@@ -5045,7 +5055,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
|
||||
since_connect = now - float(
|
||||
getattr(get_bridge(), "_last_connect_ok_ts", 0) or 0,
|
||||
)
|
||||
if connected and since_connect < 45:
|
||||
if connected and since_connect < 90:
|
||||
return _refresh_trading_live_snapshot(fast=True)
|
||||
need_full = (
|
||||
connected
|
||||
|
||||
Reference in New Issue
Block a user