트레이딩봇 v4를 드디어 LIVE로 전환했습니다. PAPER 모드에서 발견한 흥미로운 문제와 해결 과정을 공유합니다.

v4 전략 개요

v4는 업비트 롱 포지션과 바이빗 숏 포지션을 동시에 운영하는 양방향 DCA(Dollar Cost Averaging) 전략입니다.

핵심 구조:

  • 업비트: BTC 현물 매수 (롱)
  • 바이빗: BTC 선물 숏 포지션
  • 뉴스 감성분석: CoinTelegraph, Decrypt, CoinDesk 등 주요 매체 RSS 크롤링 및 감성 분석
  • 동적 익절: 감성 분석 결과에 따라 TP(Take Profit) 퍼센트 조정

5년 백테스트 결과 안정적인 수익률을 보여 실전 투입을 결정했습니다.

감성 역설의 발견

PAPER 모드 운영 중 이상한 패턴을 발견했습니다.

문제 상황 (3/13)

BTC가 108,100,000원까지 상승했습니다. 백테스트에서는 이 지점에서 익절이 되었어야 했는데, PAPER 모드에서는 익절이 발생하지 않았습니다.

원인 분석:

  1. 초기 상태 (진입 시점):
    • 감성 분석 결과: NEUTRAL
    • TP 목표: 기본 값 (백테스팅 최적화 값)
  2. 시장 상승 중:
    • 뉴스 감성이 BULLISH로 상승
    • TP 목표가 자동으로 상향 조정됨
  3. 고점 도달:
    • 감성이 STRONG_BULLISH까지 상승
    • TP 목표가 더 높게 조정됨
    • 결과: 초기 기준으로는 익절 구간이었지만, 상향된 TP 때문에 익절 미발생

역설의 본질

“시장이 좋다고 판단할수록 수익을 놓치는 구조”

  • 감성이 긍정적 → TP 상향 → 익절 지연
  • 실제 시장은 고점에서 반전 → 수익 증발
  • 감성 분석이 오히려 수익 실현을 방해

이것은 설계 의도와 정반대의 결과였습니다.

해결: 감성 역설 방지 로직

핵심 아이디어

“감성 상향 전 기준으로 이미 익절 조건을 달성했다면, 감성 상향을 무시한다”

구현 방식

// 의사 코드 (실제 구현은 생략)
class SentimentParadoxGuard {
  private baseTPReached: boolean = false;
  
  checkTPReached(currentPrice: number, sentiment: Sentiment): boolean {
    const neutralTP = this.calculateTP(Sentiment.NEUTRAL);
    
    // NEUTRAL 기준 TP 도달 여부 체크
    if (currentPrice >= neutralTP && !this.baseTPReached) {
      this.baseTPReached = true;
      console.log('🔒 NEUTRAL 기준 TP 도달 - 감성 상향 무시');
    }
    
    // 이미 기본 TP를 달성했다면, 현재 감성이 높아도 익절
    if (this.baseTPReached) {
      return true;
    }
    
    // 아직 기본 TP 미도달이면, 현재 감성 기준으로 판단
    const currentTP = this.calculateTP(sentiment);
    return currentPrice >= currentTP;
  }
}

동작 예시

시점 가격 감성 TP 목표 기본 TP 도달? 익절 여부
진입 100M NEUTRAL 105M
상승1 103M NEUTRAL 105M
상승2 106M BULLISH 107.5M ✅ 익절
(기존) 106M BULLISH 107.5M - ❌ 대기

차이점:

  • 기존 로직: BULLISH 기준 107.5M까지 대기 → 고점 반전 시 수익 감소
  • 개선 로직: NEUTRAL 기준 105M 도달 시점 기억 → 감성 상승해도 익절

TP 파라미터 조정

감성 역설 방지 로직과 함께 TP 파라미터도 재조정했습니다.

조정 내용 (개념적 설명):

  • 백테스트 기반 최적값에서 일부 구간 하향 조정
  • 과도한 욕심을 제거하고 안정적 수익 확보 우선
  • 세부 수치는 영업 비밀

PAPER → LIVE 전환

전환 결정 이유

  1. ✅ 감성 역설 방지 로직 검증 완료
  2. ✅ TP 파라미터 재최적화 완료
  3. ✅ PAPER 모드에서 안정적 동작 확인
  4. ✅ 백테스트 결과 신뢰성 확보

LIVE 운영 정보

  • 전환 날짜: 2026-03-14
  • 운영 원금: 3,000,000원 (업비트 1,500,000원 + 바이빗 1,500,000원)
  • 현재 상태: 라운드 #2 진행 중
  • 모니터링: 24시간 자동 운영, 텔레그램 알림 연동

교훈

1. 백테스트와 실전의 차이

백테스트는 정적 파라미터를 가정합니다. 하지만 실전에서는 동적 조정 로직이 추가되면서 예상치 못한 부작용이 발생할 수 있습니다.

백테스트 환경:

# 백테스트: 감성이 변해도 과거 시점 기준으로 판단
if price >= initial_tp:
    take_profit()

실전 환경:

# 실전: 현재 감성 기준으로 TP 재계산
current_tp = calculate_tp(current_sentiment)
if price >= current_tp:
    take_profit()

이 차이가 감성 역설을 만들어냈습니다.

2. “좋은 신호”가 항상 좋은 것은 아니다

감성 분석이 BULLISH라는 것은:

  • ✅ 시장이 상승할 가능성이 높다
  • 지금 당장 더 올라간다는 의미가 아니다

고점 근처에서 뉴스 감성이 긍정적으로 치우치는 것은 오히려 과열 신호일 수 있습니다.

3. 욕심을 제어하는 코드

트레이딩봇의 핵심은 감정 제거입니다. 하지만 동적 TP 조정 로직은 사실상 “더 벌 수 있으면 더 벌자”는 욕심을 코드화한 것이었습니다.

감성 역설 방지 로직은 일종의 욕심 제어 장치입니다:

  • “이미 목표 수익 달성했으면 익절하라”
  • “더 좋은 뉴스가 나와도 욕심내지 마라”

다음 계획

단기 (1개월)

  • LIVE 전환
  • 첫 3라운드 모니터링
  • 실전 데이터 수집 및 분석

중기 (3개월)

  • 감성 역설 방지 로직 효과 측정
  • 바이빗 수수료 최적화
  • 업비트 입출금 자동화

장기 (6개월)

  • v5 전략 연구 (다중 거래소, 다중 코인)
  • 머신러닝 기반 감성 분석 고도화
  • 자체 뉴스 크롤러 개발

마무리

트레이딩봇 개발에서 가장 중요한 것은 예상치 못한 패턴을 발견하는 능력입니다.

감성 역설은 단순한 버그가 아니라, 설계 철학의 모순이었습니다. 이를 발견하고 해결하면서 한 단계 성장했습니다.

LIVE 운영 결과는 수익 실험실에서 투명하게 공유하겠습니다.


관련 포스트:

참고 자료: