From cb570437aa275e7023530ac4f20544205b5a0da8 Mon Sep 17 00:00:00 2001 From: hyowons Date: Mon, 8 Jun 2026 15:59:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20ADR=20=EC=88=98=EC=B9=98=EB=8F=84=20?= =?UTF-8?q?=EB=88=84=EC=A0=81=EB=B6=84=20=ED=8F=89=EA=B7=A0=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=ED=91=9C=EC=8B=9C(20=EC=9D=BC=20=EB=AF=B8=EB=A7=8C?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _compute_adr_ma_latest를 확장 윈도우로 — 20일 미만이어도 가용분 평균 숫자 표시('누적 N/20일 평균'). 단 과열/침체 태그·색은 20일 채워질 때까지 보류(짧은 윈도우 임계치 해석 부정확). 차트 정책과 일치. Co-Authored-By: Claude Opus 4.8 --- agents/stock/workspace/scripts/behive_web.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/agents/stock/workspace/scripts/behive_web.py b/agents/stock/workspace/scripts/behive_web.py index 3c4a707..c642b1d 100644 --- a/agents/stock/workspace/scripts/behive_web.py +++ b/agents/stock/workspace/scripts/behive_web.py @@ -5108,8 +5108,7 @@ def _compute_adr_ma_latest(symbol: str, today_raw_adr: float | None, today_date: return (None, 0, False) used = base[-window:] used_live = any(r.get('is_live') for r in used) - if len(used) < window: - return (None, len(used), used_live) + # 확장 윈도우: window 미만이어도 가용한 만큼의 평균을 돌려준다(차트와 동일 정책). count로 누적 여부 표기. avg = sum(r['adr'] for r in used) / len(used) return (avg, len(used), used_live) @@ -5143,13 +5142,19 @@ def _render_adr_summary_block(rows: list[dict] | None) -> str: bd = r.get('bizdate') today_iso = f'{bd[:4]}-{bd[4:6]}-{bd[6:]}' if (bd and len(bd) == 8) else None ma, count, _used_live = _compute_adr_ma_latest(r['symbol'], raw_adr, today_iso) + full = count >= ADR_MA_WINDOW adr_cls, adr_tag = _adr_class(ma) - if ma is not None: + if ma is None: + adr_str = '—' + sub_html = '
미수신
' + elif full: adr_str = f'{ma:.1f}' sub_html = '
20일 이평
' else: - adr_str = '—' - sub_html = f'
누적 중 {count}/{ADR_MA_WINDOW}
' + # 누적 < 20일 — 숫자는 보여주되 과열/침체 판정은 보류(짧은 윈도우는 임계치 해석 부정확). + adr_str = f'{ma:.1f}' + sub_html = f'
누적 {count}/{ADR_MA_WINDOW}일 평균
' + adr_cls, adr_tag = '', '' tag_html = f' {adr_tag}' if adr_tag else '' body_rows.append( f''