Allow roll add-ons while position-limit freeze is active.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-24 02:08:44 +08:00
parent 9d1986d771
commit 6ffae02d30
11 changed files with 91 additions and 70 deletions
+19 -10
View File
@@ -2574,9 +2574,11 @@ def precheck_risk(conn, symbol, direction):
return False, risk_reason
if not trading_day_reset_allows_new_open(now):
return False, f"北京时间 {TRADING_DAY_RESET_HOUR}:00 前不允许持仓"
active_count = get_active_position_count(conn)
if active_count >= MAX_ACTIVE_POSITIONS:
return False, f"已达最大持仓数({active_count}/{MAX_ACTIVE_POSITIONS}"
from account_risk_lib import position_limit_reached
reached, active_count, mx = position_limit_reached(conn, max_active_positions=MAX_ACTIVE_POSITIONS)
if reached:
return False, f"已达最大持仓数({active_count}/{mx}"
ok_daily, daily_reason, _opens = check_daily_open_hard_limit(
conn, get_trading_day(now), DAILY_OPEN_HARD_LIMIT, TRADING_DAY_RESET_HOUR
)
@@ -6299,13 +6301,16 @@ def render_main_page(page="trade", embed_mode=None):
records = []
total = miss_count = rate = occupied_miss_total = 0
active_count = len(order_list)
from strategy_trade_labels import count_position_limit_active_monitors
position_limit_count = count_position_limit_active_monitors(conn)
open_guard_enabled = get_trading_day_reset_open_guard_enabled(conn)
open_guard_blocks_now = open_guard_enabled and now.hour < TRADING_DAY_RESET_HOUR
opens_today = count_opens_for_trading_day(conn, trading_day)
risk_status = hub_account_risk_status(conn)
can_trade = can_trade_new_open(
time_allows=trading_day_reset_allows_new_open(now, conn),
active_count=active_count,
active_count=position_limit_count,
max_active_positions=MAX_ACTIVE_POSITIONS,
opens_today=opens_today,
hard_limit=DAILY_OPEN_HARD_LIMIT,
@@ -6368,7 +6373,7 @@ def render_main_page(page="trade", embed_mode=None):
auto_transfer_bj_hour=AUTO_TRANSFER_BJ_HOUR,
full_margin_buffer_ratio=FULL_MARGIN_BUFFER_RATIO,
price_refresh_seconds=PRICE_REFRESH_SECONDS,
active_count=active_count,
active_count=position_limit_count,
can_trade=can_trade,
opens_today=opens_today,
daily_open_hard_limit=DAILY_OPEN_HARD_LIMIT,
@@ -6476,7 +6481,9 @@ def api_account_snapshot():
funding_usdt = round(funding_capital, FUNDS_DECIMALS) if funding_capital is not None else None
current_capital = round(trading_capital, FUNDS_DECIMALS) if trading_capital is not None else round(local_current_capital, FUNDS_DECIMALS)
recommended_capital = get_recommended_capital(current_capital)
active_count = get_active_position_count(conn)
from strategy_trade_labels import count_position_limit_active_monitors
position_limit_count = count_position_limit_active_monitors(conn)
open_guard_enabled = get_trading_day_reset_open_guard_enabled(conn)
opens_today = count_opens_for_trading_day(conn, trading_day)
risk_status = hub_account_risk_status(conn)
@@ -6484,7 +6491,7 @@ def api_account_snapshot():
open_guard_blocks_now = open_guard_enabled and now.hour < TRADING_DAY_RESET_HOUR
can_trade = can_trade_new_open(
time_allows=trading_day_reset_allows_new_open(now),
active_count=active_count,
active_count=position_limit_count,
max_active_positions=MAX_ACTIVE_POSITIONS,
opens_today=opens_today,
hard_limit=DAILY_OPEN_HARD_LIMIT,
@@ -6496,7 +6503,7 @@ def api_account_snapshot():
"current_capital": current_capital,
"available_trading_usdt": round(available_trading_usdt, FUNDS_DECIMALS) if available_trading_usdt is not None else None,
"recommended_capital": recommended_capital,
"active_count": active_count,
"active_count": position_limit_count,
"max_active_positions": MAX_ACTIVE_POSITIONS,
"can_trade": can_trade,
"opens_today": opens_today,
@@ -6525,13 +6532,15 @@ def api_settings_open_guard():
now = app_now()
conn = get_db()
trading_day = get_trading_day(now)
active_count = get_active_position_count(conn)
from strategy_trade_labels import count_position_limit_active_monitors
position_limit_count = count_position_limit_active_monitors(conn)
guard_on = get_trading_day_reset_open_guard_enabled(conn)
opens_today = count_opens_for_trading_day(conn, trading_day)
conn.close()
can_trade = can_trade_new_open(
time_allows=trading_day_reset_allows_new_open(now),
active_count=active_count,
active_count=position_limit_count,
max_active_positions=MAX_ACTIVE_POSITIONS,
opens_today=opens_today,
hard_limit=DAILY_OPEN_HARD_LIMIT,