Commit Graph

101 Commits

Author SHA1 Message Date
hyowons 85674763a3 auto: 일일 백업 2026-07-07 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 02:00:04 +09:00
hyowons 008ce8be65 auto: 일일 백업 2026-07-04 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 02:00:03 +09:00
hyowons dd1ad7d964 auto: 일일 백업 2026-07-03 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 02:00:02 +09:00
hyowons 300a4c9ca9 feat(budget): 가희 증권 자산 후잉·결산 반영 (securities_balance v2)
- send_balance_to_budget.py: 본인+가희 계좌 소유자별(by_owner) 집계, schema v1→v2
- inbox_handler.py: OWNER_ASSET 맵으로 소유자별 reconcile(self→증권(효원)/gahee→증권(가희)),
  asset_name 기반 출력, v2 payload 검증 추가(v1 하위호환 유지)
- monthly_settlement.py: 텔레그램 reconcile 라인 소유자별 라벨
- INBOX_TOPICS.md / CLAUDE.md: v2 스키마 문서화

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 18:51:15 +09:00
hyowons 213c0e0797 auto: 일일 백업 2026-07-02 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-02 02:00:02 +09:00
hyowons 565689df25 auto: 일일 백업 2026-07-01 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 02:00:02 +09:00
hyowons 1bbb61520c auto: 일일 백업 2026-06-30 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 02:00:02 +09:00
hyowons 17ad101eb1 auto: 일일 백업 2026-06-29 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 02:00:02 +09:00
hyowons 790effdf0e auto: 일일 백업 2026-06-28 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 02:00:01 +09:00
hyowons 6c89c54fe5 auto: 일일 백업 2026-06-27 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-27 02:00:02 +09:00
hyowons 03989e9df4 auto: 일일 백업 2026-06-26 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 02:00:04 +09:00
hyowons c15c3a1fec auto: 일일 백업 2026-06-25 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 02:00:02 +09:00
hyowons 21f4f07cbb auto: 일일 백업 2026-06-24 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 02:00:02 +09:00
hyowons cee32e6dfb auto: 일일 백업 2026-06-23 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 02:00:01 +09:00
hyowons 40cc290035 auto: 일일 백업 2026-06-21 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 02:00:02 +09:00
hyowons 5a11a21562 auto: 일일 백업 2026-06-20 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 02:00:05 +09:00
hyowons dc537f9925 auto: 일일 백업 2026-06-19 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 02:00:06 +09:00
hyowons 70e2251995 auto: 일일 백업 2026-06-18 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 02:00:02 +09:00
hyowons b3696949f5 auto: 일일 백업 2026-06-17 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 02:00:02 +09:00
hyowons eaa276b26d feat(sim): 물타기(애버리징) 토글 — 하락 시 손절 대신 평단↓ 추가매수
- config: AVERAGING_ENTRY·AVERAGING_DROP_PCT(0.10)·CRASH_DROP_PCT(0.10)
- signals.evaluate_holding: market_ok 인자 + 물타기 분기 (직전매수가 -10% 하락 시 ADD-down, 한도/강세장/비급락 조건, 당일 -10%급락은 손절·약세장 금지)
- engine·backtest: add_kind='down'이면 손절선 낮은 평단 기준 재설정(up은 위로 래칫 유지), engine은 market_ok 전달
- 첫 매수는 기존 검증 진입 그대로(우량주만 물타기)
- 백테스트: 즉시매수와 반대로 유리(10/20/60 수익·승률↑) → 라이브 변이 3개(v301/302/303) 등록, 총 223
- 웹 '물타기' 칩 + 설명 토스트

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 14:30:07 +09:00
hyowons 70f6b9a34d feat(sim): 정렬 토글(오름/내림)·40일선 1등전략(v300) 복구·보유배지 📦
- sim_web 비교탭 정렬: 손익/평가/보유/거래순 클릭마다 오름↔내림 토글 (기본 내림, 평가순만 오름), 활성버튼 화살표 표시
- 40일선 1등 전략 v62 파라미터 복구 → v300 (새 계좌, 220개)
- behive_web 보유 배지: '보유 xx 주' → '📦 xx' (폰트 8px, sim웹과 통일)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 12:16:08 +09:00
hyowons a61f1f67c5 style: 보유 배지 'xx 주' → '보유 xx 주'
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 10:04:39 +09:00
hyowons 3366990cfa style: 보유 배지 '보유xx' → 'xx 주'
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 09:51:17 +09:00
hyowons 3694393c43 style: 보유 배지 '보유 xx주' → '보유xx' (공백·주 제거)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 09:34:38 +09:00
hyowons 5cd3ba9f4e auto: 일일 백업 2026-06-16 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 02:00:06 +09:00
hyowons a5e52dc69b feat(sim): 관찰목록 자동편입/제외 — 키움 순위정보로 주도주 매일 편입
- kiwoom_client: get_volume_surge(ka10023)·get_foreign_inst_netbuy(ka90009) 순위 조회 추가 (rkinfo endpoint)
- universe: auto_import(외인·기관 순매수+거래량급증 상위, ETF·하락·급증률이상치 제외, 각15·총120 상한, origin=auto) + auto_prune(auto·미보유·10거래일 무신호만, 보유/수동/비하이브 불가침) + mark_signals
- engine.scan_all: 변이 watching 종목을 mark_signals로 신호 추적(auto_seen.json)
- CLI: python3 -m sim universe {import|prune|all}
- trade-journal plist 평일21:00에 'sim universe all' 4번째 명령 추가
- 첫 실행: 후보38 → 32편입 (59→91종목)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 19:03:35 +09:00
hyowons e3c54d62ed feat(sim): 추세선 4종·완화/즉시매수 토글·전략 4요소 이름·거래목록 달력 등 대개편
전략 차원/변이:
- 추세선 10/20/40→10/20/60 (40 제거, 60 추가; 60은 중기게이트와 겹침)
- 기울기 게이트 완화(완화=기울기만 면제, 중기정배열 유지)
- 즉시매수 토글 — 백테스트로 불리 확인 → 라이브 확인용 3개만 유지
- 최종 219개 (비즉시 216 + 즉시 3)

UI:
- 전략 이름 = 4카테고리 두글자(추세·진입·매도·베팅) + 카테고리별 ⓘ 설명
- 거래목록 달력형(오늘 자동선택·거래없어도 클릭), 매수/매도 분리·익절/손절 표시
- 라벨 동적화(실제 SMA_LONG), 제외카드 4조건 표시, 약세모드/완화/즉시 칩
- 매수준비/대기 배지 분리, 탭 깜빡임 제거(서버 checked), 손절/목표 평단% 등

문서: CLAUDE.md sim 섹션 갱신

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 18:57:30 +09:00
hyowons ef477d878c feat: 보유종목 행도 NXT/KRX 텍스트 → 거래가능 초록점 (미리보기와 동일)
- _render_holding_row: px badge를 px-dot 초록점으로 통일. 활성 시장 판정(mark)은
  OHLC 미니테이블 컬럼 강조(active_market)용으로만 남겨 OHLC 표시는 그대로 유지
- 더 이상 쓰이지 않는 .px-mark/.px-nxt/.px-krx CSS 제거, CSS 주석 갱신
- 라이브 owner 패널 27개 보유행 전부 초록점 확인

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 11:38:39 +09:00
hyowons 904ae5c415 feat: 미리보기 행 NXT/KRX 텍스트 마크 → 거래가능 초록점
- _render_row: 가격 출처(NXT/KRX) 텍스트 배지 대신 '지금 거래시간 여부'로
  초록점(.px-dot.tradable) / 점 없음. 정규장=전부, NXT시간대=NXT거래종목만
  (_nxt_price>0), 장마감·휴장·주말=점 없음. 가격 None은 기존대로 점 없음
- 보유종목 상세행(_render_holding_row)의 NXT/KRX 텍스트는 그대로 유지
- CSS .px-dot 추가 (px-mark.px-nxt/krx는 보유행이 계속 사용)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 11:34:26 +09:00
hyowons 474ccf09eb auto: 일일 백업 2026-06-15 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 02:00:03 +09:00
hyowons 102bdf36d7 auto: 일일 백업 2026-06-14 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 02:00:02 +09:00
hyowons c749e66460 auto: 일일 백업 2026-06-13 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 02:00:02 +09:00
hyowons 9239901028 feat: 2계좌 매도 팝업은 전량매도일 때만 + 매도 보유수량 현재/전체(그룹) 병기
- 팝업 조건: 입력 수량 == 매도가능 전량(max_qty)일 때만 sell-choice 팝업,
  일부매도는 팝업 없이 단일 진행. lastCheck 미수신 시에도 단일 진행
- 매도 정보영역: 같은 그룹 다른 계좌도 보유 시 '보유: 141주 / 전체 280주' 병기
  (단독 보유면 기존 표시 유지). 팝업 문구도 양쪽 '매도가능 전량'으로 통일

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 15:16:23 +09:00
hyowons e95e2b3f3a feat: 매도 시 같은 그룹 2계좌 동시 매도 (카드 1장+PIN 1개, 선택 팝업)
- orders/handler.py: propose_trade_multi (레그별 독립 검증, 같은 소유자 그룹만,
  SELL+LIMIT/MARKET 한정) + submit_with_pin multi 분기 _submit_multi_legs
  (레그 독립 제출·독립 fill_watcher, 한 레그 실패해도 나머지 시도)
- orders/card.py: format_card_multi (레그별 계좌·수량·예상회수 + 합계)
- behive_web.py: POST /api/order/propose_multi (PIN은 iMessage '매도(2계좌)'),
  sell-choice-modal (두 계좌 모두 / 선택 계좌만 / 취소), doPropose SELL 분기
  (accStatus로 sibling 보유 감지 → 팝업, sibling 수량은 보유 전량)
- fix: /api/order/cancel 응답이 dict를 PendingCard로 취급해 매번 500 나던
  기존 버그 (취소 자체는 동작, 응답만 깨짐)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 15:05:35 +09:00
hyowons 72b98409f2 feat: 종목차트 탭 재배열 + 3개월 추가 — 1분봉/5분봉/1개월/3개월/6개월/1년
- CHART_RANGE_DAYS에 '3M': 63 추가 (stock_analysis)
- /api/chart_svg 탭·패널 순서를 분봉 우선으로 재배열, 3M 패널 신설
- 기본 활성 탭은 1개월 유지

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 10:28:08 +09:00
hyowons ff3652c8b1 feat: 자산 차트 단위 경계 세로선 — 일별=주 경계, 월별=연 경계
- 일별 보기: ISO 주차가 바뀌는 첫 점에 세로 점선 (주 단위 구간 인지)
- 월별 보기: 연도가 바뀌는 첫 점에 세로 점선
- per_period 모드는 기존 period-sep과 중복이라 생략, week/year 단위 미표시
- 스타일 .grid-v — 가로 grid와 동일 톤 점선

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 10:03:11 +09:00
hyowons b5e3fc0f4e fix: VI 1h 매핑 실증 반영 — active=해제시각(1224) 유무로 판정
2026-06-12 사이드카 날 VI 폭주(~1,000건) 실증 결과:
- 9068은 발동/해제가 아니라 VI 종류(1=정적, 2=동적, 3=동적+정적)
  → 구 매핑은 동적 VI를 통째로 무시하고, 해제 이벤트도 active로 덮어썼음
- 발동 이벤트는 1224(해제시각)='000000', 해제 이벤트는 시각이 참
  → active = release_time in ('','000000') 으로 교체, 1223 발동시각 추가 저장
- 1h는 구독 무관 시장 전역 broadcast임을 확인 (주석 기록)
- 실증용 raw 로그 제거 (폭주 날 ~2,000줄 — 역할 완료)
- 토스트: 발동시각 표시 추가, '000000'은 해제 표시 생략
- TTL 백스톱(_vi_expired 180s)은 해제 메시지 유실 대비로 유지

라이브 검증: 002780 동적 VI 발동(09:09:08) → active=True 정상 포착

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 09:09:58 +09:00
hyowons defd5c0bf6 auto: 일일 백업 2026-06-12 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-12 02:00:03 +09:00
hyowons b20c21cbd2 fix: VI 배지 자동 만료 — 해제 1h 메시지 미수신 시 영구 잔류 방지
- 관찰(2026-06-11): VI 발동 1h 이후 해제 메시지가 안 오고 1224(해제시각)도
  발동시각과 동일 → active=true 박제, 배지가 안 사라짐
- get_vi/active_vis 읽기 시점에 발동 후 180초(2분+임의연장30s+여유) 경과 시
  active=False 처리 (_vi_expired). 저장 원본은 유지
- 1h 원본 필드 stderr 로그 추가 — 9068/1224 매핑 실증용 (VI 드물어 부담 없음)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 15:56:45 +09:00
hyowons 76001b1994 feat: 기업정보 종합 판단에 추정ROE·추정EPS 리비전 반영
- ROE: trailing 낮아도 추정ROE 급증(≥15% & 현재의 1.5배↑) 전망이면 좋은 점으로 표시
- PBR≥3: 추정ROE≥20%면 고평가 단정 대신 '실현 여부 관건'으로 완화 (PER/추정PER과 동일 패턴)
- 추정EPS 리비전(est_change_pct)을 전망 개선/악화 판단에 추가 (목표가 리비전보다 직접적 신호)
- synthNote: pbrJustified로 valHigh 제외 + EPS 리비전을 grPos/grNeg에 포함

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 12:23:10 +09:00
hyowons c9fafad10d feat: 기업정보 종합 판단에 추정(forward) PER 반영
기존엔 trailing PER만 보고 고평가 판단 → 성장주(삼성전자 45배 vs 추정 6.9배)
오판. trailing 높아도(≥30) 추정PER이 크게 낮으면(<trailing×0.6 & <20) '이익 급증
기대(growth priced in)'로 인식: 고평가 단정 대신 좋은점(forward 저평가)+주의점
(추정치 미달 시 조정 위험) 양면 표시. synthNote에 forward 우선 케이스 추가.
forward EPS 낙관 경향 고려해 미달 위험 경고 동반.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 12:12:46 +09:00
hyowons f8d17f4437 feat: 기업정보 모달 — 가치+성장 종합 해석을 요약탭에 통합
각 탭의 개별 판단 박스 제거. 요약탭 최상단에 📌종합(가치 vs 성장·컨센서스
상충을 한 문장으로 화해: 고평가+긍정/저평가+부진/고평가+부진/저평가+긍정 4분기)
+ 좋은 점 / ⚠️주의할 점(두 영역 합산) 표시.
companyJudge/growthJudge → companyGC/growthGC({good,caution}) + synthNote 추가.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 12:09:45 +09:00
hyowons 0845db1915 feat: 기업정보 모달 가치/성장성 탭 요약을 해석형(좋은점/주의점)으로
수치 나열 대신 지표를 좋은 점 / ⚠️주의할 점으로 판단:
- 가치: ROE(우수/낮음/적자)·PER(고평가 부담/부담 작음)·PBR(비쌈/청산가치 이하)
- 성장: 매출·영익·EPS 성장/역성장·상승여력·투자의견·목표가 리비전·서프라이즈
규칙 기반·표준 임계치, 특이점 없으면 미표시. (이전 나열식 요약 대체)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 12:04:04 +09:00
hyowons 2d9c6719e8 feat: 기업정보 모달 가치/성장성 탭 상단에 내용 요약 박스
기업정보·가치 탭: 밸류에이션(PER·PBR)+수익성(ROE 우수/양호/낮음/적자).
성장성·컨센서스 탭: 성장(매출·영익·EPS YoY)+목표주가/상승여력/투자의견+
리비전+서프라이즈. 규칙 기반(LLM 미경유), 표시 데이터 그대로 요약.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 11:53:22 +09:00
hyowons a3c6496ffa chore: sim 전략 파라미터·페이퍼 실험 데이터 git 추적 (백업 공백 해소)
state/* 일괄 제외에 sim 화이트리스트 추가 — 108변이 파라미터(variants.json)·
메인 튜닝(params.json)·마킹(favorites.json)·등록근거(backtest_results.json)·
일별성과(equity_history)·관찰목록·지수이력 + 변이별 계좌/거래기록.
last_scan·variants_compare(5분 스냅샷)·flow_history.sqlite(백필 재구축 가능)는 계속 제외.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 11:20:31 +09:00
hyowons 70841548bc feat: VI 배지 토스트에 종목 실제 VI 데이터 표시
VI 탭 시 그 종목의 실시간 VI 정보(적용구분·방향·발동가·발동등락률·당일
발동횟수·해제시각)를 설명과 함께 표시. window.__rtState.vi[code] 사용.
허브에 발동횟수(1490) 캡처 추가.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 11:08:27 +09:00
hyowons ae83deab9f style: VI 설명 토스트 줄바꿈 (동적/정적VI 항목 구분)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 11:04:24 +09:00
hyowons 7a60bb1865 feat: VI 배지 탭 시 변동성완화장치 설명 토스트
VI 배지를 누르면 VI 설명 토스트 표시(동적/정적VI·발동 기준·2분 단일가).
document 위임(배지는 동적 생성) + preventDefault/stopPropagation으로 행 토글 차단.
배지에 cursor:pointer 추가.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 10:49:55 +09:00
hyowons 25a01f7f4a feat: 보유 상세 듀얼 OHLC 미니 현재가/등락 WS 실시간 갱신
듀얼 OHLC 미니(KRX/NXT)의 '현재가' 행이 서버 렌더라 고정이던 것을 WS 라이브로.
- 현재가 셀에 data-rt-ohlc-cur + data-prev(각 시장 전일종가) 마커
- paintOhlcCur(code,price): 1초 틱마다 현재가=AL 라이브(양쪽 동일), 등락=셀별
  전일종가 대비 재계산. applyState에서 호출.
전일종가/시가/고가/저가/당일종가 행은 그대로(서버 렌더).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 10:45:58 +09:00
hyowons c1a46fd908 fix: 보유종목 등락률 가끔 안 보이던 문제 — rt-daypct span 항상 렌더
기존 조건(d_pct_val != 0)으로 등락률이 0/None이면 .rt-daypct span을 아예
안 그렸는데, WS paintDay는 span이 있을 때만 갱신(if(sp))이라 한 번 0으로
렌더되면 실시간으로도 복구 안 돼 사라졌다. show_day_change 동안 항상 span을
그리도록 변경(값 0/None은 0.00% neutral) → WS가 라이브로 채움.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 10:05:37 +09:00