auto: 일일 백업 2026-06-05 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -3380,9 +3380,10 @@ def _render_net_worth_chart(series: list[tuple[str, int]], current_net: int | No
|
||||
y_hi = vmax + pad
|
||||
span = max(y_hi - y_lo, 1)
|
||||
|
||||
# viewBox 800x280, padding: 좌52 우16 상14 하34 (날짜라벨 + 상단 cf 라벨 영역).
|
||||
# viewBox 800x280, padding: 좌72 우16 상14 하34 (날짜라벨 + 상단 cf 라벨 영역).
|
||||
# 좌여백은 모바일 axis 폰트(22px)에서 '−350K'·'1.5M' 류 라벨이 안 잘리게 넓게 잡음.
|
||||
W, H = 800, 360
|
||||
L, R, T, B = 52, 16, 14, 34
|
||||
L, R, T, B = 72, 16, 14, 34
|
||||
iw = W - L - R
|
||||
ih = H - T - B
|
||||
n = len(full)
|
||||
@@ -3421,11 +3422,16 @@ def _render_net_worth_chart(series: list[tuple[str, int]], current_net: int | No
|
||||
|
||||
# 데이터 범위(vmin~vmax)를 3구간으로 균등 분할 → 가로선 4개 (vmax / +2/3 / +1/3 / vmin).
|
||||
grid_vals = [vmax - vrange * i / 3 for i in range(4)]
|
||||
# 눈금 간격(step)이 단위보다 작으면 floor 나눗셈이 라벨을 뭉개므로(예: 1M 1M 1M),
|
||||
# step 크기에 맞춰 소수 자릿수를 정해 인접 눈금이 항상 구별되게 한다.
|
||||
step = vrange / 3
|
||||
dec_m = 0 if step >= 1_000_000 else (1 if step >= 100_000 else 2)
|
||||
dec_k = 0 if step >= 1000 else 1
|
||||
grid_lines = []
|
||||
for gv in grid_vals:
|
||||
gy = y_at(int(gv))
|
||||
grid_lines.append(f'<line class="grid" x1="{L}" x2="{L + iw}" y1="{gy:.2f}" y2="{gy:.2f}" />')
|
||||
label = f'{int(gv) // 1_000_000:,}M' if abs(gv) >= 1_000_000 else f'{int(gv) // 1000:,}K'
|
||||
label = f'{gv / 1_000_000:,.{dec_m}f}M' if abs(gv) >= 1_000_000 else f'{gv / 1000:,.{dec_k}f}K'
|
||||
grid_lines.append(f'<text class="axis" x="{L - 6}" y="{gy + 3.5:.2f}" text-anchor="end">{html.escape(label)}</text>')
|
||||
|
||||
# 0원 기준선 — 손익 0 높이가 차트 범위 안일 때만 (어디부터 적자/흑자인지 표시). 순자산은 항상 양수라 자동 미표시.
|
||||
|
||||
@@ -16,3 +16,5 @@
|
||||
{"date": "2026-06-01", "market": "KOSPI", "market_label": "코스피", "rise": 179, "upper": 4, "fall": 732, "lower": 0, "steady": 12, "adr": 25.0, "personal": 3862, "foreign": -28219, "institutional": 24427, "captured_at": "2026-06-01T21:00:02.616569+09:00"}
|
||||
{"date": "2026-06-02", "market": "KOSDAQ", "market_label": "코스닥", "rise": 452, "upper": 7, "fall": 1226, "lower": 1, "steady": 64, "adr": 37.41, "personal": -4090, "foreign": 3401, "institutional": 1327, "captured_at": "2026-06-02T21:00:00.850650+09:00"}
|
||||
{"date": "2026-06-02", "market": "KOSPI", "market_label": "코스피", "rise": 271, "upper": 1, "fall": 636, "lower": 0, "steady": 17, "adr": 42.77, "personal": 63537, "foreign": -63035, "institutional": -546, "captured_at": "2026-06-02T21:00:00.850650+09:00"}
|
||||
{"date": "2026-06-04", "market": "KOSDAQ", "market_label": "코스닥", "rise": 834, "upper": 8, "fall": 849, "lower": 1, "steady": 57, "adr": 99.06, "personal": -1633, "foreign": -424, "institutional": 2066, "captured_at": "2026-06-04T21:00:02.407555+09:00"}
|
||||
{"date": "2026-06-04", "market": "KOSPI", "market_label": "코스피", "rise": 447, "upper": 2, "fall": 446, "lower": 0, "steady": 31, "adr": 100.67, "personal": 50135, "foreign": -66663, "institutional": 15255, "captured_at": "2026-06-04T21:00:02.407555+09:00"}
|
||||
|
||||
Reference in New Issue
Block a user