코인 자동매매 봇, 진짜 수익 날까? 직접 돌려본 결과와 현실
"코인 자동매매 봇 수익"으로 검색하면 두 종류의 글만 나옵니다. 한쪽은 월 몇 퍼센트를 벌었다는 자랑이고, 다른 쪽은 다 사기라는 냉소입니다. 둘 다 별로 도움이 안 됩니다.
이 글은 봇을 직접 만들어 돌려본 입장에서, 수익을 약속하지 않고 실제로 어땠는지를 적은 것입니다. 결론부터 말하면 "돈은 잘 모르겠고, 배운 건 확실히 많았다"입니다.
백테스트에서는 다 잘 됩니다
처음 만든 건 그리드 봇이었습니다. 가격을 일정 간격으로 나눠 놓고 내려가면 사고 올라가면 파는, 가장 단순한 구조입니다. 과거 데이터로 돌려보니 결과가 좋았습니다. 그럴 수밖에 없습니다. 백테스트는 미래를 모르는 척하기가 생각보다 어렵기 때문입니다.
처음 만든 백테스트 코드에는 이런 문제가 있었습니다.
- 주문이 항상 원하는 가격에 체결된다고 가정했습니다. 실제로는 호가창이 얇으면 원하는 가격에 안 붙습니다.
- 수수료를 대충 넣거나 빼먹었습니다. 거래 횟수가 많은 전략에서 이건 치명적입니다.
- 가장 부끄러운 건, 이미 잘 올랐던 종목을 골라 테스트했다는 겁니다. 결과를 알고 나서 고른 종목으로 검증하면 뭘 해도 좋아 보입니다.
# 처음 짠 백테스트 — 이렇게 하면 안 된다
if price <= grid_buy_price:
position += size # 원하는 가격에 그냥 체결됐다고 가정
cash -= grid_buy_price * size
# 고친 버전 — 수수료와 슬리피지를 반영
if price <= grid_buy_price:
fill = grid_buy_price * (1 + SLIPPAGE) # 실제론 조금 비싸게 산다
cost = fill * size * (1 + FEE_RATE) # 수수료도 뗀다
position += size
cash -= cost
수수료와 슬리피지를 넣고 다시 돌리자 수익 곡선이 눈에 띄게 주저앉았습니다. 거래 횟수가 많은 전략일수록 낙폭이 컸습니다. 이 시점에서 알게 된 게 하나 있습니다. 자동매매의 최대 적은 시장이 아니라 거래 비용이라는 것.
실전에서 처음 만난 것들
소액으로 실전에 붙였습니다. 첫 주에 마주친 건 전략 문제가 아니었습니다.
- 최소 주문 금액: 그리드 간격을 촘촘히 잡았더니 주문 금액이 거래소 최소 기준에 못 미쳐 계속 거부됐습니다.
- API 호출 제한: 여러 종목을 짧은 주기로 조회하다가 429를 맞았습니다. 그동안 봇은 아무것도 못 했습니다.
- 재시작 시 상태 유실: 프로세스를 재시작했더니 봇이 자기 포지션을 잊어버렸습니다. 이미 산 물량을 또 샀습니다. 이게 가장 아팠습니다.
- 횡보장에서의 무기력: 그리드 봇은 가격이 오르내려야 수익이 납니다. 가격이 한 방향으로 쭉 가면 계속 물리거나 계속 놓칩니다.
상태 유실 문제는 결국 모든 포지션을 파일에 저장하고 시작할 때 복원하는 식으로 해결했습니다. 단순하지만 이걸 처음부터 넣었어야 했습니다.
import json, os
STATE_FILE = "bot_state.json"
def save_state(positions, stats):
tmp = STATE_FILE + ".tmp"
with open(tmp, "w", encoding="utf-8") as f:
json.dump({"positions": positions, "stats": stats},
f, ensure_ascii=False, indent=2)
os.replace(tmp, STATE_FILE) # 쓰다가 죽어도 기존 파일은 안전
def load_state():
if not os.path.exists(STATE_FILE):
return {}, {}
with open(STATE_FILE, encoding="utf-8") as f:
d = json.load(f)
return d.get("positions", {}), d.get("stats", {})
임시 파일에 쓰고 os.replace로 바꿔치기하는 이유는, 저장 도중에 프로세스가 죽어도 기존 상태 파일이 깨지지 않게 하기 위해서입니다. 이런 사소한 안전장치가 실전에서는 크게 다릅니다.
그래서 수익은 났나
솔직하게 답하면 기간에 따라 달랐고, 전체적으로는 "봇 덕분"이라고 말할 만한 수준이 아니었습니다.
변동성이 큰 횡보 구간에서는 그리드 봇이 잔잔하게 수익을 냈습니다. 반대로 가격이 한 방향으로 계속 내려간 구간에서는 평단가만 낮추며 물량을 계속 받았습니다. 장부상 손실이 커졌고, 결국 그 손실이 그전에 쌓은 소소한 수익을 지웠습니다.
이건 봇의 버그가 아닙니다. 그리드 전략이 원래 그렇게 동작하도록 설계된 것입니다. 문제는 제가 그 특성을 충분히 이해하지 못한 채 돌렸다는 데 있습니다.
그리고 몇 달을 돌려 본 뒤 남은 인상은 이렇습니다.
- 봇은 수익의 원인이 아니라 실행 수단입니다. 근거 없는 전략을 자동화하면 근거 없는 매매를 더 자주 할 뿐입니다.
- 시장 상황이 전략을 압도합니다. 같은 봇이 어떤 달엔 잘 되고 어떤 달엔 안 됩니다. 잘 된 달의 성과를 실력으로 착각하기가 아주 쉽습니다.
- 짧은 기간의 성과는 거의 아무 의미가 없습니다. 2주 수익률로 판단하면 대부분 틀립니다.
그럼에도 얻은 것
돈 이야기를 뺀다면, 봇을 만든 건 확실히 남는 일이었습니다.
- 감정 없는 실행: 규칙이 코드로 박혀 있으니 "이번만"이 없습니다. 사람이 손으로 하면 반드시 무너지는 지점입니다.
- 기록이 남는다: 모든 판단과 결과가 로그로 쌓입니다. 뭐가 잘못됐는지 나중에 확인할 수 있습니다. 손매매로는 절대 안 되는 부분입니다.
- 기술이 남는다: API 인증, 재시도 처리, 상태 관리, 장기 실행 프로세스 운영. 이건 트레이딩과 무관하게 개발자로서 쓸모 있는 경험입니다. 개인적으로는 이게 가장 큰 소득이었습니다.
- 시장을 구조로 보게 된다: 호가창, 체결, 수수료, 슬리피지가 숫자로 손에 잡힙니다. 막연한 "감"이 줄어듭니다.
시작하려는 사람에게
말리지는 않겠습니다. 다만 몇 가지는 꼭 지키시라고 권합니다.
- 목표를 수익이 아니라 완주로 잡으세요. "3개월 동안 안 죽고 도는 봇"이 첫 목표로 적당합니다.
- 잃어도 되는 돈으로만 하세요. 이건 관용구가 아니라 실무적 조언입니다. 금액이 커지면 코드를 냉정하게 못 봅니다.
- 백테스트 결과는 절반으로 깎아서 보세요. 수수료·슬리피지·종목 선택 편향을 다 잡았다고 생각해도 실전은 더 나쁩니다.
- 수익률을 보장하는 봇이나 강의는 피하세요. 진짜로 그런 게 있다면 팔 이유가 없습니다.
자동매매는 돈 버는 기계가 아니라, 자기 판단을 검증 가능한 형태로 바꾸는 도구에 가깝습니다. 그 도구로 뭘 할지는 결국 만든 사람에게 달려 있습니다.
이 글은 개인의 경험을 정리한 교육·정보 목적의 글이며, 투자 권유나 수익 보장이 아닙니다. 암호화폐는 변동성이 매우 크고 자동매매는 원금 전액 손실을 포함한 손실 위험이 있습니다. 과거의 결과가 미래의 성과를 보장하지 않으며, 모든 투자 판단과 책임은 본인에게 있습니다.
댓글
댓글 쓰기