# 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_pl` docstring 갱신 — 메인 경로에서 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이 들어오면 거부.