# 공개 시그널·봇 아이디어 비교

32개 사전 고정 후보를 총 **454회** 평가했다. 원본 봇의 수익률 인증이 아니라, 공개 아이디어를 독립 구현해 같은 체결·위험 조건으로 비교한 연구다. 진행 중인 모의계좌의 거래 규칙과 기록은 바꾸지 않았다.

## 결과

2022-01-01–2026-08-31, BTC·ETH·SOL 중 동시 최대 1종목, 시작금액 $10,000. 아래 누적 수익은 4년 8개월 결과이며 연 수익률이 아니다.

| 방법 | 누적 수익 | 최대 낙폭 | 수수료·슬리피지 2배 수익 |
|---|---:|---:|---:|
| 기존 14일 + 3일 돌파 + 부스팅 | +62.77% | 10.54% | +43.24% |
| 14일 + 6 ATR 익절, 최대 1종목 | +45.68% | 11.16% | +13.94% |
| 국면 분리: 돌파 / MACD·BB 평균회귀 | +40.93% | 8.45% | +26.92% |
| Squeeze + EMA 200 방향 | +35.98% | 8.42% | +15.06% |
| Supertrend + ADX 20 | +31.13% | 12.95% | +26.26% |
| UT ATR 10·2 | +19.55% | 13.21% | +11.62% |
| 매년 전년도 성적으로 선택 | +9.63% | 14.43% | −2.26% |

새 후보 중 수익률로 기존 부스팅 조합을 넘은 것은 없었다. Squeeze에 EMA 방향을 더하면 단독 +2.58%에서 +35.98%로 개선했지만, ADX를 더하면 −4.73%였다. 같은 필터도 전략마다 효과가 달랐다. MACD·BB+EMA는 낙폭이 작았지만 거래가 21건에 불과해 후보 선별 최소 거래 수를 충족하지 못했다.

전년도 우수 후보를 바꿔 쓰는 방식은 누적 +9.63%, 비용 두 배에서는 −2.26%였다. 과거 전체 기간 1위를 매년 미리 알 수 있다는 가정은 사용할 수 없다. 454회는 여러 비용·기간·후보 계산 횟수이며 454개의 독립적인 검증 표본이 아니다.

## 원본 조사와 구현 차이

- **[UT Bot / UT Bot v2, QuantNomad](https://www.tradingview.com/script/lDGmh7ou-UT-Bot-v2-ATR-Trailing-Stop/):** ATR 추적선 교차 신호. 제작자의 [Python 설명](https://quantnomad.com/implementing-ut-bot-strategy-in-python-with-vectorbt/)을 참고해 독립 구현했다. ATR 10, 배수 1·2·3, 일반 4시간 OHLC를 사용한다. 원본 Pine 실행이 아니며 ATR 초기화, 공통 2.5 ATR 손절, 위험 배분·체결이 원본과 다르다. Heikin Ashi는 사용하지 않는다.
- **[Squeeze Momentum, LazyBear](https://www.tradingview.com/script/nqQ1DT5a-Squeeze-Momentum-Indicator-LazyBear/):** BB 20·2와 KC 20·1.5를 비교해 압축이 해제되는 첫 봉에서 선형회귀 모멘텀 방향으로 진입한다. KC 폭은 20개 실제 변동폭의 단순평균이며, 종가와 (20봉 고저 중간값+종가 평균)/2의 차이에 20봉 회귀를 적용한다. 모멘텀 둔화 시 청산한다. 원본 설명의 아이디어를 응용했으며 원본 코드/성과를 재현했다고 주장하지 않는다.
- **[Supertrend, Freqtrade 공개 전략](https://github.com/freqtrade/freqtrade-strategies/blob/main/user_data/strategies/Supertrend.py):** 단일 ATR 10·3 방향 전환을 응용했다. 원본의 세 지표 합의와 최적화 매개변수·ROI·1시간봉 구성을 재현한 것이 아니다.
- **[Lorentzian Classification, jdehorty](https://www.tradingview.com/script/WhBzgfDu-Machine-Learning-Lorentzian-Classification/):** 원본은 조사했고 거리 기반 kNN 아이디어만 따로 실험했다. 제작자도 화면 Trade Stats가 정식 백테스트의 대체물이 아니라고 설명한다. 이번 특징은 RSI 14·9, CCI 20, ADX 14, ATR로 나눈 EMA 20 이격도다. 원본의 WaveTrend·ANN·커널·필터와 다르므로 표의 `Lorentzian 거리 kNN 응용` 결과를 원본 지표의 성적이라고 해석하면 안 된다.
- **[Hummingbot MACD·BB 공개 예제](https://gist.github.com/cardosofede/54d31cae1d9bb0e6d70ead6191ca05d6):** 기존 프로젝트의 독립 응용을 재사용했다. BB 100·2, MACD 21·42·9, 밴드 위치 0.2/0.8 및 MACD 히스토그램 조건. 중앙선 복귀 청산을 추가했다. 원본 APE 3분봉·20배 구성을 BTC/ETH/SOL 4시간봉과 공통 위험 관리로 변경했다.
- **Donchian 20일:** 직전 120개 4시간봉의 고점/저점 돌파, 반대 60봉 채널 이탈 청산. 현재 봉을 돌파 기준에 포함하지 않는다.
- **RSI 2 눌림목:** 4시간 EMA 200 위에서 RSI 2<10일 때 롱, 아래에서 >90일 때 숏. 롱은 RSI>70 또는 EMA 아래, 숏은 RSI<30 또는 EMA 위에서 청산한다. 특정 판매자의 봇을 복제한 것이 아니다.
- **[NostalgiaForInfinity](https://github.com/iterativv/NostalgiaForInfinity):** 검토만 했고 원본을 실행하지 않았다. 권장 5분봉, 40–80개 거래쌍, 동시 6–12개 보유는 이 비교의 구성과 다르다. 원본의 높은 수익률 주장을 검증한 수치로 싣지 않았다.
- **[FreqAI](https://www.freqtrade.io/en/stable/freqai/):** ML 학습·검증 도구이며 그 자체로 고수익 매매 규칙은 아니다. 이번 비교는 FreqAI 원본 실행이 아니다.

## 조합 규칙

- 공통 필터: 4시간 EMA 200 방향 일치 또는 ADX 14≥20. `EMA 200`은 200일 평균이 아니라 **200개의 4시간봉**이다.
- 국면 분리: ADX≥25에서 20일 돌파, ADX<18에서 MACD·BB 회귀, 18≤ADX<25에서 관망. 국면이 변경되면 보유 포지션을 다음 시가에 청산한다. 해당 국면의 기본 청산과 공통 추적 손절도 적용한다.
- 2표 합의: 14일 모멘텀·Supertrend 방향·kNN 방향 중 2개가 같은 방향일 때 진입한다. 반대 합의 또는 공통 손절로 종료한다. 미래 수익을 보고 투표 가중치를 조절하지 않았다.
- kNN: 최대 이전 2,000봉을 4봉 간격으로 샘플링, 이웃 8개, 최소 알려진 표본 100개. 4봉 후 수익이 +0.13%를 넘으면 +1, −0.13% 미만이면 −1, 나머지는 0. 모든 정답의 종료가 판단 봉보다 최소 한 봉 이전이다. 투표 절댓값 0.25 이상만 사용한다. 수익률 예측이나 승률로 표시하지 않는다.
- 부스팅: 이전 연구에서 시간순 학습한 연도별 점수와 0.10 R 임계값을 그대로 재사용한다. 2026년 모델을 과거 연도에 적용하지 않았다. 모멘텀 거래용 모델을 다른 봇의 필터로 임의 사용하지 않았다.

## 검증 방식과 한계

- 2020년부터 실제 제공된 자료를 준비 구간으로 사용하고, 고정 전략 비교는 2022년부터 시작한다. SOL 상장은 2020년 9월이다. 이 선물 연구는 15년 백테스트가 아니다. 앞선 BTC 일별 15년 연구와 별개다.
- 완료된 4시간봉으로 판단하고 다음 15분봉 시가에 체결한다. 미래 자료를 붙여도 과거 신호가 바뀌지 않는 검사를 통과했다. 거래별 신호·체결 순서, 잔액 정합성, 한 종목 보유 한도를 실행 중 검사했다.
- 거래 위험예산 1%, BTC 5배·ETH/SOL 3배, 최대 명목 노출 2배, 낙폭별 규모 축소, UTC 일일 손실·연속 손실 중단 등 기존 엔진의 공통 규칙을 적용했다. 위험예산은 갭을 포함한 확정 손실 상한이 아니다.
- 기본 초기·추적 손절 2.5 ATR, 최대 보유 30일. 명시된 6 ATR 후보만 고정 익절한다. 필터에서 진입을 거절해도 기존 청산 보호는 계속 적용한다.
- 편도 수수료 0.045%, 슬리피지 0.02%, 기록된 실제 펀딩을 반영한다. 일부 후보는 펀딩 자료가 적용되지 않는 4–7포지션시간에 시간당 명목금액의 0.01% 지급을 가정했다. 각 결과의 `estimatedFundingHours`와 `warnings`에 기록했다. 현재 부스팅·Squeeze+EMA·국면 분리 후보의 전체 기간 계산에는 추정 펀딩 시간이 없다. 스트레스는 수수료와 슬리피지만 2배다. 종료 시 포지션을 비용을 내고 청산한다. 과거 마크가격의 정확한 강제청산, 호가 충격, 모든 수수료 등급을 복제하지 않았다.
- 연속 고정 계좌는 평가 마지막에만 전량 종료한다. 연도별 비교는 매년 $10,000으로 시작하고 연말 전량 종료한다. 워크포워드는 전년도 20건 이상 거래·수익/기대값/두 배 비용 수익 양수·낙폭≤25% 중 `Sharpe − 2×MDD` 최댓값을 선택하고, 해당 다음 연도 계좌들을 복리로 연결한다. 후보가 없으면 현금이다.
- 2026년은 8월까지의 부분 연도다. 이미 조사한 과거와 선택한 세 코인을 재사용하므로 과최적화·선택/생존편향이 남는다. 새 시점의 진입·거절 신호 기록으로 검증해야 한다.
- [TradingView 전략 문서](https://www.tradingview.com/pine-script-docs/concepts/strategies/)와 [Freqtrade 미래정보 검사](https://www.freqtrade.io/en/stable/lookahead-analysis/)를 함께 검토했다. 원본 시그널의 이미지상 승률이나 합성가격 결과를 검증된 순수익으로 옮기지 않았다.

## 재현

```bash
node scripts/test_signal_tournament.cjs
SIGNAL_RESEARCH_DATA=/path/to/crypto-15year-research node --max-old-space-size=4096 scripts/research_signal_tournament.cjs
```

입력은 앞선 연구의 `futures-market.json`, `futures-manifest.json`, `futures-test-scores.json`이다. 원시장 약 96 MB는 저장소에 중복 업로드하지 않았다. `plan.json`에 입력과 실행 코드 SHA-256을 기록했다. 시장 해시: `24ea0e30aceb63b1db1d947c51100d7449d4a60c5a00aa0e237dce1ad63818a2`.

원자료는 Binance 공식 월별 USD-M 15분봉·펀딩 아카이브이고, 월별 파일에 빠진 SOL 480봉은 공식 일별 파일의 체크섬을 검증해 보완했다. 겹치는 192봉은 동일했다. 최종 세 코인의 누락/잘못된 봉 수는 0이며 입력 내역과 복구 출처는 `input-manifest.json`에 보존했다. 외부 시장 파일과 이전 ML 점수 파일이 없으면 이 명령만으로 전체 비교가 실행되지 않는다.

`latest.json`은 전체 32개 성적·연도별 결과·조합 효과·일별 전략 수익의 상관계수를 담는다. 차트는 표시용 주간 표본이며, Sharpe와 최대 낙폭은 각각 일별 수익과 15분봉 계좌곡선에서 계산했다.
