- κΈ°λ₯: Binance USDT-M PERPETUAL μ λ¬Ό κ±°λμμμ μμ λ°μ΄ν°λ₯Ό λ€μ΄λ‘λν©λλ€.
- μμ§ λ°μ΄ν°:
- 1λΆλ΄ Klines: μκ°/κ³ κ°/μ κ°/μ’ κ°, κ±°λλ, κ±°λ 건μ, Taker λ§€μ/λ§€λλ
- Premium Index Klines: νλ¬Ό λλΉ μ λ¬Ό κ°κ²© ν리미μ (1λΆ λ¨μ)
- 5λΆ Metrics: λ―Έκ²°μ μ½μ (OI), λ‘±/μ λΉμ¨, νκ· κ±°λ κΈμ‘ λ± (1λΆ λ¨μλ‘ backfill)
- μ²λ¦¬ λ°©μ:
- λ³λ ¬ μ²λ¦¬λ‘ μ¬λ¬ μ¬λ³Όμ λμμ λ€μ΄λ‘λ (κΈ°λ³Έκ°: CPU μ½μ΄ μ)
- κ° μ¬λ³Όλ³λ‘ 1μΌμΉ λ°μ΄ν°(1440ν) κ²μ¦
- λ μ§λ³λ‘ λͺ¨λ μ¬λ³Όμ λ°μ΄ν°λ₯Ό νλμ HDF5 νμΌλ‘ μ μ₯ (
data/1m_raw_data/{date}.h5)
- μ¬μ©λ²:
python raw_data_fetcher.py --start_date 2025-02-01 --end_date 2025-02-07 --workers 16
- κΈ°λ₯: λ€μ΄λ‘λλ μμ λ°μ΄ν°μ νμ§μ κ²μ¦νκ³ μ μ ν©λλ€.
- κ²μ¦ νλͺ©:
- μ¬λ³Όλ³ ν μ κ²μ¦: κ° μ¬λ³Όμ΄ μ νν 1440ν(1μΌμΉ 1λΆλ΄)μ κ°λμ§ νμΈ
- NaN κ° κ²μ¬: νμ 컬λΌμ NaNμ΄ μ‘΄μ¬νλμ§ νμΈ
- μλ νν°λ§: NaNμ΄ 30κ° μ΄μμΈ μ¬λ³Ό λλ USDλ‘ μμνλ μ€ν μ΄λΈμ½μΈ μλ μ μΈ
- μ μ λ°©λ²:
- Forward Fill: μ¬λ³Όλ³λ‘ κ·Έλ£Ήννμ¬ μ λ°©ν₯μΌλ‘ NaN κ° μ±μ°κΈ°
- Backward Fill: μ λ°©ν₯ μ±μ°κΈ° νμλ λ¨μ NaNμ λ€ λ°©ν₯μΌλ‘ μ±μ°κΈ°
- μΆλ ₯: λ¬Έμ κ° μλ μ¬λ³Ό λͺ©λ‘μ
banned_symbols.jsonμ μ μ₯νμ¬ νμ λ¨κ³μμ μλ μ μΈ
- κΈ°μ€: USDT κΈ°μ€ κ±°λλκΈ(Quote Volume) μμ Nκ° μ’ λͺ© (μ: Top 50).
- νν°λ§: λ°μ΄ν° λλ½μ΄ μ¬νκ±°λ νΉμ 쑰건(μ: μ€ν μ΄λΈ μ½μΈ λ±)μ ν΄λΉνλ μ’ λͺ©μ μλμΌλ‘ μ μΈλ©λλ€.
- μΆλ ₯: λ μ§λ³λ‘ νμ΅ λμμ΄ λλ μ’ λͺ© 리μ€νΈκ° λ΄κΈ΄ JSON νμΌ.
λͺ¨λΈμ λ€μν μκ° λ¨μ(1λΆ, 5λΆ, 15λΆ, 30λΆ, 60λΆ λ±)μ κ³Όκ±° λ°μ΄ν°λ₯Ό μμ½ν μλμ° κΈ°λ° Featureλ₯Ό μ¬μ©ν©λλ€. λͺ¨λ Featureλ νΉμ μμ (t)μ μ 체 μ’ λͺ©μ λν΄ Z-score μ κ·ν(Neutralization)λ₯Ό μννμ¬, μμ₯ μ 체μ λ±λ½ μν₯μ λ°°μ νκ³ μ’ λͺ© κ°μ μλμ μ°μλ₯Ό νμ΅ν©λλ€.
- O2C / O2H / O2L: μκ° λλΉ μ’ κ°/κ³ κ°/μ κ° λΉμ¨
- H2C / L2C: κ³ κ°/μ κ° λλΉ μ’ κ° μμΉ λΉμ¨
- H2L_Vol: κ³ κ°μ μ κ°μ μ°¨μ΄ (λ³λμ± ν¬κΈ°, μμΆ/νμ₯ νμ§)
| μ§νλͺ (Feature) | μ€λͺ (Description) | νμ© λ‘μ§ (Logic) |
|---|---|---|
| RVol (Realized Volatility) | μ€ν λ³λμ± | λ‘κ·Έ μμ΅λ₯ μ νμ€νΈμ°¨λ₯Ό ν΅ν΄ μ€μ μμ₯μ 리μ€ν¬ μμ€μ μΈ‘μ ν©λλ€. |
| EffRatio (Efficiency Ratio) | ν¨μ¨μ± μ§μ | μΆμΈκ° μΌλ§λ μ§μ μ μΈμ§(μλ)λ₯Ό μΈ‘μ ν©λλ€. (1μ κ°κΉμΈμλ‘ λ Έμ΄μ¦ μλ μΆμΈ) |
| OI_P_Corr (OI-Price Correlation) | OI-κ°κ²© μκ΄κ³μ | κ°κ²© μμΉ μ λ―Έκ²°μ μ½μ (OI)μ΄ λλ° μμΉνλμ§ νμΈνμ¬ μΆμΈμ μ§μ μ±μ νλ¨ν©λλ€. |
| Force (Force Index) | ν¬μ€ μΈλ±μ€ | κ°κ²© λ³λλΆμ κ±°λλμ κ°μ€νμ¬ λ§€μ/λ§€λ μΈλ ₯μ μ€μ§μ μΈ νμ μΈ‘μ ν©λλ€. |
| PctB (Bollinger %B) | λ³Όλ¦°μ %B | λ³Όλ¦°μ λ°΄λ λ΄μμ νμ¬ κ°κ²©μ μλμ μμΉλ₯Ό λνλ΄μ΄ λ°μ΄ν°μ μ μμ±(Stationarity)μ ν보ν©λλ€. |
- NetTaker (μλ§€μ 체결 κ°λ): μ 체 κ±°λλ μ€ μμ₯κ° λ§€μ(곡격μ λ§€μ)μ μ°μ λΉμ¨ (-1 ~ +1)
- AvgTrade (νκ· μ²΄κ²° κΈμ‘): μ£Όλ¬Έ κ±΄λΉ νκ· κ±°λ κ·λͺ¨ (ν°μ/κ³ λμ μμ₯ μ§μ κ°μ§)
- OI_Chg (λ―Έκ²°μ μ½μ λ³λλ₯ ): μμ₯μ κΉλ¦° νλ(Open Interest)μ μ¦κ° (μκΈ μ μ =μΆμΈμ§μ, μ μΆ=μΆμΈλ°μ )
- WhaleGap (μ€λ§νΈλ¨Έλ 괴리): κ³ λ(Top Trader)μ κ°λ―Έ(Global)μ λ‘±/μ λΉμ¨ μ°¨μ΄ (μΈλ ₯ μΆμ’ μ§ν)
- C2VWAP (VWAP 괴리μ¨): κ±°λλ κ°μ€ νκ· κ°(μΈλ ₯ νλ¨) λλΉ νμ¬κ°μ μ΄κ²©λ (μ§μ§/μ ν λ° κ³Όλ§€μ νλ³)
- Premium (ν리미μ μΆμΈ): νλ¬Ό λλΉ μ λ¬Ό κ°κ²©μ 괴리 μ λ (νλ©λΉ κΈ°λ°μ μμ₯ κ³Όμ΄/침체 νλ¨)
κ° μλμ° ν¬κΈ°(1λΆ, 5λΆ, 15λΆ, 30λΆ, 60λΆ λ±)μ λν΄ λ€μμ featureλ€μ μμ±ν©λλ€.
| μ§νλͺ | μμ | μ€λͺ (Description) | νμ© λ‘μ§(Logic) |
|---|---|---|---|
Close_Diff_Rate |
μλμ°λ³ κ°κ²© λ³νμ¨ | ν΄λΉ μλμ° κΈ°κ° λμμ μμ΅λ₯ μ μΈ‘μ νμ¬ λ¨κΈ°/μ€κΈ°/μ₯κΈ° λͺ¨λ©ν μ κ΅¬λΆ | |
RatioSkew |
ν¬μ§μ μ§μ€λ μλ | κ³ λ(μμ νΈλ μ΄λ)μ μΌλ° ν¬μμμ λ‘±μ λΉμ¨ μ°¨μ΄. κ°μ΄ ν΄μλ‘ μ€λ§νΈλ¨Έλκ° νμͺ½μΌλ‘ μ λ¦Ό | |
RatioSkew_Z |
ν¬μ§μ μ§μ€λ Z-score | ratio_skewμ λ‘€λ§ νμ€ν κ°. κ·Ήλ¨μ κ°(Β±2 μ΄μ)μ λΉμ μμ ν¬μ§μ νΈν₯μ μλ―Έ | |
CrowdingPressure |
κ΅°μ€ μλ ₯ μ§μ | Z-scoreλ₯Ό tanhλ‘ μμΆ(-1~+1)νμ¬ κ³Όλν νΈν₯ μ λ°μ μ νΈλ‘ νμ© | |
OI_Z |
λ―Έκ²°μ μ½μ Z-score | OIμ νμ€νλ μμ€. κΈλ±(+2 μ΄μ) μ μ κ· μκΈ μ μ , κΈκ°(-2 μ΄ν) μ μ²μ° μλ ₯ | |
PriceOIRegime |
κ°κ²©-OI 체μ νλ³ | +1: μμΉ+OIμ¦κ°(건μ ν μμΉ) λλ νλ½+OIκ°μ(건μ ν νλ½), -1: λΆμΌμΉ(λ°μ μ£Όμ) | |
OI_XSkew |
OI-ν¬μ§μ μνΈμμ© | OI κΈμ¦κ³Ό ν¬μ§μ μ λ¦Όμ΄ λμ λ°μ μ κ·Ήλ¨μ κ° β μΆμΈ κ°μ λλ λ°μ μλ° μ νΈ |
ν΅μ¬ λ‘μ§:
x_mt_oi_diff_rate: OI λ³νμ¨μ μλμ°λ³λ‘ κ³μ°λμ§λ§ μ€κ° λ³μλ‘λ§ μ¬μ©λλ©° μ΅μ’ μΆλ ₯μλ ν¬ν¨λμ§ μμ΅λλ€.- Rolling Z-score μμ ν:
- μλμ°κ° 5 λ―Έλ§μΌ λλ κ°μ λ‘ μ΅μ 5κ° κ΅¬κ°μ μ¬μ©νμ¬ κ³Όλν λ Έμ΄μ¦ λ°©μ§
- μλμ°κ° 5 μ΄μμΌ λλ ν΄λΉ μλμ° μ 체λ₯Ό μ¬μ©νμ¬ μ νν ν΅κ³ κ³μ°
- λ€μ€ μκ°λ λΆμ: λμΌν νΌμ²λ₯Ό μ¬λ¬ μλμ°λ‘ μμ±ν¨μΌλ‘μ¨ λͺ¨λΈμ΄ λ¨κΈ°/μ€κΈ°/μ₯κΈ° ν¨ν΄μ λμμ νμ΅ κ°λ₯
λͺ¨λΈμ μ λμ μΈ μμ΅λ₯ μ΄ μλ, **μμ₯ νκ· λλΉ μ΄κ³Ό μμ΅(Alpha)**μ μμΈ‘ν©λλ€.
- λ°©μ: Forward Difference Neutralized
- μμ: $y_{t, w} = (Close_{t+w} - Close_{t}) - \text{Mean}{market}(Close{t+w} - Close_{t})$
- μμΈ‘ ꡬκ°: 1λΆ, 5λΆ, 15λΆ, 30λΆ, 60λΆ λ€μ μ΄κ³Ό μμ΅.
-
λͺ©ν: ν₯ν
$w$ λΆ λμ μμ₯ νκ· λ³΄λ€ λ λ§μ΄ μ€λ₯Ό(νΉμ λ λ¨μ΄μ§) μ’ λͺ©μ μλ³.
- κΈ°λ₯: λ μ§ λ²μμ λν΄ Feature(X)μ Label(Y)λ₯Ό λ³λ ¬λ‘ μμ±νκ³ ν΅ν©ν©λλ€.
- μ²λ¦¬ κ³Όμ :
- μ§μ λ λ μ§ λ²μμ κ° λ μ§μ λν΄
x_generator.pyμy_generator.pyλ₯Ό λ³λ ¬λ‘ μ€ν - μμ±λ Xμ Y λ°μ΄ν°λ₯Ό
symbolκ³Όstart_time_msκΈ°μ€μΌλ‘ λ³ν© - κ° λ μ§λ³λ‘ ν΅ν©λ λ°μ΄ν°μ
μ HDF5 νμΌλ‘ μ μ₯ (
data/xy/{date}_xy_top{top}.h5)
- μ§μ λ λ μ§ λ²μμ κ° λ μ§μ λν΄
- νΉμ§:
- λ³λ ¬ μ²λ¦¬: μ¬λ¬ λ μ§λ₯Ό λμμ μ²λ¦¬νμ¬ λλ λ°μ΄ν° μμ± μκ° λ¨μΆ
- λ€μ€ μμΈ‘ ꡬκ°: μ¬λ¬ μκ° μλμ°(1λΆ, 5λΆ, 15λΆ, 30λΆ, 60λΆ λ±)μ λ μ΄λΈμ ν λ²μ μμ±
- μλ μ λλ²μ€ λ‘λ©:
universe_builder.pyμμ μμ±ν μ λλ²μ€ νμΌμ μλμΌλ‘ μ°Έμ‘°
- μ¬μ©λ²:
python xy_range_dump.py \ --start_date 2025-02-01 \ --end_date 2025-02-07 \ --top 50 \ --data_dir data/1m_raw_data \ --out_dir data/xy \ --windows 1,5,15,30,60 \ --max_workers 12
νλ‘μ νΈμμλ λ€μν λ₯λ¬λ λ° λ¨Έμ λ¬λ λͺ¨λΈμ ꡬννμ¬ μνΈνν κ°κ²© μμΈ‘μ μνν©λλ€.
- μν€ν
μ²: 1D Convolutional Neural Network
- Conv1D (32 filters) β MaxPool β Conv1D (64 filters) β MaxPool β Global Average Pooling β Fully Connected
- μ
λ ₯ νν:
(Batch, Time, Features)- μκ³μ΄ λ°μ΄ν°λ₯Ό μκ° μ°¨μμΌλ‘ μ²λ¦¬ - νΉμ§:
- λ¨μΌ μ’ λͺ©μ μκ³μ΄ ν¨ν΄ νμ΅μ νΉν
- κ²½λ λͺ¨λΈλ‘ λΉ λ₯Έ νμ΅ λ° μΆλ‘ κ°λ₯
- μ λ ₯ μ κ·νλ₯Ό λͺ¨λΈ λ΄λΆμμ μν
- μν€ν
μ²: Mamba-based State Space Model
- Temporal Mamba Layers (μκ° μ°¨μ μ²λ¦¬) + Spatial Mamba Layers (μ’ λͺ© κ° κ΄κ³ νμ΅)
- μ
λ ₯ νν:
(Batch, Time, Nodes, Features)- λ€μ€ μ’ λͺ©μ μκ³΅κ° λ°μ΄ν° - νΉμ§:
- Mamba SSMμ νμ©ν ν¨μ¨μ μΈ μ₯κΈ° μμ‘΄μ± νμ΅
- μ’ λͺ© κ° μκ΄κ΄κ³λ₯Ό κ³΅κ° μ°¨μμμ λͺ¨λΈλ§
- λ€μν Loss Function μ§μ (MSE, Hybrid, Adaptive, Directional, IC Loss)
- μν€ν
μ²: 1D-CNN + Transformer Encoder
- Temporal Encoder (1D-CNN) β Spatial Encoder (Transformer) β Prediction Head
- μ
λ ₯ νν:
(Batch, Time, Nodes, Features)- λ€μ€ μ’ λͺ©μ μκ³΅κ° λ°μ΄ν° - νΉμ§:
- CNNμΌλ‘ μκ°μ ν¨ν΄ μΆμΆ ν Transformerλ‘ μ’ λͺ© κ° κ΄κ³ νμ΅
- Regression λ° Classification λͺ¨λ μ§μ
- Auxiliary Lossλ₯Ό ν΅ν λ€μ€ νμ€ν¬ νμ΅
- μν€ν μ²: Gradient Boosting Decision Tree
- μ λ ₯ νν: Tabular Data (Flattened Features)
- νΉμ§:
- μ ν΅μ μΈ λ¨Έμ λ¬λ κΈ°λ²μΌλ‘ λΉ λ₯Έ νμ΅ λ° ν΄μ κ°λ₯μ±
- Grid Searchλ₯Ό ν΅ν νμ΄νΌνλΌλ―Έν° μ΅μ ν μ§μ
- GBDTλ‘μμ μ₯μ :
- λΉμ ν κ΄κ³ νμ΅: κ²°μ νΈλ¦¬ κΈ°λ° μμλΈλ‘ 볡μ‘ν λΉμ ν ν¨ν΄μ ν¨κ³Όμ μΌλ‘ νμ΅
- Feature μνΈμμ© μλ νμ§: μ¬λ¬ Feature κ°μ μνΈμμ©μ μλμΌλ‘ νμ΅νμ¬ μμ₯ λ―Έμꡬ쑰μ 볡ν©μ κ΄κ³λ₯Ό ν¬μ°©
- μ΄μμΉ κ°κ±΄μ±: νΈλ¦¬ κΈ°λ° λͺ¨λΈμ νΉμ±μ μ΄μμΉμ λ λ―Όκ°νμ¬ μνΈνν μμ₯μ κΈκ²©ν λ³λμλ μμ μ
- κ²°μΈ‘μΉ μ²λ¦¬: λ΄λΆμ μΌλ‘ κ²°μΈ‘μΉλ₯Ό μλ μ²λ¦¬νμ¬ λ°μ΄ν° μ μ²λ¦¬ λΆλ΄ κ°μ
- κ³Όμ ν© λ°©μ§: Early Stopping, μ κ·ν νλΌλ―Έν° λ±μ ν΅ν΄ κ³Όμ ν©μ ν¨κ³Όμ μΌλ‘ μ μ΄
- λΉ λ₯Έ μΆλ‘ μλ: νμ΅λ λͺ¨λΈμ μΆλ‘ μ΄ λ§€μ° λΉ λ₯΄λ©° μ€μκ° μμΈ‘μ μ ν©
python raw_data_fetcher.py --start_date 2025-02-01 --end_date 2025-02-07 --workers 16- Binanceμμ 1λΆλ΄, Premium Index, Metrics λ°μ΄ν°λ₯Ό λ€μ΄λ‘λνμ¬
data/1m_raw_data/{date}.h5μ μ μ₯ν©λλ€.
python -c "from preprocessor import ban_symbols_with_nan; ban_symbols_with_nan('2025-02-01')"- νΉμ λ μ§μ λ°μ΄ν° νμ§μ κ²μ¦νκ³ λ¬Έμ κ° μλ μ¬λ³Όμ
banned_symbols.jsonμ μ μ₯ν©λλ€. x_generator.pyμy_generator.pyμμ μλμΌλ‘ μ μΈλ©λλ€.
python universe_builder.py --start_date 2025-02-01 --end_date 2025-03-01 --top_n 50python x_generator.py --date 2025-03-01 --top 50python y_generator.py --date 2025-03-01 --top 50python xy_range_dump.py \
--start_date 2025-02-01 \
--end_date 2025-02-07 \
--top 50 \
--data_dir data/1m_raw_data \
--out_dir data/xy \
--windows 1,5,15,30,60 \
--max_workers 12- μ¬λ¬ λ μ§μ λν΄ Xμ Yλ₯Ό λ³λ ¬λ‘ μμ±νκ³ ν΅ν©ν©λλ€.
- κ°λ³ λ μ§λ³ μ€ν(2, 3λ²) λμ λ²μ λ¨μ μΌκ΄ μ²λ¦¬κ° κ°λ₯ν©λλ€.
# κΈ°λ³Έ νμ΅ λͺ¨λ
python model/CNN_train.py
# Rolling Window νμ΅ (5κ° μλμ°λ‘ λ°λ³΅ νμ΅)
$env:MODE="rolling"; python model/CNN_train.py
# Hyperparameter Search
$env:MODE="search"; python model/CNN_train.pyμ€μ νμΌ: model/CNN_train.pyμ CONFIG λμ
λ리μμ λ μ§ λ²μ, λ°°μΉ ν¬κΈ°, νμ΅λ₯ λ±μ μ‘°μ ν μ μμ΅λλ€.
python model/CryptoMamba_train.pyμ€μ νμΌ: model/CryptoMamba_train.pyμ CONFIGμμ Mamba λ μ΄μ΄ μ, hidden dimension, loss function νμ
λ±μ μ€μ ν μ μμ΅λλ€.
python model/SpatioTemporal_train.pyμ€μ νμΌ: model/SpatioTemporal_train.pyμ CONFIGμμ Transformer λ μ΄μ΄ μ, attention heads, λͺ¨λ(regression/classification) λ±μ μ€μ ν μ μμ΅λλ€.
# νμ΅ + νκ°
python -m machine_learning.lgbm \
--mode train_eval \
--train_start 2025-02-01 --train_end 2025-04-30 \
--valid_start 2025-05-01 --valid_end 2025-05-14 \
--test_start 2025-05-15 --test_end 2025-05-28 \
--y_name y_60m --topn 30 \
--max_rows 600000 \
--num_boost_round 4000 \
--early_stopping_rounds 200
# μΆλ‘ λ§ μν
python machine_learning/lgbm.py \
--mode infer \
--infer_start 2024-03-02 --infer_end 2024-03-05 \
--y_name y_60m --topn 30 \
--model_path /path/to/model.pkl \
--meta_path /path/to/meta.json \
--save_predspython machine_learning/lgbm_grid.pyνλ‘μ νΈμμλ λ°μ΄ν° νμ§ κ΄λ¦¬, Feature μ ν, νμ΅ μ€μ μ μν μ¬λ¬ JSON μ€μ νμΌμ μ¬μ©ν©λλ€.
- μ©λ: λ μ§λ³λ‘ νμ΅ λμμ΄ λλ μ’ λͺ© 리μ€νΈλ₯Ό μ μ₯ν©λλ€.
- μμ±:
universe_builder.pyμ€ν μ μλ μμ± - νμ:
{ "2025-02-01": ["BTCUSDT", "ETHUSDT", "SOLUSDT", ...], "2025-02-02": ["BTCUSDT", "ETHUSDT", "BNBUSDT", ...], ... } - μ¬μ©μ²:
x_generator.py,y_generator.py: νΉμ λ μ§μ μ λλ²μ€ μ‘°νxy_range_dump.py: λ μ§ λ²μμ λν μ λλ²μ€ λ‘λ©
- νΉμ§:
- USDT κΈ°μ€ κ±°λλκΈ μμ Nκ° μ’ λͺ©μΌλ‘ ꡬμ±
banned_symbols.jsonμ λ±λ‘λ μ¬λ³Όμ μλ μ μΈ
- μ©λ: λ μ§λ³λ‘ λ°μ΄ν° νμ§ λ¬Έμ λ‘ μ μΈν μ¬λ³Ό λͺ©λ‘μ μ μ₯ν©λλ€.
- μμ±:
preprocessor.pyμban_symbols_with_nan()ν¨μλ‘ μλ μμ± - νμ:
{ "2025-02-01": ["CVCUSDT", "USDCUSDT"], "2025-02-02": ["BTCDOMUSDT", "CVCUSDT"], ... } - μ μΈ κΈ°μ€:
- NaN κ°μ΄ 30κ° μ΄μμΈ μ¬λ³Ό
- USDλ‘ μμνλ μ€ν μ΄λΈμ½μΈ (μλ μ μΈ)
- μ¬μ©μ²:
universe_builder.py: μ λλ²μ€ μ μ μ μλ μ μΈx_generator.py,y_generator.py: ν΄λΉ λ μ§μ μ μΈ μ¬λ³Ό νν°λ§
- μ©λ: μ 체 νμ΅ κ³Όμ μμ μ μΈν λ μ§λ€μ μ μ₯ν©λλ€.
- νμ:
{ "missing_dates": ["2024-03-31", "2024-04-01", ...], "nan_dates": { "2024-02-16": ["x_15m_OI_P_Corr", "x_30m_OI_P_Corr", ...], "2024-02-18": ["x_1m_AvgTrade", "x_1m_NetTaker", ...], ... } } - κ΅¬μ± μμ:
missing_dates: λ°μ΄ν° νμΌμ΄ μκ±°λ μμλ λ μ§ λ¦¬μ€νΈnan_dates: νΉμ Featureμ NaNμ΄ λ§μ ν΄λΉ λ μ§μ νΉμ Featureλ§ μ μΈνκ³ μΆμ λ μ¬μ©
- μ¬μ©μ²:
machine_learning/datasets.py: λ μ§ λ²μ μμ± μ μλ μ μΈ- λ₯λ¬λ λͺ¨λΈμ DataLoader (
CNN_dataloader.py,CryptoMamba_dataloader.py,SpatioTemporal_dataloader.py): νμ΅ λ°μ΄ν° λ‘λ© μ μ μΈ
- νΉμ§:
missing_datesμ ν¬ν¨λ λ μ§λ μμ ν μ μΈnan_datesμ ν¬ν¨λ λ μ§λ ν΄λΉ Featureλ§ 0μΌλ‘ μ±μμ μ¬μ© κ°λ₯
- μ©λ: λͺ¨λΈ νμ΅μ μ¬μ©ν Feature 리μ€νΈλ₯Ό μ μ₯ν©λλ€.
- κ²½λ‘:
feature_list/{y_name}/top{topn}_example_features_{num}.json- μ:
feature_list/y_60m/top30_example_features_166.json
- μ:
- νμ:
λλ λ¬Έμμ΄λ‘ μΈμ½λ©λ ννλ μ§μ:
["x_1m_O2C_neut", "x_1m_H2C_neut", "x_5m_RVol_neut", ...]
"['x_1m_O2C_neut', 'x_1m_H2C_neut', ...]" - μ¬μ©μ²:
machine_learning/datasets.py: LightGBM νμ΅ μ Feature μ ν- λ₯λ¬λ λͺ¨λΈ DataLoader: Feature νν°λ§
- νΉμ§:
- Feature Selection κ²°κ³Όλ₯Ό μ μ₯νμ¬ μ¬νμ± ν보
y_name(μ:y_60m)κ³Όtopn(μ: 30)μ λ°λΌ λ€λ₯Έ Feature 리μ€νΈ μ¬μ© κ°λ₯- νμΌμ΄ μμΌλ©΄ μλμΌλ‘ λͺ¨λ
_neutλ‘ λλλ Featureλ₯Ό μ¬μ©
.
βββ data/
β βββ 1m_raw_data/ # μμ 1λΆλ΄ λ°μ΄ν° (raw_data_fetcher.pyλ‘ μμ±)
β βββ xy/ # ν΅ν© Feature + Label λ°μ΄ν° (λ μ§λ³ .h5 νμΌ)
β βββ datasets/ # μ μ²λ¦¬λ νμ΅μ© λ°μ΄ν°μ
β βββ cnn/ # CNN λͺ¨λΈμ© λ°μ΄ν°μ
β βββ ml/ # λ¨Έμ λ¬λ λͺ¨λΈμ© λ°μ΄ν°μ
β βββ spatiotfm/ # SpatioTemporal λͺ¨λΈμ© λ°μ΄ν°μ
β
βββ model/ # λ₯λ¬λ λͺ¨λΈ μ½λ
β βββ CNN.py # CNN λͺ¨λΈ μ μ
β βββ CNN_train.py # CNN νμ΅ μ€ν¬λ¦½νΈ
β βββ CNN_dataloader.py # CNN λ°μ΄ν° λ‘λ
β βββ CryptoMamba.py # CryptoMamba λͺ¨λΈ μ μ
β βββ CryptoMamba_train.py # CryptoMamba νμ΅ μ€ν¬λ¦½νΈ
β βββ CryptoMamba_dataloader.py # CryptoMamba λ°μ΄ν° λ‘λ
β βββ SpatioTemporalTransformer.py # SpatioTemporal λͺ¨λΈ μ μ
β βββ SpatioTemporal_train.py # SpatioTemporal νμ΅ μ€ν¬λ¦½νΈ
β βββ SpatioTemporal_dataloader.py # SpatioTemporal λ°μ΄ν° λ‘λ
β
β
βββ machine_learning/ # λ¨Έμ λ¬λ λͺ¨λΈ μ½λ
β βββ lgbm.py # LightGBM νμ΅/μΆλ‘ μ€ν¬λ¦½νΈ
β βββ lgbm_grid.py # LightGBM Grid Search
β βββ datasets.py # λ°μ΄ν°μ
λΉλ
β βββ linear_model.py # μ ν λͺ¨λΈ
β
βββ models/ # νμ΅λ λͺ¨λΈ 체ν¬ν¬μΈνΈ (.pt, .pkl)
β
βββ results/ # μ€ν κ²°κ³Ό
β βββ cnn/ # CNN μ€ν κ²°κ³Ό (IC, μ±λ₯ μ§ν λ±)
β βββ lgbm/ # LGBM μ€ν κ²°κ³Ό (IC, μ±λ₯ μ§ν λ±)
β βββ sttfm/ # SpatioTemporal μ€ν κ²°κ³Ό (IC, μ±λ₯ μ§ν λ±)
β βββ mamba/ # CryptoMamba μ€ν κ²°κ³Ό (IC, μ±λ₯ μ§ν λ±)
β
β κ° λͺ¨λΈλ³λ‘ Information Coefficient (IC), μμΈ‘ μ±λ₯ μ§ν λ±μ μ€ν κ²°κ³Όλ₯Ό μ 리νμ¬ μ μ₯ν©λλ€.
β
βββ feature_list/ # Feature 리μ€νΈ JSON νμΌ
β βββ y_60m/ # 60λΆ μμΈ‘μ© feature 리μ€νΈ
β βββ top{topn}_example_features_{num}.json
β
βββ top{topn}_universe.json # λ μ§λ³ μ λλ²μ€ μ’
λͺ© 리μ€νΈ (μ: top30_universe.json, top50_universe.json)
βββ banned_symbols.json # λ μ§λ³ μ μΈ μ¬λ³Ό λͺ©λ‘
βββ global_ban_dates.json # μ 체 μ μΈ λ μ§ λ° Featureλ³ NaN λ μ§
β
βββ raw_data_fetcher.py # μμ λ°μ΄ν° μμ§ μ€ν¬λ¦½νΈ (Binance API)
βββ preprocessor.py # λ°μ΄ν° μ μ λ° κ²μ¦ λͺ¨λ
βββ universe_builder.py # μ’
λͺ© μ μ μ€ν¬λ¦½νΈ
βββ x_generator.py # Feature μμ§λμ΄λ§ ($X$ μμ±)
βββ y_generator.py # νκ² λ μ΄λΈλ§ ($y$ μμ±)
βββ xy_range_dump.py # ν΅ν© λ°μ΄ν°μ
μμ± μ€ν¬λ¦½νΈ (X+Y λ³ν©)
βββ README.md