2021년 3월, 나는 첫 번째 자동매매 봇을 만들었다. Python 300줄짜리 스크립트였다. 바이낸스 API로 RSI가 30 이하면 매수, 70 이상이면 매도하는 단순한 로직이었다. 처음 이틀은 수익이 났다. 셋째 날 잠자는 사이에 비트코인이 8% 폭락했고, 내 봇은 RSI 30에서 매수해서 RSI 15까지 물타기를 하고 있었다. 계좌의 40%가 증발했다.
그게 시작이었다. 거기서부터 진짜 자동매매 봇을 만들기까지 정확히 5년이 걸렸다. 이 글은 그 5년간의 삽질 기록이다. 성공담이 아니라 실패담이다. 왜냐하면 내가 배운 모든 것은 실패에서 왔기 때문이다. 지금부터 연도별로 어떤 삽질을 했고 거기서 뭘 배웠는지 낱낱이 공개한다.
1년차: 지표 하나로 세상을 정복할 수 있다고 믿었던 시절
첫 번째 봇이 박살난 후에도 나는 포기하지 않았다. 문제는 RSI 단일 지표를 쓴 것이라고 생각했고, MACD를 추가하면 될 거라고 확신했다. RSI + MACD 조합으로 두 번째 봇을 만들었다. 결과? 1주일 만에 22% 손실.
그 다음엔 볼린저밴드를 추가했다. 세 번째 봇. 역시 실패. 네 번째, 다섯 번째… 1년차에만 봇을 7개 만들었다. 전부 실전에서 깨졌다. 솔직히 말하자면 백테스트에서는 다 좋았다. 매번 “이번엔 진짜다!”라고 흥분했고, 매번 현실에 처맞았다.
1년차에 날린 돈이 얼마인지 정확히 기억한다. 약 850만원. 당시 월급의 네 달치였다. 아내한테는 “투자 공부하는 중”이라고 말했지만 속으로는 매일 밤 코드를 고치면서 “다음엔 되겠지”를 반복하고 있었다. 지금 생각하면 그때의 나는 전략의 문제가 아니라 전략을 검증하는 방법 자체를 몰랐던 것이다.
1년차의 교훈: 백테스트에서 좋은 전략이 실전에서 좋은 전략인 게 아니다. 슬리피지, 스프레드, 체결 지연, 거래소 서버 다운… 실전에만 존재하는 변수가 너무 많았다. 이걸 “라이브-백테스트 갭”이라고 부르는데, 이 갭을 줄이는 게 1년차 이후의 모든 과제가 되었다.
2~3년차: 과최적화의 늪
지표를 더 추가하면 성과가 좋아진다는 걸 백테스트로 확인하고, 13개 지표 조합까지 갔다. 파라미터를 조금씩 조절하면서 백테스트 수익률을 극대화했더니 과거 데이터에서 수익률 800%가 나왔다. 제가 직접 겪어보니 이때가 제일 위험한 순간이었다.
실전에 넣었더니 첫 달 -15%. 왜? 과거 데이터에 딱 맞게 파라미터를 깎아넣었기 때문이다. 미래의 데이터에는 전혀 적응하지 못하는 봇이었던 것이다. 이걸 과최적화(Overfitting)라고 하는데, 머신러닝에서도 가장 흔한 함정이다.
2년차 중반에는 머신러닝까지 도입했다. LSTM 모델로 가격 예측을 하려고 했는데, 3개월 동안 모델 학습시키고 파인튜닝했더니 과거 데이터에서는 정확도 87%가 나왔다. 실전에서? 52%. 동전 던지기와 다를 바 없었다. 이때 깨달았다. 금융 시장은 정형 데이터 분류 문제가 아니라는 걸. 내일의 가격은 어제까지의 패턴으로 예측할 수 없는 요소들에 의해 결정된다.
깨달음이 왔다. 파라미터 수를 줄이고, 다양한 시장 환경(상승장/하락장/횡보장)에서 모두 적당히 작동하는 “범용성”을 추구해야 한다는 것. 화려한 백테스트 결과를 포기하는 대신 안정성을 택한 것이 2~3년차의 전환점이었다.
이 시기에 Python에서 제대로 된 백테스트 프레임워크를 구축했다. 워크포워드 테스트, 아웃오브샘플 검증, 몬테카를로 시뮬레이션까지 돌리는 시스템을 만들었는데, 이것만으로 6개월이 걸렸다. 남들은 트레이딩하고 있을 때 나는 코드만 짜고 있었다.
4년차: 실행 인프라의 중요성을 깨닫다
전략은 어느 정도 정리가 됐다. 6개 필터를 통과한 시그널만 트레이딩하는 방식으로 승률 51%, 수익 팩터 1.8 정도를 안정적으로 유지할 수 있게 됐다. 그런데 새로운 문제가 터졌다. 봇을 돌리는 서버가 죽는 거다.
AWS EC2에 봇을 올려놨는데, 한 달에 두세 번씩 프로세스가 죽었다. 메모리 누수, 네트워크 타임아웃, 거래소 API 레이트 리밋… 전략보다 인프라 문제가 더 컸다. 봇이 죽어있는 동안 포지션이 열려있으면? 손절도 못 하고 그냥 시장에 방치되는 거다.
실제로 한 번은 봇이 8시간 동안 죽어있는 걸 모르고 있었다. 그 사이에 ETH가 6% 하락했고, 롱 포지션이 열려있던 채로 손절을 못 해서 계좌의 23%를 날렸다. 그날 밤에 PM2, 시스템 모니터링, 텔레그램 알림봇을 전부 세팅했다. 하지만 이런 인프라를 한 번 구축하고 끝이 아니라 계속 유지보수해야 한다는 게 진짜 고통이었다.
이때 아키텍처를 완전히 다시 설계했다. 헬스체크 시스템, 자동 재시작, 에러 알림, 거래소 API 재연결 로직, 그리고 포지션 동기화 메커니즘까지. 순수 전략 코드보다 이런 인프라 코드가 3배 이상 많아졌다. 솔직히 말하자면 이때부터 “이건 개인이 혼자 유지보수할 수 있는 규모가 아니다”라는 생각이 들기 시작했다.
5년차: AutoBot의 탄생
4년간의 삽질 끝에 내린 결론은 명확했다. 첫째, 전략은 TradingView Pine Script로 만들고 백테스트하는 게 가장 효율적이다. 둘째, 실행은 안정적인 webhook 기반 시스템이 답이다. 셋째, 보안은 타협할 수 없다.
이 세 가지 원칙으로 만든 게 AutoBot이다. TradingView에서 전략 시그널을 webhook으로 쏘면, AutoBot이 받아서 바이빗(Bybit)에 자동으로 주문을 넣는다. 내가 5년 동안 겪은 모든 문제를 해결한 시스템이다.
서버 안정성? 다중 서버 이중화로 해결했다. 한 서버가 죽어도 다른 서버가 즉시 대체한다. 4년차에 겪은 8시간 다운 같은 사고가 구조적으로 불가능한 시스템이다. 보안? AES-256 암호화에 출금 권한 없는 API 키만 사용한다. 복잡한 세팅? 코딩 지식 없이 15분이면 세팅이 끝난다. 과최적화? 전략은 유저가 트레이딩뷰에서 직접 검증하고, AutoBot은 순수하게 실행만 담당한다.
5년 전에 이런 서비스가 있었으면 나는 그 시간에 전략 연구에만 집중할 수 있었을 거다. 서버 관리하고, 인프라 코드 짜고, 보안 걱정하느라 보낸 시간이 너무 아깝다. 그래서 AutoBot을 만들었다. 나 같은 삽질을 다른 트레이더들은 안 했으면 해서.
5년이 걸린 진짜 이유
기술적으로만 보면 1~2년이면 충분히 만들 수 있는 시스템이다. 그런데 왜 5년이 걸렸나? 제가 직접 겪어보니 답은 간단했다. 실패를 통해서만 배울 수 있는 것들이 있었기 때문이다.
과최적화의 함정, 실전과 백테스트의 갭, 인프라의 중요성, 보안의 무게감… 이런 건 책에서 읽어도 체감이 안 된다. 직접 돈을 잃어봐야 뼈에 새겨진다. 나는 5년간 총 네 번 계좌를 날렸다. 그때마다 시스템을 갈아엎었고, 결국 지금의 AutoBot이 됐다.
5년간 쓴 총 개발 시간을 계산해보면 약 8,000시간이다. 일반적인 소프트웨어 프로젝트라면 말도 안 되는 시간이지만, 실전에서 돈이 왔다 갔다 하는 시스템이기 때문에 그만큼의 검증과 안정화가 필요했다.
이건 진짜 물건이다. 5년간의 실패가 만든 시스템이다. godstary.com에서 직접 확인해보면 안다. 화려한 마케팅 문구가 아니라, 5년간의 삽질이 녹아있는 개발자의 물건이라는 걸. 850만원의 수업료, 네 번의 계좌 파산, 8,000시간의 코딩. 그 모든 게 AutoBot에 담겨있다.
마지막으로 하나만 더. 자동매매 봇을 직접 만들겠다는 사람들에게 하고 싶은 말이 있다. 포기하라는 게 아니다. 다만 혼자서 전부 하려고 하지 말라는 거다. 전략은 트레이딩뷰에서 Pine Script로 만들고 검증하고, 실행은 검증된 시스템에 맡기는 게 현명하다. 나는 5년을 전부 혼자 했기 때문에 5년이 걸렸다. 당신은 그럴 필요 없다. AutoBot이 있으니까. 세팅 15분, 코딩 지식 불필요, AES-256 보안. 바이빗(Bybit) 계좌만 있으면 오늘 당장 시작할 수 있다.
