diff --git a/agents/stock/workspace/scripts/behive_web.py b/agents/stock/workspace/scripts/behive_web.py index 5945506..6c81c7b 100644 --- a/agents/stock/workspace/scripts/behive_web.py +++ b/agents/stock/workspace/scripts/behive_web.py @@ -2665,15 +2665,20 @@ def _render_holding_row(r: dict, total_value: int, show_day_change: bool = False f'
당일 등락
{dsign}{day_change:,}원 ' f'({dsign}{day_change_pct:.2f}%)
' ) - # 가격 출처 마크 — cur_price 가 어느 시장 응답 가격과 일치하는지로 판정. - # NXT 미거래 종목(ohlc_nxt 빈 dict 또는 NXT price==KRX price)은 KRX 마크. + # 활성 시장 판정 — OHLC 미니테이블 컬럼 강조용(active_market). cur_price 가 어느 시장 가격과 일치하는지. nxt_p = (r.get('ohlc_nxt') or {}).get('price', 0) krx_p = (r.get('ohlc_krx') or {}).get('price', 0) - if nxt_p and nxt_p == price and nxt_p != krx_p: - mark = 'NXT' + mark = 'NXT' if (nxt_p and nxt_p == price and nxt_p != krx_p) else 'KRX' + # 거래가능 표시 — 지금 거래시간이면 초록점, 아니면 점 없음. (미리보기 행과 동일 규칙) + # 정규장: KRX+NXT 모두 거래 → 초록점 / NXT 시간대: NXT 거래종목(ohlc_nxt 가격 살아있음)만 / 장외·휴장·주말: 점 없음 + _phase = _market_phase_state()['phase'] + if _phase == 'regular': + _tradable = True + elif _phase == 'nxt': + _tradable = bool(nxt_p) else: - mark = 'KRX' - mark_html = f'{mark}' + _tradable = False + mark_html = '' if _tradable else '' # OHLC mini-table — ka10095 NX/NXT batch 결과를 각 컬럼에 분리 표시. 활성 시장만 밝게. # _nxt_inactive 마커는 stock_portfolio_report의 NX 응답 기반 판정이라 ETF처럼 NXT 정상거래 종목도 @@ -4257,12 +4262,9 @@ details.row + .section-label { margin-top: 14px; padding-top: 24px; border-top-c .ohlc-mini.ohlc-dual .ohlc-cell.ohlc-dim .ohlc-price { color: #5a5e69; } .ohlc-mini.ohlc-dual .ohlc-cell.ohlc-dim .ohlc-pct { color: #5a5e69 !important; } .ohlc-mini.ohlc-dual .ohlc-cell-empty.ohlc-dim { color: #3a3e48; } -/* 미리보기 현재가 왼쪽 출처 마크 — NXT(파랑톤) / KRX(회색톤). 어두운 채도로 보조 정보 강조 X. */ +/* 현재가 왼쪽 거래가능 표시 — 지금 거래시간이면 초록점, 아니면 점 없음. (미리보기·보유 행 공용) */ .px-dot { display: inline-block; width: 6px; height: 6px; border-radius: 50%; margin-right: 5px; vertical-align: 1px; } .px-dot.tradable { background: #2ecc71; box-shadow: 0 0 4px rgba(46,204,113,0.6); } -.px-mark { font-size: 8px; font-weight: 600; margin-right: 4px; padding: 1px 3px; border-radius: 2px; background: #14171f; vertical-align: 2px; letter-spacing: 0.3px; } -.px-mark.px-nxt { color: #2d5a8a; } -.px-mark.px-krx { color: #4a4e58; } .dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; flex: none; box-shadow: 0 0 6px currentColor; } .dot-1 { background: #f5d423; color: rgba(245,212,35,0.5); }