diff --git a/agents/stock/workspace/scripts/behive_web.py b/agents/stock/workspace/scripts/behive_web.py
index 89ad04a..9b717fc 100644
--- a/agents/stock/workspace/scripts/behive_web.py
+++ b/agents/stock/workspace/scripts/behive_web.py
@@ -2318,6 +2318,7 @@ def _render_ohlc_mini_dual(krx: dict | None, nxt: dict | None, active_market: st
dim_cls = ' ohlc-dim' if dim else ''
if not d:
return f'-'
+ extra = '' # 현재가 셀에만 WS 라이브 갱신 마커(data-rt-ohlc-cur) + 전일종가(data-prev) 부착.
if key == 'price':
# 현재가는 AL(통합) 가격을 양 컬럼 공통으로 표시(동일가). 등락률만 각 시장 전일종가 대비로 분리.
price = al_price or d.get('price', 0)
@@ -2326,6 +2327,7 @@ def _render_ohlc_mini_dual(krx: dict | None, nxt: dict | None, active_market: st
pct = (price - base) / base * 100
else:
pct = d.get('change_pct', 0.0) or 0.0
+ extra = f' data-rt-ohlc-cur data-prev="{int(base) if base else 0}"'
elif key == 'close_today':
# 당일종가 — 그 시장이 마감된 뒤에만 그 시장의 종가(=ka10095 price)를 표시. 장중엔 미확정(·).
if not closed:
@@ -2348,7 +2350,7 @@ def _render_ohlc_mini_dual(krx: dict | None, nxt: dict | None, active_market: st
cls = 'up' if pct > 0 else ('down' if pct < 0 else 'neutral')
sgn = '+' if pct >= 0 else ''
return (
- f'{price:,}원'
+ f'{price:,}원'
f'{sgn}{pct:.2f}%'
)
@@ -9314,11 +9316,22 @@ window.openPinModal = openPinModal;
});
}
// 수신 상태를 화면에 페인팅 — 1초 틱과 패널 swap 직후 재적용이 공유.
+ // 보유 상세 듀얼 OHLC 미니의 '현재가' 행(KRX/NXT) 라이브 갱신 — 현재가=AL 라이브, 등락=각 셀 전일종가(data-prev) 대비.
+ function paintOhlcCur(code,price){
+ document.querySelectorAll(selByCode(code)).forEach(function(r){
+ r.querySelectorAll('[data-rt-ohlc-cur]').forEach(function(cell){
+ var pe=cell.querySelector('.ohlc-price'); if(pe) pe.textContent=price.toLocaleString()+'원';
+ var prev=parseFloat(cell.getAttribute('data-prev')||'0');
+ var pc=cell.querySelector('.ohlc-pct');
+ if(pc&&prev>0){ var pct=(price/prev-1)*100; pc.textContent=(pct>=0?'+':'')+pct.toFixed(2)+'%'; pc.classList.remove('up','down','neutral'); pc.classList.add(pct>0?'up':(pct<0?'down':'neutral')); }
+ });
+ });
+ }
function applyState(d){
if(!d || !d.connected) return;
var codes=codesOnPage();
var qs=d.quotes||{}, vis=d.vi||{}, px={};
- Object.keys(qs).forEach(function(c){ px[c]=qs[c].price; paintPrice(c,qs[c]); paintProfit(c,qs[c].price); paintDay(c,qs[c].price); });
+ Object.keys(qs).forEach(function(c){ px[c]=qs[c].price; paintPrice(c,qs[c]); paintProfit(c,qs[c].price); paintDay(c,qs[c].price); paintOhlcCur(c,qs[c].price); });
codes.forEach(function(c){ paintVI(c, !!(vis[c] && vis[c].active)); });
window.__rtPx=px;
updateScopes(px);