
트레이딩봇 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 모드에서는 익절이 발생하지 않았습니다.
원인 분석:
- 초기 상태 (진입 시점):
- 감성 분석 결과:
NEUTRAL - TP 목표: 기본 값 (백테스팅 최적화 값)
- 감성 분석 결과:
- 시장 상승 중:
- 뉴스 감성이
BULLISH로 상승 - TP 목표가 자동으로 상향 조정됨
- 뉴스 감성이
- 고점 도달:
- 감성이
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 전환

전환 결정 이유
- ✅ 감성 역설 방지 로직 검증 완료
- ✅ TP 파라미터 재최적화 완료
- ✅ PAPER 모드에서 안정적 동작 확인
- ✅ 백테스트 결과 신뢰성 확보
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 운영 결과는 수익 실험실에서 투명하게 공유하겠습니다.
관련 포스트:
참고 자료: