Framework AFML-style : ingestion tick, bars multi-échelle, labels, CPCV, orchestration Dagster/Hydra et méthodologie process-first sur données FX.
Ce projet est mon laboratoire privé de recherche quantitative sur le FX, inspiré des pratiques décrites dans Advances in Financial Machine Learning (López de Prado). Il couvre l’ensemble de la chaîne : ingestion multi-sources de ticks, schéma canonique, construction de barres (temps, tick, tick-imbalance), features causales, labels supervisés, validation CPCV anti-fuite, entraînement primary/meta dual-side, rapports HTML et exploration Streamlit.
Le dépôt actif reste privé (configs de recherche, presets Dagster, notebooks). Une instantané public MIT du framework — sans alpha ni données de marché — est disponible sur GitHub : khonen-git/FinancialMLResearchLab.
Après plusieurs cycles d’exploration ad hoc (notebooks isolés, scripts one-shot), j’ai consolidé mes travaux EURUSD dans un seul dépôt structuré. L’enjeu n’était pas de « trouver un signal » rapidement, mais de poser une infrastructure de recherche capable d’absorber des itérations rapides sans dégrader la rigueur statistique.
Les articles du blog tagués eurusd-lab documentent des pistes concrètes testées dans ce lab (pullback multi-échelle, compression/expansion, labels Tr8dr, HMM slope, event sampling stochastique). Cette page décrit l’écosystème technique ; les détails méthodologiques et les verdicts de gates restent dans les articles, pas ici.
L’arborescence config/ compose runtime, dataset, bars, features, labels, modèles, CV, expériences et politiques d’exécution. Chaque profil d’expérience (ex. dual-side primary/meta) relie des rôles de modèle à des groupes de features et labels via ConfigService — point d’entrée unique, sans accès Hydra dispersé dans le pipeline.
Les presets Dagster (presets/experiments/) ne contiennent que des overrides Hydra : un run reproductible se lance depuis l’UI ou la CLI avec un fichier YAML explicite.
Les builders de features, labels, barres et events suivent un pattern registry + factory + engine :
@register_feature, builders de labels, presets EBS)Cette séparation permet d’ajouter un nouveau builder en YAML + une classe enregistrée, sans modifier le graphe Dagster.
Les ticks ingérés (Dukascopy, MT5) sont normalisés vers un schéma canonique (timestamps datetime64[ns], mid, spread, session UTC). Les barres composites (multi_tick_ti) matérialisent plusieurs samplings à partir d’une seule lecture tick ; les features auxiliaires sont alignées causalement sur la grille primaire via merge_asof backward.
Backends interchangeables : pandas, Polars, cuDF/RAPIDS, kernels Numba — sélectionnables par expérience (preferred_dataframe_backend, preferred_compute_backend).
data/processed/ ; artifacts MLflow/Dagster séparés (voir doc architecture bases)Types de barres supportés :
L’Event-Based Sampling filtre les barres où une règle structurelle est confirmée (pivots HA, pullbacks PBH/PBL, breakouts HH-X/LL-X). Un event n’est pas un signal de trade : c’est un filtre d’échantillonnage causal (confirm_index uniquement) qui concentre l’information pour l’étape features + label + modèle.
Pipeline dual-side primary / meta (long et short) :
Les labels sont construits sur la grille de barres primaire ; le purge horizon CPCV en découle.
Validation par défaut : profil cpcv_10_2 (10 folds, 2 folds test). Les partitions Dagster (path_i) sont mappées explicitement aux chemins CPCV sur disque ; les jobs de rapports HTML restent séparés des jobs ML partitionnés pour éviter les materialisations incohérentes.
| Couche | Intention |
|---|---|
| Contrats config | Paramètres requis, fixtures YAML invalides |
| Formules | Oracle indépendant (pandas/numpy) sur séries synthétiques |
| Causalité | Absence de lookahead sur chaque builder |
| Parité | pandas / Polars (pilote) |
| Intégration | Pipeline Hydra, golden parquet, assets Dagster statiques |
| Leakage | Purge CV, alignement dataset |
Le snapshot public exécute ~950 tests unitaires (pytest -m unit) ; le dépôt privé étend la suite (intégration GPU, régression, perf) pour un total de centaines de tests supplémentaires en CI.
Jobs principaux : prep (ticks → bars → features → labels), CPCV ML primary/meta, rapports HTML, validation finale holdout. L’instance Dagster persiste runs, partitions et lineage ; PostgreSQL stocke métadonnées Dagster et MLflow.
Tracking des expériences, métriques de modèle (accuracy, F1, AUC, Brier, calibration), artifacts de dataset. Séparation claire des bases Dagster vs MLflow documentée en interne.
notebooks_example/) dans le snapshot public : ConfigService, triple barrière, features labLa recherche suit une progression en gates (0→4) : existence statistique, détection mesurable, prédictibilité OOS, tradabilité nette après coûts. Chaque piste du blog eurusd-lab rapporte un verdict par gate — sans exposer ici les paramètres ni les résultats alpha.
Principe directeur : ne pas optimiser en amont sur le PnL ; valider d’abord que le phénomène existe et se prédit hors échantillon, avant toute couche d’exécution ou de sizing.
Articles liés (série eurusd-lab) :
| Élément | Snapshot public MIT | Dépôt privé |
|---|---|---|
Framework financial_ml | Oui | Oui (actif) |
config_example/ + symlink | Oui | Prod config/ (~149 YAML) |
| Presets Dagster research | Non | Oui |
| Données tick réelles | Non | Oui |
| Alpha / stratégies | Non | Oui (non publié) |
| Support | Snapshot v1.0.0 non maintenu | Recherche active |
Publication contrôlée via script interne ; seul le framework et les exemples pédagogiques sortent — jamais les configs de production ni les notebooks de recherche.
Python 3.12+ · micromamba (financial-ml / financial-ml-cpu)
Hydra · Dagster · PostgreSQL · Docker Compose
pandas · Polars · cuDF/RAPIDS · Numba · PyArrow/Parquet
scikit-learn · cuML · MLflow · CPCV custom · GARCH auxiliaire
Streamlit · Plotly · templates HTML (viewer intégré)
pytest (unit / integration / perf) · markers stricts · golden fixtures · CI
Ce lab n’est pas un produit de trading : c’est une infrastructure de recherche où la rigueur méthodologique prime sur la course au backtest « gagnant ». Le framework public permet d’explorer l’architecture AFML-style ; l’IP de recherche reste privée.
Documentation Python
Documentation officielle du langage Python
NumPy
Calcul numérique et tableaux multidimensionnels en Python
pandas
Manipulation et analyse de données tabulaires
scikit-learn
Bibliothèque de machine learning en Python
Tr8dr
Blog sur algorithmes, modèles et marchés — HFT, crypto, ML appliqué à la finance