종목을 하나 사면, 그 순간 파는 가격 두 개가 같이 적힙니다. 얼마까지 떨어지면 자를지, 얼마까지 오르면 일부를 덜어낼지.
사고 나서 정하는 게 아니라 사는 그 줄에서 같이 적힙니다.
그런데 오늘 제가 놀란 건 그게 아니었어요. 그 자리가 종목마다 다르더라는 것입니다. 그것도 제 예상과 반대 방향으로요.
오래 들고 갈 작정으로 산 종목일수록, 손절선을 더 멀리 뒀습니다.
소중하게 볼 종목이니 더 바짝 지킬 줄 알았는데, 오히려 더 크게 떨어져도 놔두도록 되어 있었습니다.

지난 두 편은 고장 이야기였습니다. 개발기⑨는 안전장치 네 개가 한꺼번에 헛돌았다는 이야기였고, 개발기⑫는 켜 둔 줄 알았던 감시가 23일을 쉬었다는 이야기였죠.
사실 소장님께 지적을 받았습니다. “개발기는 실패 기록만 쓰는구나? 성공 사례는 없나?” 세어 보니 맞았습니다. 열두 편 중에 잘 돌아간다는 이야기가 한 편뿐이었어요.
그래서 오늘은 반대편을 씁니다. 제대로 만들어져 있던 것 이야기입니다.
화면에 보이는 손절선은 진짜가 아니었습니다
시작부터 헛짚었다는 이야기를 먼저 해야겠습니다. 그래야 뒤가 말이 되거든요.
봇의 보유 종목 화면을 열면 종목마다 손절가와 익절가가 친절하게 적혀 있습니다. 예를 들면 이런 식이에요. 평균 매수가 182,200원, 손절가 167,624원, 1차 익절가 204,064원.
“오, 종목마다 자리가 다 정해져 있네” 하고 그대로 쓸 뻔했습니다.
그런데 보유 중인 일곱 종목을 전부 계산기에 넣어 봤더니 이상했습니다.

표로 보기
| 항목 | 값 | 설명 |
|---|---|---|
| 계산해 본 종목 수 | 7 | 평균가와 화면 값을 나눠 봤습니다 |
| 화면에 뜬 점선 · % | -8.0000 | 이건 표시용 추정값이었습니다 |
| 서로 다른 값의 개수 | 0 | 종목이 달라도 값이 똑같았습니다 |
소수점 넷째 자리까지 전부 −8.0000%. 종목의 성격이 제각각인데 자리가 똑같을 리가 없죠.
코드를 열어 봤습니다. 화면에 손절가를 넣어 주는 자리에 이렇게 적혀 있었습니다.
“표시용 기본선 — 시스템이 강제하지 않음.”
평균가에 그냥 0.92를 곱한 값이었습니다. 응답에도 “추정값”이라는 표시가 같이 붙어 나오고 있었고요.
즉 화면에 그려진 건 참고용 점선이었습니다. 그 가격이 되면 판다는 뜻이 아니었어요.
실제로 그랬습니다. 8월 5일 종가 기준으로 보유 종목 하나는 현재가가 그 점선 아래로 내려가 있는데도 그대로 들고 있었습니다. 점선이니까요.

여기서 그냥 화면 값을 믿고 글을 썼으면 어떻게 됐을까요. “AI가 종목마다 자리를 정해 둔다”고 썼을 텐데, 그건 사실이 아니었습니다.
개발기⑦에서 똑같은 사고를 낸 적이 있습니다. 문서에 적힌 문장을 믿고 “진짜 주문은 나가지 않는다”고 썼는데, 실제로는 모의계좌로 주문이 나가 체결되고 있었거든요. 적혀 있는 것과 도는 것은 다릅니다.
진짜 손절선은 네 가지였습니다
그럼 진짜는 어디 있느냐. 다른 파일에 있었습니다.
먼저 하나 짚고 갈게요. 지금부터 나오는 목록은 앞의 일곱 종목과 다른 것입니다. 앞은 실제로 사서 들고 있는 계좌 화면이었고, 지금부터는 봇이 후보로 따로 관리하는 관심 종목 목록이에요. 숫자를 서로 더하거나 빼시면 안 됩니다.
이 목록에 들어 있는 131건을 전부 열어 진입가와 손절가를 하나씩 나눠 봤습니다. 계산이 가능한 건 120건이었고요.
이번엔 값이 갈렸습니다. 두 개를 나란히 놓으면 이렇게 다릅니다.

표로 보기
| 구분 | 화면에 뜬 점선 | 목록에 적힌 선 |
|---|---|---|
| 어디에 있나 | 보유 종목 화면 | 봇의 관심 종목 목록 |
| 값이 몇 가지인가 | -8% 하나뿐 | 네 가지 |
| 종목마다 다른가 | 전부 같다 | 갈래에 따라 다르다 |
| 무엇으로 표시되나 | 추정값이라고 붙어 나옴 | 그 종목의 기준선 |
| 이 값으로 정리되나 | 아니다 | 그렇다 |
무엇이 갈랐을까요.

표로 보기
| 항목 | 설명 | 값 |
|---|---|---|
| 가장 좁은 자리 | 24건 | -6% |
| 가장 흔한 자리 | 90건 | -8% |
| 더 넓은 자리 | 5건 | -12% |
| 가장 넓은 자리 | 1건 | -15% |
−6% · −8% · −12% · −15%. 네 자리입니다.
그리고 이 네 자리가 아무렇게나 흩어져 있는 게 아니었어요. 종목을 어떤 이유로 샀느냐에 따라 갈렸습니다.
봇은 종목을 세 갈래로 나눠 담고 있었습니다.

표로 보기
| 항목 | 설명 | 값 |
|---|---|---|
| 짧게 보는 종목 | 네 가지 발굴 방식에서 들어옴 | 105 |
| 길게 보는 종목 | 두 가지 검증을 모두 통과한 것만 | 25 |
| 아주 오래 보는 종목 | 가장 긴 호흡으로 분류된 것 | 1 |
짧게 보는 종목이 105건으로 대부분이고, 길게 보는 종목이 25건, 그리고 아주 오래 보는 종목이 1건이었습니다.
여기서 앞의 손절선과 겹쳐 보면 그림이 맞아떨어집니다.

표로 보기
| 갈래 | 짧게 본다 | 길게 본다 | 아주 오래 본다 |
|---|---|---|---|
| 담긴 종목 수 | 105건 | 25건 | 1건 |
| 손절선을 잰 수 | 94건 | 25건 | 1건 |
| 손절선 | -8% 71건 | -8% 19건 | -15% 1건 |
| 버티는 폭 | 좁다 | 중간 | 넓다 |
정확히 말하면 딱 떨어지는 규칙은 아닙니다. 길게 보는 25건 중에도 −6%가 하나 섞여 있었어요. 다만 −12%와 −15%는 짧게 보는 쪽에 하나도 없었습니다. −12%는 길게 보는 쪽, −15%는 가장 오래 보는 한 건이었고요.
퍼센트로만 보면 잘 안 와닿으시죠. 이게 무슨 뜻이냐면, 10만 원짜리 주식 한 주를 샀다고 칠 때 이렇게 됩니다.

표로 보기
| 항목 | 값 | 설명 |
|---|---|---|
| 짧게 보는 종목 | 94,000원 | 6,000원 빠지면 자릅니다 |
| 가장 흔한 자리 | 92,000원 | 8,000원 빠지면 자릅니다 |
| 길게 보는 종목 | 88,000원 | 12,000원까지 견딥니다 |
| 가장 오래 보는 종목 | 85,000원 | 15,000원까지 놔둡니다 |
같은 10만 원을 넣었는데 어떤 종목은 6천 원에서 잘리고, 어떤 종목은 1만 5천 원까지 놔둡니다. 두 배 넘게 차이가 나죠.
직관과 반대죠. 저도 처음엔 “오래 들고 갈 종목이면 더 조심해야 하는 것 아닌가” 싶었습니다.
그런데 반대로 생각해 보면 당연합니다. 오래 들고 가겠다는 건 중간에 흔들리는 걸 견디겠다는 뜻이거든요. 손절선을 −6%에 두면, 오래 볼 종목도 그냥 한 번 출렁였을 뿐인데 잘려 나갑니다.
짧게 보는 종목은 반대입니다. 며칠 안에 결판을 볼 생각으로 샀으니, 조금만 어긋나도 빨리 접는 게 목적에 맞고요.

파는 자리도 같이 적힙니다
떨어질 때만 정해 둔 게 아니었습니다. 오를 때 어디서 일부를 덜어낼지도 같은 줄에서 정해집니다.
이건 계산법이 조금 재미있는데, 봇은 익절가를 “얼마 오르면”으로 정하지 않습니다. 손절선까지의 거리를 자로 씁니다.
진입가에서 손절선까지의 거리를 1칸이라고 놓고, “그 몇 칸 위에서 덜어낼지”를 정하는 방식이에요.
쉽게 말하면 이렇습니다. 잃기로 각오한 돈만큼을 한 칸으로 잡고, 그 몇 배를 벌면 일부를 덜어낼지를 정하는 겁니다. 아까 10만 원 예시로 치면, 8천 원을 걸었으니 2칸은 1만 6천 원을 벌었을 때가 되는 거죠.

표로 보기
| 단계 | 내용 | 설명 |
|---|---|---|
| 1단계 | ① 손절선을 먼저 정한다 | 종목 갈래에 따라 -6%에서 -15% 사이 |
| 2단계 | ② 그 거리를 1칸으로 삼는다 | 진입가에서 손절선까지가 기준 자가 됩니다 |
| 3단계 | ③ 몇 칸 위에서 덜어낼지 정한다 | 갈래와 나라에 따라 1.8칸에서 3칸 |
| 4단계 | ④ 사는 순간 같이 기록된다 | 사람이 그때그때 정하지 않습니다 |
이 방식의 좋은 점이 있습니다. 잃을 폭을 먼저 정하고, 벌 목표를 거기에 맞춰 잰다는 거예요.
보통은 반대로 하기 쉽죠. “이거 30% 오를 것 같은데” 부터 정하고, 손절은 나중에 대충 붙이거나 아예 안 붙이거나.
그럼 몇 칸 위에서 덜어내느냐. 이것도 갈래마다 다릅니다.

표로 보기
| 항목 | 설명 | 값 |
|---|---|---|
| 짧게 본다 · 미국 | 빨리 결판을 본다 | 1.8칸 |
| 짧게 본다 · 한국 | 빨리 결판을 본다 | 2.0칸 |
| 길게 본다 · 미국 | 더 기다린다 | 2.5칸 |
| 길게 본다 · 한국 | 더 기다린다 | 3.0칸 |
짧게 볼 종목은 1.8칸에서 2칸, 길게 볼 종목은 2.5칸에서 3칸. 여기서도 같은 원리가 반복됩니다. 오래 볼 종목은 더 크게 벌 때까지 기다리게 되어 있습니다.
단 이건 지금 새로 담기는 종목 기준입니다. 목록에는 규칙을 바꾸기 전에 들어온 것들도 남아 있어서, 옛 값을 그대로 달고 있는 건도 섞여 있어요.
그리고 코드 옆에 왜 그 숫자인지가 적혀 있었습니다. 길게 보는 쪽의 2~3칸에는 마크 미너비니의 VCP 방식을 참고했다는 메모가 붙어 있었어요.
다만 전부 그렇지는 않았습니다. 짧게 보는 쪽 숫자에는 사람 이름 없이 백테스트 결과라고만 적혀 있었거든요.
그래도 숫자를 감으로 넣지 않고 근거를 옆에 남겨 둔 것이 도움이 됐습니다. 값이 왜 그런지 물어볼 데가 있으니까요. 근거가 안 적힌 숫자는 나중에 바꿔도 되는지 아닌지조차 알 수 없게 됩니다.

손절선은 두 겹으로 정해집니다
여기서 하나 더 알게 된 게 있습니다.
짧게 보는 종목 94건을 다시 들여다보니, 같은 갈래인데도 −6%와 −8%로 갈려 있었습니다. 같은 갈래면 같아야 하는 거 아닌가 싶었죠.
찾아보니 손절선이 한 자리에서 정해지는 게 아니었습니다. 두 겹이었어요.
값이 따로 들어오지 않은 18건은 예외 없이 −8%, 그러니까 갈래의 기본값이 그대로 적혔습니다. 나머지에는 그 종목만의 값이 따로 들어와 있었고, 그 값이 기본값을 이겼고요.

표로 보기
| 단계 | 내용 | 설명 |
|---|---|---|
| 1단계 | ① 이 종목에 따로 들어온 값이 있나 본다 | 있으면 그 값을 씁니다 |
| 2단계 | ② 없으면 갈래의 기본값을 쓴다 | 짧게 보는 종목은 -8%가 기본값입니다 |
| 3단계 | ③ 진입가에 곱해 실제 가격으로 바꾼다 | -8%라면 진입가의 0.92배가 됩니다 |
| 4단계 | ④ 목록에 적어 둔다 | 이후 감시가 이 가격을 보고 판단합니다 |
그 값을 넣는 쪽이 누구냐에서 제가 또 헛짚었습니다.
처음엔 사람이 손으로 넣는 자리인 줄 알았어요. “AI가 전부 정하는 게 아니라 사람이 개입할 자리를 남겨 뒀구나” 하고요.
반대였습니다. 그 값은 위험을 따로 보는 AI가 종목을 보고 계산해 넘긴 값이었고, 받아서 최종 결정하는 쪽도 AI였습니다. 오히려 코드에 박혀 있는 기본값 쪽이 사람이 미리 정해 둔 규칙이었고요.
그러니까 구조가 제 짐작과 정반대입니다. 사람이 큰 틀을 정해 두고, 그 안에서 AI가 종목마다 조정하는 모양이에요.
기본값이 있으니 AI가 아무 값이나 넣지는 못하고, 그렇다고 전부 고정도 아닙니다. 틀은 사람이, 조정은 AI가. 자동화를 만들다 보면 자주 이 모양으로 수렴하더군요.
그 자리가 실제로 쓰였는지 세어 봤습니다
여기까지는 “정해 둔다”는 이야기였습니다. 당연히 다음 질문이 나오죠.
그래서 그 자리가 실제로 쓰이긴 하느냐.
관심 종목 목록에서 정리된 이유가 기록된 건을 세어 봤습니다. 114건이었습니다.

표로 보기
| 항목 | 설명 | 값 |
|---|---|---|
| 손절선에 닿아서 | 미리 정한 가격까지 떨어짐 | 51 |
| 정해 둔 기간이 끝나서 | 기간 만료 · 이것도 미리 정한 규칙 | 46 |
| 고점에서 밀려나서 | 따라 올라가던 선이 깨짐 | 8 |
| 익절선에 닿아서 | 목표 가격까지 올라감 | 4 |
| 그 밖 · 정리 중 | 이동평균 이탈 3건 · 정리 대기 2건 | 5 |
제가 이 표에서 본 건 비율이 아니라 목록에 없는 것입니다.
“그날 판단해서 정리했다”가 하나도 없습니다. 거의 전부 미리 정해 둔 조건에 닿아서 정리됐어요. 가격이 정해 둔 선까지 떨어졌거나, 정해 둔 기간이 지났거나, 정해 둔 목표까지 올랐거나.
그런데 여기서 제가 하마터면 큰 사고를 낼 뻔했습니다
이 표를 처음 보고 저는 “114번의 매도가 실제로 나갔다”고 썼습니다.
아니었습니다.
이 114건은 봇이 가격을 보고 자기 장부에서 정리한 기록이지, 계좌에서 주식이 팔린 게 아닙니다. 확인해 보니 장부가 손절로 정리했다고 적어 둔 종목 몇 개가 지금도 계좌에 그대로 들어 있었어요.
여러분 가계부로 치면 이런 상태입니다. 가계부에는 “이건 정리했음”이라고 줄을 그어 놨는데, 막상 계좌를 열어 보면 그 주식이 그대로 있는 것이죠. 장부와 계좌가 서로 다른 말을 하고 있는 겁니다.
이 글 앞부분에서 제가 한 말이 그대로 돌아왔습니다. 화면에 적힌 손절가에 속았다고 써 놓고, 몇 문단 뒤에서 똑같이 장부 기록을 실제 체결로 읽었습니다. 같은 함정에 한 글 안에서 두 번 빠진 거죠.
그래서 이 표가 말해 주는 건 딱 여기까지입니다. “정해 둔 자리가 장부에서는 자기 몫을 했다.” 그 이상은 아닙니다.
그리고 전부 고정된 선도 아니었습니다. 고점을 따라 올라가는 선이 따로 있어서, 8건은 그 선이 깨지면서 정리됐거든요. “한 번 적고 끝”이 아니라 따라 움직이는 것도 섞여 있습니다.
그래서 이게 잘 돌아간다는 뜻이냐 하면
아닙니다. 여기서는 정직하게 선을 그어야겠습니다. 앞 표를 성적표로 읽으면 안 됩니다.
이번 편은 “자리를 미리 정해 두는 설계”에 대한 이야기입니다. 그 설계가 돈을 벌어 준다는 이야기가 아닙니다.
앞의 표를 다시 보면 바로 보입니다. 손절선에 닿아 정리된 게 51건인데, 익절선까지 올라간 건 4건이었어요. 기간이 다 돼서 정리된 46건은 손절선에도 익절선에도 닿지 않은 채 정해 둔 기간이 지난 것이고요.
114건 중 목표까지 올라간 건 4건입니다. 설계대로 돌았다는 것과 그 설계가 돈을 벌었다는 건 완전히 다른 이야기죠.
그리고 이 손절들이 결과적으로 이득이었는지도 따로 확인 중입니다. 자른 게 더 나았던 경우도 있고, 자르고 나서 오히려 오른 경우도 있었습니다. 아직 표본이 모자라서 방향을 말하기 어렵고, 확실해지면 그것만 따로 한 편을 쓰겠습니다.
그리고 오늘 확인하면서 코드와 데이터가 어긋나는 자리도 여럿 나왔습니다. 코드에는 이렇게 하라고 적혀 있는데 목록에 담긴 값은 다른 항목들이었어요. 규칙을 바꾸기 전에 들어온 것들이 그대로 남아 있는 탓으로 보이는데, 아직 제가 다 세어 보지 못했습니다. 이건 다음에 따로 파 보려고 합니다.
모두 모의계좌 기준입니다. 실제 돈이 오간 게 아니고요.

그래도 이 설계에서 배울 건 남습니다
수익이 아니라 구조만 놓고 보면, 이 방식에는 분명한 성질이 하나 있습니다.

표로 보기
| 적히는 것 | 언제 정하나 | 무엇이 정하나 | 그 뒤 |
|---|---|---|---|
| 손절선 | 사는 그 줄에서 | 종목 갈래와 지정값 | 처음 값 그대로 |
| 익절선 | 사는 그 줄에서 | 손절선까지의 거리로 계산 | 처음 값 그대로 |
| 고점 추적선 | – | 고점을 따라감 | 값이 움직인다 |
| 그날의 기분 | – | – | 장부에 들어갈 자리가 없음 |
제가 이 표에서 제일 눈여겨본 건 마지막 줄입니다.
떨어지는 걸 보면서 “얼마에 팔까”를 고민할 자리가 아예 없습니다.
주식으로 손해를 본 이야기를 들어 보면 패턴이 비슷합니다. 살 때는 오를 이유만 생각하고, 떨어지기 시작하면 그때부터 “조금만 더 기다려 보자”가 시작되죠. 그 판단을 가장 못 하는 순간에, 가장 중요한 판단을 하게 됩니다.
미리 적어 두면 그 순간이 사라집니다. 잘 될 거라는 기대가 가장 클 때, 가장 냉정한 숫자를 같이 적어 두는 셈이니까요.
다시 말하지만 이게 수익을 보장한다는 뜻은 아닙니다. 위에서 봤듯이 이 봇도 목표까지 올라간 건 4건뿐이었어요. 다만 “파는 판단을 언제 하느냐”는 문제는, 결과와 별개로 한 번쯤 생각해 볼 만하다고 봅니다.
오늘 남은 문장
살 때가 가장 냉정할 수 있는 유일한 순간입니다.
사기 전에는 아직 아무것도 잃지 않았거든요. 그래서 “얼마까지는 견딘다”를 그때 정하면 지킬 만한 숫자가 나옵니다. 이미 20% 떨어진 다음에 정하려고 하면, 그때는 숫자가 아니라 희망을 적게 됩니다.
봇을 만들면서 배운 게 이겁니다. 좋은 규칙은 지키기 어려운 순간에 만들어지지 않습니다. 지키기 쉬운 순간에 미리 만들어 두는 것이더군요.
혹시 지금 들고 계신 게 있다면, 하나만 떠올려 보세요. 살 때 “여기까지”를 정해 두셨나요, 아니면 지금 정하고 계신가요? 봇에게는 그 자리가 사는 순간에 이미 적혀 있었습니다.
다음 편은 예고했던 이야기로 돌아갑니다. 고장을 감지하는 장치는 살아 있는데 고치는 쪽이 죽어 있던 이야기예요.
※ 이 글은 자동매매 시스템을 만들며 겪은 과정을 기록한 개발기입니다. 특정 종목이나 매매 방법을 권유하지 않으며, 언급된 수치는 모두 모의계좌 기준 기록입니다. 투자 판단과 그 책임은 본인에게 있습니다. 참고용으로만 봐 주세요.
아직 댓글이 없습니다. 이 글을 읽고 떠오른 생각을 남겨 주세요.