파이프라인 산출물(data/, docs/)을 Git 추적에서 제외하고 히스토리를 단일 커밋으로 재구성해 저장소 용량을 경량화한다. Co-authored-by: Cursor <cursoragent@cursor.com>
17 KiB
DeepCoin
빗썸 KRW 마켓 암호화폐 캔들 데이터 수집 및 현물·선물 매매 전략 파이프라인.
주요 기능
- 빗썸 Public API(v1) 기반 분·일·주·월봉 캔들 수집
- SQLite(
coins.db) 저장 — 테이블명{SYMBOL}_{인터벌코드}(예:BTC_60,BTC_10080) - 2017-01-01~ 역방향 페이지네이션 수집 (기본 3650일·10년, 1분봉 포함)
- Ground Truth 기반 현물·선물 벤치마크 및 인과 기법 분석
요구사항
- Python 3.10+
- Conda 환경
ncue또는xavis
설치
cd DeepCoin
conda activate ncue
pip install -r requirements.txt
cp .env.example .env # API 키 등 입력
환경 변수
| 변수 | 설명 | 기본값 |
|---|---|---|
SYMBOL |
코인 심볼 | BTC |
COIN_NAME |
코인 이름 | 비트코인 |
DB_PATH |
SQLite 경로 | coins.db |
DOWNLOAD_DAYS |
전체 수집·차트 일수 (10년) | 3650 |
DOWNLOAD_INTERVALS |
인터벌 코드 목록 (1=1분봉 포함) |
1,3,5,10,15,30,60,240,1440,10080,43200 |
BITHUMB_API_CANDLE_COUNT |
요청당 캔들 수 (최대 200) | 200 |
API_REQUEST_SLEEP_SEC |
API 호출 간격(초) | 0.35 |
인터벌 코드: 분봉은 분 단위 숫자, 일봉=1440, 주봉=10080, 월봉=43200
캔들 조회는 Public API이므로 API 키 없이도 동작합니다.
파이프라인
0단계는 현물·선물 공통입니다. 이후 현물·선물은 각각 1~3단계로 독립 진행합니다.
| 구분 | 단계 | 내용 | 산출물 | 스크립트 |
|---|---|---|---|---|
| 사전 | — | 캔들 수집 | coins.db |
00_download.py |
0단계 — GT 타점 (현물·선물 공통)
| 시장 | 산출물 | 스크립트 |
|---|---|---|
| 현물 | docs/0_ground_truth/spot/ |
0_ground_truth.py |
| 선물 | docs/0_ground_truth/futures/ |
0_ground_truth_futures.py |
현물 단계
| 단계 | 내용 | 산출물 | 스크립트 |
|---|---|---|---|
| 현물 1단계 | GT sim (벤치마크) 현물 | docs/spot/1_simulation/ |
1_ground_truth_sim.py |
| 현물 2단계 | 인과 기법 분석 (현물) | docs/spot/2_analysis/ |
2_run_techniques.py 등 |
| 현물 3단계 | 현물 실거래 운영 | (예정) | (예정) |
선물 단계
| 단계 | 내용 | 산출물 | 스크립트 |
|---|---|---|---|
| 선물 1단계 | GT sim (벤치마크) 선물 | (예정) | (예정) |
| 선물 2단계 | 인과 기법 분석 (선물) | (예정) | (예정) |
| 선물 3단계 | 선물 실거래 운영 | (예정) | (예정) |
단계별 상세 설명
사전 — 캔들 수집
빗썸 Public API로 분·일·주·월봉(1분봉 포함) OHLCV를 수집해 coins.db에 저장합니다. 이후 모든 단계는 이 DB만 참조하며, 현물·선물이 DB를 공유합니다.
- 기본 동작: DB 최신 시각 이후 증분 갱신 (
00_download.py) - 전체 재수집:
--full옵션 (최초 1회·DB 재구축 시) - 테이블명:
{SYMBOL}_{인터벌코드}(예:BTC_3,BTC_1440)
0단계 — GT 타점 (현물·선물 공통)
Ground Truth(GT) 는 사후적으로 “이상적인 매매 타점”을 정의한 기준 데이터입니다. 미래 캔들을 참조해 ZigZag 스윙·눌림목·돌파·다이버전스 타점을 찾으므로 실거래에 직접 쓸 수 없고, 이후 단계(벤치마크·기법 분석)의 정답지(기준선) 역할을 합니다.
| 티어 | 포함 신호 | 설명 |
|---|---|---|
| v1 | 스윙 B/S | ZigZag 스윙 저점 매수·고점 매도만 |
| v2 | + 눌림목 B* | v1 + 상승 레그 중 눌림목 매수 |
| v3 | + 돌파 B^ + 다이버전스 Bd/Sd | v2 + 돌파 매수 + RSI 다이버전스 매수·매도 |
v3 신호 유형 6종:
signal_type |
라벨 | 의미 |
|---|---|---|
swing_low |
B | ZigZag 스윙 저점 매수 |
pullback |
B* | 상승 추세 눌림목 매수 |
breakout |
B^ | 횡보·레인지 상단 돌파 매수 |
div_bull |
Bd | RSI 상승 다이버전스 매수 |
swing_high |
S | ZigZag 스윙 고점 매도 |
div_bear |
Sd | RSI 하락 다이버전스 매도 |
현물 0단계 (0_ground_truth.py): 3분봉·2017년~ 구간에서 GT를 생성하고, 매수/매도 마커가 표시된 인터랙티브 차트를 만듭니다.
- 데이터:
data/spot/ground_truth/ground_truth_trades_v{1,2,3}.json - 차트:
docs/0_ground_truth/spot/ground_truth_chart_v{1,2,3}.html
선물 0단계 (0_ground_truth_futures.py): 동일한 현물 GT 신호를 선물 롱·숏 4색 마커로 변환합니다. 가격·시각은 현물 GT와 동일하며, 해석만 선물 관점으로 매핑합니다.
| 현물 GT | 선물 마커 | 의미 |
|---|---|---|
| buy (B·B*·B^·Bd) | L↑ | 롱 진입 (상방 매수) |
| buy | S↑ | 숏 청산 (하방 매도) |
| sell (S·Sd) | L↓ | 롱 청산 (상방 매도) |
| sell | S↓ | 숏 진입 (하방 매수) |
- 데이터:
data/futures/ground_truth/ground_truth_trades_v{1,2,3}.json - 차트:
docs/0_ground_truth/futures/ground_truth_chart_v{1,2,3}.html
현물 1단계 — GT sim (벤치마크) 현물
0단계 GT 타점을 그대로 따라 매매했을 때의 수익을 재현하는 현물 벤치마크입니다. “GT를 완벽히 따랐다면 얼마를 벌 수 있었는가”를 측정하며, 이후 인과 기법·실거래 전략이 비교해야 할 상한선(천장) 입니다.
- 기간: 최근 3년 (
GT_SIM_LOOKBACK_DAYS=1095) - 초기 자본: 20만 원
- 매수 규칙: 총평가 구간별 현금 비율 상한 — 1억↑ 10% · 10억↑ 5% · 100억↑ 1%
- 수수료: 편도 0.05% (
GT_TRADING_FEE_RATE) - 산출물:
docs/spot/1_simulation/ground_truth_chart_sim_v{1,2,3}.html(누적 수익 곡선·체결 마커 포함)
현물 2단계 — 인과 기법 분석 (현물)
0단계 GT v3 타점을 미래 데이터 없이 재현할 수 있는 인과(causal) 매매 기법 39종을 실행하고, GT와 얼마나 맞는지 정량 평가합니다. 목표는 “실시간으로 쓸 수 있는 기법 조합이 GT 타점을 얼마나 포착하는가”를 파악하는 것입니다.
| 스크립트 | 분석 내용 | 산출물 |
|---|---|---|
2_run_techniques.py |
39종 기법 전체 실행 + GT 정합 비교 | comparison_report.html, data/spot/techniques/*.json |
2_run_signal_type_align.py |
B/B*/B^/Bd/S/Sd 유형별 recall | signal_type_report.html |
2_run_mtf_analysis.py |
GT v3 × 10개 TF 피처 상관 (Cohen's d) | mtf_correlation_report.html, data/spot/mtf/mtf_rules_v3.json |
평가 지표:
- recall: GT 신호 대비 기법 신호가 허용 오차(
GT_ALIGN_TOLERANCE_BARS) 내에 맞춘 비율 - score: recall·정밀도·타점 거리를 종합한 정합 점수
- MTF 상관: 일·주·월 등 상위 TF 지표가 GT 유형별로 어떤 패턴을 보이는지 통계 분석
현물 3단계 — 현물 실거래 운영 (예정)
현물 2단계에서 검증된 인과 기법(또는 composite_v3 등 통합 기법)을 빗썸 현물 API에 연결해 실제 주문·체결·리스크 관리를 수행하는 단계입니다.
- 실시간 캔들 수신 및 인과 신호 생성
- 주문 실행·포지션(보유 코인)·손절/익절 규칙
- 1단계 GT sim 벤치마크 대비 실거래 성과 모니터링
- 텔레그램 등 알림·로그·장애 복구
선물 1단계 — GT sim (벤치마크) 선물 (예정)
선물 0단계 GT 타점(L↑/L↓/S↓/S↑)을 그대로 따라 롱·숏 포지션을 운용했을 때의 수익을 재현하는 선물 벤치마크입니다. 현물 1단계와 동일한 개념이나, 롱·숏 양방향·레버리지·청산 규칙 등 선물 고유 파라미터를 반영합니다.
- 0단계 선물 GT 4색 마커 기준 체결 시뮬레이션
- 현물 1단계와 동일한 초기 자본·기간·수수료 체계 (선물 수수료·슬리피지 별도 정의 예정)
- 산출물 예정:
docs/futures/1_simulation/
선물 2단계 — 인과 기법 분석 (선물) (예정)
현물 2단계와 동일한 인과 기법 39종(또는 선물 특화 변형)을 선물 GT v3 타점과 정합 평가합니다. 롱·숏 각각의 recall, MTF 필터, 신호 유형별 성능을 선물 관점에서 분석합니다.
- 선물 GT 6종 신호 ↔ 인과 기법 정합 리포트
- 선물 MTF 상관 분석 및 규칙 추출
- 산출물 예정:
docs/futures/2_analysis/,data/futures/techniques/,data/futures/mtf/
선물 3단계 — 선물 실거래 운영 (예정)
선물 2단계에서 검증된 전략을 실제 선물 거래 API에 연결해 롱·숏 포지션을 자동 운용하는 단계입니다.
- 실시간 인과 신호 → 롱/숏 진입·청산
- 레버리지·증거금·청산가 모니터링
- 선물 1단계 sim 벤치마크 대비 실거래 성과 추적
실행 순서
0단계(GT 타점)를 먼저 만든 뒤, 현물 1단계 sim → 현물 2단계 인과 분석 순으로 진행합니다. 선물·현물 3단계는 각 시장의 1·2단계 완료 후 구현 예정입니다.
# 사전: 전체 인터벌 증분 갱신 (1분~월봉, DB 최신 이후만)
python scripts/00_download.py
# 사전: 전체 인터벌 풀 다운 (최초 1회 또는 DB 재구축)
python scripts/00_download.py --full
# 1분봉만 풀 다운 (수 시간 소요)
python scripts/00_download_candles.py --full --days 3650 --intervals 1
# 0단계: Ground Truth 타점 생성 (v1/v2/v3)
python scripts/0_ground_truth.py
# 0단계: 선물 GT 타점 차트 (롱·숏 4색, 타점만)
python scripts/0_ground_truth_futures.py
# 현물 1단계: GT sim (최근 3년 · 20만원)
python scripts/1_ground_truth_sim.py --tier all
# 현물 2단계: 인과 기법 GT 정합 비교
python scripts/2_run_techniques.py
python scripts/2_run_signal_type_align.py --from-cache
python scripts/2_run_mtf_analysis.py
현물 2단계 인과 기법 목록 (39종)
src/deepcoin/techniques/ — 단일 33 + 복합 6, 미래 데이터 미사용. 카탈로그: data/spot/techniques_catalog.json
| ID | 기법 | 유형 | 설명 |
|---|---|---|---|
zigzag_causal |
인과 ZigZag | 스윙 B/S | 되돌림 % 확정 시 스윙 저점 매수·고점 매도 (GT ZigZag 인과 버전) |
minor_swing |
소형 스윙 하이브리드 | 하이브리드 | 소형 ZigZag(2.5%) + 국소 극값 — GT 중간 눌림목 보완 |
local_extrema |
국소 극값 | 스윙 B/S | 국소 저점 매수·고점 매도 (눌림목 유형 포착) |
pivot_swing |
피벗 스윙 | 스윙 B/S | 피벗 저점 매수·고점 매도 (스윙 B/S) |
fractal_swing |
프랙탈 스윙 | 스윙 B/S | Williams 프랙탈 스윙 저점 매수·고점 매도 |
swing_failure |
스윙 실패 | 스윙 B/S | 스윙 고저점 돌파 실패(페일드 브레이크아웃) 반전 신호 |
donchian |
돈치안 채널 | 스윙 B/S | 돈치안(40) 채널 하단 매수·상단 매도 |
ema_pullback |
EMA 눌림목 | 눌림목 B* | EMA(20/60) 눌림목 반등 매수·되돌림 매도 (B*) |
fib_pullback |
피보나치 눌림목 | 눌림목 B* | 피보나치 38.2~61.8% 되돌림 구간 매수·매도 (B*) |
support_bounce |
지지·저항 반등 | 눌림목 B* | N봉 지지·저항 터치 후 반전 (B*) |
keltner_breakout |
Keltner 돌파 | 돌파 B^ | Keltner 채널 상·하단 돌파 (B^) |
range_breakout |
레인지 돌파 | 돌파 B^ | N봉 레인지 상·하단 돌파 (B^) |
volume_breakout |
거래량 돌파 | 돌파 B^ | 거래량 스파이크 + 레인지 돌파 (B^) |
bb_squeeze_breakout |
BB 스퀴즈 돌파 | 돌파 B^ | 볼린저 밴드 스퀴즈 후 돌파 (B^) |
rsi_divergence |
RSI 다이버전스 | 다이버전스 Bd/Sd | RSI 상승(Bd)·하락(Sd) 다이버전스 |
macd_divergence |
MACD 다이버전스 | 다이버전스 Bd/Sd | MACD 히스토그램 상승(Bd)·하락(Sd) 다이버전스 |
obv_divergence |
OBV 다이버전스 | 다이버전스 Bd/Sd | OBV 상승(Bd)·하락(Sd) 다이버전스 |
bb_reversal |
볼린저 역추세 | 지표 | BB(20,2) 하단 매수·상단 매도 + EMA 추세 필터 |
ma_cross |
EMA 크로스 | 지표 | EMA(20/60) 골든크로스 매수·데드크로스 매도 |
rsi_swing |
RSI 스윙 | 지표 | RSI(14) 과매도 반등 매수·과매수 하락 매도 |
macd_cross |
MACD 크로스 | 지표 | MACD(12,26,9) 시그널선 골든·데드 크로스 |
supertrend |
Supertrend | 추세 | Supertrend 상승·하락 전환 신호 |
adx_trend |
ADX 추세 | 추세 | ADX(14) 강세 + DI 크로스 추세 신호 |
ichimoku_trend |
일목 추세 | 추세 | 일목 전환선·기준선 크로스 추세 신호 |
parabolic_sar |
Parabolic SAR | 추세 | Parabolic SAR 추세 전환 신호 |
stochastic_cross |
Stochastic 크로스 | 모멘텀 | Stochastic(14,3) %K/%D 크로스 |
cci_extreme |
CCI 극값 | 모멘텀 | CCI(20) 과매도·과매수 반전 |
roc_reversal |
ROC 반전 | 모멘텀 | ROC(12) 극값 반전 신호 |
keltner_reversal |
Keltner 역추세 | 변동성 | Keltner 채널 하단 매수·상단 매도 |
atr_channel |
ATR 채널 | 변동성 | EMA(20) ± ATR(14)×2 채널 반전 |
pivot_points |
피벗 포인트 | 구조 | 롤링 피벗 S1/R1 반전 |
support_resistance |
구조적 지지·저항 | 구조 | 스윙 피벗 기반 S/R 반전 |
volume_spike |
거래량 스파이크 | 거래량 | 거래량 스파이크 후 반전 (클라이맥스) |
composite_swing |
스윙 복합 | 복합 | 스윙 저점·고점 전담 기법 가중 투표 (B/S) |
composite_pullback |
눌림목 복합 | 복합 | 눌림목·역추세 기법 가중 투표 (B*) |
composite_breakout |
돌파 복합 | 복합 | 돌파·모멘텀 기법 가중 투표 (B^) |
composite_divergence |
다이버전스 복합 | 복합 | RSI/MACD/OBV 다이버전스 가중 투표 (Bd/Sd) |
composite_v3 |
v3 통합 스코어링 | 복합 | v3 GT 6종 신호 유형별 핵심 기법 가중 투표 + EMA(60) 추세 필터 |
composite_full |
전체 통합 복합 | 복합 | 전체 인과 기법 가중 투표 + EMA 추세 필터 |
디렉터리 구조
DeepCoin/
├── src/deepcoin/
│ ├── data/ # 캔들 수집·로드
│ ├── ground_truth/ # 0·1단계 GT·차트
│ ├── techniques/ # 현물 2단계 인과 기법 (39종)
│ ├── evaluation/ # 현물 2단계 GT 정합 평가
│ └── mtf/ # 현물 2단계 MTF 분석
├── scripts/ # 접두사: 00=사전, 0=0단계, 1=현물1, 2=현물2
│ ├── 00_download.py # 사전 (증분/풀다운 래퍼)
│ ├── 00_download_candles.py # 사전 (캔들 수집 본체)
│ ├── 0_ground_truth.py # 0단계 현물 GT
│ ├── 0_ground_truth_futures.py # 0단계 선물 GT 차트
│ ├── 1_ground_truth_sim.py # 현물 1단계 sim
│ ├── 2_run_techniques.py # 현물 2단계
│ ├── 2_run_signal_type_align.py
│ └── 2_run_mtf_analysis.py
├── coins.db # 공유 캔들 DB (현물·선물 유일한 공유 리소스)
├── data/
│ ├── spot/ # 현물 전용
│ │ ├── ground_truth/ # GT JSON v1~v3
│ │ ├── techniques/ # 2단계 기법 실행 결과
│ │ └── mtf/ # MTF 규칙
│ └── futures/ # 선물 (0단계 GT만, 1~3단계 추후)
│ └── ground_truth/
├── docs/
│ ├── 0_ground_truth/ # 0단계 (현물·선물 공통)
│ │ ├── spot/
│ │ └── futures/
│ └── spot/ # 현물 1~2단계
│ ├── 1_simulation/
│ └── 2_analysis/
현물·선물은 coins.db만 공유합니다. 현재 구현 범위는 0단계(공통) + 현물 1·2단계이며, 선물 1~3단계·현물 3단계는 추후 구현 예정입니다.
변경 이력
- 2026-06-11:
docs/0_ground_truth/{spot,futures}/로 0단계 차트를 docs 직하로 이동 - 2026-06-11:
scripts/접두사를 파이프라인 단계와 일치 (00_사전,0_0단계,1_현물1,2_현물2) - 2026-06-11: README 파이프라인 단계별 상세 설명 추가 (0단계 공통 + 현물·선물 1~3단계)
- 2026-06-11: README 파이프라인을 0단계(공통) + 현물·선물 각 1~3단계 체계로 정리
- 2026-06-11: 선물 1~3단계·
04_run_causal_futures제거, 현물 0·1·2단계만 유지 - 2026-06-11:
docs/spot/·docs/futures/상위 분리 (data/와 동일 구조) - 2026-06-11:
data/spot/·data/futures/완전 분리 (coins.db만 공유), 선물 GT·MTF·causal 독립 경로 - 2026-06-11: 2단계 38종 기법 리포트 재생성, 3단계 causal/MTF/walkforward 재검증, README 39종 표 반영
- 2026-06-11: 캔들 수집 기본 동작을 DB 최신 이후 증분 갱신으로 변경 (
--full로 전체 재수집) - 2026-06-10: docs를 단계별 폴더(
0_ground_truth~3_causal)로 재구성, 단계 정의 정렬 (0=GT 타점, 1=sim) - 2026-06-09: 파이프라인 번호를 0~4단계 체계로 통일 (0=벤치마크, 1=GT+기법, 2=인과분석, 3=시뮬, 4=실거래)
- 2026-06-09: 3단계 인과 선물 전략 (composite_v3 + ATR) + 0단계 벤치마크 비교
- 2026-06-09: v3 신호 유형별 GT 정합 리포트 + composite_v3 통합 기법
- 2026-06-09: 선물 GT 차트 futures/gt/ 정리, 마커 UI 개선
- 2026-06-08: Ground Truth v1/v2/v3 + 매매 기법 8종
- 2026-06-07: 캔들 수집 모듈 초기 구현