diff --git a/.env.example b/.env.example index ef22938..ff6be14 100644 --- a/.env.example +++ b/.env.example @@ -1,9 +1,8 @@ BINANCE_API_KEY= BINANCE_API_SECRET= -SYMBOLS=XRPUSDT,SOLUSDT,DOGEUSDT +SYMBOLS=XRPUSDT CORRELATION_SYMBOLS=BTCUSDT,ETHUSDT -LEVERAGE=10 -RISK_PER_TRADE=0.02 +LEVERAGE=20 DISCORD_WEBHOOK_URL= ML_THRESHOLD=0.55 NO_ML_FILTER=true @@ -15,19 +14,10 @@ SIGNAL_THRESHOLD=3 ADX_THRESHOLD=25 VOL_MULTIPLIER=2.5 -# Per-symbol strategy params (2026-03-17 sweep optimized) +# Per-symbol strategy params (2026-03-21 운영 설정) ATR_SL_MULT_XRPUSDT=1.5 ATR_TP_MULT_XRPUSDT=4.0 -ADX_THRESHOLD_XRPUSDT=30 - -ATR_SL_MULT_SOLUSDT=1.0 -ATR_TP_MULT_SOLUSDT=4.0 -ADX_THRESHOLD_SOLUSDT=20 -MARGIN_MAX_RATIO_SOLUSDT=0.08 - -ATR_SL_MULT_DOGEUSDT=2.0 -ATR_TP_MULT_DOGEUSDT=2.0 -ADX_THRESHOLD_DOGEUSDT=30 +ADX_THRESHOLD_XRPUSDT=25 DASHBOARD_API_URL=http://10.1.10.24:8000 BINANCE_TESTNET_API_KEY= BINANCE_TESTNET_API_SECRET= diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index afe7b0a..40a3d29 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -35,15 +35,15 @@ CoinTrader는 **Binance Futures 자동매매 봇**입니다. ``` main.py - └─ Config (SYMBOLS=XRPUSDT,SOLUSDT,DOGEUSDT) + └─ Config (SYMBOLS=XRPUSDT) # 멀티심볼 지원, 현재 XRP만 운영 └─ RiskManager (공유 싱글턴, asyncio.Lock) └─ asyncio.gather( TradingBot(symbol="XRPUSDT", risk=shared_risk), - TradingBot(symbol="SOLUSDT", risk=shared_risk), - TradingBot(symbol="DOGEUSDT", risk=shared_risk), ) ``` +> **운영 이력**: SOL/DOGE/TRX는 파라미터 스윕에서 모든 조합에서 PF < 1.0으로 제외 (2026-03-21). + - **독립**: 각 봇은 자체 `Exchange`, `MLFilter`, `DataStream`, `SymbolStrategyParams`를 소유 - **공유**: `RiskManager`만 싱글턴으로 글로벌 리스크(일일 손실 한도, 동일 방향 제한) 관리 - **병렬**: `asyncio.gather()`로 동시 실행, 서로 간섭 없음 diff --git a/CLAUDE.md b/CLAUDE.md index 7fbb880..2d021cb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -90,7 +90,7 @@ bash scripts/deploy_model.sh --symbol XRPUSDT ## Configuration -Environment variables via `.env` file (see `.env.example`). Key vars: `BINANCE_API_KEY`, `BINANCE_API_SECRET`, `SYMBOLS` (comma-separated, e.g. `XRPUSDT,TRXUSDT`), `CORRELATION_SYMBOLS` (default `BTCUSDT,ETHUSDT`), `LEVERAGE`, `DISCORD_WEBHOOK_URL`, `MARGIN_MAX_RATIO`, `MARGIN_MIN_RATIO`, `MAX_SAME_DIRECTION` (default 2), `NO_ML_FILTER`. +Environment variables via `.env` file (see `.env.example`). Key vars: `BINANCE_API_KEY`, `BINANCE_API_SECRET`, `SYMBOLS` (comma-separated, currently `XRPUSDT` only — SOL/DOGE/TRX removed due to PF < 1.0), `CORRELATION_SYMBOLS` (default `BTCUSDT,ETHUSDT`), `LEVERAGE`, `DISCORD_WEBHOOK_URL`, `MARGIN_MAX_RATIO`, `MARGIN_MIN_RATIO`, `MAX_SAME_DIRECTION` (default 2), `NO_ML_FILTER` (default `true` — ML disabled due to insufficient feature alpha). `src/config.py` uses `@dataclass` with `__post_init__` to load and validate all env vars. Per-symbol strategy params supported via `SymbolStrategyParams` — override with `ATR_SL_MULT_{SYMBOL}`, `ATR_TP_MULT_{SYMBOL}`, `SIGNAL_THRESHOLD_{SYMBOL}`, `ADX_THRESHOLD_{SYMBOL}`, `VOL_MULTIPLIER_{SYMBOL}`. Access via `config.get_symbol_params(symbol)`. @@ -147,4 +147,5 @@ All design documents and implementation plans are stored in `docs/plans/` with t | 2026-03-21 | `ml-pipeline-fixes` (C1,C3,I1,I3,I4,I5) | Completed | | 2026-03-21 | `training-threshold-relaxation` (plan) | Completed | | 2026-03-21 | `purged-gap-and-ablation` (plan) | Completed | +| 2026-03-21 | `ml-validation-result` | ML OFF > ML ON 확정, SOL/DOGE/TRX 제외, XRP 단독 운영 | | 2026-03-21 | `ml-validation-pipeline` (plan) | Completed | diff --git a/README.md b/README.md index b18da8f..7706cad 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # CoinTrader -Binance Futures 자동매매 봇. 복합 기술 지표와 ML 필터(LightGBM / MLX 신경망)를 결합하여 다중 심볼(XRP, TRX, DOGE 등) 선물 포지션을 동시에 자동 진입·청산하며, Discord로 실시간 알림을 전송합니다. +Binance Futures 자동매매 봇. 복합 기술 지표와 킬스위치로 XRPUSDT 선물 포지션을 자동 진입·청산하며, Discord로 실시간 알림을 전송합니다. 멀티심볼 아키텍처를 지원하지만, 현재 XRP만 운영 중입니다. + +> **심볼 운영 이력**: SOL, DOGE, TRX는 파라미터 스윕에서 모든 ADX 수준에서 PF < 1.0으로, 현재 전략으로는 수익을 낼 수 없어 제외되었습니다 (2026-03-21). ML 필터도 기술 지표 기반 피처의 예측력 한계로 비활성화 상태 (`NO_ML_FILTER=true`). > **이 봇은 실제 자산을 거래합니다.** 운영 전 반드시 Binance Testnet에서 충분히 검증하세요. > 과거 수익이 미래 수익을 보장하지 않습니다. 투자 손실에 대한 책임은 사용자 본인에게 있습니다. @@ -52,7 +54,7 @@ cp .env.example .env # 필수 BINANCE_API_KEY=your_api_key BINANCE_API_SECRET=your_api_secret -SYMBOLS=XRPUSDT,SOLUSDT,DOGEUSDT # 거래할 심볼 (쉼표 구분) +SYMBOLS=XRPUSDT # 거래할 심볼 (쉼표 구분, 멀티심볼 지원) # 권장 DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/... @@ -129,21 +131,14 @@ Discord 웹훅을 설정했다면 진입/청산 시 실시간 알림을 받게 **심볼별 오버라이드**: `{환경변수}_{심볼}` 형태로 심볼마다 독립 설정 가능. 미설정 시 전역 기본값 사용. ```env -# 예시: 스윕 최적화 결과 +# 현재 운영 설정 (2026-03-21) ATR_SL_MULT_XRPUSDT=1.5 ATR_TP_MULT_XRPUSDT=4.0 -ADX_THRESHOLD_XRPUSDT=30 - -ATR_SL_MULT_SOLUSDT=1.0 -ATR_TP_MULT_SOLUSDT=4.0 -ADX_THRESHOLD_SOLUSDT=20 -MARGIN_MAX_RATIO_SOLUSDT=0.08 - -ATR_SL_MULT_DOGEUSDT=2.0 -ATR_TP_MULT_DOGEUSDT=2.0 -ADX_THRESHOLD_DOGEUSDT=30 +ADX_THRESHOLD_XRPUSDT=25 ``` +> **제외된 심볼**: SOLUSDT(PF 0.00~0.83), DOGEUSDT(PF 0.70~0.83), TRXUSDT(PF 0.08) — 모든 파라미터 조합에서 PF < 1.0. + ### ML 필터 ML 필터는 기술 지표 신호를 한 번 더 검증하여 오진입을 차단합니다. 기본적으로 **비활성화** 상태입니다. @@ -151,7 +146,7 @@ ML 필터는 기술 지표 신호를 한 번 더 검증하여 오진입을 차 - `NO_ML_FILTER=true` (기본값) — ML 없이 기술 지표만으로 운영 - `NO_ML_FILTER=false` — ML 필터 활성화 (모델 파일 필요) -> 현재 기본값이 비활성화인 이유: 학습 데이터가 충분히 축적되기 전까지 ML 모델의 예측력이 낮습니다. ADX 필터와 거래량 배수 조합만으로 PF 1.5 이상을 달성하고 있어, 충분한 거래 데이터(150건 이상)가 쌓일 때까지 ML 없이 운영합니다. +> **비활성화 이유 (2026-03-21)**: Walk-Forward 백테스트에서 ML ON이 ML OFF보다 오히려 PF가 낮았습니다 (XRP: ML OFF PF 1.16 vs ML ON PF 0.71). Feature ablation 분석 결과, 모델 예측력의 대부분이 signal_strength/side 피처에 의존하며 (A→C AUC 드롭 0.08~0.09), 기술 지표 z-score만으로는 수수료를 이기는 알파를 만들 수 없었습니다. 오더북/청산 데이터 등 새로운 피처 소스에서 알파가 확인되면 재활성화 예정. --- @@ -180,7 +175,7 @@ ML 필터는 기술 지표 신호를 한 번 더 검증하여 오진입을 차 | **Slow Kill** | 최근 15거래 Profit Factor < 0.75 | 점진적 엣지 소실 | **동작 방식:** -- 심볼별 독립 제어: SOL이 킬되어도 XRP/DOGE는 정상 운영 +- 심볼별 독립 제어: 한 심볼이 킬되어도 다른 심볼은 정상 운영 - 진입만 차단: 기존 포지션의 SL/TP 청산은 정상 작동 (물린 상태 방치 방지) - 거래 이력 persist: `data/trade_history/{symbol}.jsonl`에 매 청산마다 기록 - 봇 재시작 시 소급 검증: 이력 파일에서 마지막 15건을 읽어 킬스위치 상태 복원 @@ -190,8 +185,6 @@ ML 필터는 기술 지표 신호를 한 번 더 검증하여 오진입을 차 ``` [킬스위치 모니터링] XRP: 연속손실 2/8 | 15거래PF 1.42 - SOL: 연속손실 0/8 | 15거래PF -.-- (3건) - DOGE: 연속손실 6/8 ⚠ | 15거래PF 0.71 🔴 KILLED ``` | 환경변수 | 설명 |