트레이딩봇 v4 LIVE 1주차 리포트

3월 14일, 트레이딩봇 v4가 PAPER에서 LIVE 모드로 전환되었다. 시뮬레이션에서는 수천 번 돌려봤지만, 실제 돈이 걸린 첫 주는 전혀 다른 경험이었다.

결론부터 말하면 — 숏 포지션 +4.47% 익절 성공, 하지만 과정은 순탄치 않았다. 이 글에서는 LIVE 첫 주의 모든 것을 투명하게 기록한다.

v4 전략 요약

v4 “듀얼 익절” 전략의 핵심을 간단히 정리하면:

항목 내용
코인 BTC 단일
구조 업비트 현물 롱 + 바이빗 1x 숏 동시 진입
DCA Phase 1(탐색) → Phase 2(집중) 2단계
익절 지정가(높은 목표) + 크론(안전망) 이중 구조
감성 4시간마다 뉴스 분석 → 포지션 비중 조절
원금 총 300만원 (각 거래소 150만)

올라도 내려도 한쪽은 수익. 수익 쪽 먼저 익절하고, 손실 쪽은 DCA로 평단 회복. 이것이 v4의 철학이다.

LIVE 전환 — D-Day (3/14)

전환 직전 스냅샷

LIVE 전환 시점의 거래소 잔고:

거래소 잔고 포지션
업비트 KRW 잔고 확보 완료 없음 (PAPER 잔여분 정리 완료)
바이빗 USDT 잔고 확보 완료 없음

깨끗한 상태에서 시작. 모드 전환 시 반드시 기존 포지션을 정리해야 한다는 교훈을 PAPER 기간에 이미 배웠다.

첫 진입 (3/14 21시 크론)

21시 크론 실행 → 롱+숏 동시 진입… 했어야 했는데, 문제가 터졌다.

버그 #1 — Bybit step_size 위반

LIVE 첫 실행에서 숏 진입이 실패했다.

Bybit Error: Qty invalid (step_size violation)

원인: 바이빗은 BTC 주문 수량을 0.001 단위로만 받는다. Python의 round(qty, 5) 함수가 0.00105처럼 5자리까지 반올림한 값을 보내면서 거부당한 것.

수정: round()math.floor(qty * 1000) / 1000으로 변경. 항상 0.001 단위로 내림 처리한다.

# Before (실패)
qty = round(amount / price, 5)  # 0.00105 → 거부

# After (성공)
qty = math.floor(amount / price * 1000) / 1000  # 0.001 → 통과

시뮬레이션에서는 수량 정밀도를 검증하지 않았기 때문에 LIVE에서만 발견되는 버그였다.

차트 분석

버그 #2 — 바이빗 최소 주문금액

step_size를 고치니 다음 문제가 나타났다. 최소 주문 수량 0.001 BTC(당시 약 10.5만원)인데, DCA 1회 금액이 2만원으로 설정되어 있었다.

0.001 BTC를 사려면 최소 10.5만원이 필요한데, 2만원짜리 주문을 넣으니 수량이 0.00019가 되고, 내림하면 0.000 → 주문 불가.

조치: Phase 1 DCA 금액을 전면 변경.

변경 전 변경 후
2만원 × 15회 = 30만 11만원 × 3회 = 33만

3만원 증가지만, 양쪽 거래소 모두 최소주문을 충족하게 되었다. 라운드 #1도 초기화하고 다시 시작.

버그 #3 — 익절 지정가 미등록

진입은 성공했는데, 익절 주문이 거래소에 등록되지 않았다. 크론이 4시간마다 돌면서 가격만 체크하는 방식이었는데, 지정가 주문 등록 실패 시 재시도 로직이 없었다.

수정: 매 크론 실행마다 거래소에 TP(Take Profit) 주문이 있는지 확인하고, 없으면 자동 재등록하는 로직 추가.

# 매 실행마다 TP 주문 존재 여부 확인
if not has_tp_order(exchange):
    place_tp_limit_order(exchange, position)
    # 실제 거래소 잔고 기준으로 수량 결정

실전 결과 — 숏 익절 +4.47%

버그를 모두 수정한 후, 봇은 정상 작동하기 시작했다.

타임라인

날짜 이벤트 상세
3/14 16시 롱+숏 P1 #1 진입 양쪽 11만원씩
3/16 20시 롱 P1 #3 완료 Phase 1 종료 (33만 투입)
3/18 12시 숏 P1 #2 진입 감성 BEARISH 전환
3/19~ 숏 트레일링 활성화 가격 하락 시작
3/20 숏 익절 +4.47% 🎉 트레일링 스탑 작동
3/20 롱 Phase 2 #1 진입 손실쪽 DCA 시작

현재 포지션 상태 (3/21 기준)

포지션 상태 투자금 수익률
익절 완료 22만 +4.47%
🔄 Phase 2 DCA #1 약 65만 진행 중

숏이 먼저 익절되면서, 롱은 Phase 2로 전환되어 DCA 물타기 중이다. v4 전략이 설계대로 작동하고 있다.

비트코인 투자

감성 분석 변동

7일간 감성 분석 히스토리:

기간 감성 스코어 범위
3/14~17 STRONG_BULLISH → BULLISH +0.52 → +0.05
3/18~19 BEARISH -0.28 ~ -0.32
3/19 저녁~ BULLISH 복귀 +0.42
3/20~ NEUTRAL -0.18 ~ +0.18

감성이 BULLISH → BEARISH → NEUTRAL로 한 바퀴 돈 셈이다. 숏 익절은 BEARISH 구간에서 가격이 내려갈 때 트레일링이 작동하면서 이루어졌다. 감성 분석이 타이밍에 실질적 영향을 준 첫 사례다.

1주차 교훈 — 시뮬레이션으로는 못 배우는 것들

1. 거래소 API는 시뮬레이터보다 까다롭다

step_size, 최소주문금액, 호가 단위… 시뮬레이터에서는 신경 쓰지 않는 제약들이 LIVE에서는 주문 실패로 이어진다. LIVE 전환 전에 거래소 API 제약사항을 전수 점검해야 한다.

2. 실패 → 재시도 로직은 필수

네트워크 지연, API 일시 에러 등으로 주문이 실패할 수 있다. “성공을 가정”하지 말고, 매 실행마다 상태를 확인하고 누락분을 복구하는 방어적 프로그래밍이 필요하다.

3. 최소주문 단위가 전략을 바꿀 수 있다

바이빗 최소 0.001 BTC ≈ 10.5만원. 소액 분할매수 전략이 최소주문 제약에 부딪히면 DCA 설계 자체를 변경해야 한다. 전략 설계 단계에서 거래소 제약을 반영해야 한다.

4. 라운드 초기화를 잊으면 안 된다

PAPER → LIVE 전환 시 기존 상태가 남아있으면 봇이 혼란에 빠진다. 모드 전환 = 라운드 초기화 + 거래소 포지션 확인 + 잔여분 정리를 체크리스트로 관리한다.

다음 주 전망

롱 Phase 2가 진행 중이다. 현재 DCA 1회차이며, 최대 4회까지 가능하다. BTC 가격이 현재 수준에서 크게 벗어나지 않는다면, 평단 회복 후 익절을 기대할 수 있다.

감성은 현재 NEUTRAL. 큰 방향성 없이 횡보하는 구간에서는 v4의 양방향 구조가 강점을 발휘한다.

마무리

LIVE 첫 주는 “실전은 다르다”를 온몸으로 체감한 시간이었다. 3000회 시뮬레이션에서 한 번도 안 터진 버그가 LIVE 첫날 3개나 터졌다.

그래도 결과는 긍정적이다. 숏 +4.47% 익절은 v4 전략의 첫 실전 검증이다. “올라도 내려도 한쪽은 수익”이라는 설계 철학이 작동함을 확인했다.

다음 리포트에서는 롱 Phase 2의 결과와, 라운드 #1의 최종 성적을 공유할 예정이다.

📌 이 시리즈는 실제 자금으로 운영 중인 트레이딩봇의 투명한 기록입니다. 수익이든 손실이든 있는 그대로 공개합니다. 투자 조언이 아니며, 모든 투자의 책임은 본인에게 있습니다.


관련 포스트

참고 자료