# 거래 선별 AI · 실험 02

2014년부터의 BTC 일별 이력을 보조 학습에 사용하고, 14일 모멘텀의 개별 거래가 비용 차감 후 이익을 남기는지 예측했습니다. 이 보고서는 과거 탐색 실험이며 진행 모의계좌에 적용하지 않았습니다.

## 결과

선택은 평가 연도 직전 하반기의 `수익률 − 최대 낙폭`으로 했습니다. 최소 종료 거래 20건 조건을 적용했습니다. 평가 연도에서 가장 좋은 조합을 사후 선택하지 않았습니다.

| 평가 기간 | 미리 선택한 모델 | 기존 수익률 | 변경 수익률 | 기존 최대 낙폭 | 변경 최대 낙폭 |
|---|---|---:|---:|---:|---:|
| 2024 | MLP · 최근 5년 | 2.66% | 12.34% | 18.68% | 14.34% |
| 2025 | 부스팅 · 전체 | 14.87% | -3.86% | 17.23% | 16.27% |
| 2026년 1–8월 | 부스팅 · 전체 | 38.37% | 26.99% | 18.97% | 15.06% |

수익 개선은 3개 기간 중 1개, 낙폭 개선은 3개 중 3개였습니다. 장기 데이터와 거래 선별은 일관된 수익 개선을 보장하지 않았습니다. 2026년 MLP 전체 이력 모델은 거래가 0건이었고 선택 조건을 통과하지 못했습니다. 2024년 MLP 3년 모델에는 학습 반복 한도 도달 경고가 있으며 원본에 보존했습니다. 고정 익절 변경도 일관된 개선이 없었습니다.

## 데이터와 두 단계 학습

- Coin Metrics Community BTC `PriceUSD`, **2014-01-01–2026-05-23**, 연속 4,526개 일별 관측. 요청한 종료일은 2026-08-31이지만 다운로드 원본의 실제 마지막 가격은 5월 23일입니다. 뒤쪽 가격을 만들어 채우지 않았습니다.
- 원문: https://github.com/coinmetrics/data . **CC BY-NC 4.0**, https://creativecommons.org/licenses/by-nc/4.0/ . 날짜와 가격만 추출하고 정규화 특징으로 변환했습니다. 원자료 SHA-256과 수집 시각은 `btc-daily.json`에 기록했습니다. 비상업적 연구 자료이며 공급자의 보증은 없습니다.
- 선물 입력: 기존 체크섬 검증 Binance USD-M 15분봉·펀딩, 2020년부터 2026-08-31까지 BTC/ETH/SOL. 코인별 정확한 시작과 누락은 `latest.json`의 `futuresCoverage` 및 기존 장기 수집 manifest를 참고합니다.
- 보조 모델: BTC 14일 뒤 방향을 로지스틱 회귀로 학습합니다. 7/14/30/90일 수익률, 30일 변동성, 120일 고점 대비 변화, 60일 평균 대비 변화를 사용합니다. 해당 예측 연도 시작 전까지 결과가 확정된 일별 자료만 학습하며 각 관측은 보수적으로 날짜 이틀 뒤부터 사용합니다.
- 보조 모델 예측 입력은 당시 완료된 **Binance 선물 일별 종가**로 같은 정규화 특징을 계산합니다. 현물 계열 학습에서 선물 입력으로의 전이가 있으므로 동일 상품 학습으로 해석하면 안 됩니다. 일별 이력을 분봉·펀딩·청산 기록으로 변환하지 않았습니다.
- 거래 모델: HistGradientBoostingRegressor 및 은닉층 32→16→8 MLPRegressor. 신호 시점의 추세·ATR·거래량·캔들 몸통/꼬리·최근 발표 펀딩과 보조 점수를 사용합니다. 장기 보조 모델을 제외한 부스팅 비교도 공개했습니다.
- 거래 타깃은 기존 2.5 ATR 추적 손절·모멘텀 반전·30일 제한으로 마감한 **개별 후보의 순손익 / 최초 위험 예산**입니다. 단순 다음 봉 방향 예측이 아닙니다. 학습 타깃만 [-3R,6R]로 제한하며 실제 계좌 손익은 제한하지 않습니다. 익절·손절·시간을 고려하는 논문을 참고했지만 CUSUM·ResNet-LSTM·Triple Barrier 논문의 전체 재현은 아닙니다.
- 학습 후보는 종목별 UTC 00시·12시에 시작하는 4시간봉 신호에서 추출합니다. 실제 진입 판단은 모든 완료된 4시간봉에서 합니다. 후보는 겹칠 수 있으며 독립 거래가 아닙니다.
- 전체/최근 5년/최근 3년을 각각 비교합니다. 거래 모델의 기간 시작은 평가연도 1월 1일에서 5년/3년을 뺀 시점이며 학습 종료는 전년도 7월 이전입니다. 선물 타깃은 2020년 이전에 존재하지 않습니다. 보조 모델의 기간은 해당 예측연도 시작에서 계산합니다.

## 시간 경계와 체결

- 각 평가연도에 대해 전년도 7월 1일 전에 결과가 종료된 거래만 학습하고 하루 간격을 둡니다. 직전 7–12월은 선택에만 쓰며 이후 평가연도의 타깃을 학습에 넣지 않습니다.
- 신경망은 학습 구간에만 표준화를 맞춥니다. 임의 분할 조기 종료를 사용하지 않고 고정 180회·seed 42로 학습합니다. seed를 바꾸는 탐색은 하지 않았습니다.
- 기대 순손익 점수 0.1R 이상일 때만 원래 모멘텀 진입을 허용합니다. 거절은 기존 보유분의 추세 청산/추적 손절을 차단하지 않습니다. 점수는 검증된 승률이 아닙니다.
- 각 연도 독립 $10,000, BTC 5배·ETH/SOL 3배. 기존 거래당 위험 1%, 총 위험 3%, 총 증거금 40%, 명목 노출 2배 한도를 유지합니다. 낙폭 10%/20%에서 위험 규모 축소, 일일 손실 제한과 연속 손실 휴식도 같습니다.
- 다음 15분봉 시가 체결, 완료된 4시간봉의 변경 손절은 다음 봉부터. 같은 봉 손절/목표 동시 도달 시 손절 우선. 편도 수수료 0.045%, 슬리피지 0.02%, 실제 펀딩. 기간 종료 시 잔여 보유분도 비용을 내고 종료합니다.
- 청산 비교: (1) 기존 2.5 ATR 추적, (2) 신호 초기 손절 거리의 2배 목표/추적 없음, (3) 4 ATR 목표/기존 추적 병행. 모두 기존 반전 청산·최대 보유시간 유지. 2R은 신호 기준이며 비용·갭 반영 실현 손익비는 다릅니다. 청산 변형은 이전 기간에서 선택한 진입 모델에만 적용했고 평가 성적으로 재선택하지 않았습니다.
- 수수료·슬리피지 2배 민감도도 모든 조합에 계산했습니다. 슬리피지는 이미 체결 손익에 반영되므로 수수료/펀딩과 함께 별도 이중 차감하면 안 됩니다.
- 최대 낙폭은 15분봉 종가 평가액 기준이며 청산은 격리 증거금 근사입니다. 최장 고점 미회복 기간에는 평가 종료 시까지 이어지는 미회복 구간도 포함됩니다.

## 검증 한계

2024–2026년은 앞선 연구에서 이미 확인한 기간입니다. 시간 순서를 지켜 재학습했어도 완전히 새로운 미래 검증은 아닙니다. 현재 BTC/ETH/SOL 선택의 생존편향, 과거 수수료 등급·호가 충격·정확한 마크가격 청산 부재, 데이터 사후 수정 가능성, 후보 손익의 중첩과 한 번의 신경망 seed가 남습니다. 좋은 과거 성적만으로 기본 계좌를 변경하지 않았습니다. 다른 알트코인 우주를 확장하는 상대 강도 롱숏은 이번 첫 거래 선별 실험 범위에 포함하지 않았습니다.

## 재현

루트에서 기존 `scripts/collect_long_futures.py`를 실행해 `/tmp/paper-long-cache/market.json` 및 `manifest.json`을 준비합니다. 현재 수집기는 최신 월을 가져오므로 동일 실험은 사전 설정의 입력 해시 및 기존 고정 manifest에 일치하는 자료를 사용해야 합니다.

1. `btc-daily.json`의 동결본을 유지합니다. `collect_btc_daily.py`는 새 원본을 가져오므로 정확 재현 시 다시 수집하지 않습니다.
2. `node scripts/selector_data.cjs` → `/tmp/selector-samples.json` 생성. 또는 `candidate-samples.json.gz`를 해제하고 보고서의 sampleHash와 비교합니다.
3. Python numpy/scikit-learn 1.8.0/joblib 설치. `python scripts/train_selector.py` 실행. 전체 7개 모델·3개 평가연도 및 청산 2종의 기본/비용 민감도 결과를 생성합니다.
4. `node scripts/test_selector.cjs`로 개별 후보 라벨 9건의 순손익·수량·종료시각을 전체 엔진과 비교하고 미래 데이터 추가 불변성을 확인합니다.
5. `node scripts/test_paper_engine.cjs`, `node scripts/test_momentum_forward.cjs`로 기존 체결·진행계좌 동작을 확인합니다.

모델별 저장 객체와 진입 점수는 `reproduction.zip`에 보관합니다. `joblib` 객체는 이 프로젝트에서 직접 만든 신뢰 가능한 파일만 로드하세요. `latest.json`은 모든 조합의 거래 원장과 자산곡선을 포함하며, 기존 모멘텀 연도별 자산을 이전 공개 실험과 $0.00001 이내로 재현했습니다. 첫 실행은 2024년 결과를 저장하면서 NumPy 정수의 JSON 직렬화 오류가 발생했습니다. 정수 변환만 수정해 같은 seed와 설정으로 다시 실행했으며 매매 매개변수는 변경하지 않았습니다.

연구 참고: https://link.springer.com/article/10.1186/s40854-025-00866-w
