본문 바로가기

24만원으로 굴린 비트코인 자동매매 봇, 한 달간 13번 갈아엎은 기록 — 레모니 봇 개발기

 
"한 달 굴려서 +2%. 자랑이 아니라 진짜 배운 게 많아서 글 씁니다."
바이낸스 BTC·ETH 무기한 선물 자동매매 봇을 직접 만들어 24시간 돌리고 있어요. 이름은 레모니 봇(Lemony Bot). 한 달 운용한 결과는 시드의 +2% 수준이에요. 그런데 그 한 달 안에 코드를 13번 갈아엎었어요.
이번 글은 자동매매 봇이 만들어지는 과정, 백테스트와 실전의 간극, 그리고 솔직한 장단점을 정리한 회고예요.
먼저 알려드려요.
이 글은 특정 종목·전략 추천이 아니에요. 개인 학습·운용 기록이고, 자동매매 봇은 원금 손실 가능성이 매우 높은 영역이에요. 무기한 선물은 청산 위험이 있어요. 본인 판단과 책임하에 결정해야 해요.

왜 자동매매 봇을 만들었을까요?

이유는 단순해요. 사람을 빼고 싶었거든요.

새벽 3시에 BTC가 5% 빠지는 걸 보면 손이 떨려요. 진입 못 하고 잠들고, 일어나 보면 5% 반등해 있어요. 반대로 고점에서 FOMO에 휘말려 추격 매수했다가 바로 -3% 맞은 적도 많아요. 결국 문제는 매번 똑같았어요. 판단 자체가 아니라, 판단을 내리는 순간의 감정이었어요.

🖥️ 운용 환경

Mac Mini M4를 24시간 켜놓고 로컬 서버처럼 쓰고 있어요. Python 3.9 환경에서 Binance Futures API를 호출하고, 5분에 한 번씩 멀티 타임프레임(1m·3m·5m·15m·30m)을 분석해서 조건이 맞을 때만 진입해요. 텔레그램으로 진입·청산 알림도 받고요. 클라우드 안 쓰고 그냥 책상 위 작은 박스 하나가 24시간 일하는 구조예요.
💰 운용 규모

자본은 약 180 USDT(한화 약 24만원)으로 시작했어요. 큰돈을 넣지 않은 건 의도된 결정이에요. 실전 데이터를 모으면서 코드를 다듬는 게 목적이라서, 손실이 나도 견딜 수 있는 금액으로 한정한 거예요. 레버리지는 일반 시간 ×20, 미국 변동성 장세 ×10, 무기한 ISOLATED 마진으로 설정했어요.

백테스트는 왜 실전과 다를까요?

처음엔 백테스트부터 시작했어요. Binance 과거 데이터를 받아서 1분봉·5분봉·30분봉으로 만들고, 전략 함수에 통째로 흘려보내는 방식이에요. 이론상 잘 됐어요. 그래서 자신감이 붙었고요.

그런데 실전 투입 첫 주 만에 깨달았어요. 백테스트는 과거의 시험문제만 잘 푸는 모범생이에요. 실전에서 마주치는 변수는 차원이 달랐어요.

📉 백테스트가 잡지 못하는 것들

① 슬리피지 — 백테스트는 종가에 체결됐다 가정하지만, 실전은 호가창 깊이에 따라 0.05~0.2%씩 밀려요.
② 수수료 — Taker 0.05%, 양방향이면 0.1%. 작은 익절(미세익절 +0.3%) 기준에서는 수수료가 수익의 절반을 먹어요.
③ 네트워크 지연 — 신호 발생 → 주문 도달까지 0.3~1초. 변동성 장세에선 1초가 0.5% 차이예요.
④ 휩쏘(whipsaw) — 의도적으로 가짜 신호를 만들어 손절을 유발하는 패턴. 백테스트 데이터엔 "결과"만 남아 보이지 않아요.

이 네 가지가 합쳐지면 백테스트에선 +수익이던 전략이 실전에선 본전 또는 마이너스로 갈 수 있어요. 그래서 결국 결심했어요. 실전 로그가 답이다.

한 달, 13번의 패치 일지

실전에 넣은 뒤로 매일 로그를 읽고, 문제가 발견되면 코드를 패치했어요. 그렇게 P1부터 P13까지, 한 달 동안 13번 갈아엎었어요. 굵직한 것만 추려보면 이렇게 돼요.

버전 변경 내용 이유
P1 TP1 후 본절 이동 익절 후 다시 손실 가는 패턴
P2 marginType 중복 호출 제거 API 요청 비효율
P5 상위 TF 추세 필터(15m+1h EMA) 큰 흐름 역행 진입 방지
P7 +5% 익절로스 + 동적 트레일링 큰 수익 보존
P11 RSI 분할·시장구조·스나이퍼·동적 레버리지 6대 고도화 진입 빈도 부족
P12 ETH 멀티 심볼 확장 BTC 단일은 신호 부족
P13 시간 손절 폐기 + 칼손절&재진입 휩쏘 회복 기회 박탈 문제

가장 뼈아팠던 발견은 마지막 P13에서 나왔어요. 46시간 로그를 분석해보니, "진입 5분 안에 본전 못 가면 강제 청산"이라는 룰이 발동된 게 17번이었어요. 그중 대부분은 청산된 직후 가격이 다시 진입가로 돌아왔어요. 회복 기회를 시간이 박탈하고 있었던 거예요.

가장 큰 누수, 그리고 P13의 해결

새벽에 거래 기록을 한 줄씩 따라 읽다가, 어느 순간 손이 멈췄어요.

봇이 같은 실수를 17번 반복하고 있었거든요. 진입해서 5분을 기다리다가 "아직 본전이 아니네" 하고 잘라버려요. 그런데 그 직후, 몇 초 만에 가격이 진입가로 다시 올라와요. 한두 번이면 운이 없다 하겠는데, 17번 중 대부분이 그랬어요. 자려고 누웠다가 다시 노트북을 켜고, 같은 패턴이 또 나오는 걸 보면서 마음이 무거워졌어요.

사람으로 치면 이런 거예요. 면접장에 들어가서 첫 5분 동안 분위기가 어색했다는 이유로 자리를 박차고 나오는 거죠. 정작 6분째에 분위기가 풀리는데 말이에요. "시간이 다 됐으니까 손절"이라는 규칙이, 회복할 기회를 통째로 빼앗고 있었던 거예요.

그날 결심한 게 두 가지였어요.

🕒 첫째, "시간이 됐으니 끝"이라는 판단을 없앴어요.

시간은 손절의 이유가 될 수 없어요. 진짜 손절의 기준은 가격이어야 해요. 5분이 지났든 7분이 지났든, 가격이 견딜 만하면 기다리는 게 맞아요. 봇에게서 손목시계를 빼앗고, 대신 가격표만 보게 만든 셈이에요.
✂ 둘째, 잘라낸 자리를 그냥 잊어버리지 않게 했어요.

손절을 했어도 가격이 다시 원래 자리로 돌아오면, 봇은 그 자리를 기억하고 있다가 다시 들어가요. "아까 미안, 다시 한 번 가보자"의 자동화예요. 그리고 이번엔 더 빨리 익절을 챙겨요. 한 번 잘못 잘랐던 자리에 미련을 두지 말고, 회복하면 다시 시도하라는 원칙이에요.

여기에 한 가지 예외를 뒀어요. 여러 번 나눠 들어가는 중인 포지션은 손해가 좀 나도 자르지 않아요.

나눠 매수하는 전략은 "지금 좀 물려도, 평균 가격을 낮춰서 회복을 노린다"는 구조거든요. 그런데 첫 번째만 들어가고 두 번째도 채우기 전에 잘라버리면, 회복할 기회 자체가 사라져요. 마치 약속한 친구가 도착하기도 전에 자리를 떠버리는 거랑 같아요. 거래 기록을 일일이 읽으며 이 패턴을 직접 본 뒤에야 알아챈 예외예요.

정리하면 P13의 메시지는 단순해요. "시간을 보지 말고, 가격을 봐라. 그리고 한 번 틀렸어도 회복하면 다시 시도해라." 사람이 트레이딩에서 가장 못하는 두 가지 — 조급함과 미련 — 을 봇이 대신 풀어준다는 약속이에요.

솔직히 말하면, 아직 결과는 몰라요.
P13을 적용한 직후에 이 글을 쓰고 있어서요. 1주일쯤 데이터가 쌓이면, "다시 들어간 자리에서 진짜로 익절을 챙겼는지", "잘라낸 자리가 정말 회복됐는지" 숫자로 확인할 수 있어요. 봇을 만드는 일은 한 번 고치고 끝나는 게 아니라, 고치고 → 견뎌보고 → 다시 읽고 → 또 고치는 사이클의 반복이에요. 결과는 다음 글에서 정리할게요.

한 달 굴려보고 솔직하게 — 장점과 단점

이제 솔직하게 정리해볼게요. 봇이 만능이 아니에요. 사람보다 잘하는 영역, 사람이 여전히 더 잘하는 영역이 분명히 갈리거든요.

구분 내용
👍 장점 1 감정 0, 24시간 기계적 실행 — 새벽이든 출근길이든 조건만 맞으면 진입. 잠자다 놓치는 신호가 없어요.
👍 장점 2 일일 손실 한도 자동 차단 — 자본의 -15% 도달 시 그 날 매매 전면 중단. 사람은 "한 번만 더" 하다 망하는데 코드는 약속을 지켜요.
👍 장점 3 다단 안전장치 — 본절컷·타임아웃·미세익절·익절로스·런스탑·하드 SL 부분 청산이 동시에 돌아요. 한 곳이 뚫려도 다음 장치가 잡아요.
👍 장점 4 가설을 데이터로 검증 — 로그가 쌓이니까 직감 대신 숫자로 의사결정해요. "이 진입이 진짜 통계적으로 의미 있나?" 물어볼 수 있어요.
👎 단점 1 휩쏘 장세에 약함 — 가짜 신호로 흔드는 시장에서 잦은 손절을 맞아요. 사람이라면 "느낌상 이상한데"하고 안 들어갈 자리도 봇은 들어가요.
👎 단점 2 작은 익절 vs 큰 손실 비대칭 — 미세익절은 +0.3%인데 한 번 크게 물리면 -1% 손절. 비대칭이 누적되면 천천히 까여요.
👎 단점 3 백테스트와 실전 갭 — 슬리피지·수수료·체결 지연은 실전 데이터 쌓기 전엔 추정만 가능해요. 첫 한 달은 "데이터 수집 기간"이라 생각해야 해요.
👎 단점 4 거래소·네트워크 의존 — Binance API 장애, 인터넷 끊김, Mac Mini 다운 시 봇이 무력해요. 청산 위험을 코드로 100% 막을 순 없어요.

한 달 운용 결과는 +4 USDT, 시드의 +2% 수준이에요. 큰 수익이 아니에요. 그런데 더 중요한 건, 실전 데이터 한 달치가 쌓였다는 것이에요. 이 데이터가 P14, P15를 가능하게 해줘요.

솔직히 말하면 처음엔 "코드 잘 짜면 알아서 굴러가겠지" 싶었어요. 그런데 진짜는 그게 아니에요. 매일 로그를 읽고, 매일 패치하는 게 자동매매예요. "자동"이라는 단어에 속았던 거죠.

💡 자동매매 봇이 작동하는 데이터 통신 규격이 궁금하다면?

거래소 API와 봇 사이의 모든 대화는 JSON으로 오가요. 자동화 파이프라인을 직접 만들고 싶다면 API·JSON 개념부터 잡는 게 빨라요.

👉 API 및 JSON 데이터 포맷 기초: 시스템 자동화의 핵심

💡 자연어로 코드를 만드는 시대, 자동매매 봇 개발도 더 쉬워졌어요

레모니 봇 코드의 상당 부분은 Claude Code와 함께 작성했어요. 비전공자도 봇을 만들 수 있는 배경에는 소프트웨어 3.0 패러다임이 있어요.

👉 소프트웨어 3.0이란? 자연어가 코딩이 되는 시대

트레이딩 봇은 만들고 끝나는 게 아니에요. 매일 로그를 읽고, 매일 패치해야 해요. 자동매매라는 단어가 주는 인상에 속지 마세요. "자동으로 돈 버는 기계"가 아니라 "사람보다 덜 흔들리는 도구"라고 생각하는 게 맞아요.

P13 결과가 1주일쯤 쌓이면 다시 정리해서 올릴게요. 그때는 재진입 익절률이 진짜로 의미가 있는지, 휩쏘가 정말 줄어드는지 숫자로 확인할 수 있을 거예요.

반응형
투자지표 대시보드 RSS 구독