2026년 7월 23일, 제 봇의 국내 기록에는 이렇게 남아 있습니다. 종목 922개를 살펴봤고, 걸린 시간은 1,488초. 약 25분입니다.
그날 조건을 통과한 종목은 하나도 없었습니다.
그런데 고장이 아니었습니다. 여러분이 “신청하면 된다”고 듣고 그냥 넘어간 것도 지금 이 상태일 수 있습니다.
오류도 안 났고 기록도 멀쩡했습니다. 조건이 그날 한 번도 안 걸렸을 뿐입니다.

표로 보기
| 항목 | 값 | 설명 |
|---|---|---|
| 살펴본 종목 | 922 | 당일 기록 |
| 걸린 시간 | 25분 | 1,488초 |
| 조건 통과 | 0건 | 당일 결과 |
여기서 ‘조건을 통과했다’는 건 봇이 살 만한 종목을 찾았다는 뜻입니다. 봇은 매일 종목을 훑으면서 미리 정해 둔 조건에 맞는 게 있는지 봅니다. 그날은 922개를 다 보고도 맞는 게 없었던 거죠.
개발기 15에서는 검사가 재려던 것에 손도 안 댄 이야기를, 19에서는 통과는 했는데 통과시킨 게 딴 자였다는 이야기를 했습니다.
오늘은 다릅니다. 조건은 적힌 그대로 정확히 작동했습니다. 검사도 옳았고요.
다만 그 조건에 걸릴 수 있는 것이 너무 드물었을 뿐입니다.
조용한 것만 골라 놓고, 그중에서 제일 시끄러운 걸 찾았습니다
봇이 살 종목을 고르는 규칙은 2단계였습니다.
1단계는 조용해진 종목을 추립니다. 가격도 거래량도 잠잠해진 것들이요. 2단계는 그중에서 바로 다음 날 거래량이 확 터지는 종목을 찾습니다.
쉽게 말하면 이런 겁니다. 도서관에서 제일 조용한 사람들만 먼저 추려 놓고, 그 사람들 중에 내일 갑자기 소리 지를 사람을 찾은 셈입니다.
여기서 하나 갈라 읽어야 합니다. 거래량 기준이 시장마다 달랐거든요. 해외는 평소의 2배, 국내는 1.5배를 요구했습니다.
해외 쪽 재현 결과가 개발 기록에 남아 있습니다. 1단계를 통과한 272건 중에서, 다음 날 거래량 조건까지 통과한 건 3건. 약 1.1%였습니다.

표로 보기
| 단계 | 내용 | 설명 |
|---|---|---|
| 1단계 | 1단계 | 조용한 것만 |
| 2단계 | 통과분 272건 | 거래량 0.81배 |
| 3단계 | 2단계 요구 | 평소의 2배 |
| 4단계 | 통과 | 3건 |
같은 표본에서 거래량 비율의 중앙값은 0.81배였습니다. 비율을 작은 순서대로 늘어놓았을 때 딱 한가운데 오는 값이라는 뜻입니다. 국내도 0.83배로 거의 같았습니다.
터지기는커녕 더 줄어든 겁니다.
개발 기록은 비교할 값도 함께 적어 뒀습니다. 시장 전체에서 “거래량이 평소의 2배”가 일어나는 비율이 4.63%라고요.
통과 종목에서는 1.1%였으니 약 4배 더 드물어진 겁니다.

표로 보기
| 항목 | 설명 | 값 |
|---|---|---|
| 시장 전체 | 아무 종목이나 | 4.63% |
| 1단계 통과분 | 조용해진 종목 | 1.1% |
“1.1%” 만 보면 그냥 까다로운 조건으로 읽힙니다. 옆에 4.63%를 놓고 나서야 뜻이 뒤집혔습니다.
1단계가 2단계를 도운 게 아니라 방해하고 있었던 겁니다.
물론 이 비교를 너무 세게 밀면 안 됩니다. 4.63%가 어느 시장에서 몇 개를 놓고 잰 값인지는 기록에 안 적혀 있거든요. 비교할 짝이 있어야 숫자가 말을 한다는 건 배웠지만, 그 짝의 출처까지 봐야 결론이 선다는 것도 같이 배웠습니다.
그럼 조건을 좀 낮추면 되는 것 아닌가요
저도 그 생각을 제일 먼저 했습니다. 요구하는 배수를 낮추면 신호가 나오겠죠.
안 낮췄습니다. 이유는 표본입니다.
이 전략의 82일 운영 기록에 남은 실제 매매는 4건입니다. 2건은 팔았고 2건은 아직 들고 있었어요. 그 4건으로는 이 규칙이 좋은지 나쁜지를 따질 수가 없습니다. 그 상태에서 숫자를 만지면 잘 돼도 왜 잘 됐는지 모르고, 못 돼도 왜 못 됐는지 모릅니다.
조건이 아예 불가능했던 것도 아닙니다. 해외 표본에서도 3건은 통과했으니까요. 문제는 성적을 매길 자료가 안 쌓인다는 쪽이었습니다.

표로 보기
| 항목 | 설명 | 값 |
|---|---|---|
| 2단계 통과 | 3건 | 1.1 |
| 넘지 못함 | 269건 | 98.9 |
그래서 새로 사는 것만 멈추고, 이미 산 것을 파는 기능은 그대로 뒀습니다.

여기서 하나 배웠습니다. 성적을 보기 전에 표본이 쌓이는 속도를 먼저 봐야 한다는 것.
그리고 안 나오는 것도 비용입니다. 아무것도 안 나오는 일에 매일 25분을 쓰고 있었으니까요.
더 조용했던 건, 아무도 안 켠 스위치였습니다
두 번째 이야기입니다.
새 기능을 만들어 서버에 올렸습니다. 다음 날 확인해 보니 그 기능이 한 번도 안 돌았습니다. 스위치가 꺼져 있었거든요.

개발기 15에서도 스위치 이야기를 했는데, 그때와는 반대 방향입니다. 그때는 검사 준비 코드가 스위치를 켜 놓고 시작해서 검사가 자기가 켠 걸 다시 확인했어요. 이번엔 켜는 사람이 아예 없었습니다.
그리고 이건 버그가 아니었습니다. 설계서에 “처음엔 꺼진 채로 올린다”고 제가 적어 뒀고, 코드도 그대로였습니다.
검사도 통과했습니다. 그 검사가 확인한 게 “꺼져 있을 때 아무 일도 안 일어나는가”였는데, 정확히 그대로였으니까요.

표로 보기
| 시점 | 사건 | 설명 |
|---|---|---|
| 8월 14일 | 쓰기로 정함 | 이 기능을 켜서 쓴다 |
| 8월 15일 | 서버에 올림 | 새벽 5시 25분 |
| 8월 16일 | 실측하니 꺼짐 | 한 번도 안 돌았음 |
빠진 건 딱 한 줄이었습니다. “그럼 언제 켜나.”
설계서에도, 인수인계 문서에도, 어디에도 그 문장이 없었습니다. 쓰기로 정한 것도 맞고 올린 것도 맞는데, 켜는 날을 아무도 안 정한 것입니다.

표로 보기
| 배포 다음 날 확인 | 쓰기로 정한 것 | 서버에서 잰 값 |
|---|---|---|
| 그 기능 | 켜서 쓴다 | 꺼져 있음 |
| 그 기능이 넣은 자료 | 분리해서 집계 | 149건 중 0건 |
| 후속 관찰 | 통과율 보고 판단 | 안 쌓이는 중 |
더 나빴던 건 그다음입니다. 그사이 다른 문서 두 개가 “지금 돌고 있다”는 전제로 쓰였어요.
하나는 “통과율을 봐야 판단할 수 있다”고 적혀 있었습니다. 안 돌고 있으니 통과율은 쌓이질 않죠. 다른 하나는 그 기능이 붙이는 이름표로 자료를 나눠 세겠다고 적었는데, 그 이름표가 붙은 자료는 149건 중 0건이었습니다.
아무 일도 안 일어난 자리 위에 계획이 얹히고 있었습니다.
그럼 제대로 걸리게 고치면 되는 것 아닌가요
여기서 방향이 뒤집힙니다.
신호가 드물던 그 매수 조건과는 별개로, 화면을 자동으로 갱신하는 도구에서도 안 걸리는 조건이 나왔습니다. 낡은 데이터로 판단하는 걸 막으려고 넣어 둔 조건이었어요.
그게 영원히 안 걸리게 적혀 있었습니다. 값을 찾아가는 주소를 틀리게 썼거든요. 없는 서랍을 열어 보고 “이상 없습니다”라고 답하는 셈입니다.
여기까지가 검토 세 단계였습니다. 처음에는 조건이 없다는 지적이 나왔고, 조건을 넣는 과정에서 주소가 틀렸고, 다음 검증자가 그래서 이 조건은 안 걸린다고 짚었죠.
네 번째가 한 걸음 더 갔습니다.
“주소를 바로잡으면 정상적인 갱신까지 막히지 않나요?”
왜 그런지 풀어 보면 이렇습니다. 그 시스템은 국내 판단을 저녁 7시 50분에 기록하는데, 미국의 하루치 가격·거래량 자료는 다음 날 새벽 5시 30분에 받았습니다.
그러니 자료를 정상적으로 받아도 미국 자료의 날짜가 국내 판단일보다 앞설 수 있습니다. 어쩌다 그런 게 아니라 구조상 그렇습니다.
주소를 고쳤다면 그 뒤 단계가 평일마다 막혔을 겁니다. 그리고 무서운 대목은 이겁니다 — 그 멈춤은 오류를 하나도 안 냅니다. 화면이 조용히 멈추고, 한참 뒤에나 눈치챕니다.

그래서 그 조건은 판정에서 빼고 기록만 남기기로 했습니다. 잘못 쓴 자가 아니라, 애초에 낡음을 재는 데 쓸 수 없는 자였던 것입니다. 대신 갱신이 막히거나 뒷일이 실패하면 알림이 오도록 했습니다.

표로 보기
| 단계 | 내용 | 설명 |
|---|---|---|
| 1단계 | 1단계 | 조건이 없다 |
| 2단계 | 2단계 | 주소가 틀렸다 |
| 3단계 | 3단계 | 그래서 안 걸린다 |
| 4단계 | 4단계 | 걸리면 안 된다 |
오해하지 마세요. 안 걸리는 조건을 다 빼라는 이야기가 아닙니다.
질문 하나를 순서에 넣자는 겁니다. 안 걸리는 조건을 찾았을 때, 고치기 전에 한 번 더 묻는 거예요. “이게 걸리면 무엇이 멈추지?”
그래서 제가 바꾼 건 조건이 아니라 기본값이었습니다
블로그 자동화 쪽에서도 같은 모양을 하루에 여섯 자리에서 찾았습니다.
새 공정을 하나 만들었는데, 그 공정에 딸려 가야 할 자료 목록에서 한 줄이 빠졌습니다. 그림 스타일 모음집 경로였어요.
기존 공정에는 처음부터 있었고 새로 만든 칸에만 없었습니다. 제가 두 번 짚고 나서야 그 빠진 줄을 찾았습니다.
정리 도구도 그랬습니다. 이건 두 군데에서 막혀 있었어요. 찾도록 만든 ‘완료’ 구역이 실제 문서에 없었고, 그걸 고쳐도 항목 길이가 중앙값 3줄, 최대 36줄이라 100줄 기준에 닿지 않았습니다.
도구는 커밋할 때마다 불려 나갔고, 매번 “옮길 게 없습니다”라고 답했어요. 만들어 두고 반영이 안 됐다고 생각했는데, 돌고는 있었고 눈금이 안 닿았던 겁니다. 이쪽은 길이 대신 상태로 가르도록 기준 자체를 바꿨습니다.

코드 주석에 예전에 적어 둔 한 줄이 있더군요.
“밀어넣은 것은 지켜지고, 가져오게 시킨 것은 안 지켜진다.”
자료 목록 쪽은 조건을 고치지 않고 목록의 방향을 뒤집었습니다.

표로 보기
| 자료 목록 | 전 | 후 |
|---|---|---|
| 손으로 적는 것 | 실을 공정 | 안 실을 공정 |
| 안 적으면 | 조용히 빠짐 | 이름 대고 멈춤 |
| 빠지려면 | 아무것도 필요 없음 | 이유를 적어야 |
| 새 공정을 만들면 | 잊는 게 통과 | 빠짐이 잡힘 |
전에는 자료를 실을 공정을 손으로 적었습니다. 그러면 새 공정을 만들면서 안 적는 것이 곧 통과입니다. 잊는 쪽이 기본값이었던 겁니다.
지금은 뺄 공정만 적습니다. 빼려면 이유를 적어야 합니다. 목록에 없는데 자료도 안 실린 공정이 있으면 도구가 그 공정 이름을 대고 멈춥니다.
이 검사는 새로 만든 공정만 보는 게 아니라 기존 공정까지 전부 봅니다. 문도 두 개 더 달았습니다. 빼는 이유를 안 적으면 면제가 아니고, 이미 없어진 공정이 그 목록에 남아 있어도 잡습니다. 안 그러면 그 목록이 조용한 쓰레기통이 되거든요.
확인은 일부러 망가뜨려서 했습니다. 네 가지 시험을 넣었더니 네 번 다 울었어요. 그중 하나가 전날 실제로 저지른 그 실수를 본뜬 것이었습니다.

표로 보기
| 항목 | 값 | 설명 |
|---|---|---|
| 넣어 본 시험 | 4가지 | 자료 목록 |
| 경보가 울린 것 | 4가지 | 전부 잡힘 |
| 실제 사고를 본뜬 것 | 1가지 | 전날 그 실수 |
이게 이번에 제일 크게 남은 겁니다. 규칙을 더 적는 것으로는 안 지켜졌습니다. 아무것도 안 했을 때 벌어지는 일을 바꾸니까 그제야 지켜지더군요.
여러분이 아무것도 안 했을 때, 지금 무엇이 정해지고 있나요

여기까지가 봇 이야기인데, 이 질문은 돈 쪽으로도 가져갈 수 있습니다. “내가 아무것도 하지 않으면 다음에 무엇이 일어나지?”
우리가 받는 안내에는 두 갈래가 섞여 있습니다. 내가 움직여야만 되는 것과, 가만히 있으면 저절로 넘어가는 것이요.
“신청하시면 됩니다” 라는 문장이 앞쪽입니다. 안내처럼 들리지만, 실제로는 아무것도 안 하면 아무 일도 안 일어난다는 뜻이거든요.
제 스위치가 꺼져 있던 것과 같은 자리예요. 쓰기로 정했고, 자격도 되고, 서류도 있는데, 켜는 날을 아무도 안 정한 상태입니다.
뒤쪽도 있습니다. 자동으로 연장되거나, 만기 뒤에 다른 조건으로 바뀌거나 하는 경우요. 이쪽은 내가 아무 결정을 안 해도 결정이 내려집니다.

표로 보기
| 내가 아무것도 안 하면 | 신청해야 되는 것 | 자동으로 되는 것 |
|---|---|---|
| 그때 결과 | 아무 일 없음 | 그대로 진행 |
| 확인할 것 | 접수됐나 | 다음 조건이 뭔가 |
| 어디서 보나 | 해당 기관 | 해당 기관 |
한 가지 덧붙이면, 제도와 상품마다 절차가 다르고 한 상품 안에서도 단계마다 갈립니다. 신청이 필요한 단계와 자동으로 넘어가는 단계를 따로 확인하셔야 하는 이유예요.
제 실수를 되짚어 보면 문제는 조건 자체가 아니었습니다. 켜져 있다고 믿은 것과 실제로 켜져 있는 것을 한 번도 안 맞춰 본 것이었어요. 서버에 물어보면 확인할 수 있었는데, 저는 문서만 보고 있었습니다.
오늘 딱 하나만 해 보신다면 이걸 권합니다. 최근에 “신청하면 된다”고 들은 것 하나를 고르세요.
그리고 그게 지금 어떤 상태인지를 문서 말고 해당 기관에서 한 번 확인해 보시는 겁니다. 접수가 됐는지, 더 낼 것이 있는지, 언제부터 적용되는지요.
오늘 제가 아직 못 잰 것
이 글도 “다 고쳤습니다”로 닫지는 않겠습니다.
방향을 뒤집은 장치는 자료가 빠졌는지는 잡지만, 그 자료의 내용이 낡았는지나 적어 둔 면제 이유가 타당한지까지는 판단하지 못합니다. 그건 다음 숙제입니다.
그리고 이번에 고치는 도중에 새 결함이 셋 생겼습니다. 하나는 작업 중 자체 확인에서, 나머지 둘은 별도 검증에서 나왔습니다.
그중 하나가 하필 “이 검사가 센다”고 주석에 적어 놓고 실제로는 안 만든 것이었습니다. 이 글이 내내 이야기한 그 병을, 그 병을 고치는 중에 또 저지른 겁니다.
고칠수록 새로 내는 구간이 있다는 걸 그때 알았습니다.
봇 쪽 세 사례는 개발 기록에 적힌 값을 옮긴 것이고, 그 실행을 다시 돌려 본 건 아닙니다. 그리고 이 운영 기록에는 실제 손실도 남아 있습니다. 신호가 드물었던 문제와 그 손실의 원인은 별개 조사로 갈라 뒀습니다.
그래도 오늘은 하나 확실히 얻었습니다. 전에는 규칙을 적어 두고 지켜지길 바랐는데, 이제는 안 지키면 그 자리에서 멈추게 해 뒀어요.
25분을 쓰고 조용하던 그 화면이 지금 저에게 남긴 건 질문 하나입니다. “작동한다고 믿는 것 중에, 실제로 확인해 본 건 몇 개지?”
※ 이 글은 자동매매 시스템과 블로그 자동화를 만들며 겪은 과정을 기록한 개발기입니다. 특정 종목이나 매매 방법을 권유하지 않으며, 본문에서 인용한 봇 쪽 수치는 개발 기록에 적힌 값을 옮긴 것입니다. 각종 제도·상품의 신청 요건과 자동 적용 여부는 기관과 상품에 따라 다르므로 개별 사안은 해당 기관에 확인하셔야 합니다. 투자 판단과 그 책임은 본인에게 있습니다. 2026.09 기준 정보·교육·참고용으로만 봐 주세요.
아직 댓글이 없습니다. 이 글을 읽고 떠오른 생각을 남겨 주세요.