티스토리 뷰
승률 22%에서 배운 것 — 멀티코인 + 전략 진화
봇을 2주 돌리고 성적표를 뽑았다. 승률 22%. 18번 매매해서 4번 이겼다. 수익률은 -3.8%. 솔직히 멘탈이 흔들렸다. 하지만 데이터가 있으니까 분석할 수 있었고, 분석하니까 문제가 보였다.
왜 졌나
패배 원인을 분류해봤다.
- BTC 횡보장에서의 잦은 진입 — 변동성 돌파 전략은 추세장에서 빛나는데, 횡보장에서는 타겟 가격을 찍고 바로 빠지는 페이크 돌파가 많다.
- 단일 코인의 한계 — BTC가 횡보하면 기회 자체가 없다. 그냥 손실만 쌓인다.
- 고정된 파라미터 — K=0.5, 손절 -3%를 모든 상황에 쓰고 있었다.
멀티코인 지원
가장 먼저 한 건 코인을 늘린 것이다. BTC만 보던 봇을 ETH, XRP, SOL, DOGE까지 확장했다. 핵심 설계는 코인별 독립 실행이다.
TARGETS = ["KRW-BTC", "KRW-ETH", "KRW-XRP", "KRW-SOL", "KRW-DOGE"]
for market in TARGETS:
snapshot = collector.collect(market)
signal = strategy.evaluate(market, snapshot)
if signal:
# 코인별 할당 금액 내에서 매매
trader.execute(signal, allocation[market])
자금 배분은 단순 균등 분배로 시작했다. 5개 코인이면 각각 총 자금의 20%. 나중에 변동성 기반 가중치로 바꿨지만, 처음에는 단순하게 갔다. 코인별로 strategy_params를 별도로 관리해서 BTC와 DOGE가 다른 K값을 쓸 수 있게 했다.
백테스팅 프레임워크
실전 돈으로 실험하는 건 바보짓이다. 백테스팅 프레임워크를 만들었다.
class Backtester:
def run(self, market, strategy, start_date, end_date):
historical = self.load_ohlcv(market, start_date, end_date)
portfolio = Portfolio(initial_capital=1_000_000)
for candle in historical:
signal = strategy.evaluate_candle(candle)
if signal:
portfolio.execute(signal, candle.close)
return portfolio.report() # 승률, 수익률, MDD, 샤프비율
업비트 API로 과거 캔들 데이터를 가져와서 로컬 DB에 캐싱하고, 전략을 돌려본다. 중요한 건 슬리피지와 수수료를 반영하는 것이다. 백테스팅에서 수수료를 빼면 실전과 결과가 완전히 달라진다. 업비트 수수료 0.05%를 매수/매도 양쪽에 넣었다.
RSI + 볼린저밴드 결합 전략
변동성 돌파 전략만으로는 한계가 명확했다. 새로운 전략을 추가했다.
# RSI + 볼린저밴드 결합 매수 조건
if rsi < 35 and price < bb_lower and volume_ratio > 1.2:
# 과매도 + 밴드 하단 이탈 + 거래량 증가 = 반등 기대
signal = BUY
# 매도 조건
if rsi > 70 or price > bb_upper:
signal = SELL
백테스팅 결과, 이 전략은 횡보장에서 변동성 돌파보다 훨씬 나았다. 시장 상태에 따라 전략을 자동 전환하는 로직을 넣었다. bullish 추세면 변동성 돌파, sideways면 RSI+볼린저.
파라미터 최적화 결과
백테스팅 프레임워크로 파라미터 그리드 서치를 돌렸다. K값을 0.3~0.7 범위에서 0.05 단위로, 손절률을 -2%~-5%에서 0.5% 단위로 조합을 테스트했다. 3개월 과거 데이터 기준으로.
- BTC 최적 K값: 0.45 (손절 -3.5%)
- ETH 최적 K값: 0.55 (손절 -4.0%)
- XRP 최적 K값: 0.35 (손절 -2.5%) — 변동성이 크니까 K를 낮게
최적화 후 백테스팅 승률은 41%까지 올라갔다. 여전히 절반도 안 되지만, 승률이 전부가 아니다. 이길 때 크게 이기고, 질 때 적게 지는 구조가 되면 승률 40%대로도 수익이 난다. 실제로 손익비(Risk-Reward Ratio)가 1:1.8까지 개선됐다.
멀티코인과 전략 진화로 봇이 한 단계 성장했다. 하지만 터미널에서 로그만 보면서 관리하는 건 한계가 있었다. 다음 글에서는 FastAPI + React로 대시보드를 만든 이야기를 한다.
👉 다음 글 보러가기
'CryptoBot' 카테고리의 다른 글
| 실전 투입하자마자 터진 버그 6개 — 테스트에서 못 잡는 것들 (0) | 2026.04.13 |
|---|---|
| 실전 운영에서 터진 것들 — 리스크 관리와 리팩토링 (0) | 2026.04.11 |
| FastAPI + React로 봇 관리 대시보드 만들기 (0) | 2026.04.10 |
| Claude Haiku가 월 640원에 매매를 도와준다 — AI 자동매매의 시작 (0) | 2026.04.05 |
| 코인 자동매매 봇, 처음부터 만들기 — Python 하나로 MVP 완성 (2) | 2026.04.05 |
- Total
- Today
- Yesterday
- jdbc
- 메이저화이트리스트
- LLM비활성결정
- 코드자체감사
- 일일주간월간스케줄러
- Telegram알림
- 비용80%절감
- 일경계처리
- LLM파라미터머지
- P0P4우선순위
- 코인별손익분석
- LLM비용오차
- Haiku4096토큰
- 코인별전략배정
- 데모모드
- AnthropicCaching
- 트레일링스탑버그
- BOJ #JS
- LLM동적호출
- Kafka
- 수수료슬리피지
- DataFramebool
- SlidingWindowTTL
- 데이터엔지니어링
- CryptoBot
- CDC
- Page_DownPage_DownPage_Down
- 한달운영진단
- 5중검증
- kafka connect
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |