결론부터 말씀드리면, 좋은 봇은 ‘점수’가 아니라 ‘근거’와 ‘복구력’을 갖춘 봇입니다. 두 번째 봇을 REST API로 다시 지으며 구조부터 그렇게 바꿨습니다.
첫 봇은 죽으면 무엇을 들고 있었는지도 잊는 구조였습니다. 그 실패를 되풀이하지 않으려고, 전략보다 뼈대를 먼저 손봤습니다.

자동매매의 3단 파이프라인
봇은 결국 세 단계로 돕니다. 후보를 좁히는 필터, 상태를 점수로 재는 피처, 그래서 사고팔지를 정하는 알고리즘입니다. 이 골격이 명확해야 어디가 잘못됐는지 짚을 수 있습니다.
첫 봇 대비 두 번째 봇이 고친 것
| 항목 | 첫 봇 | 두 번째 봇 |
|---|---|---|
| 의사결정 | 점수만 통보 | 판단 근거를 함께 기록 |
| 재시작 | 보유 상태 소실 | 보유 포지션 복구 후 관리 재개 |
| 손절 | 감에 의존 | 변동성(ATR) 기반으로 명문화 |
| 마감 | 불명확 | 장 마감 전 전량 청산 규칙 |
가장 큰 수확은 재시작 복구였습니다. 봇이 뻗었다 살아나도 무엇을 들고 있었는지 다시 붙잡고 관리를 이어가게 되자, 첫 봇의 치명상이 메워졌습니다.
그래도 남은 삽질
정직하게 말하면, REST로 옮겼는데도 호출 한도 오류(429)는 여전히 떴습니다. 지금도 모의투자로 검증하는 단계이고, 완성됐다고 말할 수 없습니다. 도구를 바꾼다고 문제가 사라지지 않았습니다. 문제는 대개 도구가 아니라 설계였습니다.

재시작 복구가 왜 결정적인가
첫 봇의 가장 큰 약점은 ‘기억상실’이었습니다. 봇이 과다 호출로 다운되면, 자기가 무슨 종목을 얼마에 들고 있었는지조차 잊었습니다. 한번은 소형주 하나를 산 채로 봇이 꺼졌는데, 저는 봇이 죽은 줄도 몰랐고 봇은 팔지도 못한 채 방치됐습니다. 우연히 그 종목이 크게 올라 이득을 봤지만, 그건 실력이 아니라 버그였습니다. 반대 방향이었다면 그대로 큰 손실이었을 겁니다.
그래서 두 번째 봇에는 재시작 복구를 넣었습니다. 봇이 뻗었다 살아나면, 현재 보유 중인 포지션을 다시 읽어와 관리를 이어갑니다. 죽는 걸 막을 수 없다면, 죽었다 살아나도 자기 자리를 되찾게 만드는 것. 이것이 안정성의 핵심이었습니다.
근거를 남기는 알림 설계
구조에서 또 하나 바꾼 것은 ‘왜 샀는지’를 남기는 일이었습니다. 첫 봇은 점수만 통보해서 나중에 판단을 복기할 수 없었습니다. 두 번째 봇은 포착한 전략과 근거 지표 값을 함께 기록합니다. 어떤 전략으로 포착했고 그때 지표가 어떤 값이었는지가 남습니다. 이 기록이 있어야 규칙을 고칠 단서가 생깁니다.
구조가 좋아져도 삽질은 끝나지 않는다
정직하게 덧붙이면, 구조를 다듬었다고 봇이 완성된 것은 아닙니다. 호출 한도 오류는 REST에서도 여전히 나고, 지금도 모의투자로 검증하는 단계입니다. 다만 이제는 봇이 죽어도 스스로 자리를 찾고, 왜 그런 판단을 했는지 근거를 남깁니다. 그 두 가지만으로도 첫 봇과는 전혀 다른 신뢰도의 봇이 됐습니다.
한 걸음 더 — 시간대별 주문 라우팅
두 번째 봇을 다듬으며 새로 붙인 기능 중 하나는, 시간대에 따라 주문을 다른 경로로 보내는 동적 라우팅이었습니다. 정규장과 그 밖의 거래 시간대는 규칙이 다르기 때문에, 봇이 지금이 언제인지 판단해 알맞은 방식으로 주문을 내도록 한 것입니다. 처음엔 이런 게 왜 필요한지도 몰랐지만, 실전에서 시간대를 무시하고 주문을 내다 거부당하는 일을 겪고서야 이해했습니다.
또 하나는 후보 종목에 점수를 매겨 상위 몇 개만 진입하도록 하는 스코어링이었습니다. 필터로 걸러진 종목이 여전히 많을 때, 그중 무엇을 먼저 잡을지 순위를 매기는 역할입니다. 이런 기능들은 하나같이 ‘한 번 크게 데인 뒤에’ 필요성을 깨닫고 붙인 것들이었습니다.

구조는 사고의 결과물이다
돌이켜보면 두 번째 봇의 구조는 설계도를 그려놓고 시작한 게 아니라, 첫 봇이 무너진 자리마다 하나씩 기둥을 세운 결과물이었습니다. 재시작 복구는 방치 사고에서, 시간대 라우팅은 주문 거부에서, 근거 기록은 복기 불능에서 나왔습니다. 좋은 구조는 대개 좋은 실패의 목록입니다.
그래서 지금 봇을 만드는 분께 드리고 싶은 말은, 처음부터 완벽한 구조를 그리려 애쓰지 말라는 것입니다. 작게 시작해 부딪히고, 무너진 자리를 메워가며 구조를 키우는 편이 현실적입니다. 다만 그 무너짐이 실계좌의 큰돈이 아니라 모의투자에서 일어나게 하는 것, 그게 핵심입니다.
구조 설계의 핵심은 화려한 전략이 아니라, 죽었다 살아나도 자기가 무엇을 들고 있었는지 아는 복구력입니다. 그 한 가지가 계좌의 안전을 크게 좌우합니다.
요약하면, 좋은 봇 구조란 완벽하게 설계된 봇이 아니라 잘 회복하는 봇입니다. 넘어질 것을 전제하고, 넘어졌을 때 스스로 일어나 자기 자리를 되찾도록 만드는 것. 이 관점 하나만 있어도 초보가 만드는 봇의 안정성은 크게 달라집니다. 저는 그것을 첫 봇을 잃고 나서야 배웠습니다.
구조를 고민하는 시간은 아깝지 않습니다. 첫 봇에 없던 복구력 하나가 두 번째 봇을 전혀 다른 물건으로 만들었으니까요. 화려한 전략을 하나 더 얹기 전에, 봇이 죽었다 살아났을 때 무엇을 하는지부터 설계하십시오. 그 순서를 지키는 것이 초보를 큰 사고에서 지켜줍니다.
답글 남기기