단타 봇 3개월 데이터로 확인한 것 — 조건을 바꿔도 안 되는 이유

3개월치 틱·호가 데이터를 전부 꺼내 단타 전략을 다시 검증했다. 결론부터 쓰면, 진입·청산 조건을 바꾸는 방식으로는 흑자가 나오지 않는다. 파라미터가 나빴던 게 아니라 넘어야 할 문턱이 얻을 수 있는 것보다 컸다.

왜 다시 봤나

운영 중인 자동매매 봇이 계속 손실이었다. 그동안은 "진입 조건이 덜 까다로워서"라고 보고 임계값을 조정해 왔다. 이번엔 가정을 버리고, 누적된 데이터로 가능한 조합을 전부 계산해 보기로 했다.

데이터와 방법

  • 데이터: 32거래일(6/11~8/28)의 틱·호가 원본. 하루 19~38종목(테마·급등주 중심)
  • 후보 생성: 실제 전략 클래스를 임계값을 모두 풀어 재생 → 진입 후보 10만 2천건과 각 후보의 이후 가격 경로를 캐시
  • 평가: 익절·트레일링·손절·본전스톱·시간컷 조합을 격자로 훑고, 위탁수수료 0.03%(왕복) + 증권거래세 0.15%를 차감한 순손익으로 계산
  • 체결 모델: 매수는 매도호가(시장가), 매도는 매수호가(시장가). 지정가 체결은 "관통 체결"만 인정 — 내 호가를 시장이 실제로 뚫고 지나갔을 때만
  • 검증: 기간을 전·후반으로 갈라 양쪽 모두 플러스인지, 특정 종목·특정 날짜에 의존하는지 확인

결과 1 — 문턱이 얼마인가

현행 진입 신호(거래량 급증 + 3분 모멘텀 + 당일 고가 돌파)로 진입해 10분 보유했을 때:

항목
순수 가격 움직임 (중간가 기준)-0.071%, 95% 구간 [-0.51%, +0.37%]
손익분기에 필요한 상승폭+0.361%
└ 왕복 수수료·세금0.180%
└ 호가 스프레드0.181%

가격이 어디로 갈지에 대한 기댓값이 통계적으로 0과 구분되지 않는다. 그런데 넘어야 할 문턱은 0.36%다. 필요한 값이 신뢰구간 상단에 겨우 걸치는 수준이라, 청산 규칙을 어떻게 조합해도 메울 수 있는 크기가 아니다.

왕복 비용 0.18% 가운데 0.15%가 증권거래세다. 즉 비용의 83%가 매매 횟수에 그대로 비례한다. 하루에 여러 번 돌리는 구조는 그만큼 세금을 여러 번 낸다.

결과 2 — 8만 조합을 전부 돌려봤다

실험조합 수전·후반 모두 플러스
시장가 진입 × 모든 청산 조합47,250815 — 전부 표본 56건에 1종목 의존 77~85%
양방향 지정가 (매수·익절 모두 지정가)33,7500

시장가 쪽에서 나온 815개는 전부 과최적화였다. 표본이 56건인데 이익의 8할이 한 종목에서 나왔다. 스프레드를 내지 않고 받는 구성(양방향 지정가)은 이론상 최선이지만, 실제로는 내 지정가가 체결되는 순간이 곧 불리한 순간이라(역선택) 단 하나도 살아남지 못했다.

결과 3 — 방향을 뒤집어도 안 된다

"돌파에서 사면 지니까 반대로 급락에서 사면 되지 않나"를 같은 잣대로 확인했다. 진입 계열 8종을 만들어 비교한 결과(10분 보유, 비용 차감 후):

진입 계열건수60초180초600초1800초
급락 (아무 때나)5,770-0.404%-0.395%-0.367%-0.610%
돌파 (현행)288-0.232%-0.397%-0.432%-0.312%
급락 + 호가 매수우위2,942-0.396%-0.405%-0.275%-0.483%
당일 저가권 반등2,149-0.431%-0.461%-0.418%-0.503%
상승추세주 눌림목2,212-0.468%-0.519%-0.595%-0.988%

전부 마이너스이고, 전·후반으로 갈라도 부호가 그대로였다.

결과 4 — 보유기간을 늘리면?

여기서 처음으로 플러스가 나왔다. 같은 돌파 신호로 진입하되 오전 제한을 풀고, 익절 3% / 손절 1.5%로 벌리고, 당일 장마감까지 들고 가는 구성이다.

항목
표본551건 / 28거래일
건당 순손익+0.603% (95% 구간 +0.42% ~ +0.79%)
승률51.9% (익절 48% · 손절 48% · 장마감 4%)
상위 1종목 제외 시+0.447%
상위 3종목 제외 시+0.216%

종목 분산은 통과했다. 앞선 과최적화 사례들과 달리 한두 종목을 빼도 부호가 유지된다. 그런데 날짜로 쪼개자 이야기가 달라졌다.

구분건수합계건당
전체 28거래일551+332.0%+0.603%
상위 3일 (6/17, 8/25, 8/27)176+303.9%
그 3일을 뺀 나머지 25일375+28.2%+0.075%

이익의 91.5%가 28일 중 단 3일에서 나왔다. 날짜를 동일 가중으로 평균 내면 +0.074%, 플러스로 끝난 날은 15/28일이다. 남은 +0.075%는 실제 슬리피지와 미체결을 감안하면 그냥 0이다.

그래서 무엇을 배웠나

세 가지로 정리된다.

  1. 단타의 적은 예측 실패가 아니라 고정비용이다. 왕복 0.36%(세금·수수료 + 스프레드)를 넘겨야 하는데, 수분 단위 가격 움직임의 기댓값은 0이다. 조건을 아무리 정교하게 다듬어도 이 뺄셈은 바뀌지 않는다.
  2. 보유기간을 늘리는 방향은 옳다. 마이너스가 0 근처까지 올라왔다. 같은 세금 한 번을 내고 0.3%가 아니라 3%를 노리는 구조가 산술적으로 유리하다.
  3. 그런데 그 이익도 평상시엔 없다. 시장 전체가 크게 움직인 소수의 날에만 몰려 있다. 이건 파라미터로 잡을 수 있는 게 아니라 국면의 문제다. 다음에 볼 것은 진입 조건이 아니라 "오늘이 그런 날인가"를 판별하는 쪽이다.

손실이 날 때 대부분은 조건을 더 조이는 쪽으로 손이 간다. 이번에 확인한 건, 조일수록 표본만 줄고 남은 것은 우연이라는 사실이었다. 8만 개를 전부 돌려보고 나서야 "이 방향엔 답이 없다"를 말할 수 있게 됐고, 그게 조건을 하나 더 바꿔보는 것보다 훨씬 쓸모 있었다.


검증에 쓴 스크립트와 중간 산출물은 전부 남겨뒀다. 다음 검증은 대형주(스프레드가 좁아 문턱이 0.23%로 내려간다) 유니버스와, 국면 판별 쪽으로 이어갈 예정이다.