549545bde6
설정·스크립트·스킬·문서·큐레이션 메모리 추적. 시크릿(credentials/identity)·런타임 상태(state/logs/sessions/sqlite)· 백업(clobbered/bak)·dream 캐시는 .gitignore로 제외. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
2026-05-07 ka10170 당일매매일지 ottks_tp 함정 — 보유분 매도 손익 0원 사고
레이가 "오늘 매매손익 0원"이라고 보고. 실제로는 ISA 계좌에서 5종목 매도해 +199,543원 실현손익 발생한 상태였음. 코디 작업으로 원인 추적·수정.
원인
scripts/kiwoom_client.py:get_trade_journal() 가 ka10170 호출 시 ottks_tp='1' 사용. 명세 정의:
| 값 | 의미 |
|---|---|
1 |
당일매수에 대한 당일매도 (round-trip만 — 당일 매수했다가 같은 날 매도한 경우) |
2 |
당일매도 전체 (어제 이전 보유분의 당일 매도까지 포함) |
코드 주석은 ottks_tp='1' (위탁) 으로 잘못 해석. "단주구분" 이라는 명세 라벨에서 추측한 것으로 보이지만 실제 의미는 round-trip 여부. 위탁/신탁 구분이 아님.
영향
- 어제 이전부터 보유한 종목을 오늘 매도 → ka10170 응답의
pl_amt=0,tot_pl_amt=0 stock_portfolio_report.enrich_journal_realized_pl()가 그 빈자리를 어제 스냅샷 avg_price로 추정 보강해 메일 카드에는 표시되었지만, 추정값이라 키움 ground truth(수수료·세금 정확 차감)와 미세 차이- 레이가 텔레그램에서 "당일 매매손익" 묻는 자연어 응답 → ka10170 직접 호출하면 0 반환 → 0원으로 답변
오늘 ISA 케이스 (ottks_tp=1 vs 2 비교):
| 종목 | 매도 수량 | ottks_tp=1 pl_amt | ottks_tp=2 pl_amt |
|---|---|---|---|
| 아진산업 | 268 | 0 | +144,931 |
| KODEX 은선물(H) | 1 | 0 | -588 |
| 티엠씨 | 16 | 0 | +45,220 |
| KODEX 코스닥150레버리지 | 30 | 0 | +9,980 |
| 합계 | 0 | +199,543 |
수정
kiwoom_client.py:315—ottks_tp='1'→'2'- 주석: "위탁" 잘못된 해석 제거, 명세 정의 기록
stock_portfolio_report.enrich_journal_realized_pldocstring 갱신 — 메인 경로에서 fallback 으로 격하 (ottks_tp=2면 평소 발동 안 함, 키움 응답 누락 시만 작동)
수정 후 검증:
- ka10170 직접 호출:
tot_pl_amt: 199543(이전엔 0) stock_portfolio_report.py run메일에당일 실현손익: +199,543원 (수수료·세금 3,719원)정확히 표시- 회귀 테스트 136건 통과
미래의 자기에게 — ka10170 호출 규칙
ottks_tp='2'무조건 사용.'1'은 round-trip 한정이라 일반적인 매매일지로는 부적절.- "단주구분" 라벨에 헷갈리지 말 것 — 의미는 round-trip 여부.
ottks_tp='1'로 회귀하는 PR이 들어오면 거부.