Fix dashboard position limit flicker by unifying active count across APIs.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-02 14:53:04 +08:00
parent 658982d2b9
commit 98d63f38bf
4 changed files with 102 additions and 24 deletions
+31 -3
View File
@@ -352,16 +352,41 @@
function applyRisk(risk, account) {
if (!riskGridEl || !risk) return;
if (risk.limits && Object.keys(risk.limits).length) {
var isFullRisk = risk.limits && Object.keys(risk.limits).length;
if (isFullRisk) {
lastRiskPayload = risk;
} else if (lastRiskPayload) {
var incomingSt = risk.status || {};
var prevSt = lastRiskPayload.status || {};
risk = {
enabled: lastRiskPayload.enabled,
limits: lastRiskPayload.limits,
manual_close_count_today: lastRiskPayload.manual_close_count_today,
margin_pct_used: lastRiskPayload.margin_pct_used,
status: risk.status || lastRiskPayload.status,
daily_open_count: risk.daily_open_count != null
? risk.daily_open_count
: lastRiskPayload.daily_open_count,
daily_risk_used_pct: risk.daily_risk_used_pct != null
? risk.daily_risk_used_pct
: lastRiskPayload.daily_risk_used_pct,
status: Object.assign({}, prevSt, incomingSt),
};
var incActive = incomingSt.active_count;
var prevActive = prevSt.active_count;
if (incActive != null && prevActive != null) {
var incN = Number(incActive);
var prevN = Number(prevActive);
var marginUsed = account && account.margin_used != null
? Number(account.margin_used)
: 0;
if (
!isNaN(incN) && !isNaN(prevN)
&& incN < prevN
&& (marginUsed > 0 || prevN > 0)
) {
risk.status.active_count = prevN;
}
}
}
if (account && account.equity > 0 && account.margin_used != null) {
risk.margin_pct_used = Math.round(account.margin_used / account.equity * 10000) / 100;
@@ -850,7 +875,10 @@
if (!data) return;
if (data.ctp_status) updateCtpBadge(data.ctp_status);
if (data.risk_status) {
applyRisk({ status: data.risk_status });
applyRisk(
{ status: data.risk_status },
{ equity: data.capital, margin_used: data.margin_used },
);
}
if (data.trading_mode_label && modeBadge) {
modeBadge.textContent = data.trading_mode_label;