본문 바로가기
Project Archive/Quant & Auto Trading

[자동매매] 실전운영 12일차 - 우리로 손절 예정대로 발동, 그러나 5분 공백이 남긴 -21만원의 숙제

by 병헤는 밤 2026. 4. 22.
반응형

4월 22일 매매 일지 -- 우리로 손절 예정대로 발동, 그러나 5분 공백이 남긴 -21만원의 숙제

수요일. BOTH_BULL 유지. 청산 6건 중 5승 1패(승률 83%)인데도 순손익 -139,350원. 원인은 단 한 종목, 우리로 -31.8%. 4/21에 패치한 cap 기반 손절은 장 시작과 동시에 예정대로 발동했지만, 09:00~09:05 손절 판정 공백이 실비용(약 -21만원 추가 슬리피지)으로 현실화됐다. 반면 HD현대중공업 TARGET +13.21% / TRAILING_STOP 3건 전원 수익이라는 긍정 신호도 함께 나왔고, 하나금융지주가 D+8 만에 TIME_STOP으로 정리되며 롱텀 로직의 실전 작동이 확인됐다.

시장 환경

지수 상태
KOSPI (KODEX 200) BULL (96,635 > 20MA 86,754)
KOSDAQ (KODEX 코스닥150) BULL (19,730 > 20MA 18,934)

BOTH_BULL 유지 → 모든 VB 매수에 ALL_BULL(예산 100%) 적용. 다만 pension 전략은 하루 종일 "BEAR 비활성" 로그로 매수 기회를 전부 스킵 — 두 전략의 regime 판정 로직이 불일치하는 것으로 보임(후술).

청산 내역 (6건)

시각 종목 진입가 청산가 PnL 사유 보유일
09:06 하나금융지주 120,800 121,000 +1,800 (+0.17%) TIME_STOP D+8
09:06 우리로 14,930 10,180 -313,500 (-31.8%) STOP_LOSS D+4
09:15 HD건설기계 169,300 174,700 +27,000 (+3.19%) TRAILING_STOP D+1
09:53 이수페타시스 143,700 147,700 +28,000 (+2.78%) TRAILING_STOP D+0 (38분)
09:56 삼성중공업 29,325 30,600 +43,350 (+4.35%) TRAILING_STOP D+1
14:33 HD현대중공업 560,000 634,000 +74,000 (+13.21%) TARGET D+1

청산 손익 합계: -139,350원 (승/패 5/1, 승률 83.3%, PF 0.56, 평균 -1.35%)

  • 우리로 -31.8% (단일 종목이 전체 손익 압도): 4/21 패치한 cap 기반 손절선(13,437)이 장 시작과 함께 정상 트리거. 다만 장 직전 5분간 손절 판정 공백(_MARKET_OPEN=09:05)으로 인해 첫 판정이 09:06에 이뤄졌고, 이때 현재가는 이미 10,140까지 빠진 상태. 실체결가는 10,180으로 이론 stop(13,437) 대비 -3,257원/주 × 66주 = 약 -21만원의 추가 손실. 체결 자체는 문제 없고 로직도 예정대로 동작했지만, 5분 공백이 실비용으로 현실화됐다.
  • HD현대중공업 +13.21% (오늘의 MVP): 4/21 진입(560,000) 후 하루 만에 ATR×2.5 목표가(약 624,209) 돌파 → 634,000 체결. 조선/기계 섹터 강세가 단일 종목에 제대로 응축된 케이스. 단일 TARGET으로 우리로 손실의 약 1/4을 상쇄.
  • TRAILING_STOP 3건 전원 수익 (+3.19% / +2.78% / +4.35%): 트레일링 라인(최고가×0.98) 로직이 잘 작동. 특히 이수페타시스는 09:15 매수 → 09:53 청산, 불과 38분 보유로 +2.78% 확정. 단타 회전 구간이 전략의 의도대로 돌아감을 확인.
  • 하나금융지주 +0.17% (TIME_STOP): 4/10 진입 후 D+8. 꽤 긴 보유 기간. 중간에 어제 일지 기준 +1.82%까지 올라갔다가 오늘 121,000(+0.17%)로 되돌림 → TIME_STOP 기준(+1% 미만)에 걸려 정리. 기회비용이 컸지만 손실 없이 회수한 건 긍정적. 5영업일 + 1% 기준 로직이 "횡보 포지션 청소" 역할을 제대로 수행.

매수 내역 (4건)

시각 종목 코드 진입가 수량 금액 비고
09:10 한화오션 042660 133,700 7주 935,900 정상 (K=0.484)
09:10 현대로템 064350 233,500 4주 934,000 정상 (K=0.544)
10:32 에이피알 278470 436,500 2주 873,000 정상 (K=0.508)
11:08 삼성중공업 010140 31,650 31주 981,150 재진입 (09:56 +4.35% 익절 후 72분)

총 매수 금액 약 372만원. 섹터 분포: 조선(한화오션·삼성중공업), 방산/기계(현대로템), 뷰티(에이피알). 어제(4/21)의 7종 대거 유입 직후라 보유 10종 만석 상태에서 청산 6건이 비운 자리를 4건만 채운 날.

🔁 삼성중공업 재진입 분석

오늘의 재진입 케이스. 4/21 에코프로머티 / 4/17 삼성전기에 이은 세 번째 사례.

  • 4/21 10:05 매수 29,325 → 4/22 09:56 매도 30,600 (+4.35%, TRAILING_STOP)
  • 4/22 11:08 재매수 31,650 (이전 매도가 대비 +3.43%)
  • 종가 31,700 → 현재 +0.16% (재진입 포지션)

재진입가가 직전 매도가보다 +1,050원(+3.43%) 비싸져 구조적 비용이 꽤 큰 편이나, VB 트리거(31,345)를 다시 돌파하고 BOTH_BULL·K=0.553 모두 정상 범위 내 발동한 정상 시그널. 단, 이번 재진입은 이전 두 사례(삼성전기 +0.3%, 에코프로머티 +1.2%)보다 재진입 가격 간격이 커서 만약 즉시 반전 시 손실 폭이 커질 수 있는 구조 — 관찰 필요.

보유 종목 현황 (9종목, 종가 기준)

종목 진입가 진입일 보유일 종가 평가손익
두산에너빌리티 114,100 4/20 D+2 115,900 +14,400 (+1.58%)
대덕전자 99,160 4/21 D+1 101,200 +20,400 (+2.06%)
GS건설 43,100 4/21 D+1 41,800 -29,900 (-3.02%)
에코프로머티 82,800 4/21 D+1 82,900 +1,200 (+0.12%)
엘앤에프 195,800 4/21 D+1 194,700 -5,500 (-0.56%)
한화오션 133,700 4/22 D+0 135,000 +9,100 (+0.97%)
현대로템 233,500 4/22 D+0 237,000 +14,000 (+1.50%)
에이피알 436,500 4/22 D+0 434,000 -5,000 (-0.57%)
삼성중공업 (재진입) 31,650 4/22 D+0 31,700 +1,550 (+0.16%)

총 평가손익: 약 +20,250원 (9종 평균 +0.36%)

  • GS건설 -3.02% (경계): 어제 진입(43,100) 후 41,800으로 되돌림. 20MA 이탈 여부 + 초기 타이트 손절선(ATR×1.5, 약 38,728)과의 거리 관찰 필요.
  • 신규 3종 진입 직후 혼조: 한화오션 +0.97%, 현대로템 +1.50%, 에이피알 -0.57%, 삼성중공업 재진입 +0.16%. 평균 +0.51%로 진입 품질은 무난.
  • 대덕전자 +2.06%, 두산에너빌리티 +1.58%: 전일 보유분이 순항 중. D+2~D+5 구간에서 TARGET/TRAILING 트리거 기대.

🚨 오늘의 시스템 경보 — 09:00~09:05 손절 판정 공백

어제(4/21) 일지에서 "우리로 손절 미발동 원인 규명"을 1번 과제로 남겼고, 이날 cap 기반 손절선을 옵션 B 패치로 정상화했다. 오늘 장 시작 09:06:28에 손절선 13,437 대비 현재가 10,140을 감지하고 시장가 매도 → 10,180 체결로 cap 패치 자체는 완벽히 작동.

다만 한 겹 더 있었던 문제가 드러났다. 봇의 손절 판정이 09:05부터 시작하는데, 우리로는 09:00~09:04 사이 이미 10,170~10,620 범위에서 체결 중이었다. 시간대별 현재가 스냅샷:

  • 09:00 — 10,620 (장 시작 직후, cap 13,437 하회)
  • 09:02 — 10,170 (추가 하락)
  • 09:04 — 10,370 (반등 시도)
  • 09:06 — 10,140 (첫 손절 판정, 즉시 시장가 매도)
  • 09:06 체결가 — 10,180

즉, 이론상 최적 체결은 09:00 10,620이었고, 실제 체결은 10,180. 갭다운으로 이론 stop(13,437)에 주문이 닿은 시점 자체가 없었으므로 "stop 가격에 체결"은 원래 불가능하지만, 장 시작 시점(09:00) 스냅샷 10,620에라도 바로 주문이 나갔다면 (10,620 − 10,180) × 66 = 약 +29,040원을 추가로 보호할 수 있었다.

더 본질적으로는 이런 극단 갭다운 케이스에서 09:00~09:05 사이에 손절 판정이 동작하지 않는 설계 자체가 재검토 대상. 이는 CLAUDE.md 알려진 이슈 항목에 이미 "_MARKET_OPEN = 09:05 → 갭다운 대응 공백"으로 기록돼 있었으나 미패치 상태였다. 오늘 실손실로 현실화된 만큼 다음 세션 최우선 과제로 올린다.

🐛 Pension 전략 "BEAR 비활성" 이슈 의심

로그 스캔 결과 하루 종일 [PENSION] BEAR 장세 - 비활성으로 로깅됨. 그러나 VB 쪽은 동일 시점에 KOSPI BULL / KOSDAQ BULL / BOTH_BULL로 정상 판정, 매수도 집행. 즉 같은 시장 환경을 두 전략이 다르게 해석하고 있다. 메모리 기록에 따르면 pension은 "어느 한쪽이라도 BULL이면 활성, 양시장 BEAR일 때만 비활성"이어야 하므로, 오늘은 당연히 활성이어야 한다.

추정 원인 후보: (a) pension 내부 regime 계산이 VB와 다른 지표/기간을 사용, (b) regime 값 전달 경로에서 기본값(BEAR) 유지, (c) 전일 세션에서 BEAR로 마지막 판정된 상태가 캐시/전역변수로 이어짐. 09:00~09:06 매수 윈도가 닫히기 전에 활성 상태에 도달하지 못하면 pension 전략은 사실상 무용지물이 된다. 다음 세션에서 strategy/bunt_pension.py의 regime 판정 경로 점검 필요.

📊 인사이트 (자동 추출)

  • 인사이트 1: "Profit Factor 0.56 < 1.0 - 손실 우위 구간" — daily_summary 자동 출력. 단 1건(우리로)의 극단 손실이 전체를 지배한 결과이며, 우리로 제외 시 승률 100%/PF ∞ 구조.
  • 청산 평균 보유일: TIME_STOP 제외 시 D+1.0 (1일). 트레일링 청산 3건과 TARGET 1건 모두 D+1 / 이수페타시스는 당일(38분). 단기 회전 구간에 정확히 안착.
  • K구간 성과 (수익 청산 4건 기준): K<=0.5 (없음) vs K>0.5 avg=+5.88% (4건). 오늘은 전부 K>0.5 구간에서 수익이 난 드문 케이스.
  • 승/패 규모 비대칭: 승 평균 +43,530원, 패 1건 -313,500원. 단일 -32% 손실을 상쇄하려면 +6% 이상 이익이 7.2개 필요. cap 10% 도입 이후에도 갭다운 슬리피지 경로가 열려 있는 한 이 비대칭은 재발 가능.

오늘의 교훈

확인한 것

  • cap 기반 손절 + 옵션 B 패치의 실전 작동: 우리로 -31.8%는 뼈아팠지만, 4/21에 설계한 "cap 상향만 허용 / 하향 완화 폐기" 로직이 장 시작 즉시 판정을 내리고 시장가 매도를 집행. "패치가 있으면 있는 대로, 한계가 있으면 있는 대로 작동한다"는 사실이 실시간으로 확인됨. 로직이 있었기에 이 정도라도 막았다.
  • TIME_STOP의 실전 역할: 하나금융지주 D+8 +0.17%로 정리. 12영업일 가까이 붙잡혀 있던 기회비용을 로직이 자동 해소. "횡보 포지션을 사람이 감정으로 놓아주지 않아도 되는 구조"가 검증됨.
  • TRAILING_STOP + TARGET 합작 +172,350원: HD현대중공업 TARGET 단 1건이 +74,000원으로, 나머지 3건 TRAILING_STOP 평균보다 2배 가까운 이익. 강한 추세 포착 시의 TARGET 보상 구조가 트레일링만 의존할 때보다 크다는 걸 재확인.

뼈아픈 교훈 / 경보

  • 09:00~09:05 손절 공백 → 실손실 현실화: CLAUDE.md에 이미 기록된 이슈지만 오늘 약 -21만원의 슬리피지로 현실화. cap 10%를 설계한 원래 의도(-10% 이내 방어)가 갭다운으로 뚫리는 경로가 남아 있다는 게 핵심. _MARKET_OPEN을 09:00으로 바꾸든, 09:00~09:05 동안은 "단일가 체결가 or REST 현재가"로 손절 판정을 허용하든, 둘 중 하나는 이번 주 내 패치가 필요하다.
  • Pension 하루 종일 비활성: BOTH_BULL 환경이었음에도 pension 전략은 로직상 실행되지 않았음. 장초반 매수 윈도(09:00~09:06)에만 작동하는 전략이 놓친 6분의 기회비용이 얼마였는지는 측정 불가. regime 판정 경로 불일치 버그로 추정 → 다음 세션 2순위 과제.
  • 승률 83%에 속지 말 것: 6건 중 5건이 이익이었지만 결과는 -13.9만원. "건당 평균이 아니라 건당 금액"으로 자기 전략을 본다는 대전제를 다시 새긴다. 승률 높은 날이 곧 수익 높은 날인 것은 아니다.

내일 체크포인트

  1. 🔴 09:00~09:05 손절 판정 공백 패치: main.py_MARKET_OPEN 상수 및 "장 시간 외이므로 청산 판정은 건너뜁니다" 분기 재설계. 단일가 매매 체결가를 활용하거나 09:00부터 정규 판정 진입. 최우선 과제.
  2. 🟡 Pension regime 판정 불일치 디버그: strategy/bunt_pension.py에서 regime 산출 경로 확인. VB의 3팩터 판정과 동기화되도록 정리.
  3. GS건설 -3.02% 관찰: 손절선(ATR×1.5 기준 약 38,728) 대비 여유 있으나 전일 진입 직후 음전환은 경계. D+1~D+2 내 반전 or TIME_STOP 후보 추적.
  4. 삼성중공업 재진입 포지션 whipsaw 감시: 재진입가(31,650)가 직전 매도가(30,600) 대비 +3.43%로 격차가 오늘 본 세 재진입 케이스 중 가장 크다. 만약 또 트레일링/손절로 털리고 4/23 또 재진입 시그널이 나온다면, 기존에 메모해둔 "같은 날/연속일 동일 종목 재진입 횟수 제한" 도입 실검토.
  5. 실현 수익 누적: 4/20 +15k, 4/21 +271k, 4/22 -139k → 3일 누적 +147k. 우리로 한 건이 이번 주 누적 수익의 절반을 상쇄. 주간·월간 관점 집계 스크립트 필요성 체감.

소감

오늘은 "로직이 예정대로 작동했는데도 손실이 더 커지는 경로가 남아 있다"는 사실을 체감한 날이다. 4/21 cap 패치 덕분에 우리로는 확실히 손절됐다 — 그게 없었다면 오늘의 10,180 체결조차 못 보고 계속 끌어안고 있었을 것이다. 패치가 최악을 면하게 해줬다는 것은 사실이다. 그러나 동시에, 패치로 막을 수 있는 손실과 막을 수 없는 손실의 경계가 09:00~09:05 사이에 숨어 있었다는 것도 드러났다. 좋은 패치는 다음 패치의 좌표를 알려준다. 내일 할 일은 명확하다 — 09:00부터 손절이 돌도록 만들고, pension은 왜 BEAR로 앉아 있었는지를 밝힌다. 승률 83%의 하루를 기록상 -13만원으로 남기는 대신, 이런 날에 두 개의 구조적 숙제를 얻었다는 것이 훨씬 더 중요하다.

4/22 일일요약

 

 

4/22 관심종목 교체 내역

반응형

댓글