[2026-07-16 정정 안내] 이 글의 최초 버전에는 사실과 다른 서술이 여러 곳 있었습니다. 개발 기록을 처음부터 다시 대조해 ①아직 만들지 않은 기능을 “고쳤다”고 쓴 부분(배관 ①·③) ②서킷브레이커의 동작을 반대로 쓴 부분 ③리스크 필터의 효과를 실제 검증 결과와 정반대로 쓴 부분 ④손절이 실제로는 작동하지 않고 있었다는 사실을 바로잡았습니다. 조용히 고치지 않고 무엇이 틀렸는지 그대로 남깁니다. 부끄럽지만 이 정정 과정 자체가 이 글의 결론이 됐습니다.

이 글은 특정 종목의 매수·매도를 권유하는 글이 아니라, 개인이 만든 시스템의 개발 과정을 솔직하게 공유하는 정보·교육·참고용 글입니다. 투자 판단과 책임은 본인에게 있습니다.

첫 글에서 왜 이 시스템을 만들기 시작했는지 이야기했습니다. 오늘은 실제로 굴려보니 어디가 새고 있었는지, 그리고 제가 “안전장치”라고 믿었던 것들이 사실은 제 생각과 달랐다는 것을 데이터로 알게 된 이야기를 풀어보겠습니다.

낡은 배관을 고치는 손
Photo: Sergei Starostin / Pexels

배관 ① 주문은 됐는데, 봇은 “실패”라고 우겼다

가장 골치 아팠던 배관부터 말씀드리겠습니다. 이건 눈에도 잘 안 보였습니다.

봇이 증권사에 “이 종목 사줘”라고 주문을 보냅니다. 증권사는 실제로 체결(매매 성사)을 해줍니다. 그런데 “다 됐어요”라는 확인 답장이 정해진 시간(10초) 안에 오지 않았습니다. 그러자 봇은 성급하게 단정합니다. “답이 없네. 주문 실패했나 보다.”

나중에 증권사 계좌를 직접 열어보고 알았습니다. 주식은 이미 사져 있었습니다. 즉 이건 “체결 실패”가 아니라 “체결 확인 실패”였습니다. 택배를 이미 받아놓고 “안 왔다”고 우기는 것과 같습니다.

여기서부터가 정직하게 말씀드릴 부분입니다. 최초 버전에서 저는 “실제로 산 가격을 다시 조회해 기준을 바로잡게 고쳤다”고 썼는데, 사실이 아닙니다. 실제로 넣은 조치는 훨씬 소박합니다.

그게 전부입니다. 손절선을 다시 긋거나 장부에 자동으로 등록하는 일은 하지 않습니다. 그건 “체결 생명주기 일원화”라는 훨씬 큰 공사인데, 아직 보류 중입니다.

왜 안 했냐면 — 어설프게 자동으로 고치는 게 더 위험하기 때문입니다. 봇이 잘못 판단해 장부를 자동으로 주무르기 시작하면, 틀렸을 때 사람이 손쓸 수 없습니다. 그래서 지금은 “봇은 멈추고 사람을 부른다”까지만 해뒀습니다. 자동화에서 제일 어려운 건 기능을 넣는 게 아니라 어디까지만 자동으로 할지 선을 긋는 일이었습니다.

배관 ② 값이 밀리는 순간엔, 주문을 취소한다

두 번째 배관은 슬리피지입니다. 내가 사려던 가격과 실제 체결 가격 사이의 틈이죠.

그래서 급락 가드를 덧댔습니다. 봇은 전날 “이거 사자”고 정해두고 다음 날 아침 실제로 주문을 넣는데, 그 사이에 가격이 결정 시점보다 8% 넘게 빠져 있으면 주문을 아예 취소합니다. 불이 붙은 프라이팬에 손을 넣지 않는 것과 같은 상식입니다. (최초 버전에는 “잠깐 멈춘다”고 썼지만 정확히는 취소이고, 이 장치는 제 시스템의 일부 트랙에만 적용돼 있습니다.)

배관 ③ 멈춘 계좌 — 사실은 터지고 나서 알았습니다

세 번째는 어이없지만 치명적이던 배관입니다. 모의투자 계좌가 3개월 만기로 조용히 끝나자, 어느 날부터 모든 주문이 거부됐습니다. 봇은 벽에 대고 소리치고 있었습니다.

최초 버전에서 저는 “매일 장 열리기 전 건강검진을 붙였다”고 썼습니다. 이것도 사실이 아닙니다. 실제로는 이렇습니다.

배관은 터지고 나서 고치는 것보다 터지기 전에 점검하는 게 싸다 — 맞는 말인데, 저는 아직 그걸 못 하고 있습니다.

이제 진짜 주인공, 안전장치

저는 개발 내내 하나의 원칙을 붙들고 있었습니다. “많이 버는 것보다, 크게 잃지 않는 것이 먼저다.” 그리고 그 원칙을 지켜주는 세 가지 장치를 자랑스럽게 여겼습니다.

그런데 이 글을 쓰려고 기록을 다시 뒤지다가, 셋 다 제가 잘못 알고 있었다는 걸 알았습니다. 하나는 작동 방식을 반대로 알고 있었고, 하나는 효과가 없다는 게 데이터로 증명돼 있었고, 하나는 아예 작동하지 않고 있었습니다.

안전장치 ① 손절 — 여기까지 떨어지면 판다

손절은 “여기까지 떨어지면 감정 없이 판다”는 규칙입니다. 왜 중요할까요? 손실과 회복이 대칭이 아니기 때문입니다.

반토막의 산수
머니노트 · 정보·교육·참고용

원금이 반토막(-50%) 나면 본전으로 돌아오는 데 두 배(+100%)가 필요합니다. -20%만 잃어도 +25%를 벌어야 제자리입니다. 잃는 건 쉽지만 되찾는 건 훨씬 어렵다 — 이 산수가 손절이 필요한 이유의 전부입니다. 그래서 여기엔 AI를 절대 넣지 않았습니다. 손절이 “이번만 봐줄까?” 하고 변덕을 부리면 그건 이미 안전장치가 아니니까요.

여기까지가 원리입니다. 그런데 원리가 맞다는 것과, 그게 실제로 작동한다는 건 완전히 다른 이야기였습니다.

이 글을 정리하다가 바로 어제 확인한 사실입니다. 제 모의투자 트랙에서 손절은 사실상 한 번도 걸리지 않고 있었습니다. 이유가 셋입니다.

정리하면 — 저는 “손절이 있는 전략”을 검증하고 있다고 믿었지만, 사실은 손절이 없는 전략을 검증하고 있었습니다.

안전장치는 달아두는 게 아니라, 진짜 작동하는지 확인해야 비로소 안전장치입니다. 그 확인을 안 하면, 있다고 믿는 것만으로 오히려 더 위험해집니다 — 저처럼 자체 감시까지 꺼버리게 되니까요.

안전장치 ② 서킷브레이커 — “전원을 내린다”가 아니었습니다

서킷브레이커는 전기가 위험할 때 내려가는 두꺼비집에서 온 말입니다. 최초 버전에서 저는 “연달아 잃으면 그날은 매매를 멈추고 전원을 내린다”고 썼습니다. 이건 반대로 쓴 것입니다.

정확히는 이렇습니다. 연달아 세 번 잃거나 하루 손실이 -3%를 넘으면, 봇은 “새로 사는 것”만 멈춥니다. 이미 들고 있는 것을 파는 일은 계속합니다.

왜 그럴까요? 이게 이 글에서 제일 중요한 대목입니다. 손절과 익절은 자본을 지키는 장치입니다. 그런데 서킷이 켜졌다는 건 지금이 위험 구간이라는 뜻입니다. 위험할수록 파는 기능은 필요합니다. 여기서 파는 것까지 막아버리면 어떻게 될까요?

실제로 그 사고가 있었습니다. 예전 버전에서 서킷이 켜지자 청산 점검까지 통째로 멈췄습니다. 그때 봇은 종목 12개를 들고 있었고 대부분 평가익 상태였는데, 익절 조건이 왔는데도 팔지 못했습니다. 게다가 더 고약한 건 — 파는 걸 막으면 이익 나는 거래가 영영 생기지 않고, 그러면 연속 손실 기록이 영원히 초기화되지 않아 서킷이 영구히 안 풀립니다. 안전장치가 스스로를 가둬버린 겁니다.

그래서 지금은 순서가 이렇습니다. ① 팔 것부터 판다 → ② 그 결과로 서킷을 다시 판단한다 → ③ 서킷이 꺼져 있을 때만 새로 산다. 그리고 서킷은 세 가지 경우에 자동으로 풀립니다 — 다음 날이 되거나, 청산 중에 이익 거래가 하나라도 나오거나, 들고 있는 게 하나도 없거나.

“안전장치는 무조건 다 잠그면 된다”가 아니라, 무엇을 잠그고 무엇을 열어둘지가 안전장치의 본체였습니다.

안전장치 ③ 리스크 필터 — 제가 완전히 틀렸습니다

마지막이 가장 이야기하고 싶은 부분입니다. 그리고 가장 크게 틀린 부분입니다.

안전망
Photo: Dhruv Pulipaka / Pexels

리스크 필터는 오를 종목을 찾는 게 아니라, 크게 떨어질 종목을 미리 걸러내는 장치입니다. 상방이 아니라 하방을 막는 보험이라는 발상 자체는 지금도 맞다고 생각합니다.

문제는 “그래서 이 필터가 실제로 작동했는가”였습니다. 최초 버전에서 저는 “경고를 무시하고 들어갔던 사례를 되짚어 보니 경고가 켜졌던 쪽이 훨씬 더 크게 무너져 있었다”고 썼습니다. 데이터로 확인해 보니 정반대였습니다.

제가 그렇게 믿은 근거는 실전 24건이었습니다. 24건. 그 안에서 경고가 켜진 쪽이 유독 나빠 보였고, 저는 “역시 필터가 옳았다”고 결론 내렸습니다. 그런데 이 필터는 AI 판단이 아니라 정해진 규칙으로 돌아가는 장치라, 과거 4년치에 그대로 다시 적용해볼 수 있었습니다. 종목 1,416개, 판정 49,048건을 재현했습니다.

결과는 이랬습니다.

24건은 우연이었습니다. 표본이 적으면 아무 규칙이나 그럴듯해 보입니다. 만약 제가 그 24건만 믿고 “경고 뜨면 진입 금지”를 켰다면, 예측력이 전혀 없는 필터 때문에 진입 기회의 절반 가까이를 헛되이 버릴 뻔했습니다. 그래서 그 계획은 폐기했습니다.

지금 남은 건 “심하게 출렁이는 종목은 피한다” 하나뿐입니다. 화려하지 않지만, 이건 4년치가 뒷받침합니다.

일반 투자자에게 드리는 참고

투자 시스템이나 전략을 볼 때 “얼마나 벌었나”에만 눈이 가신다면 오늘 이야기를 떠올려 주세요. 정작 중요한 건 두 가지입니다.

첫째, “크게 잃을 때 무엇이 나를 멈춰 세우는가.” 둘째 — 오늘 제가 배운 것 — “그 장치가 정말 작동한다는 증거가 몇 건짜리인가.” 스무 몇 건을 보고 “이 규칙은 통한다”고 말하는 건 저처럼 틀리기 쉽습니다. 표본이 적으면 착각이 확신처럼 보입니다. 다시 말씀드리지만 이 글은 특정 종목 이야기가 아니라 시스템을 만드는 사람의 참고용 경험담입니다.

정리 — 고친 것, 아직 못 고친 것, 잘못 알고 있던 것

이 글의 최초 버전에서 저는 “배관을 고쳤고 안전장치가 작동했다”고 썼습니다. 다시 확인해 보니 배관은 절반만 고쳤고, 안전장치는 셋 다 제 생각과 달랐습니다.

그래서 이 글의 결론은 처음에 쓰려던 것과 완전히 달라졌습니다. 자동매매의 진짜 실력은 안전장치를 많이 다는 데서 나오지 않습니다. 그 장치가 정말 작동하는지 의심하고, 기록을 열어 확인하는 데서 나옵니다. 저는 그걸 안 해서 “있다고 믿는 안전장치”에 기대어 몇 달을 보냈습니다. 없는 것보다 나쁜 건, 있다고 믿는 것이었습니다.

다음 글 예고 — 사람 없이 24시간, 봇의 하루

배관을 손보고 안전장치를 다시 배웠으니, 이제 이 모든 걸 제가 잠든 사이에도 알아서 돌아가게 만들 차례였습니다. 다음 글에서는 새벽에 데이터를 모으고, 아침에 판단하고, 장중에 매매하고, 밤에 저에게 보고하는 봇의 24시간 하루를 풀어보겠습니다.


근거: StockBot_개발_개요 · 슬리피지 · 손절 · 서킷브레이커 · 리스크_관리 — 본 글은 개발 과정의 경험 공유이며 투자 자문이 아닙니다.