파이썬 코인 자동매매 봇 만들기 — 업비트 변동성 돌파 전략 + 백테스트 결과 공개
파이썬 코인 자동매매 봇 만들기 — 업비트 변동성 돌파 전략 + 백테스트 결과 공개
목차
1. 왜 코인 자동매매인가
2. 변동성 돌파 전략이란
3. 백테스트 설계 (pyupbit + Python)
4. BTC 200일선 필터 추가 후 결과
5. 최종 수익률 및 주요 지표
6. 실전 봇 구조
1. 왜 코인 자동매매인가
주식 장투는 이미 하고 있다. 메인 포트폴리오를 건드리지 않고 24/7 돌아가는 부수입 채널을 만들고 싶었다. 코인은 주말에도 장이 열리고, 업비트 공식 API가 무료로 제공되며, 파이썬으로 자동화하기 쉽다.
직접 짜고 싶었다. 유료 솔루션 쓰면 블랙박스고 공부도 안 된다. Claude와 함께 바이브코딩으로 하루 만에 백테스터부터 실전 봇까지 완성했다.
2. 변동성 돌파 전략이란
래리 윌리엄스가 고안한 단기 트레이딩 전략이다. 로직은 단순하다.
volatility = prev_high - prev_low
target = today_open + volatility * K
# K = 0.75 (ETH 3년 백테스트 최적값)
if current_price >= target:
buy(ticker, invest_ratio=0.3) # 잔고의 30% 매수
변동성 계수. 0.5면 전날 변동폭의 50%를 더한 가격이 목표가. K가 클수록 진입 조건이 까다로워 거래 횟수가 줄고, 작을수록 자주 진입한다. 3년 데이터 최적화 결과 ETH에서 K=0.75가 가장 좋았다.
3. 백테스트 설계
pyupbit 라이브러리로 업비트 일봉 데이터를 무료로 가져올 수 있다. BTC, ETH, XRP, SOL, DOGE 5종목 대상으로 K값 0.1~0.9 전수 탐색했다.
pip install pyupbit pandas numpy matplotlib pyyaml
# 실행
python backtest.py # 기본 백테스트
python backtest.py --optimize # K값 최적화
python backtest.py --coins KRW-ETH # 특정 코인만
초기 결과 (필터 없음, K=0.5, 1년)
| 코인 | 수익률 | 승률 | MDD |
|---|---|---|---|
| KRW-BTC | -14.4% | 39.2% | -15.4% |
| KRW-ETH | -5.8% | 46.2% | -13.0% |
| KRW-XRP | -28.6% | 35.1% | -29.5% |
| KRW-SOL | -33.8% | 41.1% | -35.6% |
지난 1년(2024.3~2025.3)이 코인 전반적 하락장이었다. 변동성 돌파는 상승장 전략이라 이 구간이 불리하다. 하지만 BTC를 그냥 홀딩했어도 -10%였으니 전략이 일부 손실을 방어한 셈이다.
4. BTC 200일선 필터 추가 후 결과
하락장에서 손실을 막으려면 시장 국면 판단이 필요하다. BTC가 200일 이동평균선 위에 있을 때만 봇을 켜는 필터를 추가했다.
필터 적용 전후 비교 (1년, K=0.5)
| 코인 | 필터 없음 | 200일선 필터 | 개선 |
|---|---|---|---|
| KRW-BTC | -8.65% | -4.58% | +4.07%p |
| KRW-ETH | +8.40% | +10.05% | +1.65%p |
| KRW-XRP | -11.86% | -3.83% | +8.03%p |
| KRW-SOL | -17.93% | -5.38% | +12.55%p |
필터 없이도 +8.4%, 필터 적용 후 +10.05%, MDD -3.6%, 샤프 1.53. 하락장 159일을 현금으로 쉬면서 손실을 차단한 결과다.
5. ETH 3년 백테스트 최종 결과
1년은 샘플이 부족하다. 상승/하락 사이클을 모두 포함한 3년(1095일) 데이터로 K값 최적화를 돌렸다.
| K값 | 수익률(3년) | MDD | 샤프 |
|---|---|---|---|
| 0.70 | +24.18% | -3.80% | 1.25 |
| 0.75 | +23.83% | -4.46% | 1.27 |
| 0.80 | +19.99% | -4.35% | 1.12 |
| 0.95 | +17.80% | -2.82% | 1.12 |
| 0.50 | +15.28% | -6.58% | 0.71 |
최종 확정 파라미터
3년 +23.8% → 연 약 7~8%. 천만원 기준 연 70~80만원, 월 평균 6~7만원. 완전 자동화니까 시간 투입 없이 가능하다. 샤프 1.27은 운용 업계에서 "우수한 전략"으로 분류되는 수준이다.
6. 실전 봇 구조
백테스트 검증 후 실전 봇도 함께 작성했다. 파일 구조는 이렇다.
├── main.py # 봇 메인 (스케줄러 + 전체 흐름)
├── strategy.py # 목표가 계산 + 200일선 판단
├── executor.py # 업비트 매수/매도 실행
├── notifier.py # 텔레그램 알림
├── logger.py # 로그 설정 (30일 자동 로테이션)
├── config.yaml # 전략 파라미터 (K값, 투입비율 등)
└── backtest.py # 백테스트
실행 방법
python main.py --paper
# 실전
python main.py
봇이 켜지면 매일 00:01에 목표가를 계산하고, 1분마다 현재가를 모니터링한다. BTC 200일선 아래면 오늘 매수 없음 메시지를 텔레그램으로 보내고 대기한다.
백테스트 결과가 실전 수익을 보장하지 않는다. 현재 BTC가 200일선 아래(하락장)라 실전 봇은 대기 중이다. 상승 전환 시점을 기다리며 페이퍼 트레이딩으로 로직을 검증 중이다.
정리
Claude와 바이브코딩으로 하루 만에 백테스터부터 실전 봇까지 만들었다. 전략 설계 → 데이터 수집 → K값 최적화 → 200일선 필터 추가 → 봇 완성 순서로 진행했고, 코드는 GitHub에 정리 예정이다.
다음 포스팅에서는 Oracle Cloud 무료 서버에 이 봇을 올려 24시간 무인 운영하는 방법을 다룰 예정이다.
함께 읽을 글
비개발자에게 웹 구조 보여주기: 화면·서버·DB를 따라가는 데모
비개발자 동료들에게 웹이 어떻게 돌아가는지 설명하는 세미나를 준비했다. 말로 "화면이 서버에 요청하고, 서버가 DB에 물어본다"고 하면 대부분 '서버'라는 단어에서 막힌다. 그래서 요청이 오가는 장면을 눈으로 따라가는 데모를 만들었다.
실무 · 바이브코딩2026.09.27보안 점검 후 Flask 서비스에서 고친 7가지
사내 보안 점검 지적을 계기로 Flask 서비스의 인증과 세션 처리를 다시 살폈다. 하드코딩된 시크릿 키, 쿠키 폴백 인증, OIDC state·nonce 검증 등 7가지 항목과 수정 코드를 체크리스트로 정리했다.
현장 데이터 서비스 구축기 15/15실무 · Python2026.09.20데이터 비전공자에게 분석 결과 보고하기
시스템 사용량과 업무 실적의 관계를 보고해야 했다. 처음엔 상관계수와 2×2 매트릭스로 정리했는데, 보고를 받는 사람도 하는 사람도 데이터 전공자가 아니었다. 산점도와 추세선 하나로 바꿨다.
로우코드 운영기 16/16실무 · 로우코드2026.09.11