Commit Graph

91 Commits

Author SHA1 Message Date
hyowons 7bb07ea3ad feat: 자산 차트보기에 연도별·월별 절대 선택 추가
기간 드롭다운에 '연도별'(연도 선택→월별 집계)·'월별'(연도+월 선택→일별) 추가.
- _available_chart_periods(): 스냅샷에서 데이터 있는 연/월만 추출(드롭다운 채움)
- _load_net_worth_series(period=): 'YYYY'/'YYYY-MM' 절대 필터
- _render_summary_panel: chart_ym → 단위 강제(연도별=월별집계/월별=일별)
- _render_chart_controls: 연·월 보조 드롭다운 + months map(JS용) + period 시 단위 disable
- chart_ym 파라미터 체인·캐시키·GET 핸들러(형식검증) 전반 연결
- JS: chartYM 저장/전송 + 연도별/월별/연·월 셀렉터 핸들러
- CSS: .cc-ym[hidden] 숨김(flex가 [hidden] UA스타일 덮지 않도록)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 10:42:25 +09:00
hyowons f8cd71713b Revert "fix: 보유탭 등락 기준을 ka10095 전일종가로 통일 — 감시탭 미리보기와 일치"
This reverts commit 0ba61d4d7c.
2026-06-10 09:05:36 +09:00
hyowons 9cc7043490 auto: 일일 백업 2026-06-10 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 02:00:02 +09:00
hyowons 0ba61d4d7c fix: 보유탭 등락 기준을 ka10095 전일종가로 통일 — 감시탭 미리보기와 일치
보유종목 표시 등락이 스냅샷(어제 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 <noreply@anthropic.com>
2026-06-09 22:34:04 +09:00
hyowons cbc89a4843 fix: KRX 당일종가 등락 0% — 전일종가를 ka10095 기준으로 산출 + 행 순서
- kt00018 pred_close_krx가 장 마감 후 현재가와 같은 값으로 채워지는 결함으로
  KRX 당일종가/현재가 등락률이 0%로 깔리던 문제 수정 → KRX 전일종가를
  ka10095(현재가−전일대비)로 산출(서버 계산값). 현재가·당일종가 등락 둘 다 정상화.
- 듀얼 OHLC 행 순서: 전일종가·현재가·시가·고가·저가·당일종가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 21:20:56 +09:00
hyowons 721fe9011c feat: 보유종목 듀얼 OHLC — 현재가 AL 통합(동일가)+당일종가 행 추가
- 현재가 행: AL(통합) 현재가를 KRX·NXT 양 컬럼에 공통 표시(동일가).
  등락률만 각 시장 전일종가 대비로 분리 → 가격 같고 % 다름.
- 당일종가 행 신설: 그 시장이 마감된 뒤에만(KRX 15:30·NXT 20:00 이후)
  해당 시장 종가+등락 표시, 장중엔 '·'(미확정).
- _render_ohlc_mini_dual에 al_price·krx_closed·nxt_closed 파라미터 추가.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 18:31:59 +09:00
hyowons 891bc274dc fix: 보유종목 듀얼 OHLC 사라짐 — 보유 KRX/NX 시세콜 게이팅 되돌림
이전 커밋에서 WS 연결 시 보유 가격보정 ka10095 2콜을 "순수 중복"으로 보고
skip했으나, 그 두 콜(KRX/NX)은 보유종목 행의 KRX·NXT 듀얼 OHLC 미니
(r['ohlc_krx']·['ohlc_nxt']) 데이터원이기도 했다. _AL 허브는 거래소별 단일
최신값만 들어 두 컬럼을 동시에 못 주므로 skip 불가 → 게이팅 제거(항상 호출).
관심·감시(단일 OHLC) 허브 충당은 그대로 유효.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 12:48:06 +09:00
hyowons 79c6647431 feat: 순자산 차트 오늘 포인트도 1초 실시간 이동(라벨↔점 일치)
장중 차트의 오늘 값은 foot 라벨만 1초 라이브였고 점 위치는 페치 때만
갱신돼 둘이 어긋나 보였다. WS 틱마다 서버와 동일 스케일로 y를 재계산해
last-dot·live-halo·신고가 마커·라이브 점선 끝점·마지막 pt-dot을 함께 이동.
렌더 범위 밖이면 차트 가장자리로 클램프(다음 페치가 스케일 재계산).

- net-chart-last에 스케일 노출(data-rt-nw-ylo/span/top/ih/x)
- 라이브 점선에 live-seg 클래스로 baseline 점선과 구분
- rt-nw 페인트에 점·선분 이동 로직 추가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 12:41:50 +09:00
hyowons 7f1c52a580 feat: 자산웹 실시간(WS) NXT 통합·시세 중복 제거·연결상태 점
- realtime_hub: 0B/1h 구독을 _AL(통합/SOR)로 전환 → 정규장 KRX + NXT 시간대
  NXT 체결을 한 구독으로 수신(수신 시 거래소 접미사 제거 후 bare 저장).
  NXT 당일평가손익 실시간 갱신 미동작 근본 수정. 0B 시/고/저(16/17/18) 캡처
- behive_web: WS 연결 시 보유 가격보정 ka10095 2콜 skip(완전 중복),
  관심·감시 시세도 허브 메모리 우선 충당(OHLC·마크는 서버 렌더 유지, mark는
  exchange 필드로 판정) → 시세성 키움 호출 중복 제거
- VI 배지: 자동갱신 swap 직후 마지막 WS 상태 즉시 재적용(깜빡임 제거),
  codesOnPage가 보유행(:held)·영문 6자리 코드도 수집 → 보유종목까지 VI 표시
- 상단바 WS 연결 상태 점(초록/빨강/회색) 추가 + 탭 시 상태 토스트

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 12:26:45 +09:00
hyowons 69ef9c09e8 auto: 일일 백업 2026-06-09 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 02:00:01 +09:00
hyowons 7f3994d98d fix: 자동갱신 틱마다 새로고침 아이콘 빨갛게 깜빡이던 것 제거
load()에 추가했던 .refresh spinning(빨강) 제거 — 자동갱신마다 빨간 깜빡임 거슬림.
내용은 여전히 클리어 없이 swap. 수동 새로고침(↻)의 빨간 스핀은 manualRefresh가 그대로 유지.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 17:50:10 +09:00
hyowons 5448a0ab5f feat: 순자산 차트 오늘(장중) 값 라벨 실시간 갱신
net-chart-last 라벨을 실시간 순자산으로 갱신(라이브 점일 때만). 순자산 변동분=손익 변동분(baseline·cf 세션중 고정)이라 net/pnl/period 모드 공통 처리.
SVG 점 위치는 새로고침 시(장중 이동 미미·Y재스케일 위험 회피). setOwnerKpis에서 owner별 갱신.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 17:32:50 +09:00
hyowons ab0343338e feat: stale 전체 재갱신 시 화면 클리어 대신 기존 유지+백그라운드 swap
5분 stale 재갱신이 resetShellLook()로 전탭을 스피너로 비우던 것 제거 → 기존 내용 유지한 채 fetch, 완료 시 교체.
로딩 표시는 새로고침(↻) 아이콘 스핀으로만(내용 그대로 보임). 실패 시 기존 내용 유지+에러 토스트.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 17:16:54 +09:00
hyowons 4a3a7a9493 style: detail 태그 중간 크기(13→11px)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:59:53 +09:00
hyowons 7fe2d925a5 style: 계좌명 폰트 더 작게(10→8.5px)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:55:19 +09:00
hyowons 2bfc2aa019 feat: 펼친 detail 태그 크게(13px)
.detail-tag .tag-chip 만 13px·패딩 확대. 미리보기·관심행 칩은 8.5px 유지.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:54:27 +09:00
hyowons 76376c0ab0 feat: 태그를 미리보기에서 빼고 펼친 detail에 표시
line2에서 tag_chip 제거, detail 상단에 태그 있을 때만 표시.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:51:19 +09:00
hyowons 56bb822da6 feat: 태그 칩 더 작게(8.5px) + # 글자 제거
_tag_chip_html에서 '#' 접두 제거, .tag-chip 폰트 10→8.5px·패딩 축소.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:49:08 +09:00
hyowons 6a32594268 feat: 계좌명 종목명 옆(작게), 태그 보유 왼쪽, ★ 비중 오른쪽
line1=뱃지+종목명+계좌명(작게), line2=태그+보유+비중%+★. line3 제거(2줄).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:46:26 +09:00
hyowons 639d92c4bd feat: line2에 % + 계좌명(일반/ISA), '비중' 글자·'+' 제거
비중 칩에서 '비중' 라벨 제거(숫자%만), 계좌명을 % 오른쪽 line2로 이동.
계좌명은 owner 접두(가희_) 떼고 유형만 '·'로(중복 제거). line3는 태그만.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:43:21 +09:00
hyowons f146c939c0 fix: 종목명 글씨 자동맞춤 깜빡임 제거(길이기반 CSS) + ★ 보유 왼쪽 이동
JS 폭측정 자동맞춤은 리셋→축소 플래시가 패널 swap/자동갱신마다 깜빡여서 제거.
대신 이름 길이로 글씨크기 클래스(stock-sm 10자+/stock-xs 14자+) 서버 렌더 시 확정 → 깜빡임 없음.
당일거래 마크(★)는 line2 보유 왼쪽으로 이동.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:37:10 +09:00
hyowons 5a5fe3129e feat: 당일거래 마크(★) 비중 오른쪽(line2)으로 이동
line1=뱃지+종목명, line2=보유+비중+★, line3=태그+계좌.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:33:00 +09:00
hyowons 0d9810f2b9 feat: 긴 종목명 글씨크기 자동맞춤(ellipsis 대신)
line1-held .stock 이 잘릴 만하면 폭 실측해 font-size를 0.5px씩 줄여 한 줄에 맞춤(min 10px).
MutationObserver는 행 추가(패널 swap)에만 반응하도록 필터 → 실시간 1초 갱신엔 재측정 안 함(레이아웃 부하 방지). resize도 재맞춤.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:32:21 +09:00
hyowons aaea96ffe3 feat: 보유행 계좌종류를 3번째 줄로 이동
line1=뱃지+당일마크+종목명, line2=보유+비중, line3=태그+계좌종류.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:26:25 +09:00
hyowons c4264a379e feat: 보유행 3줄 재구성 (뱃지·당일마크·이름·계좌 / 보유·비중 / 태그)
line1=뱃지+당일거래마크(★)+종목명+계좌종류(nowrap, 이름 ellipsis), line2=보유+비중, line3=태그.
미사용 .name-head 제거, .line1-held{flex-wrap:nowrap}로 긴 이름도 1줄 유지.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:25:07 +09:00
hyowons af235dca1f feat: 보유행 미리보기 3줄 고정 (뱃지·이름 / 보유·비중 / 태그·계좌)
line1=뱃지+종목명, line2=보유+비중, line3=태그+계좌종류(작게)로 재배치.
기존 line1에 섞여있던 태그·계좌(·star)를 line3로 분리. 각 줄 flex 단일행이라 3줄 고정.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:20:08 +09:00
hyowons f9f43762cf fix: 보유행 긴 종목명 줄바뀜(배지/이름 분리) 방지
line1이 flex-wrap이라 이름 길면 종목명이 다음줄로 내려가 매수등급 배지만 윗줄에 남음(KODEX AI핵심전력설비 등).
배지+이름을 .name-head로 묶고 이름은 min-width:0 ellipsis 처리 → 한 묶음 유지, 길면 잘림.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:09:47 +09:00
hyowons b2fd264690 fix: 보유행 미리보기 '비중 xx.xx%' 줄바뀜 방지
line2 flex 자식인 비중 칩 텍스트가 좁은 폭(삼성전자 등 보유수량 자릿수 큰 경우)에서 내부 줄바꿈됨.
.wt-chip{white-space:nowrap}으로 한 덩어리 유지.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 16:05:36 +09:00
hyowons cb570437aa feat: ADR 수치도 누적분 평균으로 표시(20일 미만)
_compute_adr_ma_latest를 확장 윈도우로 — 20일 미만이어도 가용분 평균 숫자 표시('누적 N/20일 평균').
단 과열/침체 태그·색은 20일 채워질 때까지 보류(짧은 윈도우 임계치 해석 부정확). 차트 정책과 일치.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 15:59:00 +09:00
hyowons ceb9b8565d feat: ADR 추세 차트 20일 미만 누적 구간도 표시(확장 윈도우)
_compute_adr_ma_series를 확장 윈도우로 — window 미만 구간은 가용한 만큼의 평균으로 1일차부터 점 생성.
누적이 20일 도달하면 정식 trailing-20 이평과 동일(steady-state 불변, 검증됨). 누적 중엔 제목에 '누적 N/20일' 표시.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 15:55:19 +09:00
hyowons e01e0b8a62 fix: 당일매매 중복행 비중도 실시간 갱신
updateScopes 비중 갱신을 consolidated(:held) + 당일매매 중복행(바 키)에 적용(같은 전체보유 비중).
계좌별 행(:held:계좌)은 exact match라 자동 제외, scope 한정으로 본인/가희 교차오염 방지.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 15:09:25 +09:00
hyowons 787834f93e feat: 관심·감시 등락률 실시간 + WS 빈응답 가드
- 관심·감시 행 등락률: KRX 기준 = 0B 피드 pct와 동일 → paintPrice가 .rt-wl-daypct를 피드 pct로 갱신 (보유행 NXT기준과 분리)
- realtime_hub: recv 빈응답 5회 연속 시 재연결(이론상 tight busy-loop 차단), 타임아웃은 정상 idle로 카운터 리셋

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 15:07:19 +09:00
hyowons 557f5bd8a5 fix: 메인 보유목록 실시간 갱신 누락 (data-row-key 접미사)
보유행 키가 'CODE:held'(메인)·'CODE:held:계좌'(계좌별)·'CODE'(당일매매)로 갈리는데
paint 함수가 [data-row-key=CODE] 정확매칭이라 :held 메인 목록을 놓쳐 현재가·평가손익·등락률이
라이브 갱신 안 됨(당일매매 중복행·관심종목·KPI만 움직여 작동처럼 보임). selByCode로 바 키+접두 키 함께 매칭.
fill_seq 빈파일('') 엣지도 수정 — 첫 체결 reload 누락 방지.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:58:04 +09:00
hyowons 15df525fb2 feat: realtime_hub 장외 대기 — 다음 영업일까지(6h 상한)
30분 고정 폴링 → 다음 영업일 07:00까지 계산해 자되 6시간 상한.
주말·휴장·연휴 정확히 건너뜀(_next_preopen_dt + _load_holidays). 휴장일 깨우기 48→4회/일.
6h 상한은 날짜계산 오류 시에도 자가교정하는 backstop. 개장 임박(07:00~08:00)은 여전히 60s.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:50:56 +09:00
hyowons 4ae10b50fc feat: realtime_hub 장외 대기 적응형(개장 임박만 촘촘히)
고정 60s 폴링 → 평일 07:00~08:00(NXT 프리마켓 08:00 임박)만 60s,
그 외 장외(밤·주말·휴장)는 30분. 밤새 무의미한 1분 폴링 제거.
30분 상한은 자가교정용(개장 오버슬립 방지). 휴장·주말은 phase!=closed 라 자동 30분.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:42:34 +09:00
hyowons b813d01cfa feat: realtime_hub 장 시간대 게이팅
장외·주말·휴장 시 키움 WS 연결 안 함(재연결 폭주·로그 노이즈 방지).
behive_web._market_phase_state() 지연 import 재사용(active=정규장·NXT만 연결).
장 마감되면 수신 루프가 연결 종료 후 대기 모드(60s 폴링), 개장 시 자동 재연결.
판정 실패 시 보수적으로 연결 유지(fail-open).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:34:48 +09:00
hyowons 925014dfd8 feat: 자산웹 실시간 시세·평가손익 (키움 WebSocket)
- realtime_hub.py: 키움 WS 허브(0B 체결가·1h VI), behive_web 데몬 스레드 + 메모리 상태
- /api/realtime/quotes 엔드포인트 (허브 메모리만, 키움 호출 0)
- 보유행 현재가·평가손익·평가금액·등락률(NXT종가 기준)·비중 실시간
- KPI 총평가금액·총평가손익·순자산·당일평가손익 실시간 (owner 탭 합계→자산정보 탭 카드 연동)
- fill_watcher 체결 시 fill_signal 기록 → 자산웹 패널 자동 새로고침(수량·예수금·당일정산)
- 감시종목 탭 자동갱신 카운트다운 활성화
- 안전: kill-switch BEHIVE_REALTIME=0, 허브 콜드/실패 시 REST 폴백, 매매 경로 무관

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:30:19 +09:00
hyowons 020ac27bd0 auto: 일일 백업 2026-06-06 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-06 02:00:03 +09:00
hyowons a61aad145c auto: 일일 백업 2026-06-05 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 02:00:02 +09:00
hyowons 8561afbcd2 chore: 누적 데이터(trade_journal·market_indicators) git 추적 추가
키움 기간조회 API 부재로 복구 불가한 EOD 누적 데이터를 버전관리에 포함.
시크릿·sqlite·logs는 계속 .gitignore 제외 (별도 백업 대상).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 15:45:27 +09:00
hyowons fed3526b20 Initial commit: OpenClaw 워크스페이스 버전관리 시작
설정·스크립트·스킬·문서·큐레이션 메모리 추적.
시크릿(credentials/identity)·런타임 상태(state/logs/sessions/sqlite)·
백업(clobbered/bak)·dream 캐시는 .gitignore로 제외.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-04 15:39:41 +09:00