fix: harden post-stop reentry lockdown
This commit is contained in:
@@ -29,7 +29,7 @@ from app.models.trade_setup import TradeSetup
|
||||
from app.services.indicator_service import _extract_ohlcv, compute_atr
|
||||
from app.services.price_service import query_ohlcv
|
||||
from app.services.sr_service import detect_gate_target_ladder
|
||||
from app.services.trade_policy import get_reentry_lockdown_ticker_ids
|
||||
from app.services.trade_policy import get_reentry_lockdowns
|
||||
from app.services.recommendation_service import (
|
||||
_risk_level_from_conflicts,
|
||||
build_recommendation_snapshot,
|
||||
@@ -773,6 +773,7 @@ async def get_trade_setups(
|
||||
live_recommendation: bool = False,
|
||||
exclude_open_trade_tickers: bool = False,
|
||||
exclude_reentry_lockdown_tickers: bool = False,
|
||||
include_reentry_lockdown: bool = False,
|
||||
) -> list[dict]:
|
||||
"""Get latest stored trade setups, optionally filtered.
|
||||
|
||||
@@ -797,6 +798,7 @@ async def get_trade_setups(
|
||||
if recommended_action is not None and not live_recommendation:
|
||||
stmt = stmt.where(TradeSetup.recommended_action == recommended_action)
|
||||
excluded_ticker_ids: set[int] = set()
|
||||
reentry_lockdowns: dict[int, int] = {}
|
||||
if exclude_open_trade_tickers:
|
||||
open_trade_result = await db.execute(
|
||||
select(PaperTrade.ticker_id)
|
||||
@@ -806,8 +808,10 @@ async def get_trade_setups(
|
||||
excluded_ticker_ids.update(
|
||||
ticker_id for ticker_id, in open_trade_result.all()
|
||||
)
|
||||
if exclude_reentry_lockdown_tickers or include_reentry_lockdown:
|
||||
reentry_lockdowns = await get_reentry_lockdowns(db)
|
||||
if exclude_reentry_lockdown_tickers:
|
||||
excluded_ticker_ids.update(await get_reentry_lockdown_ticker_ids(db))
|
||||
excluded_ticker_ids.update(reentry_lockdowns)
|
||||
if excluded_ticker_ids:
|
||||
stmt = stmt.where(~TradeSetup.ticker_id.in_(excluded_ticker_ids))
|
||||
|
||||
@@ -862,6 +866,15 @@ async def get_trade_setups(
|
||||
),
|
||||
reverse=True,
|
||||
)
|
||||
if include_reentry_lockdown:
|
||||
ticker_by_setup_id = {
|
||||
setup.id: setup.ticker_id for setup, _ in latest_rows
|
||||
}
|
||||
for row in rows_out:
|
||||
ticker_id = ticker_by_setup_id.get(row["id"])
|
||||
row["reentry_lockdown_remaining_sessions"] = (
|
||||
reentry_lockdowns.get(ticker_id) if ticker_id is not None else None
|
||||
)
|
||||
return rows_out
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user