공정 엔지니어의 AI 엔지니어로의 성장 기록

비전공자의 바이브 코딩/일상 & 기초

클로드코드(Claude Code)로 코인 자동매매 프로그램 만들기 : #3. 편의 기능 및 1차 완성

ai-process-engineer 2026. 5. 16. 15:54
코인 자동매매 시스템 개발기 3편 — 매매 손익 분석과 부가 기능 구현

매매 손익 분석과 부가 기능 구현
— FIFO PnL · AI 스캐너 · ML 전략 · 버그 수정

실전 운용을 시작하면 "지금 얼마 벌고 있는가"를 정확히 알아야 한다. 잔고만 보는 것으로는 부족하다. 여러 번 나눠 산 코인의 평균 단가, 부분 매도 시 수익 계산, 수수료 포함 실질 손익을 모두 정확하게 처리해야 한다. 아래에 FIFO 손익 계산 구현부터 AI 스캐너, 머신러닝 전략, 그리고 24시간 자동 운용에서 발생한 실제 버그들을 정리했다.

01 P&L 분석: FIFO 원가 계산

여러 번에 걸쳐 매수한 코인을 일부 매도했을 때 어떤 수량이 팔린 것으로 볼지를 정해야 한다. FIFO(First In, First Out), 즉 먼저 산 것부터 먼저 판다는 원칙을 적용했다.

python — FIFO 손익 계산
# 매수 순서대로 원가 배분
실현 손익 = (매도가 - FIFO 원가) × 수량 - 수수료

# 알고리즘별 분리 계산
> VB(변동성 돌파)와 Grid 매매는 별개로 집계
> 동일 코인이라도 전략별 PnL이 따로 표시됨

전략별로 PnL을 분리한 이유가 있다. 동일 코인에 VB 전략과 그리드 전략을 동시에 적용할 수 있는데, 두 전략의 성과를 뒤섞으면 어떤 전략이 효과적인지 파악할 수 없기 때문이다.

  • 기간별 실현 손익 당일 / 주간 / 월간을 선택해 기간별로 확인할 수 있다.
  • 알고리즘별 손익 분리 VB, 그리드, RSI 등 전략별로 손익이 개별 집계된다.
  • 총 수수료 현황 수수료가 전략 수익성에 미치는 영향을 별도로 추적한다.

02 AI 코인 스캐너

어떤 코인에 어떤 알고리즘을 쓰는 것이 가장 효과적인지 자동으로 찾아주는 기능이다. 수동으로 코인마다 백테스팅을 돌려보는 것은 시간이 너무 많이 걸린다.

거래량 상위 N개 코인 선택
코인 × 알고리즘 병렬 백테스팅
종합 점수 순위 산출
원클릭 자동 적용

백테스팅은 코인 수와 알고리즘 수를 곱한 조합을 병렬로 실행한다. 각 조합의 종합 점수(수익률 40%, 승률 30%, MDD -20%, 샤프비율 10%)를 계산하고, 상위 조합을 원클릭으로 자동매매에 적용할 수 있다.

활용법 — 시장 상황이 바뀌었다고 느껴지면 AI 스캐너를 돌려보는 것이 좋다. 현재 시장에서 어떤 코인에 어떤 전략이 가장 잘 맞는지를 데이터로 확인할 수 있다.

03 ML 앙상블 전략: LightGBM

단일 지표 하나만 보는 알고리즘의 한계를 극복하기 위해 머신러닝을 도입했다. LightGBM 모델이 21개 피처를 종합적으로 학습해 매수 확률을 예측한다.

항목내용
학습 데이터최근 6시간봉 캔들
피처 수21개 (RSI, MACD, 볼린저밴드, ADX, DI+/-, 거래량 추세 등)
레이블변동성 돌파(VB, K=0.5) 발생 후 실제 수익 여부
재학습 주기매일 자동 재학습
활성화 기준AUC ≥ 0.58일 때만 자동 ON
비활성화 기준AUC < 0.52이면 자동 OFF

AUC가 0.5에 가까울수록 모델이 랜덤 수준임을 의미한다. 예측 정확도가 낮은 상태에서 실전에 적용하는 것을 막기 위해 자동 활성화/비활성화 조건을 두었다.

2026년 5월 9일 기준 코인별 ML 학습 결과다.

코인AUC상태
XRP0.897자동 ON
BTC0.839자동 ON
ETH0.571경계값 (주시 필요)

04 실전에서 발견한 버그들

자동매매는 24시간 사람이 지켜보지 않는다. 그래서 예상치 못한 버그가 실제 돈 손실로 이어진다. 세 가지 대표적인 버그를 공유한다.

버그 1: 매매 인터벌 무시

매매 주기를 2시간으로 설정했는데 30초 간격으로 매수가 6번 연속 발생했다. 스케줄러 루프에서 마지막 거래 시각을 체크하는 로직에 결함이 있었다. 코인별 last_trade_time을 세션 상태에 저장하고, 주기를 검증하는 로직을 별도로 강화해 해결했다.

python — 인터벌 검증 로직
# 수정 전: 전역 타임스탬프 하나로 모든 코인 체크
# 수정 후: 코인별 last_trade_time 개별 관리

if now - last_trade_time[coin] < min_interval:
    > skip  # 주기 미달 시 매매 건너뜀

버그 2: 동시 다중 매도

동일 시각에 3건 매도가 동시에 실행됐다. 비동기 루프에서 락(lock) 없이 여러 코인이 동시에 매도 조건을 충족한 것이 원인이었다. 코인별 mutex 락을 적용해 해결했다.

python — 코인별 Mutex 적용
# asyncio.Lock()을 코인별로 생성
trade_locks = {coin: asyncio.Lock() for coin in coins}

async with trade_locks[coin]:
    > await execute_order(coin, ...)  # 락 내에서만 주문 실행

버그 3: 부분 매도 시 PnL 오계산

부분 매도 후 잔여 보유량이 잘못 계산되어 손익이 틀리게 표시됐다. FIFO 계산 시 부분 수량 처리 로직이 누락된 것이 원인이었다. fill 단위로 거래를 병합한 후 FIFO를 재계산하는 로직을 새로 구현했다.

교훈 — 복잡한 비즈니스 로직(FIFO PnL 계산, 인터벌 검증 등)은 Claude에게 요구사항을 매우 구체적으로 전달해야 한다. "부분 매도 처리 포함, fill 단위 병합 후 FIFO 재계산"처럼 처리 순서와 엣지 케이스를 명시해야 올바른 코드가 나온다.

05 최종 화면 구성

3편 시점의 화면 구성이다. 초기 MVP에 비해 기능이 많이 추가됐다.

  • 좌측 패널 (Portfolio) 보유 현금, 코인별 카드(현재가·매수 단가·평가손익·미니 차트), 매매 이력 팝업, 기간별 PnL 패널.
  • 우측 패널 (Control) VB 전략 패널(코인별 설정·현재 신호·포지션 상태), 그리드 전략 패널, 시스템 상태 표시, KPI Bar(전체 수익·승률 요약).

모달 팝업 기준으로는 총 7개가 구현됐다. 코인 선택, 알고리즘 선택(백테스팅 결과 포함), 금액/주기 설정, 기간 설정, 그리드 설정, 그리드 현황(사다리 시각화), 시스템 상태 확인이다.

Summary

FIFO 원가 계산 기반 P&L 분석으로 전략별·코인별 실질 손익을 추적할 수 있게 됐다. AI 코인 스캐너는 백테스팅 종합 점수 기반으로 코인·알고리즘 최적 조합을 자동 추천한다. LightGBM 머신러닝 전략은 21개 피처를 매일 재학습하며 AUC 임계값으로 자동 ON/OFF된다. 실전에서 발견한 인터벌 무시, 동시 다중 매도, FIFO 오계산 버그는 세션 상태 관리와 비동기 mutex로 해결했다. 4편에서는 2개월 실전 데이터를 바탕으로 한 전략별 성과 분석과 총평을 다룬다.

 

손익분석
자동 백테스팅 알고리즘 추천
자동 종목 추천