From 4245d7cdbfb532fd0fb8f3eeab8f879252b7a9bb Mon Sep 17 00:00:00 2001 From: 21in7 Date: Sun, 1 Mar 2026 22:16:15 +0900 Subject: [PATCH] feat: implement 15-minute timeframe upgrade for model training and data processing - Introduced a new markdown document detailing the plan to transition the entire pipeline from a 1-minute to a 15-minute timeframe, aiming to improve model AUC from 0.49-0.50 to over 0.53. - Updated key parameters across multiple scripts, including `LOOKAHEAD` adjustments and default data paths to reflect the new 15-minute interval. - Modified data fetching and training scripts to ensure compatibility with the new timeframe, including changes in `fetch_history.py`, `train_model.py`, and `train_and_deploy.sh`. - Enhanced the bot's data stream configuration to operate on a 15-minute interval, ensuring real-time data processing aligns with the new model training strategy. - Updated training logs to capture new model performance metrics under the revised timeframe. --- .../plans/2026-03-01-15m-timeframe-upgrade.md | 376 ++++++++++++++++++ models/mlx_filter.meta.npz | Bin 1186 -> 1186 bytes models/mlx_filter.npz | Bin 45764 -> 45764 bytes models/mlx_filter.onnx | Bin 0 -> 45243 bytes models/training_log.json | 27 ++ scripts/fetch_history.py | 6 +- scripts/train_and_deploy.sh | 9 +- scripts/train_mlx_model.py | 2 +- scripts/train_model.py | 4 +- src/bot.py | 2 +- src/data_stream.py | 20 +- src/dataset_builder.py | 4 +- src/ml_filter.py | 9 +- 13 files changed, 435 insertions(+), 24 deletions(-) create mode 100644 docs/plans/2026-03-01-15m-timeframe-upgrade.md create mode 100644 models/mlx_filter.onnx diff --git a/docs/plans/2026-03-01-15m-timeframe-upgrade.md b/docs/plans/2026-03-01-15m-timeframe-upgrade.md new file mode 100644 index 0000000..4075f75 --- /dev/null +++ b/docs/plans/2026-03-01-15m-timeframe-upgrade.md @@ -0,0 +1,376 @@ +# 15분봉 타임프레임 업그레이드 구현 계획 + +> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. + +**Goal:** 1분봉 파이프라인 전체를 15분봉으로 전환하고, LOOKAHEAD=24(6시간 뷰)로 조정해 모델 AUC를 0.49~0.50 구간에서 0.53+ 이상으로 개선한다. + +**Architecture:** 데이터 수집(fetch_history.py) → 데이터셋 빌더(dataset_builder.py) → 학습 스크립트(train_model.py, train_mlx_model.py) → 실시간 봇(bot.py, data_stream.py) 순서로 파라미터를 변경한다. 각 레이어는 `interval` 문자열과 `LOOKAHEAD` 상수만 수정하면 되며 피처 구조는 그대로 유지한다. + +**Tech Stack:** Python, LightGBM, pandas, binance-python-client, pytest + +--- + +## 변경 요약 + +| 파일 | 변경 내용 | +|------|-----------| +| `src/dataset_builder.py` | `LOOKAHEAD 90→24`, `WARMUP 60→60` (유지) | +| `scripts/train_model.py` | `LOOKAHEAD 60→24`, `--data` 기본값 `combined_1m→combined_15m` | +| `scripts/train_mlx_model.py` | `--data` 기본값 `combined_1m→combined_15m` | +| `scripts/fetch_history.py` | `--interval` 기본값 `1m→15m`, `--output` 기본값 반영 | +| `scripts/train_and_deploy.sh` | `--interval 1m→15m`, 파일명 `1m→15m` | +| `src/bot.py` | `interval="1m"→"15m"` | +| `src/data_stream.py` | `buffer_size` 기본값 `200→200` (유지, 15분봉 200개=50시간 충분) | + +--- + +## Task 1: dataset_builder.py — LOOKAHEAD 상수 변경 + +**Files:** +- Modify: `src/dataset_builder.py:14-17` + +**Step 1: 현재 상수 확인** + +```bash +head -20 src/dataset_builder.py +``` + +Expected: `LOOKAHEAD = 90`, `WARMUP = 60` + +**Step 2: 상수 변경** + +`src/dataset_builder.py` 14번째 줄: +```python +# 변경 전 +LOOKAHEAD = 90 +ATR_SL_MULT = 1.5 +ATR_TP_MULT = 2.0 +WARMUP = 60 + +# 변경 후 +LOOKAHEAD = 24 # 15분봉 × 24 = 6시간 뷰 +ATR_SL_MULT = 1.5 +ATR_TP_MULT = 2.0 +WARMUP = 60 # 15분봉 기준 60캔들 = 15시간 (지표 안정화 충분) +``` + +**Step 3: 변경 확인** + +```bash +head -20 src/dataset_builder.py +``` + +Expected: `LOOKAHEAD = 24` + +--- + +## Task 2: train_model.py — LOOKAHEAD 상수 및 기본 데이터 경로 변경 + +**Files:** +- Modify: `scripts/train_model.py:56-61`, `scripts/train_model.py:360` + +**Step 1: 현재 상수 확인** + +```bash +sed -n '55,62p' scripts/train_model.py +sed -n '358,362p' scripts/train_model.py +``` + +Expected: `LOOKAHEAD = 60`, `--data default="data/combined_1m.parquet"` + +**Step 2: LOOKAHEAD 변경** + +`scripts/train_model.py` 56번째 줄: +```python +# 변경 전 +LOOKAHEAD = 60 + +# 변경 후 +LOOKAHEAD = 24 # 15분봉 × 24 = 6시간 (dataset_builder.py와 동기화) +``` + +**Step 3: --data 기본값 변경** + +`scripts/train_model.py` 360번째 줄 근처 `argparse` 부분: +```python +# 변경 전 +parser.add_argument("--data", default="data/combined_1m.parquet") + +# 변경 후 +parser.add_argument("--data", default="data/combined_15m.parquet") +``` + +**Step 4: 변경 확인** + +```bash +grep -n "LOOKAHEAD\|combined_" scripts/train_model.py +``` + +Expected: `LOOKAHEAD = 24`, `combined_15m.parquet` + +--- + +## Task 3: train_mlx_model.py — 기본 데이터 경로 변경 + +**Files:** +- Modify: `scripts/train_mlx_model.py:149` + +**Step 1: 현재 기본값 확인** + +```bash +grep -n "combined_" scripts/train_mlx_model.py +``` + +Expected: `default="data/combined_1m.parquet"` + +**Step 2: 기본값 변경** + +`scripts/train_mlx_model.py` 149번째 줄: +```python +# 변경 전 +parser.add_argument("--data", default="data/combined_1m.parquet") + +# 변경 후 +parser.add_argument("--data", default="data/combined_15m.parquet") +``` + +**Step 3: 변경 확인** + +```bash +grep -n "combined_" scripts/train_mlx_model.py +``` + +Expected: `combined_15m.parquet` + +--- + +## Task 4: fetch_history.py — 기본 interval 및 output 변경 + +**Files:** +- Modify: `scripts/fetch_history.py:114-118` + +**Step 1: 현재 argparse 기본값 확인** + +```bash +sed -n '112,120p' scripts/fetch_history.py +``` + +Expected: `--interval default="1m"`, `--output default="data/xrpusdt_1m.parquet"` + +**Step 2: 기본값 변경** + +```python +# 변경 전 +parser.add_argument("--interval", default="1m") +parser.add_argument("--days", type=int, default=90) +parser.add_argument("--output", default="data/xrpusdt_1m.parquet") + +# 변경 후 +parser.add_argument("--interval", default="15m") +parser.add_argument("--days", type=int, default=365) +parser.add_argument("--output", default="data/xrpusdt_15m.parquet") +``` + +**Step 3: 변경 확인** + +```bash +grep -n "interval\|output\|days" scripts/fetch_history.py | grep "default" +``` + +Expected: `default="15m"`, `default=365`, `default="data/xrpusdt_15m.parquet"` + +--- + +## Task 5: train_and_deploy.sh — interval 및 파일명 변경 + +**Files:** +- Modify: `scripts/train_and_deploy.sh:26-43` + +**Step 1: 현재 스크립트 확인** + +```bash +cat scripts/train_and_deploy.sh +``` + +**Step 2: 스크립트 변경** + +```bash +# 변경 전 (26~32번째 줄) +echo "=== [1/3] 데이터 수집 (XRP + BTC + ETH 3심볼, 1년치) ===" +python scripts/fetch_history.py \ + --symbols XRPUSDT BTCUSDT ETHUSDT \ + --interval 1m \ + --days 365 \ + --output data/xrpusdt_1m.parquet +# 결과: data/combined_1m.parquet (타임스탬프 기준 병합) + +# 변경 후 +echo "=== [1/3] 데이터 수집 (XRP + BTC + ETH 3심볼, 1년치) ===" +python scripts/fetch_history.py \ + --symbols XRPUSDT BTCUSDT ETHUSDT \ + --interval 15m \ + --days 365 \ + --output data/xrpusdt_15m.parquet +# 결과: data/combined_15m.parquet (타임스탬프 기준 병합) +``` + +```bash +# 변경 전 (38~43번째 줄) + python scripts/train_mlx_model.py --data data/combined_1m.parquet --decay "$DECAY" +else + echo " 백엔드: LightGBM (CPU), decay=${DECAY}" + python scripts/train_model.py --data data/combined_1m.parquet --decay "$DECAY" + +# 변경 후 + python scripts/train_mlx_model.py --data data/combined_15m.parquet --decay "$DECAY" +else + echo " 백엔드: LightGBM (CPU), decay=${DECAY}" + python scripts/train_model.py --data data/combined_15m.parquet --decay "$DECAY" +``` + +**Step 3: 변경 확인** + +```bash +grep -n "1m\|15m" scripts/train_and_deploy.sh +``` + +Expected: 모든 `1m` 참조가 `15m`으로 변경됨 + +--- + +## Task 6: bot.py — 실시간 스트림 interval 변경 + +**Files:** +- Modify: `src/bot.py:22-25` + +**Step 1: 현재 interval 확인** + +```bash +grep -n "interval" src/bot.py +``` + +Expected: `interval="1m"` (MultiSymbolStream 생성자) + +**Step 2: interval 변경** + +`src/bot.py` 21~25번째 줄: +```python +# 변경 전 +self.stream = MultiSymbolStream( + symbols=[config.symbol, "BTCUSDT", "ETHUSDT"], + interval="1m", + on_candle=self._on_candle_closed, +) + +# 변경 후 +self.stream = MultiSymbolStream( + symbols=[config.symbol, "BTCUSDT", "ETHUSDT"], + interval="15m", + on_candle=self._on_candle_closed, +) +``` + +**Step 3: 변경 확인** + +```bash +grep -n "interval" src/bot.py +``` + +Expected: `interval="15m"` + +--- + +## Task 7: 전체 변경 검증 + +**Step 1: 모든 `1m` 하드코딩 잔재 확인** + +```bash +grep -rn '"1m"' src/ scripts/ +``` + +Expected: 결과 없음 (모두 `"15m"`으로 변경됨) + +**Step 2: LOOKAHEAD 동기화 확인** + +```bash +grep -rn "LOOKAHEAD" src/ scripts/ +``` + +Expected: +- `src/dataset_builder.py`: `LOOKAHEAD = 24` +- `scripts/train_model.py`: `LOOKAHEAD = 24` + +**Step 3: combined 파일명 일관성 확인** + +```bash +grep -rn "combined_" src/ scripts/ +``` + +Expected: 모두 `combined_15m` 참조 + +**Step 4: 파이프라인 드라이런 (데이터 없이 import 테스트)** + +```bash +python -c " +from src.dataset_builder import LOOKAHEAD, ATR_SL_MULT, ATR_TP_MULT, WARMUP +assert LOOKAHEAD == 24, f'LOOKAHEAD={LOOKAHEAD}' +print(f'OK: LOOKAHEAD={LOOKAHEAD}, ATR_SL={ATR_SL_MULT}, ATR_TP={ATR_TP_MULT}, WARMUP={WARMUP}') +" +``` + +Expected: `OK: LOOKAHEAD=24, ATR_SL=1.5, ATR_TP=2.0, WARMUP=60` + +--- + +## Task 8: 데이터 수집 및 Walk-Forward 검증 실행 + +> 이 태스크는 실제 바이낸스 API 키와 네트워크가 필요합니다. + +**Step 1: 15분봉 데이터 수집** + +```bash +python scripts/fetch_history.py \ + --symbols XRPUSDT BTCUSDT ETHUSDT \ + --interval 15m \ + --days 365 \ + --output data/xrpusdt_15m.parquet +``` + +Expected: `data/combined_15m.parquet` 생성, 약 35,040행 (365일 × 96캔들/일) + +**Step 2: Walk-Forward AUC 측정 (기준선 확인)** + +```bash +python scripts/train_model.py \ + --data data/combined_15m.parquet \ + --wf \ + --wf-splits 5 +``` + +Expected: Walk-Forward 평균 AUC가 0.53 이상이면 개선 확인 + +**Step 3: 정식 학습 및 모델 저장** + +```bash +python scripts/train_model.py \ + --data data/combined_15m.parquet \ + --decay 2.0 +``` + +Expected: `models/lgbm_filter.pkl` 저장, 기존 모델은 `lgbm_filter_prev.pkl`로 백업 + +--- + +## 롤백 방법 + +15분봉 모델이 기대에 미치지 못할 경우: + +```bash +# 기존 1분봉 모델 복원 +cp models/lgbm_filter_prev.pkl models/lgbm_filter.pkl + +# 코드는 git으로 복원 +git checkout src/dataset_builder.py scripts/train_model.py \ + scripts/train_mlx_model.py scripts/fetch_history.py \ + scripts/train_and_deploy.sh src/bot.py +``` diff --git a/models/mlx_filter.meta.npz b/models/mlx_filter.meta.npz index 0c02e5e1d69961d152016ab86685553da15d13a9..a8dbf26171504791f1d5117689bd1538453cf28f 100644 GIT binary patch delta 241 zcmZ3)xrkFJz?+#xmjMD486;N3L{1c1kyhp6<|O*Q$%3Kni(MkO+3x83PEKsSE>5cp zYVG8EI33vP9QXbD{b=tKs}*~jbsZdDPX1?SX0>tO4E^$bwOecVEjqA#-`|3QeO`w$ z_Z_?UVy_Ly7F$%CT4IalOjclA9%5-d)v-2gjkU!@QTsi7HTJbjemid4`_^$o-~s!% z^Jnc3I|w=0Dl5Ku!#6*Ul#k;-e}=z c`^H8?`_0l!^BGw{o|(Ll*@y*f*B9n>0HxGlTL1t6 delta 241 zcmZ3)xrkFJz?+#xmjMD487!BaH=8K5BJEF(lhe=hxjVE1U)bph&fDuGYwr{(?BrA* zwbAO&8e@k;v)p&`#Dwgu{5oOhhxHB)b6Nk|{WaXTLyM1l=M5FxorTiDJ1?-#*?C&| z{La&^3=VpGg&k0B5?1b+Iaz^md5EC$WJg(>16CU^@!DUWSY_WV`_+-{?Gwic-6>Yg zGH2|Q4?A0L>g=>uTD#L)P4u$u#NYqzend^Q;=298>WY}Gb(#>nbz_siwMBHBbxJ>r cv#kIQb054Tp>Hq)$ diff --git a/models/mlx_filter.npz b/models/mlx_filter.npz index 73097f0f586407ae24f799797e817fe01b39dc1c..760b2553095f46683b84e4238eb73e32bb7a77c2 100644 GIT binary patch literal 45764 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

#`&RmnilOwEnr+`p;@W2Y*2^>Yg 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%0Dul@g1&Kpffs-(nx3#K%7{(6&M}q3k<{Em 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�jg5*k3A* zCkt$F?9U@M)@TlOm5pSPrRe(R64y69r|Du`a5K_(-z|pYSV^<4;+< z`a}@5WK`i)M=We>ih_YAV~&eSC3cxJAtnlGf1Dji-cg5E-7MIe;)>@q-eQNCD`@Nl z$lp^+4*fnyBZNv}bdD2Iu?)ic_l_`mEFI)WR^q16MyhvPkes_4jN)etK>GX;iE}&w zFHRR=myRzUt2jo+YsS#37*YIX832E;8Jfr@31M)f8+3>PoLpT7nYlAjD>9$DFuK>BrNt*!Oo6nmo^eukur&&o>)3 z59>n^-OL&Q4^PfnjkD)R(m?@bnA@?s-n6fXI*Jbvk6E!$D%L~4t2`ppo;jOn+5k%- zhqSAdq0MQ2QfggB$7W>0%w6?tW3CJvXQ>3kZK-(oWfF>YuEue@I4`6<=H!~y0bG|f zm44!Cd`AS9g5jJqpe+*yTaNOhU6leuUj=1%VJy+AH zr!&XmK+2+oxE621)o1cy#?pS0!g11`GmfKp>shGsj)qJ&1;>^q(R2Z~XLM_mTYnJotF(&G*>szVjbK^?%M>oxM)kT7a9$ zjsKo`;9oO!|JRwN&6PJ+a-aXtnEbER{(Tq8FE04+HUGoK{?Ap*rY^UzRAWf7soBsN8?Xf6uLp|7Y(1Px7v|5#~OR Sk8d3J=fVA#D{B6E_J06P#||0* diff --git a/models/mlx_filter.onnx b/models/mlx_filter.onnx new file mode 100644 index 0000000000000000000000000000000000000000..2b9c4faa0b7284e90956b796b6654cf90e0fc0eb GIT binary patch literal 45243 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 JFhEu9e*hbT7Hj|j literal 0 HcmV?d00001 diff --git a/models/training_log.json b/models/training_log.json index 6fd7291..99a3c06 100644 --- a/models/training_log.json +++ b/models/training_log.json @@ -135,5 +135,32 @@ "features": 21, "time_weight_decay": 3.0, "model_path": "models/lgbm_filter.pkl" + }, + { + "date": "2026-03-01T22:12:06.299119", + "backend": "mlx", + "auc": 0.5746, + "samples": 533, + "train_sec": 0.2, + "time_weight_decay": 2.0, + "model_path": "models/mlx_filter.weights" + }, + { + "date": "2026-03-01T22:13:20.434893", + "backend": "mlx", + "auc": 0.5663, + "samples": 533, + "train_sec": 0.2, + "time_weight_decay": 2.0, + "model_path": "models/mlx_filter.weights" + }, + { + "date": "2026-03-01T22:15:43.163315", + "backend": "lgbm", + "auc": 0.5581, + "samples": 533, + "features": 21, + "time_weight_decay": 2.0, + "model_path": "models/lgbm_filter.pkl" } ] \ No newline at end of file diff --git a/scripts/fetch_history.py b/scripts/fetch_history.py index a5355d4..9f33d5b 100644 --- a/scripts/fetch_history.py +++ b/scripts/fetch_history.py @@ -113,9 +113,9 @@ def main(): ) parser.add_argument("--symbols", nargs="+", default=["XRPUSDT"]) parser.add_argument("--symbol", default=None, help="단일 심볼 (--symbols 미사용 시)") - parser.add_argument("--interval", default="1m") - parser.add_argument("--days", type=int, default=90) - parser.add_argument("--output", default="data/xrpusdt_1m.parquet") + parser.add_argument("--interval", default="15m") + parser.add_argument("--days", type=int, default=365) + parser.add_argument("--output", default="data/combined_15m.parquet") args = parser.parse_args() # 하위 호환: --symbol 단독 사용 시 symbols로 통합 diff --git a/scripts/train_and_deploy.sh b/scripts/train_and_deploy.sh index f84260b..13420a6 100755 --- a/scripts/train_and_deploy.sh +++ b/scripts/train_and_deploy.sh @@ -26,20 +26,19 @@ cd "$PROJECT_ROOT" echo "=== [1/3] 데이터 수집 (XRP + BTC + ETH 3심볼, 1년치) ===" python scripts/fetch_history.py \ --symbols XRPUSDT BTCUSDT ETHUSDT \ - --interval 1m \ + --interval 15m \ --days 365 \ - --output data/xrpusdt_1m.parquet -# 결과: data/combined_1m.parquet (타임스탬프 기준 병합) + --output data/combined_15m.parquet echo "" echo "=== [2/3] 모델 학습 (21개 피처: XRP 13 + BTC/ETH 상관관계 8) ===" DECAY="${TIME_WEIGHT_DECAY:-2.0}" if [ "$BACKEND" = "mlx" ]; then echo " 백엔드: MLX (Apple Silicon GPU), decay=${DECAY}" - python scripts/train_mlx_model.py --data data/combined_1m.parquet --decay "$DECAY" + python scripts/train_mlx_model.py --data data/combined_15m.parquet --decay "$DECAY" else echo " 백엔드: LightGBM (CPU), decay=${DECAY}" - python scripts/train_model.py --data data/combined_1m.parquet --decay "$DECAY" + python scripts/train_model.py --data data/combined_15m.parquet --decay "$DECAY" fi echo "" diff --git a/scripts/train_mlx_model.py b/scripts/train_mlx_model.py index a6ca1f0..9efa2a2 100644 --- a/scripts/train_mlx_model.py +++ b/scripts/train_mlx_model.py @@ -146,7 +146,7 @@ def train_mlx(data_path: str, time_weight_decay: float = 2.0) -> float: def main(): parser = argparse.ArgumentParser() - parser.add_argument("--data", default="data/combined_1m.parquet") + parser.add_argument("--data", default="data/combined_15m.parquet") parser.add_argument( "--decay", type=float, default=2.0, help="시간 가중치 감쇠 강도 (0=균등, 2.0=최신이 ~7.4배 높음)", diff --git a/scripts/train_model.py b/scripts/train_model.py index f2e4fa3..5850a5b 100644 --- a/scripts/train_model.py +++ b/scripts/train_model.py @@ -53,7 +53,7 @@ def _cgroup_cpu_count() -> int: return cpu_count() -LOOKAHEAD = 60 +LOOKAHEAD = 24 # 15분봉 × 24 = 6시간 (dataset_builder.py와 동기화) ATR_SL_MULT = 1.5 ATR_TP_MULT = 3.0 MODEL_PATH = Path("models/lgbm_filter.pkl") @@ -357,7 +357,7 @@ def walk_forward_auc( def main(): parser = argparse.ArgumentParser() - parser.add_argument("--data", default="data/combined_1m.parquet") + parser.add_argument("--data", default="data/combined_15m.parquet") parser.add_argument( "--decay", type=float, default=2.0, help="시간 가중치 감쇠 강도 (0=균등, 2.0=최신이 ~7.4배 높음)", diff --git a/src/bot.py b/src/bot.py index 02f7bee..4dfeea8 100644 --- a/src/bot.py +++ b/src/bot.py @@ -20,7 +20,7 @@ class TradingBot: self.current_trade_side: str | None = None # "LONG" | "SHORT" self.stream = MultiSymbolStream( symbols=[config.symbol, "BTCUSDT", "ETHUSDT"], - interval="1m", + interval="15m", on_candle=self._on_candle_closed, ) diff --git a/src/data_stream.py b/src/data_stream.py index 5d1f0ef..7fe9065 100644 --- a/src/data_stream.py +++ b/src/data_stream.py @@ -5,13 +5,21 @@ import pandas as pd from binance import AsyncClient, BinanceSocketManager from loguru import logger +# 15분봉 기준 EMA50 안정화에 필요한 최소 캔들 수. +# EMA50=50, StochRSI(14,14,3,3)=44, MACD(12,26,9)=33 중 최댓값에 여유분 추가. +_MIN_CANDLES_FOR_SIGNAL = 100 + +# 초기 구동 시 REST API로 가져올 과거 캔들 수. +# 15분봉 200개 = 50시간치 — EMA50(12.5h) 대비 4배 여유. +_PRELOAD_LIMIT = 200 + class KlineStream: def __init__( self, symbol: str, - interval: str = "1m", + interval: str = "15m", buffer_size: int = 200, on_candle: Callable = None, ): @@ -40,13 +48,13 @@ class KlineStream: self.on_candle(candle) def get_dataframe(self) -> pd.DataFrame | None: - if len(self.buffer) < 50: + if len(self.buffer) < _MIN_CANDLES_FOR_SIGNAL: return None df = pd.DataFrame(list(self.buffer)) df.set_index("timestamp", inplace=True) return df - async def _preload_history(self, client: AsyncClient, limit: int = 200): + async def _preload_history(self, client: AsyncClient, limit: int = _PRELOAD_LIMIT): """REST API로 과거 캔들 데이터를 버퍼에 미리 채운다.""" logger.info(f"과거 캔들 {limit}개 로드 중...") klines = await client.futures_klines( @@ -96,7 +104,7 @@ class MultiSymbolStream: def __init__( self, symbols: list[str], - interval: str = "1m", + interval: str = "15m", buffer_size: int = 200, on_candle: Callable = None, ): @@ -142,13 +150,13 @@ class MultiSymbolStream: def get_dataframe(self, symbol: str) -> pd.DataFrame | None: key = symbol.lower() buf = self.buffers.get(key) - if buf is None or len(buf) < 50: + if buf is None or len(buf) < _MIN_CANDLES_FOR_SIGNAL: return None df = pd.DataFrame(list(buf)) df.set_index("timestamp", inplace=True) return df - async def _preload_history(self, client: AsyncClient, limit: int = 200): + async def _preload_history(self, client: AsyncClient, limit: int = _PRELOAD_LIMIT): """REST API로 모든 심볼의 과거 캔들을 버퍼에 미리 채운다.""" for symbol in self.symbols: logger.info(f"{symbol.upper()} 과거 캔들 {limit}개 로드 중...") diff --git a/src/dataset_builder.py b/src/dataset_builder.py index fb451d4..9605a29 100644 --- a/src/dataset_builder.py +++ b/src/dataset_builder.py @@ -11,10 +11,10 @@ import pandas_ta as ta from src.ml_features import FEATURE_COLS -LOOKAHEAD = 90 +LOOKAHEAD = 24 # 15분봉 × 24 = 6시간 뷰 ATR_SL_MULT = 1.5 ATR_TP_MULT = 2.0 -WARMUP = 60 # 지표 안정화에 필요한 최소 행 수 +WARMUP = 60 # 15분봉 기준 60캔들 = 15시간 (지표 안정화 충분) def _calc_indicators(df: pd.DataFrame) -> pd.DataFrame: diff --git a/src/ml_filter.py b/src/ml_filter.py index 97e9034..9b69c52 100644 --- a/src/ml_filter.py +++ b/src/ml_filter.py @@ -44,6 +44,11 @@ class MLFilter: self._try_load() def _try_load(self): + # 로드 여부와 무관하게 두 파일의 현재 mtime을 항상 기록한다. + # 이렇게 해야 로드하지 않은 쪽 파일이 나중에 변경됐을 때만 리로드가 트리거된다. + self._loaded_onnx_mtime = _mtime(self._onnx_path) + self._loaded_lgbm_mtime = _mtime(self._lgbm_path) + # ONNX 우선 시도 if self._onnx_path.exists(): try: @@ -53,8 +58,6 @@ class MLFilter: providers=["CPUExecutionProvider"], ) self._lgbm_model = None - self._loaded_onnx_mtime = _mtime(self._onnx_path) - self._loaded_lgbm_mtime = 0.0 logger.info( f"ML 필터 로드: ONNX ({self._onnx_path}) " f"| 임계값={self._threshold}" @@ -68,8 +71,6 @@ class MLFilter: if self._lgbm_path.exists(): try: self._lgbm_model = joblib.load(self._lgbm_path) - self._loaded_lgbm_mtime = _mtime(self._lgbm_path) - self._loaded_onnx_mtime = 0.0 logger.info( f"ML 필터 로드: LightGBM ({self._lgbm_path}) " f"| 임계값={self._threshold}"