매매 신호 56,063건이 체결 76건이 되기까지 — 자동매매 필터의 깔때기
자동매매 봇이 만든 신호 56,063건 중 실제 체결은 76건. 매매 신호 필터링(사이징·서킷브레이커·안전 가드)이 각 단계에서 얼마나 걸러내는지 상태별로 전수 집계했습니다.
자동매매를 말하는 글은 많지만, 신호가 실제 체결이 되기까지 무엇이 걸러내는지를 숫자로 보여주는 글은 드뭅니다. 운용 중인 봇의 로그를 전수 집계했습니다(2026-05-29 ~ 2026-07-17, 모든 수치는 코드로 계산 — 방법론).
깔때기 한눈에 (사고일 제외)
| 단계 | 건수 | 비율(신호 대비) |
|---|---|---|
| 전략이 생성한 신호 | 39,701 | 100% |
| └ 필터에 거부(REJECTED) | 39,418 | 99.3% |
| └ 보류(DEFERRED) | 104 | — |
| └ 주문 실패(FAILED) | 25 | — |
| 주문 생성 | 179 | 0.45% |
| └ 제출 성공 | 154 | — |
| 체결(fill) | 75 | 0.19% |
신호 100건 중 약 99건이 주문이 되기 전에 잘립니다. 자동매매 필터는 장식이 아니라, 사실상 시스템의 본체입니다.
데이터 노트 (정직하게 밝힙니다): 2026-06-03 하루 동안 휴장일 판정 버그로 KR 주문 16,356건이 전부 실패(FAILED) 처리되는 사고가 있었습니다(신호 16,362건). 이 날을 포함하면 깔때기가 ‘주문 실패’ 쪽으로 심하게 왜곡되므로 위 표에서는 제외했고, 전체 기간 체결은 76건(사고일 1건 포함)입니다. 이런 운영 사고도 자동매매의 실제 비용입니다.
무엇이 걸러냈나 — 거부 사유 상위
| 필터 | 건수 | 거부 중 비중 |
|---|---|---|
| 포지션 사이징 필터 (수량 0 — 한도 대비 가격 초과) | 34,065 | 86.4% |
| 서킷브레이커 (연속 손실 매매 정지) | 4,679 | 11.9% |
| 분산 한도 (동시 보유 종목 수) | 231 | 0.6% |
| 안전 가드 (중복·동시 매수/매도 차단) | 152 | 0.4% |
| 수동 정지 (대시보드 스위치) | 148 | 0.4% |
| 서킷브레이커 (일일 손실 한도) | 128 | 0.3% |
| 기타 (API 오류·잔고 부족 등) | 15 | 0.0% |
거부의 대부분은 포지션 사이징(계좌 한도 대비 주문 수량이 0으로 계산)이고, 그다음이 서킷브레이커(연속 손실·일일 손실 한도 도달 시 그날 매매 정지)입니다. 즉 이 봇의 매매 신호 필터링은 ‘좋은 신호 고르기’보다 ‘나쁜 날 안 사기’ 에 가깝습니다.
전략별: 누가 신호를 쏟아내나
| 전략 | 신호 수 | 집행(EXECUTED) |
|---|---|---|
| momentum | 26,862 | 63 |
| mean_reversion | 12,737 | 39 |
| barbell | 54 | 48 |
| gap | 44 | 0 |
| barbell_cleanup | 4 | 4 |
신호량과 집행량이 비례하지 않는다는 점이 핵심입니다 — 신호를 많이 내는 전략일수록 필터에 더 많이 걸립니다.
무엇을 배웠나
- 자동매매의 성패는 신호 생성보다 신호를 버리는 규칙(필터·가드·서킷브레이커)이 좌우한다.
- 운영 사고(휴장일 버그)는 백테스트에 없는 실전 비용이다 — 로그를 남기고 공개하는 이유.
- 체결까지 간 결정들의 성적은 연구 0001에서, 테마별 성적은 연구 0002에서 채점했습니다.
다음 연구 예고: 봇의 ‘파는 판단’(매도 규율)만 떼어 채점한 결과를 공개합니다.