From 0ba61d4d7cad955cb2c5b0db4104df21b957f55d Mon Sep 17 00:00:00 2001 From: hyowons Date: Tue, 9 Jun 2026 22:34:04 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=B3=B4=EC=9C=A0=ED=83=AD=20=EB=93=B1?= =?UTF-8?q?=EB=9D=BD=20=EA=B8=B0=EC=A4=80=EC=9D=84=20ka10095=20=EC=A0=84?= =?UTF-8?q?=EC=9D=BC=EC=A2=85=EA=B0=80=EB=A1=9C=20=ED=86=B5=EC=9D=BC=20?= =?UTF-8?q?=E2=80=94=20=EA=B0=90=EC=8B=9C=ED=83=AD=20=EB=AF=B8=EB=A6=AC?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0=EC=99=80=20=EC=9D=BC=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 보유종목 표시 등락이 스냅샷(어제 NXT 종가) 기준이라 감시탭 미리보기(ka10095 실시간 전일종가)와 50원 차이로 어긋났다(예: SK이터닉스 23.83% vs 23.64%). 보유행 표시 등락(미리보기·당일등락·평가금액변동·data-rt-prevclose)과 NXT OHLC 전일종가를 마크된 시장의 ka10095(현재가−전일대비) 기준으로 통일. 원본 r은 copy로 보존(KPI·잔고 계산 영향 없음). 잔고 KPI는 prev_net 기반이라 개별 일손익 합과 50원×수량 수준 미세 괴리는 감수(관리자 승인). Co-Authored-By: Claude Opus 4.8 --- agents/stock/workspace/scripts/behive_web.py | 28 +++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/agents/stock/workspace/scripts/behive_web.py b/agents/stock/workspace/scripts/behive_web.py index b16c7be..cbf05fe 100644 --- a/agents/stock/workspace/scripts/behive_web.py +++ b/agents/stock/workspace/scripts/behive_web.py @@ -2592,6 +2592,18 @@ def _render_holding_row(r: dict, total_value: int, show_day_change: bool = False star = ''.join(star_parts) day_change = r.get('day_change', 0) day_change_pct = r.get('day_change_pct', 0.0) + # 표시 등락 기준을 마크된 시장의 ka10095 전일종가(현재가−전일대비)로 통일 — 감시탭과 일치. + # (스냅샷 rebase 값과 50원 단위로 갈려 미리보기·당일종가 등락이 어긋나던 것 해소. 원본 r은 보존.) + _ok = r.get('ohlc_krx') or {} + _on = r.get('ohlc_nxt') or {} + _kp = _ok.get('price', 0) or 0 + _np = _on.get('price', 0) or 0 + _md = _on if (_np and _np == price and _np != _kp) else _ok + _md_prev = (_md.get('price', 0) or 0) - (_md.get('change', 0) or 0) + if _md_prev > 0 and price: + day_change = price - _md_prev + day_change_pct = (price - _md_prev) / _md_prev * 100.0 + r = {**r, 'day_change': day_change, 'day_change_pct': day_change_pct} candle_summary = '' ohlc = r.get('ohlc') or {} @@ -2667,14 +2679,18 @@ def _render_holding_row(r: dict, total_value: int, show_day_change: bool = False if _krx_prev > 0: ohlc_krx_for_render['prev_close'] = _krx_prev ohlc_nxt_for_render = r.get('ohlc_nxt') - _snap_prev = r.get('pred_close', 0) or 0 - if ohlc_nxt_for_render and _snap_prev > 0: + if ohlc_nxt_for_render: ohlc_nxt_for_render = dict(ohlc_nxt_for_render) - ohlc_nxt_for_render['open'] = _snap_prev - ohlc_nxt_for_render['prev_close'] = _snap_prev _nxt_px = ohlc_nxt_for_render.get('price', 0) or 0 - ohlc_nxt_for_render['change'] = _nxt_px - _snap_prev - ohlc_nxt_for_render['change_pct'] = ((_nxt_px - _snap_prev) / _snap_prev * 100) if _snap_prev else 0.0 + # NXT 전일종가도 ka10095(현재가−전일대비)로 — 스냅샷(pred_close)과 갈려 등락이 어긋나던 것 통일. + _nxt_prev = _nxt_px - (ohlc_nxt_for_render.get('change', 0) or 0) + if _nxt_prev <= 0: + _nxt_prev = r.get('pred_close', 0) or 0 + if _nxt_prev > 0: + ohlc_nxt_for_render['open'] = _nxt_prev + ohlc_nxt_for_render['prev_close'] = _nxt_prev + ohlc_nxt_for_render['change'] = _nxt_px - _nxt_prev + ohlc_nxt_for_render['change_pct'] = ((_nxt_px - _nxt_prev) / _nxt_prev * 100) if _nxt_prev else 0.0 # 당일종가: KRX는 정규장 마감(15:30) 후, NXT는 마감(20:00) 후에만 그 시장 종가 표시. _now_ohlc = datetime.now(KST) _hm_ohlc = _now_ohlc.hour * 60 + _now_ohlc.minute