Hierarchical ML Pipeline for trading predictions:
- Level 0: Attention Models (volatility/flow classification)
- Level 1: Base Models (XGBoost per symbol/timeframe)
- Level 2: Metamodels (XGBoost Stacking + Neural Gating)
Key components:
- src/pipelines/hierarchical_pipeline.py - Main prediction pipeline
- src/models/ - All ML model classes
- src/training/ - Training utilities
- src/api/ - FastAPI endpoints
- scripts/ - Training and evaluation scripts
- config/ - YAML configurations
Note: Trained models (*.joblib, *.pt) are gitignored.
Regenerate with training scripts.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
258 lines
5.2 KiB
JSON
258 lines
5.2 KiB
JSON
{
|
|
"features": [
|
|
"open",
|
|
"high",
|
|
"low",
|
|
"close",
|
|
"volume",
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
],
|
|
"symbols": [
|
|
"XAUUSD",
|
|
"EURUSD",
|
|
"BTCUSD"
|
|
],
|
|
"timeframes": [
|
|
"5m",
|
|
"15m"
|
|
],
|
|
"results": {
|
|
"XAUUSD_5m_high_h3": {
|
|
"mae": 1.0452576341613162,
|
|
"rmse": 1.47518779980032,
|
|
"r2": -0.3217012243095463,
|
|
"directional_accuracy": 0.9080403293960417,
|
|
"n_train": 288324,
|
|
"n_val": 50881,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"XAUUSD_5m_low_h3": {
|
|
"mae": 1.0630841428711755,
|
|
"rmse": 1.4469255616690662,
|
|
"r2": -0.5373045264843497,
|
|
"directional_accuracy": 0.9392897152178613,
|
|
"n_train": 288324,
|
|
"n_val": 50881,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"XAUUSD_15m_high_h3": {
|
|
"mae": 2.267892098471814,
|
|
"rmse": 2.942057739621056,
|
|
"r2": -0.709975447217376,
|
|
"directional_accuracy": 0.9019103814920839,
|
|
"n_train": 96996,
|
|
"n_val": 17117,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"XAUUSD_15m_low_h3": {
|
|
"mae": 2.569683612909956,
|
|
"rmse": 3.7047500179074486,
|
|
"r2": -2.3699478762268757,
|
|
"directional_accuracy": 0.9629607992054683,
|
|
"n_train": 96996,
|
|
"n_val": 17117,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"EURUSD_5m_high_h3": {
|
|
"mae": 0.00032324864317802846,
|
|
"rmse": 0.00043994340435492583,
|
|
"r2": -0.19274079279048517,
|
|
"directional_accuracy": 0.9779691929862578,
|
|
"n_train": 313800,
|
|
"n_val": 55377,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"EURUSD_5m_low_h3": {
|
|
"mae": 0.0003164682221043557,
|
|
"rmse": 0.00046273511959730334,
|
|
"r2": -0.1206464699586427,
|
|
"directional_accuracy": 0.9762897954024234,
|
|
"n_train": 313800,
|
|
"n_val": 55377,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"EURUSD_15m_high_h3": {
|
|
"mae": 0.0005854839857721702,
|
|
"rmse": 0.0007844651495906345,
|
|
"r2": -0.22008821192651484,
|
|
"directional_accuracy": 0.9821669091105005,
|
|
"n_train": 105179,
|
|
"n_val": 18561,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"EURUSD_15m_low_h3": {
|
|
"mae": 0.0005876067509893053,
|
|
"rmse": 0.0007961074402402827,
|
|
"r2": -0.1878754989335183,
|
|
"directional_accuracy": 0.9825979203706697,
|
|
"n_train": 105179,
|
|
"n_val": 18561,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"BTCUSD_5m_high_h3": {
|
|
"mae": 1.3936613210826558,
|
|
"rmse": 1.7375581249027787,
|
|
"r2": -0.5380843250341383,
|
|
"directional_accuracy": 0.6702114655910035,
|
|
"n_train": 46353,
|
|
"n_val": 8181,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"BTCUSD_5m_low_h3": {
|
|
"mae": 1.0332836506567726,
|
|
"rmse": 1.5975194700850894,
|
|
"r2": -0.055567434288659845,
|
|
"directional_accuracy": 0.7195941816403862,
|
|
"n_train": 46353,
|
|
"n_val": 8181,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"BTCUSD_15m_high_h3": {
|
|
"mae": 2.4969577931345537,
|
|
"rmse": 2.910764850361728,
|
|
"r2": -1.597490317020684,
|
|
"directional_accuracy": 0.7647336162187648,
|
|
"n_train": 24036,
|
|
"n_val": 4242,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
},
|
|
"BTCUSD_15m_low_h3": {
|
|
"mae": 2.4391872214644317,
|
|
"rmse": 3.1416975097437274,
|
|
"r2": -1.639183847904361,
|
|
"directional_accuracy": 0.8078736445073079,
|
|
"n_train": 24036,
|
|
"n_val": 4242,
|
|
"feature_columns": [
|
|
"ATR",
|
|
"SAR",
|
|
"RSI",
|
|
"MFI",
|
|
"OBV",
|
|
"AD",
|
|
"CMF",
|
|
"volume_z",
|
|
"volume_anomaly"
|
|
]
|
|
}
|
|
},
|
|
"trained_at": "2026-01-05T02:48:25.475116"
|
|
} |