Files
Stock-trading-programming/reports/daily/2026-05-18.md
T
whdwo798 4eee610b5d 버그 수정 - 14:00 이후 신규 진입 차단·SL 재진입 차단 재시작 초기화
check_entries 진입 시 현재 시간 재확인 추가
_restore_sl_tickers_from_db 추가: 봇 재시작 시 당일 SL 종목 복원
일일 리포트 bug11·12 내용 반영
2026-05-18 15:35:32 +09:00

7.3 KiB

[2026-05-18] 일일 리포트 — 첫 본격 운영일

모드: 모의투자 (KIS_MOCK=true, DRY_RUN=true)
비고: 오전 봇(price=0 버그) / 오후 봇(버그 수정) 두 구간으로 나뉨


매매 결과 요약

구분 건수 내용
전체 체결 26건 오전 22건 + 오후 6건
유효 데이터 (price>0) 5건 오후 봇 이후 (삼성전자 pnl=None 제외)
실현손익 (계산 가능분) -30,746원 아래 상세 참조
14:50 강제청산 정상 대한광통신·한화생명 2종목 청산
15:10 결산 미실행 봇이 14:50:05에 종료됨 → 수정 완료

구간 1 — 오전 봇 (09:00~13:11) ⚠️ 데이터 신뢰 불가

entry_price / exit_price 모두 0.0 → pnl 계산 불가.
ETF 필터 미적용 상태라 인버스/레버리지 ETF가 다수 포함됨.

시간 종목 수량 사유 비고
09:00:29 252670 (KODEX 인버스2X) 13,333 TP1 ETF — 필터 필요
09:00:36 122630 (KODEX 레버리지) 10 SL ETF — 필터 필요
09:01:33 034220 (LG디스플레이) 117 SL
09:02:32 047040 (대우건설) 56 SL
09:03:41 252670 12,903 TP1 ETF
09:06:12 047040 57 SL
09:12:23 271050 (TIGER 인버스2X) 868 SL ETF
09:14:36 252670 12,500 SL ETF
09:21:23 348340 25 SL
09:22:36 122630 10 TP1 ETF
09:43:01 036540 204 TP1
09:53:45 252670 13,008 SL ETF
09:56:32 122630 10 TP1 ETF
10:05:38 252670 13,114 SL ETF
10:06:28 252670 13,333 TP1 ETF
10:31:39 252670 13,445 SL ETF
10:42:46 036540 199 TP1
10:43:01 252670 13,675 SL ETF
10:57:08 252670 13,793 SL ETF
11:12:02 271050 882 미청산 ETF — 포지션 유실
11:15:05 252670 13,913 SL ETF
11:23:00 252670 14,159 TP1 ETF
  • TP1: 7건 / SL: 12건 / 미청산: 1건 (가격 없어 손익 계산 불가)
  • ETF 포함 건수: 16건 이상 (252670, 122630, 271050)

구간 2 — 오후 봇 (13:18~14:50) 수정 후 신뢰 가능

버그 수정 후 재시작: entry_price/exit_price 정상 기록, ETF 14종목 필터 적용.

시간 종목 수량 매수가 매도가 사유 손익
13:19:50 삼성전자(005930) 4주 284,750원 282,000원 SL pnl=None (버그)
13:19:58 대한광통신(010170) 60주 23,100원 positions 불일치로 추적 못함
14:02:31 한화생명(088350) 242주 5,770원 5,710원 SL -17,215원
14:19:22 대한광통신(010170) 60주 23,100원 22,850원 SL -17,673원
14:23:03 대한광통신(010170) 60주 23,050원 23,250원 FORCE +9,280원
14:25:39 한화생명(088350) 242주 5,770원 5,760원 FORCE -5,138원

14:50 강제청산: 14:50:00~14:50:05 사이 대한광통신·한화생명 2종목 정상 청산
실현손익 합계: -17,215 + (-17,673) + 9,280 + (-5,138) = -30,746원
(삼성전자 pnl=None 포함 시 추정 -44,116원)


오늘 발견 및 수정한 버그

# 버그 수정 내용
1 DRY_RUN 매수/매도 시 price=0 저장 order_buy/sell에서 get_price() 호출해 실제 현재가 반환
2 ETF/인버스/레버리지 종목 유니버스 포함 _is_etf() 필터 — 키워드 + Q prefix 차단
3 종목명 ticker 코드로 저장 get_volume_rank() 캐시로 이름 저장
4 rate limit 초과 모의투자 1req/s, 실거래 5req/s로 고정
5 봇 재시작 시 포지션 유실 _restore_positions_from_db() 추가
6 매수/매도 시 positions DB 미기록 _db_save_position / _db_delete_position 추가
7 pnl 컬럼에 None 저장 _update_trade_exit에서 pnl 계산 후 저장
8 중복 봇 프로세스 미종료 PID 파일 + Get-CimInstance 이중 종료
9 daily_summary DB 미저장 daily_summary() 에서 테이블 INSERT 추가
10 장중 재시작 시 15:10 결산 미실행 trading_loop() 후 15:10까지 대기 루프 추가
11 14:00 이후 신규 진입 차단 미작동 check_entries() 진입 시 현재 시간 재확인 추가 — check_exits() 처리 중 14:00 경과 케이스 차단
12 봇 재시작 시 SL 종목 재진입 차단 초기화 _restore_sl_tickers_from_db() 추가 — 재시작 후 당일 SL 종목 DB 복원으로 재진입 차단 유지

분석

오전 신호 패턴

  • 09:00~11:23 사이에 22건 집중 → 변동성 돌파 전략 정상 동작
  • 252670(인버스ETF) 반복 진입 8회 — ETF 필터 없어서 발생, 수정 완료
  • SL 비율이 높음 (약 55%) — 약세장(sentiment 42점) 대비 포지션 잡은 것이 원인일 수 있음

오후 신호 (수정 후)

  • 유니버스 30 → 14종목으로 축소 (ETF 제외 효과)
  • 삼성전자 13:19 진입 → SL (-0.97%), 대한광통신·한화생명 오후 2회씩 반복 진입
  • 오후 진입은 변동성 돌파 특성상 신뢰도 낮음 → 14:00 이후 신규 진입 제한 검토 필요
  • 강제청산 정상 작동: 14:50:00~05 사이 2종목 5초 내 완료

15:10 결산 미실행

  • 원인: 장중 재시작 경로에서 trading_loop() 종료 후 즉시 return → 결산 코드 미도달
  • 수정: trading_loop() 후 15:10까지 대기 → 결산 실행 후 종료 (내일부터 적용)

L3 (3연속 손절) 점검

  • 오전 봇: 034220 SL → 047040 SL → 271050 SL → L3 조건 충족됐으나 차단 미작동
  • price=0 데이터라 risk.record_trade(0)이 호출됐을 가능성 → L3 pnl 합산이 0이라 감지 못함
  • 내일 확인 필요: 실제 pnl 기록 후 L3 차단 정상 작동하는지 검증

전략 변경

# 항목 변경 전 변경 후 이유
1 신규 진입 마감 시간 14:30 14:00 14:23 대한광통신·14:25 한화생명 진입 후 25분 내 강제청산 → 청산 여유 없음
2 SL 종목 당일 재진입 허용 차단 대한광통신 14:19 SL → 14:23 재진입 반복, 한화생명 동일 패턴 → 손실 누적

변경 근거: 오늘 -30,746원 손실의 직접 원인이 오후 2시 이후 반복 진입.
/evening 자동화 범위(config.py 수치 조정)가 아닌 로직 변경이라 직접 수정.


실전 전환 조건

조건 기준 현재 통과
누적 운영 30거래일 이상 2일
승률 > 48% 데이터 부족
MDD < -10% 데이터 부족
샤프지수 > 1.0 데이터 부족
L3 발동 월 2회 이하 미검증

실전 전환: 미충족


내일 확인사항

  1. 포지션 DB 복원 정상 동작 확인 (_restore_positions_from_db)
  2. pnl 저장 정상 동작 확인 (_update_trade_exit)
  3. ETF 필터 후 유니버스 종목 품질 확인
  4. L3 (3연속 손절) 차단 로직 실제 동작 여부
  5. morning 스케줄러 (08:15) 자동 실행 여부 확인
  6. 15:10 결산 정상 실행 및 daily_summary 테이블 저장 확인
  7. 14:00 이후 신규 진입 제한 검토수정 완료 (bug #11·#12 fix)