docs: update for XRP-only operation — remove SOL/DOGE/TRX references
- SOL/DOGE/TRX removed: all showed PF < 1.0 across all parameter combinations in strategy sweep (2026-03-17) and live trading (2026-03-21) - ML filter disabled: Walk-Forward showed ML ON PF < ML OFF PF; ablation confirmed signal_strength/side dependency (A→C drop 0.08-0.09) - XRP ADX threshold: 30 → 25 (ADX=30 blocked all trades in current market) - Current production: XRPUSDT only, SL=1.5x TP=4.0x ADX≥25, NO_ML_FILTER=true Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
18
.env.example
18
.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=
|
||||
|
||||
@@ -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()`로 동시 실행, 서로 간섭 없음
|
||||
|
||||
@@ -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 |
|
||||
|
||||
27
README.md
27
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
|
||||
```
|
||||
|
||||
| 환경변수 | 설명 |
|
||||
|
||||
Reference in New Issue
Block a user