자동 주식매매 27건일 땐 +0.85%였습니다. 62건이 되니 +0.48%였고요

⏱ 3줄 요약
  • 3개월 만에 전략 하나가 처음으로 검증 기준을 통과했습니다.
  • 그런데 표본 27건일 때 +0.85%였던 기댓값이, 62건이 되자 +0.48%로 반토막 났습니다.
  • 통과한 뒤 실제 주문으로 옮기는 검증에서 버그가 6개 나왔습니다.

자동매매 전략 하나가 처음으로 검증을 통과했습니다. 3개월 만이었습니다. 그런데 이 글에서 하고 싶은 이야기는 통과한 것보다 통과하기까지 숫자가 어떻게 변했는가, 그리고 통과한 뒤에 무엇이 나왔는가입니다.

무엇이 통과했나

제가 쓰는 검증 방식은 이렇습니다. 과거 데이터로 백테스트(지난 시세에 전략을 대입해 성적을 보는 것)를 돌려 후보를 만들고, 그다음부터는 실제로 흘러가는 장에서 같은 조건이 나올 때마다 결과를 기록합니다. 미래 데이터로 다시 검증하는 셈이죠.

그리고 표본 60건이 쌓이기 전에는 판정하지 않는다는 규칙을 미리 정해뒀습니다. 중간에 좋아 보인다고 결론 내리지 않기 위해서입니다.

62건
판정 시점 표본
+0.477%
1회 평균 기댓값
55%
승률

이 숫자로 기준 두 개를 다 넘겨서 통과했습니다. 3개월간 여러 전략을 돌렸는데 여기까지 온 건 이게 처음이었습니다.

여기서 하나 짚고 싶은 게 있습니다. 저는 기댓값을 하나의 숫자로 보지 않습니다. 과거 기록까지 합쳐 1,361건으로 계산하면 평균은 +0.410%인데, 같이 나오는 값이 하나 더 있습니다. 신뢰구간 +0.333% ~ +0.487%입니다.

이게 무슨 뜻이냐면, “이 전략의 진짜 실력은 아마 이 범위 어딘가일 것”이라는 겁니다. +0.410%라는 숫자를 딱 믿는 게 아니라, 최악의 경우 +0.333%일 수도 있다고 보는 거죠. 표본이 적으면 이 범위가 넓어지고, 많아질수록 좁아집니다. 범위의 아래쪽이 0보다 위에 있느냐가 제가 보는 기준입니다. 평균이 아무리 좋아도 범위가 0을 걸치면 “잘 모르겠다”는 뜻이니까요.

표본을 60건까지 기다린 것도 이 때문입니다. 27건짜리 신뢰구간은 너무 넓어서 무엇도 말해주지 않습니다.

그런데 중간에는 더 좋아 보였습니다

여기가 이 글의 핵심입니다. 판정하기 2주쯤 전, 표본이 27건이었을 때 중간 수치를 본 적이 있습니다.

27건 시점
0.9% 기댓값
62건 시점(판정)
0.5% 기댓값

+0.851%였습니다. 판정 기준을 한참 웃도는 숫자였죠. 그런데 규칙상 60건이 안 됐으니 판정할 수 없었고, 그대로 뒀습니다.

그리고 62건이 됐을 때 다시 계산하니 +0.477%였습니다. 거의 절반입니다.

그때 흔들렸느냐고 스스로에게 물어보면, 솔직히 잘 모르겠습니다. “이걸로 그냥 가도 되지 않나” 하는 마음이 있었는지 없었는지 기억이 선명하지 않아요. 다만 규칙을 미리 정해뒀기 때문에 판단할 일 자체가 없었습니다. 60건이 안 됐으니 그냥 못 하는 거였죠.

⚠️ 주의 표본이 적을 때 나온 좋은 숫자는 실력이 아니라 운일 수 있습니다. 그런데 그 순간에는 그게 구분이 안 됩니다. 구분할 방법은 표본을 더 쌓는 것뿐이고, 그러려면 좋은 숫자를 보고도 기다려야 합니다.

27건에서 멈췄다면 저는 이 전략을 실제보다 두 배 좋은 것으로 알고 실행에 옮겼을 겁니다.

예상과 반대로 나온 것도 있습니다

기다리면서 걱정했던 게 하나 있었습니다. 이 전략은 거래가 일시 정지됐다가 다시 열리는 순간을 노립니다. 그런데 그 시점은 주문이 한꺼번에 몰리는 때라, 백테스트에서 “이 가격에 샀다고 치자”고 계산한 값보다 실제로는 더 나쁜 가격에 체결될 것이라고 예상했습니다. 미리 그렇게 적어두기도 했고요.

그런데 실제 기록을 모아보니 반대였습니다. 전진검증 성적이 백테스트가 가정한 것보다 오히려 나았습니다. 예상이 빗나간 겁니다.

좋은 소식이긴 한데, 저는 이걸 그대로 믿지 않기로 했습니다. 표본 62건에서 나온 방향이고, 예상이 빗나갔다는 건 제가 그 구간을 잘 모른다는 뜻이기도 하니까요. 유리한 쪽으로 빗나갔다고 해서 이해했다는 의미는 아닙니다.

지금 판정하지 않고 있는 것들

같은 시기에 검증 중인 다른 전략도 있습니다. 하나는 41건, 하나는 7건이 쌓였습니다. 둘 다 판정하지 않고 있습니다.

41건짜리는 지금까지 성적이 마이너스입니다. 여기서 “안 되는 전략이네” 하고 접고 싶은 마음이 생기는데, 그것도 하지 않습니다. 기준을 안 채운 상태에서 숫자를 해석하는 건 좋을 때든 나쁠 때든 똑같이 규칙 위반이기 때문입니다.

7건짜리는 조건이 워낙 드물게 나와서, 이 속도면 기준을 채우는 데 몇 년이 걸립니다. 이건 “결론을 못 낸다”가 결론이 될 가능성이 높습니다. 되는 것도 안 되는 것도 아니고, 그냥 확인할 수 없는 거죠. 그것도 하나의 답이라고 생각합니다.

통과가 끝이 아니었습니다

실제 주문으로 옮기는 검증에서 버그 6개

통과했으니 다음 단계는 모의계좌에 실제 주문을 내보는 것입니다. 지금까지는 “조건이 맞았다면 이렇게 됐을 것”을 기록만 했다면, 이제는 진짜로 주문을 던져보는 단계죠.

그 전환 과정에서 검증을 돌렸더니 버그가 6개 나왔습니다.

무엇이 잘못돼 있었나 그대로 갔다면
존재하지 않는 함수를 부르고 있었다 주문이 아예 안 나감
증권사가 ‘거부’라고 답했는데 코드는 ‘성공’으로 읽었다 안 된 주문을 됐다고 기록
종목 고르는 기준이 백테스트와 달랐다 검증한 유형을 실전에선 놓침
시세 자료형이 달라 조회가 통째로 실패 데이터 없이 판단
장 마감 후 실행하면 아무것도 안 하고 종료 진단 자체가 불가
같은 값을 API로 반복 조회해 호출 제한에 걸림 중간에 멈춤

6개 중 어느 게 제일 아찔했냐고 물으면 잘 모르겠습니다. 하나씩 고치느라 정신이 없었지 무섭다는 생각을 할 겨를이 없었어요.

다만 두 번째 항목은 성격이 좀 다릅니다. 나머지는 안 되면 안 되는 게 보이는 버그입니다. 주문이 안 나가면 안 나간 걸 알게 되죠. 그런데 거부당한 주문을 성공으로 기록하는 건 조용히 틀립니다. 실제로는 아무것도 안 샀는데 기록에는 샀다고 남습니다.

백테스트는 왜 이걸 못 잡았나

당연한 이야기지만 백테스트는 전략이 맞는지를 봅니다. 어떤 조건에서 사고팔면 성적이 어떤지요. 반면 이번에 나온 6개는 전부 실행 쪽 문제였습니다. 주문을 어떻게 던지고, 응답을 어떻게 읽고, 데이터를 어떻게 가져오는가.

전략이 아무리 좋아도 주문이 안 나가면 0원이고, 거부를 성공으로 읽으면 장부가 거짓이 됩니다. 이 둘은 다른 문제고, 다른 방법으로 검증해야 합니다.

실제 돈으로 넘어가는 게 무섭냐고 스스로 물어보면, 백테스트만 잘 나왔다면 그렇게 무섭지는 않습니다. 전략에 대한 믿음은 여전히 거기서 나옵니다. 다만 이번 일로 하나가 분명해졌습니다.

“백테스트는 여전히 믿지만, 실행 코드는 따로 봐야 한다.”

이게 지금 제 결론입니다. 전략 검증과 실행 검증을 같은 것으로 취급하고 있었는데, 그게 아니었습니다.

지금 어디까지 왔나

✅ 1단계 · 백테스트
과거 데이터로 전략 후보 발굴
✅ 2단계 · 전진검증
실제 장에서 62건 기록, 기준 통과
🔄 3단계 · 모의 실주문
지금 여기. 주문을 실제로 던져보는 중
⬜ 4단계 · 실거래
아직

3단계에서 버그 6개가 나왔으니, 이 단계를 건너뛰었으면 어땠을지는 답이 나옵니다. 판정 통과가 곧 실행 준비 완료는 아니었습니다.

그래서 남는 말

이 글을 읽는 분들 대부분은 매매 봇을 만들지 않으실 겁니다. 그런데 몇 번 해보고 “이거 되네” 하고 확신하는 것은 누구나 합니다. 종목이든 매매 방법이든 부업이든요.

제가 겪은 건 이렇습니다. 27건에서 좋아 보였고, 62건이 되니 절반이었습니다. 숫자가 나빠진 게 아니라 처음 숫자가 과대평가였던 것뿐입니다.

그렇다고 “해보지 마라”는 이야기는 아닙니다. 오히려 반대입니다.

“뭐든지 해봐야 똥인지 된장인지 안다. 무조건 무엇이든 해봐라.”

다만 이번에 하나 더 알았습니다. 해보다 중간에 멈추면 잘못 압니다. 27건에서 멈췄으면 저는 “된장”이라고 결론 냈을 겁니다. 62건까지 가보니 절반이었고요. 그래도 여전히 양수라 다음 단계로 갔지만, 만약 27건 숫자를 믿고 크게 걸었다면 기대와 실제가 두 배 어긋났을 겁니다.

해보는 것과 충분히 해보는 것은 다릅니다. 그리고 충분한지 아닌지는 시작하기 전에 정해두는 편이 낫습니다. 하고 나서 정하면 그때는 이미 숫자를 본 뒤라 마음이 기울어 있으니까요.

  • ✓무언가를 시작하기 전에 몇 번까지 해보고 판단할지 미리 정해둔다
  • ✓중간 성적이 좋아 보여도 정한 횟수를 채우기 전엔 결론 내지 않는다
  • ✓표본이 적을 때의 좋은 숫자는 운일 가능성을 항상 남겨둔다
  • ✓검증한 것과 실제로 실행하는 것이 같은지 따로 확인한다
  • ✓‘되는 것 같다’와 ‘된다’를 구분해서 기록한다

투자 판단에 앞서 참고할 만한 소비자 정보는 금융감독원에서 확인할 수 있습니다.

관련 글: 자동매매 봇 여정 #10 — 100건의 길 · ‘수익률 검증 끝’이라는 말, 믿어도 될까

이 글은 개인의 연구·운영 기록을 정리한 것으로, 특정 전략이나 상품의 투자를 권유하지 않습니다. 언급된 수치는 자체 검증 기록 기준이며 미래 수익을 보장하지 않습니다. 최종 판단과 책임은 본인에게 있습니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤