하루에 72만 원을 잃었습니다. 그중 2만 7천 원은 시장 탓이 아니었습니다

네 종목이 같은 날 손절됐고 하루에 72만 원이 날아갔습니다. 그런데 저는 그 장면을 보지 못했습니다. 회사에서 일하고 있었거든요.

2026년 6월 8일. 제가 돌리던 자동매매 봇이 처음으로 큰 손실을 냈습니다. 보유하던 네 종목이 같은 날 전부 손절됐고, 합쳐서 약 −72만 원이었습니다.

이 이야기를 예전에 한 번 쓴 적이 있는데, 그때는 이렇게 시작했습니다. “텔레그램이 쉴 새 없이 울렸다. 손절, 손절, 또 손절.” 극적으로 들리죠. 그런데 다시 확인해보니 사실이 아니었습니다.

“일하고 있어서 알람을 못 봤다.”

알림은 제대로 왔습니다. 다만 제가 그걸 볼 수 없는 상태였을 뿐이에요. 자동매매를 돌린다는 건 대체로 이런 모습입니다. 화면 앞에서 손에 땀을 쥐는 게 아니라, 다른 일을 하다가 저녁에 결과를 확인하는 겁니다. 애초에 그러려고 자동화한 거고요.

그날 무슨 일이 있었나

종목 보유 기간 손익
SK하이닉스 12일 −301,000원 (−12.96%)
삼성전자 5일 −259,000원 (−14.08%)
삼성화재 4일 −136,000원 (−8.80%)
롯데쇼핑 당일 −27,000원 (봇 오류로 인한 손절)
합계 약 −722,000원

시장 전체가 밀린 날이었습니다. 네 종목 중 셋은 대형주였고, 보유 기간도 4일에서 12일로 제각각이었어요. 서로 상관없는 종목들이 같은 날 동시에 손절선을 건드렸다는 건, 개별 종목의 문제가 아니라 시장 전체가 내려갔다는 뜻입니다.

여기서 자동매매의 성질이 하나 드러납니다. 봇은 여러 종목을 동시에 들고 있습니다. 사람이 손으로 매매하면 종목 수가 자연히 제한되는데, 봇은 조건에 맞는 대로 계속 담습니다. 평소엔 그게 분산처럼 보이지만, 시장이 한 방향으로 밀리는 날에는 분산이 아니라 증폭이 됩니다. 넷이 같이 깨지니까요.

이건 종목을 몇 개 나눠 담았느냐의 문제가 아닙니다. 서로 다른 이유로 산 종목들이 결국 같은 이유로 떨어지느냐의 문제죠. 제 봇은 종목마다 각각의 조건을 보고 들어갔지만, 그 조건들이 결국 “최근 시장이 좋다”는 하나의 전제를 공유하고 있었습니다. 전제가 깨지면 넷이 같이 무너집니다. 평소에는 이게 안 보입니다. 나쁜 날에만 드러나요.

손실 한도는 손실을 막아주지 않습니다

저는 봇을 만들 때 하루 손실 한도 −30만 원을 걸어뒀습니다. 그날 손실이 그 선을 넘자 봇은 자동으로 멈췄습니다. 알림도 정확히 왔고요. 장치는 설계대로 작동했습니다.

그런데 최종 손실은 −72만 원이었습니다. 한도가 −30만 원인데 왜 72만 원을 잃었을까요? 여기서 많은 사람이 오해하는 지점이 나옵니다.

⚠️ 주의 일일 손실 한도가 막는 것은 새로 들어가는 것이지, 이미 들고 있는 종목의 손실이 아닙니다. 한도에 걸린 시점에 보유 중이던 포지션들은 각자의 손절선까지 그대로 갑니다.

즉 이 장치는 “오늘은 여기서 그만”이라고 말해주는 것이지, “오늘 손실은 30만 원까지”를 보장하는 게 아닙니다. 이건 사람이 하는 매매에서도 똑같습니다. “오늘 30만 원 잃으면 접는다”고 정해놔도, 이미 들고 있는 종목이 장 마감까지 더 빠지는 건 막을 수 없어요.

그래도 이 장치가 없었다면 어땠을지는 분명합니다. 시장이 계속 밀리는 중이었으니 봇은 조건에 맞는 종목을 계속 새로 담았을 겁니다. 떨어지는 시장에서 계속 사들이는 거죠. 손실을 −72만 원에서 끊어준 게 아니라, −72만 원에서 더 커지는 걸 막아준 겁니다. 그게 이 장치의 정확한 역할이었습니다.

그런데 저 넷 중 하나는 시장 탓이 아니었습니다

−27,000원의 정체

표 맨 아랫줄, 롯데쇼핑입니다. 이건 시장이 만든 손실이 아니었습니다. 제 봇이 만든 손실이었어요.

그날 잔고 조회 API에 요청이 몰려서 응답이 4초 만에 시간 초과가 났습니다. 그러자 봇이 현재가를 못 받고 ‘진입 시도가’를 대신 가져다 썼습니다. 실제로 체결된 가격이 아니라, 주문을 낼 때 계산했던 가격이요.

왜 하필 그날이었냐면, 변동성이 큰 날에는 조회 요청 자체가 몰리기 때문입니다. 시장이 흔들리면 모든 프로그램이 동시에 가격을 더 자주 확인합니다. 그래서 응답이 느려지고 시간 초과가 납니다. 즉 이 결함은 평온한 날에는 절대 안 나타나고, 하필 제일 나쁜 날에만 나타나는 종류였습니다. 테스트로 잡기 가장 어려운 형태죠.

항목 봇이 알고 있던 것 실제
진입가 173,000원 더 낮은 가격에 체결
손절선 159,160원 잘못 계산된 선
당시 손익 −9.02% −1.68%
봇의 판단 손절선 도달 → 매도 팔 이유가 없었음

봇은 자기가 아는 진입가를 기준으로 손절선을 그었고, 그 선이 애초에 틀어져 있었습니다. 실제로는 −1.68%밖에 안 빠진 종목을 −9.02%로 착각하고 팔아버린 겁니다. 안 팔아도 될 걸 판 거예요.

이걸 알았을 때 기분은 이랬습니다.

“너무 어이가 없었다.”

금액으로는 2만 7천 원입니다. 그날 전체 손실의 4%도 안 돼요. 그런데 성격이 완전히 다릅니다. 나머지 셋은 내 전략이 시장에서 진 것이고, 이건 내 코드가 틀린 것입니다. 앞의 셋은 전략을 다시 볼 문제고, 이건 코드를 고칠 문제예요. 섞어놓으면 둘 다 못 고칩니다.

−722,000원
그날 총 손실
3종목 / −696,000원
시장이 만든 손실
1종목 / −27,000원
봇 오류가 만든 손실

그리고 저는 그날 이렇게 적었습니다

그날 밤 매매일지에 남긴 기록이 이겁니다.

“일일 손실 한도 메시지 제대로 왔고. 우선 그대로 진행. 오늘 시장이 안 좋았어.”

다시 보면 이 한 줄에 문제가 있습니다. “오늘 시장이 안 좋았어”로 네 종목을 전부 덮어버렸습니다. 그중 하나는 시장과 아무 상관이 없었는데도요.

공교롭게도 저는 그 2주 전에 정반대 경험을 했습니다. 봇이 상한가에서 조용히 매도를 건너뛰는 버그 때문에 +57%가 났던 일이요. 그때는 숫자가 이상해서 바로 알아챘습니다. “내가 계산한 것과 안 맞는다”고 느꼈으니까요.

그런데 손실 쪽에서는 똑같이 못 알아챘습니다. 이유는 간단합니다. 손실에는 이미 그럴듯한 설명이 있었거든요. 시장이 안 좋았으니까요. 이익이 났을 때는 “왜 이렇게 많이 벌었지”가 의심스러운데, 손실이 났을 때는 “장이 안 좋았지”로 정리가 됩니다. 그래서 버그가 숨습니다.

📈 5월 — 이익 쪽 버그
+57%. 설계값과 안 맞아서 바로 발견했습니다
📉 6월 — 손실 쪽 버그
−2.7만. ‘시장이 안 좋았다’로 덮일 뻔했습니다
🔍 차이
이익은 의심받고, 손실은 설명이 붙습니다

결국 나중에 로그를 뜯어보고서야 롯데쇼핑 건을 찾아냈습니다. 그리고 100건 카운트에는 봇이 기록한 −9.02%가 아니라 실제 값으로 정정해서 넣었습니다. 잘못된 손실을 성적표에 그대로 남기면, 전략이 실제보다 나빠 보이니까요. 이익을 부풀리지 않는 것과 같은 이유입니다.

제가 규율을 지켰다고 말하기는 어렵습니다

이 대목을 예전 글에서는 이렇게 썼습니다. “룰을 깨고 물타기를 하고 싶어지지만 나는 그러지 않았다.” 멋있게 들리지만 정확하지 않습니다.

봇이 멈췄을 때 풀고 싶은 마음이 들었냐고 스스로에게 물어보면, 답은 이랬습니다.

“시뮬레이션이고 모의 거래 중이어서 딱히 그러고 싶진 않았다.”

진짜 돈이 아니었습니다. 그러니 참은 게 아니라 참을 일이 없었던 것에 가깝습니다. 이걸 규율이라고 부르면 스스로를 속이는 겁니다.

모의계좌의 한계가 여기 있습니다. 전략이 되는지, 코드가 제대로 도는지는 확인할 수 있습니다. 실제로 그날 손실 한도 장치가 작동한다는 건 확인했고, 롯데쇼핑 버그도 그래서 찾았습니다. 그건 진짜 소득이에요.

모의로 하는 매매는 손실이 숫자로만 남습니다. 화면에 −72만 원이 찍혀도 통장에서 나간 게 없으니 몸이 반응하지 않아요. 그런데 실제 계좌에서 같은 숫자를 보면 사람은 다르게 행동한다는 게 잘 알려져 있습니다. 손실을 확정하기 싫어서 손절을 미루거나, 빨리 만회하려고 평소보다 크게 베팅하거나요.

하지만 내가 그 상황에서 버튼을 안 누를 사람인지는 확인이 안 됩니다. 그건 진짜 돈이 걸려야 검증되는 항목이고, 저는 아직 그 시험을 안 봤습니다. 그래서 이 편에서 제가 말할 수 있는 건 “규율을 지켰다”가 아니라 “아직 시험받지 않았다”입니다.

덧붙이면

참고로 그 다음 날, 시장이 반등하면서 비슷한 금액이 회수됐습니다. 하루 만에요. 당시엔 그게 꽤 극적으로 느껴졌는데, 지금 보면 그것도 대부분 시장이 한 일입니다. 이틀 사이에 제 전략이 나빠졌다가 좋아진 게 아니거든요.

내려간 날은 시장 탓이고 올라간 날은 내 실력이라고 생각하기 쉽습니다. 반대도 마찬가지고요. 그날 하루로는 어느 쪽도 알 수 없습니다. 판단하려면 결국 건수가 쌓여야 하는데, 그래서 저는 100건을 채우기 전까지는 성적을 보고 결론 내지 않기로 정해뒀습니다.

남은 것

  • ✓손실 한도는 새 진입을 막는 장치다 — 그날 손실 총액을 정해주는 게 아니다
  • ✓여러 종목을 동시에 들고 있으면 같은 방향으로 밀리는 날에 증폭된다
  • ✓손실을 볼 때 시장 탓과 내 실수를 분리해서 적는다 — 안 그러면 둘 다 못 고친다
  • ✓모의로 확인되는 것과 실제 돈이 걸려야 확인되는 것을 구분한다

마지막 항목이 제일 오래 남았습니다. 손실이 난 날 무슨 생각이 들었는지를 적어두는 건 봇을 돌리든 안 돌리든 할 수 있는 일입니다. 다만 “시장이 안 좋았다” 한 줄로 끝내면 그 안에 섞여 있던 내 실수는 영영 안 보입니다. 저는 2만 7천 원짜리로 그걸 배웠는데, 실제 계좌였다면 수업료가 더 비쌌을 겁니다.

⏱ 3줄 요약
  • 네 종목 동시 손절로 하루 −72만 원. 알림은 왔지만 일하는 중이라 보지 못했습니다
  • 일일 손실 한도(−30만)는 새 진입만 막습니다 — 보유 종목 손실은 그대로 갑니다
  • 손실 넷 중 하나(−2.7만)는 시장이 아니라 봇의 진입가 오류였습니다
  • 그런데 저는 일지에 ‘오늘 시장이 안 좋았어’라고만 적었습니다 — 손실 쪽 버그는 이렇게 숨습니다

모의투자 계좌는 각 증권사에서 신청할 수 있고, 투자 관련 소비자 정보는 금융감독원에서 확인할 수 있습니다.

관련 글: 봇이 상한가에서 못 팔아 +57%가 났습니다 · 모의투자는 잘 됐는데 실전은 왜 깨질까 · 감시를 맡겼더니 “이상 없음”이라고 했다

이 글은 개인의 실제 운영 기록을 정리한 것으로, 특정 종목·전략의 투자를 권유하지 않습니다. 본문의 거래는 모의계좌 기준이며, 언급된 종목은 사례일 뿐 매수·매도를 권유하지 않습니다. 모든 투자에는 원금 손실 위험이 있고 최종 판단과 책임은 본인에게 있습니다.

댓글 달기

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

위로 스크롤