From 72b98409f24f0ae490dbe14f60d5db267a55e04f Mon Sep 17 00:00:00 2001 From: hyowons Date: Fri, 12 Jun 2026 10:28:08 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=A2=85=EB=AA=A9=EC=B0=A8=ED=8A=B8=20?= =?UTF-8?q?=ED=83=AD=20=EC=9E=AC=EB=B0=B0=EC=97=B4=20+=203=EA=B0=9C?= =?UTF-8?q?=EC=9B=94=20=EC=B6=94=EA=B0=80=20=E2=80=94=201=EB=B6=84?= =?UTF-8?q?=EB=B4=89/5=EB=B6=84=EB=B4=89/1=EA=B0=9C=EC=9B=94/3=EA=B0=9C?= =?UTF-8?q?=EC=9B=94/6=EA=B0=9C=EC=9B=94/1=EB=85=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CHART_RANGE_DAYS에 '3M': 63 추가 (stock_analysis) - /api/chart_svg 탭·패널 순서를 분봉 우선으로 재배열, 3M 패널 신설 - 기본 활성 탭은 1개월 유지 Co-Authored-By: Claude Opus 4.8 (1M context) --- agents/stock/workspace/scripts/behive_web.py | 21 +++++++++++-------- .../stock/workspace/scripts/stock_analysis.py | 4 ++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/agents/stock/workspace/scripts/behive_web.py b/agents/stock/workspace/scripts/behive_web.py index 7695db4..e7bce2d 100644 --- a/agents/stock/workspace/scripts/behive_web.py +++ b/agents/stock/workspace/scripts/behive_web.py @@ -10300,10 +10300,11 @@ class Handler(BaseHTTPRequestHandler): 'sma20': sa.sma(closes, 20), 'sma60': sa.sma(closes, 60), } - # 분석 페이지와 동일 패턴 — 1Y/6M/1M 3 개 panel + 탭. 250 봉 캐시 슬라이스만 다름. + # 분석 페이지와 동일 패턴 — 1M/3M/6M/1Y 4 개 panel + 탭. 250 봉 캐시 슬라이스만 다름. # 분봉 panel 은 빈 placeholder. 탭 클릭 시 클라이언트가 lazy fetch. svg_1y = sa.render_svg_chart(snap, range_key='1Y') svg_6m = sa.render_svg_chart(snap, range_key='6M') + svg_3m = sa.render_svg_chart(snap, range_key='3M') svg_1m = sa.render_svg_chart(snap, range_key='1M') # 분봉 panel 안에 기간 sub-tabs (30분/1h/3h/5h/하루). default = '1h'. # subpanel 은 클라이언트가 sub-toggle 이벤트로 lazy fetch. @@ -10322,17 +10323,19 @@ class Handler(BaseHTTPRequestHandler): ) html_block = ( '
' - '' - '' - '' - '' '' + '' + '' + '' + '' + '' '
' - f'
{svg_1y}
' - f'
{svg_6m}
' - f'
{svg_1m}
' - + _minute_panel('5m') + _minute_panel('1m') + + _minute_panel('5m') + + f'
{svg_1m}
' + f'
{svg_3m}
' + f'
{svg_6m}
' + f'
{svg_1y}
' ) body = html_block.encode('utf-8') body, enc = _maybe_gzip(body, self.headers.get('Accept-Encoding')) diff --git a/agents/stock/workspace/scripts/stock_analysis.py b/agents/stock/workspace/scripts/stock_analysis.py index 7fa0c22..5c5d9eb 100644 --- a/agents/stock/workspace/scripts/stock_analysis.py +++ b/agents/stock/workspace/scripts/stock_analysis.py @@ -543,13 +543,13 @@ VOL_TOP = PRICE_BOT + PANEL_GAP VOL_BOT = VOL_TOP + VOL_PANEL_H -CHART_RANGE_DAYS = {'1Y': 250, '6M': 120, '1M': 21} +CHART_RANGE_DAYS = {'1Y': 250, '6M': 120, '3M': 63, '1M': 21} def render_svg_chart(snap: dict, range_key: str = '1Y', ref_price: float | None = None, intraday: bool = False) -> str: """캔들 + SMA 3선 + 거래량 막대 인라인 SVG. - range_key: '1Y' (250일) | '6M' (120일) | '1M' (21일). 같은 snapshot 데이터에서 슬라이스만. + range_key: '1Y' (250일) | '6M' (120일) | '3M' (63일) | '1M' (21일). 같은 snapshot 데이터에서 슬라이스만. ref_price: 기준가(전일종가 등) — 지정 시 노란 점선 기준선 + 마지막 종가의 대비 등락률 표시 (분봉용). snap: collect_snapshot 결과. candles_asc·sma5/20/60 사용. 외부 JS 의존성 0. CSS는 inline.