티스토리 뷰

승률 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로 대시보드를 만든 이야기를 한다.


반응형
댓글