Trading

[개발 일지] AI 트레이딩 봇 고도화: 버그 수정부터 자본금 자동화까지

동네룰 2026. 1. 8. 01:07
728x90
반응형

선택아닌 필수!! 비트코인 거래수수료 40%할인!!

 

Referral Program|Bybit

 

www.bybit.com

 

 

안녕하세요! 👋

오늘은 제가 개발 중인 AI 암호화폐 트레이딩 봇의 문제를 해결하고 기능을 한 단계 업그레이드했던 과정을 공유해 보려 합니다.

스크립트가 실행되지 않는 작은 구문 오류로 시작해서, 데이터 정합성을 맞추고 자본금 입력을 자동화하기까지... 결국 봇을 더 똑똑하게 만든 알찬 하루였습니다. 트레이딩 봇을 개발하시는 분들께 제 시행착오가 도움이 되길 바랍니다.

 

1. 첫 번째 관문: 미스터리한 구문 오류 (SyntaxError)

오늘 아침, 봇을 실행하자마자 SyntaxError: unterminated string literal라는 낯선 오류가 저를 반겼습니다.

처음에는 단순한 오타인 줄 알았지만, 파일을 열어보니 코드가 비정상적으로 중간에 끊겨 있었습니다. 아마도 파일을 저장하거나 복사하는 과정에서 파일 손상이 있었던 것 같습니다.

메인 실행 루프(if __name__ == "__main__":) 뒷부분이 통째로 날아간 상태라, 누락된 로직을 복구하고 실행 구문을 다시 넣어주니 봇이 드디어 첫 숨을 내쉬었습니다. 😮‍💨

 

2. 데이터의 딜레마: API가 응답하지 않을 때

봇은 켜졌지만, 이번엔 "시장 데이터를 가져올 수 없습니다"라는 경고 메시지를 뿜어냈습니다.

market_data.py 스크립트를 디버깅해 본 결과, 원인은 아주 사소한 곳에 있었습니다. Bybit API에 캔들(K-line) 데이터를 요청할 때 파라미터 형식이 문제였죠.

  • ❌ 기존 코드: interval='15m' (15분봉을 의미한다고 생각함)
  • ✅ 수정 코드: interval='15'

API 문서를 다시 확인해보니 Bybit는 '15'라는 숫자 형식의 문자열을 기대하고 있었습니다. 'm'이라는 글자 하나를 지우자마자 거짓말처럼 데이터를 콸콸 받아오기 시작했습니다. "API 문서는 꼼꼼히 읽자"는 교훈을 뼈저리게 얻었습니다.

 

3. 디테일의 중요성: 뒤섞인 P&L 리포트 바로잡기

거래가 시작되고 P&L(손익) 리포트가 생성되었는데, 뭔가 이상했습니다. BTCUSDT 리포트에 ETHUSDT 거래 내역이 섞여 있는 것이었습니다.

원인은 리포트 생성 함수 generate_daily_pnl_report에 있었습니다. Bybit에 P&L 내역을 요청할 때 symbol을 지정하지 않아서 계정의 모든 거래 내역을 몽땅 가져오고 있었던 거죠.

Before (수정 전):

session.get_closed_pnl(category="linear", limit=1000)

After (수정 후):

# symbol 파라미터를 명시하여 해당 코인의 내역만 조회
session.get_closed_pnl(category="linear", symbol=symbol, limit=1000)

이 한 줄의 수정으로 데이터 무결성을 확보하고, 각 코인별 봇의 성능을 정확하게 측정할 수 있게 되었습니다.

 

4. 완전 자동화를 향해: 더 이상 수동 입력은 없다 🤖

기존에는 봇을 켤 때마다 수익률 계산을 위해 초기 자본금을 수동으로 입력해야 했습니다. 매번 잔고를 확인하고 타이핑하는 게 여간 귀찮은 일이 아니었죠.

이 과정을 자동화하기 위해 다음과 같이 로직을 변경했습니다.

  1. 현재 계정 잔고를 조회하는 check_balance.py 모듈 생성
  2. 메인 봇(ai_agent.py) 시작 시 자동으로 잔고 조회 모듈 호출
  3. 조회된 USDT 잔고를 초기 자본금 변수에 할당

이제 봇을 실행하기만 하면 자본금 체크부터 트레이딩, 리포트 생성까지 모든 과정이 사람의 손길 없이 자동으로 이루어집니다. (편안함 +1 상승! 📈)

 

5. 깨끗하게, 맑게: 리포지토리 정리

마지막으로 오늘의 변경 사항을 커밋하기 전, 프로젝트 폴더를 깔끔하게 정리했습니다.

  • 사용하지 않는 레거시 파일 삭제
  • 불필요한 로그 파일(*.txt)이 깃(Git)에 올라가지 않도록 .gitignore 업데이트

이 과정에서 .gitignore 파일의 인코딩 문제로 파일이 무시되지 않는 해프닝도 있었지만, 인코딩을 UTF-8로 변환하여 깔끔하게 해결했습니다.

 

마치며

단순한 오류 수정으로 시작했지만, 결국 데이터 처리 방식 개선, 핵심 기능 자동화, 코드 안정성 확보까지 이뤄낸 의미 있는 하루였습니다.

오늘의 경험을 통해 "소프트웨어 개발은 끊임없는 디버깅과 개선의 연속"이라는 것을 다시 한번 느낍니다. 이제 더 똑똑하고 강력해진 봇이 앞으로 어떤 수익률을 보여줄지 기대되네요!

다음에는 또 어떤 새로운 기능과 트러블 슈팅 경험을 가지고 돌아올지 지켜봐 주세요. 감사합니다!

 

선택아닌 필수!! 비트코인 거래수수료 40%할인!!

 

Referral Program|Bybit

 

www.bybit.com

728x90
반응형