Prefer monitor slots for position limit and fix dashboard sticky count.
When active monitors exist, use their deduped symbol+direction slots so roll does not inflate the limit; only hold previous active_count on SSE when incoming drops to zero during sync. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -322,8 +322,10 @@ def effective_active_position_count(
|
|||||||
*,
|
*,
|
||||||
ctp_connected: Optional[bool] = None,
|
ctp_connected: Optional[bool] = None,
|
||||||
) -> int:
|
) -> int:
|
||||||
"""风控持仓数:品种+方向槽位去重;滚仓不计入新仓位。"""
|
"""风控持仓数:按品种+方向槽位去重;滚仓/加仓共用监控,不额外占槽。"""
|
||||||
keys = active_position_slots_from_monitors(conn)
|
monitor_keys = active_position_slots_from_monitors(conn)
|
||||||
|
if monitor_keys:
|
||||||
|
return len(monitor_keys)
|
||||||
if ctp_connected is None:
|
if ctp_connected is None:
|
||||||
try:
|
try:
|
||||||
from modules.ctp.vnpy_bridge import ctp_status
|
from modules.ctp.vnpy_bridge import ctp_status
|
||||||
@@ -331,13 +333,16 @@ def effective_active_position_count(
|
|||||||
ctp_connected = bool(ctp_status(mode).get("connected"))
|
ctp_connected = bool(ctp_status(mode).get("connected"))
|
||||||
except Exception:
|
except Exception:
|
||||||
ctp_connected = False
|
ctp_connected = False
|
||||||
if ctp_connected:
|
if not ctp_connected:
|
||||||
try:
|
return 0
|
||||||
from modules.ctp.ctp_trading_state import trading_state
|
keys: set[tuple[str, str]] = set()
|
||||||
|
try:
|
||||||
|
from modules.ctp.ctp_trading_state import trading_state
|
||||||
|
|
||||||
keys |= _position_keys_from_rows(trading_state.get_positions())
|
keys |= _position_keys_from_rows(trading_state.get_positions())
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
if not keys:
|
||||||
try:
|
try:
|
||||||
from modules.trading.position_stream import position_hub
|
from modules.trading.position_stream import position_hub
|
||||||
|
|
||||||
|
|||||||
@@ -424,8 +424,8 @@
|
|||||||
: 0;
|
: 0;
|
||||||
if (
|
if (
|
||||||
!isNaN(incN) && !isNaN(prevN)
|
!isNaN(incN) && !isNaN(prevN)
|
||||||
&& incN < prevN
|
&& incN === 0 && prevN > 0
|
||||||
&& (marginUsed > 0 || prevN > 0)
|
&& marginUsed > 0
|
||||||
) {
|
) {
|
||||||
risk.status.active_count = prevN;
|
risk.status.active_count = prevN;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user