ml4t-engineer 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ml4t_engineer-0.1.0/.gitignore +16 -0
- ml4t_engineer-0.1.0/CHANGELOG.md +218 -0
- ml4t_engineer-0.1.0/LICENSE +21 -0
- ml4t_engineer-0.1.0/PKG-INFO +307 -0
- ml4t_engineer-0.1.0/README.md +205 -0
- ml4t_engineer-0.1.0/pyproject.toml +283 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/AGENTS.md +83 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/__init__.py +151 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/_numba.py +32 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/_polars_compat.py +71 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/_version.py +24 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/api.py +620 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/AGENTS.md +17 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/__init__.py +17 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/features.py +72 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/labels.py +85 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/predictions.py +80 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/bars/AGENTS.md +72 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/bars/__init__.py +88 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/bars/base.py +152 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/bars/imbalance.py +1766 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/bars/run.py +1008 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/bars/tick.py +97 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/bars/vectorized.py +644 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/bars/volume.py +309 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/config/AGENTS.md +28 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/config/__init__.py +44 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/config/base.py +330 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/config/data_contract.py +35 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/config/experiment.py +348 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/config/labeling.py +526 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/config/preprocessing_config.py +311 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/config/spec_bridge.py +35 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/AGENTS.md +22 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/__init__.py +113 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/AGENTS.md +16 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/__init__.py +19 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/base.py +66 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/crypto.py +107 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/equity.py +215 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/decorators.py +225 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/dispatch.py +22 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/exceptions.py +311 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/lookbacks.py +242 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/registry.py +250 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/schemas.py +198 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/types.py +49 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/core/validation.py +218 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/dataset.py +778 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/discovery/AGENTS.md +19 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/discovery/__init__.py +9 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/discovery/catalog.py +578 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/AGENTS.md +65 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/__init__.py +53 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/composite.py +312 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/cross_asset.py +711 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/fdiff.py +394 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/AGENTS.md +35 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/__init__.py +10 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/max.py +155 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/min.py +155 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/sum.py +127 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/AGENTS.md +37 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/__init__.py +20 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/amihud_illiquidity.py +202 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/effective_tick_rule.py +41 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/kyle_lambda.py +192 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/order_book.py +297 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/order_flow_imbalance.py +94 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/price_impact_ratio.py +78 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/quote_stuffing_indicator.py +79 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/realized_spread.py +58 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/roll_spread_estimator.py +68 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/trade_intensity.py +61 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/volume_at_price_ratio.py +76 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/volume_synchronicity.py +70 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/volume_weighted_price_momentum.py +60 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/AGENTS.md +35 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/__init__.py +18 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/create_lag_features.py +87 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/cyclical_encode.py +73 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/directional_targets.py +96 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/fourier_features.py +68 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/interaction_features.py +84 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/multi_horizon_returns.py +72 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/percentile_rank_features.py +83 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/regime_conditional_features.py +73 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/rolling_entropy.py +713 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/time_decay_weights.py +84 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/volatility_adjusted_returns.py +70 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/AGENTS.md +104 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/__init__.py +35 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/adx.py +405 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/adxr.py +174 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/apo.py +182 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/aroon.py +374 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/bop.py +175 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/cci.py +119 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/cmo.py +180 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/directional.py +473 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/imi.py +166 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/macd.py +426 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/macdfix.py +315 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/mfi.py +266 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/minus_dm.py +159 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/mom.py +152 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/plus_dm.py +159 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/ppo.py +185 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/roc.py +87 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/rocp.py +121 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/rocr.py +119 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/rocr100.py +119 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/rsi.py +181 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/sar.py +305 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/stochastic.py +270 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/stochf.py +256 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/stochrsi.py +252 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/trix.py +144 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/ultosc.py +246 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/willr.py +115 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/AGENTS.md +34 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/__init__.py +12 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/avgprice.py +158 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/medprice.py +139 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/midprice.py +245 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/typprice.py +153 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/wclprice.py +155 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/regime.py +547 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/risk.py +749 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/AGENTS.md +25 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/__init__.py +16 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/avgdev.py +147 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/linearreg.py +158 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/linearreg_angle.py +159 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/linearreg_intercept.py +158 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/linearreg_slope.py +156 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/stddev.py +179 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/structural_break.py +659 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/tsf.py +151 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/var.py +173 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/AGENTS.md +26 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/__init__.py +17 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/dema.py +159 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/donchian.py +200 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/ema.py +174 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/kama.py +184 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/midpoint.py +135 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/sma.py +160 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/t3.py +243 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/tema.py +131 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/trima.py +142 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/wma.py +123 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/AGENTS.md +16 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/__init__.py +8 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/arithmetic.py +119 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/helpers.py +87 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/ma_types.py +92 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/AGENTS.md +31 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/__init__.py +22 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/atr.py +243 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/bollinger_bands.py +183 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/conditional_volatility_ratio.py +72 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/ewma_volatility.py +88 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/garch_forecast.py +132 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/garman_klass_volatility.py +79 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/natr.py +177 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/parkinson_volatility.py +76 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/realized_volatility.py +65 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/rogers_satchell_volatility.py +77 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/trange.py +208 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/volatility_of_volatility.py +128 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/volatility_percentile_rank.py +74 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/volatility_regime_probability.py +83 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/yang_zhang_volatility.py +156 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/AGENTS.md +32 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/__init__.py +10 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/ad.py +213 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/adosc.py +184 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/obv.py +162 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/AGENTS.md +71 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/__init__.py +121 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/atr_barriers.py +402 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/calendar.py +505 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/horizon_labels.py +611 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/meta_labels.py +349 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/numba_ops.py +473 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/percentile_labels.py +645 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/triple_barrier.py +557 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/uniqueness.py +417 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/utils.py +499 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/logging/AGENTS.md +14 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/logging/__init__.py +24 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/logging/config.py +212 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/logging/core.py +598 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/preprocessing.py +1131 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/py.typed +0 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/relationships/AGENTS.md +15 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/relationships/__init__.py +31 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/relationships/correlation.py +248 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/relationships/plot_correlation.py +220 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/store/AGENTS.md +14 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/store/__init__.py +9 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/store/offline.py +576 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/utils/AGENTS.md +13 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/utils/__init__.py +0 -0
- ml4t_engineer-0.1.0/src/ml4t/engineer/utils/dependencies.py +320 -0
- ml4t_engineer-0.1.0/tests/__init__.py +1 -0
- ml4t_engineer-0.1.0/tests/bars/__init__.py +1 -0
- ml4t_engineer-0.1.0/tests/bars/test_bars_core.py +503 -0
- ml4t_engineer-0.1.0/tests/bars/test_imbalance_bars.py +546 -0
- ml4t_engineer-0.1.0/tests/bars/test_imbalance_variants.py +249 -0
- ml4t_engineer-0.1.0/tests/bars/test_input_contract.py +230 -0
- ml4t_engineer-0.1.0/tests/bars/test_run_bars.py +777 -0
- ml4t_engineer-0.1.0/tests/bars/test_vectorized_bars.py +578 -0
- ml4t_engineer-0.1.0/tests/conftest.py +309 -0
- ml4t_engineer-0.1.0/tests/core/__init__.py +1 -0
- ml4t_engineer-0.1.0/tests/core/test_calendars.py +705 -0
- ml4t_engineer-0.1.0/tests/core/test_registry.py +584 -0
- ml4t_engineer-0.1.0/tests/core/test_schemas_coverage.py +396 -0
- ml4t_engineer-0.1.0/tests/core/test_validation.py +257 -0
- ml4t_engineer-0.1.0/tests/documentation_workflows.py +61 -0
- ml4t_engineer-0.1.0/tests/features/math/test_math_coverage.py +290 -0
- ml4t_engineer-0.1.0/tests/features/ml/test_entropy.py +311 -0
- ml4t_engineer-0.1.0/tests/features/ml/test_rolling_entropy_coverage.py +690 -0
- ml4t_engineer-0.1.0/tests/features/ml/test_rolling_entropy_extended.py +532 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_adx.py +337 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_aroon.py +443 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_aroon_coverage.py +275 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_directional.py +402 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_directional_coverage.py +170 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_macd.py +316 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_macd_coverage.py +115 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_macdfix.py +376 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_mfi.py +375 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_momentum_coverage.py +590 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_momentum_extended_coverage.py +842 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_momentum_numba_coverage.py +705 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_momentum_numba_paths.py +370 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_rsi.py +279 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_rsi_coverage.py +97 -0
- ml4t_engineer-0.1.0/tests/features/momentum/test_sar.py +367 -0
- ml4t_engineer-0.1.0/tests/features/statistics/test_linearreg_extended.py +443 -0
- ml4t_engineer-0.1.0/tests/features/statistics/test_statistics_extended.py +499 -0
- ml4t_engineer-0.1.0/tests/features/statistics/test_statistics_numba_coverage.py +605 -0
- ml4t_engineer-0.1.0/tests/features/statistics/test_stats_numba_boost.py +701 -0
- ml4t_engineer-0.1.0/tests/features/statistics/test_stddev.py +362 -0
- ml4t_engineer-0.1.0/tests/features/statistics/test_structural_break.py +423 -0
- ml4t_engineer-0.1.0/tests/features/statistics/test_structural_break_extended.py +546 -0
- ml4t_engineer-0.1.0/tests/features/statistics/test_var.py +353 -0
- ml4t_engineer-0.1.0/tests/features/test_composite.py +361 -0
- ml4t_engineer-0.1.0/tests/features/test_labeling.py +271 -0
- ml4t_engineer-0.1.0/tests/features/test_low_coverage_boost.py +1061 -0
- ml4t_engineer-0.1.0/tests/features/test_microstructure.py +568 -0
- ml4t_engineer-0.1.0/tests/features/test_ml.py +457 -0
- ml4t_engineer-0.1.0/tests/features/test_order_book.py +485 -0
- ml4t_engineer-0.1.0/tests/features/test_risk_coverage.py +494 -0
- ml4t_engineer-0.1.0/tests/features/test_statistics.py +475 -0
- ml4t_engineer-0.1.0/tests/features/test_volatility_advanced.py +339 -0
- ml4t_engineer-0.1.0/tests/features/test_volume.py +513 -0
- ml4t_engineer-0.1.0/tests/features/test_volume_crossasset_coverage.py +859 -0
- ml4t_engineer-0.1.0/tests/features/trend/test_dema.py +310 -0
- ml4t_engineer-0.1.0/tests/features/trend/test_donchian.py +45 -0
- ml4t_engineer-0.1.0/tests/features/trend/test_ema.py +365 -0
- ml4t_engineer-0.1.0/tests/features/trend/test_ema_coverage.py +98 -0
- ml4t_engineer-0.1.0/tests/features/trend/test_kama.py +357 -0
- ml4t_engineer-0.1.0/tests/features/trend/test_t3.py +348 -0
- ml4t_engineer-0.1.0/tests/features/trend/test_trend_coverage.py +650 -0
- ml4t_engineer-0.1.0/tests/features/trend/test_trend_numba_coverage.py +844 -0
- ml4t_engineer-0.1.0/tests/features/utils/test_helpers.py +213 -0
- ml4t_engineer-0.1.0/tests/features/utils/test_ma_types.py +54 -0
- ml4t_engineer-0.1.0/tests/features/volatility/test_atr_coverage.py +98 -0
- ml4t_engineer-0.1.0/tests/features/volatility/test_volatility_comprehensive.py +950 -0
- ml4t_engineer-0.1.0/tests/features/volatility/test_volatility_coverage.py +239 -0
- ml4t_engineer-0.1.0/tests/features/volume/test_adosc.py +463 -0
- ml4t_engineer-0.1.0/tests/features/volume/test_obv.py +418 -0
- ml4t_engineer-0.1.0/tests/features/volume/test_volume_coverage.py +501 -0
- ml4t_engineer-0.1.0/tests/labeling/test_labeling_coverage.py +963 -0
- ml4t_engineer-0.1.0/tests/labeling/test_meta_labels.py +468 -0
- ml4t_engineer-0.1.0/tests/labeling/test_percentile_labels.py +599 -0
- ml4t_engineer-0.1.0/tests/labeling/test_release_critical_paths.py +602 -0
- ml4t_engineer-0.1.0/tests/labeling/test_time_horizons.py +712 -0
- ml4t_engineer-0.1.0/tests/relationships/__init__.py +1 -0
- ml4t_engineer-0.1.0/tests/relationships/test_correlation.py +391 -0
- ml4t_engineer-0.1.0/tests/relationships/test_plot_correlation.py +447 -0
- ml4t_engineer-0.1.0/tests/store/__init__.py +0 -0
- ml4t_engineer-0.1.0/tests/store/test_offline.py +809 -0
- ml4t_engineer-0.1.0/tests/test_accuracy_validation.py +238 -0
- ml4t_engineer-0.1.0/tests/test_ad.py +215 -0
- ml4t_engineer-0.1.0/tests/test_adosc.py +247 -0
- ml4t_engineer-0.1.0/tests/test_adx_helpers.py +572 -0
- ml4t_engineer-0.1.0/tests/test_adxr.py +243 -0
- ml4t_engineer-0.1.0/tests/test_all_features_integration.py +298 -0
- ml4t_engineer-0.1.0/tests/test_all_indicators_accuracy.py +344 -0
- ml4t_engineer-0.1.0/tests/test_api.py +672 -0
- ml4t_engineer-0.1.0/tests/test_artifacts.py +141 -0
- ml4t_engineer-0.1.0/tests/test_atr_barriers.py +492 -0
- ml4t_engineer-0.1.0/tests/test_avgdev.py +216 -0
- ml4t_engineer-0.1.0/tests/test_avgprice.py +200 -0
- ml4t_engineer-0.1.0/tests/test_bar_sampler_performance.py +146 -0
- ml4t_engineer-0.1.0/tests/test_bars.py +649 -0
- ml4t_engineer-0.1.0/tests/test_bars_comprehensive.py +287 -0
- ml4t_engineer-0.1.0/tests/test_bars_specialized.py +538 -0
- ml4t_engineer-0.1.0/tests/test_catalog.py +340 -0
- ml4t_engineer-0.1.0/tests/test_cmo.py +217 -0
- ml4t_engineer-0.1.0/tests/test_config.py +118 -0
- ml4t_engineer-0.1.0/tests/test_config_system.py +476 -0
- ml4t_engineer-0.1.0/tests/test_coverage_policy.py +113 -0
- ml4t_engineer-0.1.0/tests/test_cross_asset.py +495 -0
- ml4t_engineer-0.1.0/tests/test_data_contract_config.py +108 -0
- ml4t_engineer-0.1.0/tests/test_dataset.py +994 -0
- ml4t_engineer-0.1.0/tests/test_directional_indicators.py +313 -0
- ml4t_engineer-0.1.0/tests/test_directional_indicators_strict.py +130 -0
- ml4t_engineer-0.1.0/tests/test_dm_indicators.py +294 -0
- ml4t_engineer-0.1.0/tests/test_documentation_workflows.py +21 -0
- ml4t_engineer-0.1.0/tests/test_end_to_end_integration.py +56 -0
- ml4t_engineer-0.1.0/tests/test_exact_validation.py +812 -0
- ml4t_engineer-0.1.0/tests/test_examples.py +40 -0
- ml4t_engineer-0.1.0/tests/test_experiment_config.py +544 -0
- ml4t_engineer-0.1.0/tests/test_fdiff.py +270 -0
- ml4t_engineer-0.1.0/tests/test_imi.py +229 -0
- ml4t_engineer-0.1.0/tests/test_kama.py +193 -0
- ml4t_engineer-0.1.0/tests/test_labeling.py +1509 -0
- ml4t_engineer-0.1.0/tests/test_labeling_calendar.py +701 -0
- ml4t_engineer-0.1.0/tests/test_labeling_enhanced.py +495 -0
- ml4t_engineer-0.1.0/tests/test_linearreg.py +258 -0
- ml4t_engineer-0.1.0/tests/test_linearreg_family.py +385 -0
- ml4t_engineer-0.1.0/tests/test_logging.py +420 -0
- ml4t_engineer-0.1.0/tests/test_lookahead_bias_fixes.py +219 -0
- ml4t_engineer-0.1.0/tests/test_math_operators.py +297 -0
- ml4t_engineer-0.1.0/tests/test_medprice.py +175 -0
- ml4t_engineer-0.1.0/tests/test_microstructure.py +337 -0
- ml4t_engineer-0.1.0/tests/test_midpoint.py +216 -0
- ml4t_engineer-0.1.0/tests/test_midprice.py +294 -0
- ml4t_engineer-0.1.0/tests/test_ml_features.py +478 -0
- ml4t_engineer-0.1.0/tests/test_natr.py +214 -0
- ml4t_engineer-0.1.0/tests/test_new_indicators.py +559 -0
- ml4t_engineer-0.1.0/tests/test_new_labeling_methods.py +470 -0
- ml4t_engineer-0.1.0/tests/test_numba_compat.py +35 -0
- ml4t_engineer-0.1.0/tests/test_optimized_indicators.py +431 -0
- ml4t_engineer-0.1.0/tests/test_performance.py +304 -0
- ml4t_engineer-0.1.0/tests/test_polars_compat.py +26 -0
- ml4t_engineer-0.1.0/tests/test_preprocessing.py +901 -0
- ml4t_engineer-0.1.0/tests/test_property_based.py +593 -0
- ml4t_engineer-0.1.0/tests/test_regime.py +410 -0
- ml4t_engineer-0.1.0/tests/test_registry_lookbacks.py +280 -0
- ml4t_engineer-0.1.0/tests/test_release_policy.py +200 -0
- ml4t_engineer-0.1.0/tests/test_risk.py +519 -0
- ml4t_engineer-0.1.0/tests/test_roc_variants.py +280 -0
- ml4t_engineer-0.1.0/tests/test_stochf.py +280 -0
- ml4t_engineer-0.1.0/tests/test_t3.py +217 -0
- ml4t_engineer-0.1.0/tests/test_talib_accuracy.py +804 -0
- ml4t_engineer-0.1.0/tests/test_talib_p0_indicators.py +452 -0
- ml4t_engineer-0.1.0/tests/test_talib_p1_indicators.py +386 -0
- ml4t_engineer-0.1.0/tests/test_talib_p2_indicators.py +340 -0
- ml4t_engineer-0.1.0/tests/test_talib_p3_indicators.py +367 -0
- ml4t_engineer-0.1.0/tests/test_talib_remaining.py +225 -0
- ml4t_engineer-0.1.0/tests/test_timezone_handling.py +250 -0
- ml4t_engineer-0.1.0/tests/test_trange.py +193 -0
- ml4t_engineer-0.1.0/tests/test_trix.py +179 -0
- ml4t_engineer-0.1.0/tests/test_tsf.py +199 -0
- ml4t_engineer-0.1.0/tests/test_typprice.py +191 -0
- ml4t_engineer-0.1.0/tests/test_ultosc.py +219 -0
- ml4t_engineer-0.1.0/tests/test_validation.py +455 -0
- ml4t_engineer-0.1.0/tests/test_var.py +225 -0
- ml4t_engineer-0.1.0/tests/test_volatility_advanced.py +499 -0
- ml4t_engineer-0.1.0/tests/test_volume_comprehensive.py +372 -0
- ml4t_engineer-0.1.0/tests/test_wclprice.py +207 -0
- ml4t_engineer-0.1.0/tests/type_stubs/duckdb/__init__.pyi +9 -0
- ml4t_engineer-0.1.0/tests/type_stubs/matplotlib/__init__.pyi +1 -0
- ml4t_engineer-0.1.0/tests/type_stubs/matplotlib/axes.pyi +5 -0
- ml4t_engineer-0.1.0/tests/type_stubs/matplotlib/figure.pyi +7 -0
- ml4t_engineer-0.1.0/tests/type_stubs/matplotlib/pyplot.pyi +6 -0
- ml4t_engineer-0.1.0/tests/utils/test_dependencies.py +406 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to ml4t-engineer are documented in this file.
|
|
4
|
+
|
|
5
|
+
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
|
+
Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.1.0b9] - 2026-06-21
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- `FixedTickRunBarSampler` for stable, fixed-threshold tick run bars
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
- Public package metadata links now point to the `ml4t/engineer` repository and
|
|
15
|
+
published documentation
|
|
16
|
+
- Added the missing MIT license file to the source distribution
|
|
17
|
+
- Synced lockfile metadata with relaxed dependency bounds
|
|
18
|
+
- Reduced pytest warning noise for performance markers and cyclical feature
|
|
19
|
+
metadata
|
|
20
|
+
|
|
21
|
+
## [0.1.0b8] - 2026-05-05
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- Dropped the Python 3.14-specific dependency split pins for `pandas`,
|
|
25
|
+
`pyarrow`, `scipy`, `scikit-learn`, `statsmodels`, and `numba`, keeping the
|
|
26
|
+
source-level minimums as unconditional requirements so resolvers can choose
|
|
27
|
+
the newest compatible builds for each platform
|
|
28
|
+
|
|
29
|
+
## [0.1.0b7] - 2026-05-05
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
- Lowered the Python 3.14 `pandas` floor from `>=3.0.0` to `>=2.3.3`, which
|
|
33
|
+
already publishes `cp314` wheels and avoids unnecessary dependency conflicts
|
|
34
|
+
downstream
|
|
35
|
+
|
|
36
|
+
## [0.1.0b6] - 2026-05-05
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
- Lowered the Python 3.14 `scikit-learn` floor from `>=1.8.0` to `>=1.7.2`,
|
|
40
|
+
which already publishes `cp314` wheels and avoids unnecessary dependency
|
|
41
|
+
conflicts downstream
|
|
42
|
+
|
|
43
|
+
## [0.1.0b5] - 2026-05-05
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
- Restored actual Python 3.14 installability by routing compiled scientific
|
|
47
|
+
dependencies onto release lines that publish `cp314` wheels
|
|
48
|
+
|
|
49
|
+
## [0.1.0b4] - 2026-04-02
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
- Vendored the shared ML4T docs theme into `docs/overrides/` using MkDocs
|
|
53
|
+
Material `custom_dir`, removing the external theme-package requirement
|
|
54
|
+
- Public `engineer` workflows now resolve `ml4t-specs` from PyPI instead of a
|
|
55
|
+
local sibling checkout or editable path override
|
|
56
|
+
|
|
57
|
+
### Fixed
|
|
58
|
+
- GitHub Docs workflow now builds and deploys from the public repo without
|
|
59
|
+
depending on private adjacent repositories
|
|
60
|
+
|
|
61
|
+
## [0.1.0b3] - 2026-04-01
|
|
62
|
+
|
|
63
|
+
### Added
|
|
64
|
+
- Public documentation overhaul with a workflow-first landing page, Book Guide,
|
|
65
|
+
and tighter API/user-guide routing
|
|
66
|
+
- Expanded `AGENTS.md` coverage across the package, including secondary modules
|
|
67
|
+
and wheel artifacts
|
|
68
|
+
|
|
69
|
+
### Changed
|
|
70
|
+
- Shared feed and artifact schema definitions now come from `ml4t-specs`
|
|
71
|
+
- `data_contract_from_market_data_spec()` now normalizes inputs through
|
|
72
|
+
`ml4t.specs.FeedSpec`
|
|
73
|
+
- Artifact schema defaults align with shared spec naming:
|
|
74
|
+
`asset`, `label_value`, and `prediction_value`
|
|
75
|
+
|
|
76
|
+
### Removed
|
|
77
|
+
- `DataContractConfig.from_ml4t_data()` in favor of shared spec-driven contracts
|
|
78
|
+
|
|
79
|
+
## [0.1.0b2] - 2026-03-23
|
|
80
|
+
|
|
81
|
+
### Added
|
|
82
|
+
- Engineered artifact spec dataclasses for feature, label, and prediction outputs
|
|
83
|
+
|
|
84
|
+
### Changed
|
|
85
|
+
- Shared market data specs can now be bridged directly into engineer config
|
|
86
|
+
|
|
87
|
+
## [0.1.0b1] - 2026-03-03
|
|
88
|
+
|
|
89
|
+
### Removed
|
|
90
|
+
- Dead modules: `selection/`, `validation/`, `visualization/`, `pipeline/`
|
|
91
|
+
- Diagnostic config classes (`feature_config.py`) — moved to ml4t-diagnostic
|
|
92
|
+
- Deprecation machinery (`core/deprecation.py`, deprecated params in bar samplers and `mom()`)
|
|
93
|
+
- Backward-compatibility shims in labeling module
|
|
94
|
+
- `[tool.mypy]` config (migrated to ty)
|
|
95
|
+
|
|
96
|
+
### Added
|
|
97
|
+
- Comprehensive volatility tests (58 new tests covering all 11 non-TA-Lib estimators)
|
|
98
|
+
- `perf` pytest marker — performance benchmarks excluded from default runs, available via `pytest -m perf`
|
|
99
|
+
|
|
100
|
+
### Changed
|
|
101
|
+
- TA-Lib moved from dev dependency group to `[ta]` optional extra (fixes CI for lint/typecheck jobs)
|
|
102
|
+
- `mom()` parameter renamed: `timeperiod` → `period` (consistency with other indicators)
|
|
103
|
+
- Bar sampler constructors: removed `initial_expectation` / `initial_run_expectation` params
|
|
104
|
+
|
|
105
|
+
## [0.1.0a11] - 2026-03-03
|
|
106
|
+
|
|
107
|
+
### Changed
|
|
108
|
+
- API hardening and correctness fixes for beta preparation
|
|
109
|
+
- Labeling leakage gap closed: data sorted chronologically before all label computations
|
|
110
|
+
- Public API aligned with documentation
|
|
111
|
+
|
|
112
|
+
## [0.1.0a10] - 2026-02-28
|
|
113
|
+
|
|
114
|
+
### Fixed
|
|
115
|
+
- Labeling leakage gap: ensured chronological sorting in all labeling functions
|
|
116
|
+
- Public API documentation alignment
|
|
117
|
+
|
|
118
|
+
## [0.1.0a9] - 2026-02-28
|
|
119
|
+
|
|
120
|
+
### Fixed
|
|
121
|
+
- `__version__` sourced from generated version metadata instead of hardcoded string
|
|
122
|
+
|
|
123
|
+
## [0.1.0a8] - 2026-02-27
|
|
124
|
+
|
|
125
|
+
### Added
|
|
126
|
+
- GitHub Actions CI workflow (lint, typecheck, test matrix, build)
|
|
127
|
+
- Release workflow with OIDC trusted publishing
|
|
128
|
+
- Ecosystem diagrams in README
|
|
129
|
+
|
|
130
|
+
### Changed
|
|
131
|
+
- Removed outcome module (migrated to ml4t-diagnostic)
|
|
132
|
+
- Feature count: 120 features across 10 categories
|
|
133
|
+
- Standardized labeling API on `LabelingConfig`-first pattern
|
|
134
|
+
|
|
135
|
+
### Fixed
|
|
136
|
+
- Normalized metadata for 4 features (33 → 37 normalized)
|
|
137
|
+
- ty type checking rules and CI configuration
|
|
138
|
+
- Numba cleanup crash workaround for Python 3.13
|
|
139
|
+
|
|
140
|
+
## [0.1.0a7] - 2026-01-20
|
|
141
|
+
|
|
142
|
+
### Added
|
|
143
|
+
- Time-based duration strings for labeling horizons (`"1h"`, `"4h"`, `"1d"`)
|
|
144
|
+
- `fixed_time_horizon_labels()` accepts `horizon="1h"`
|
|
145
|
+
- `triple_barrier_labels()` accepts `max_holding_period="1h"`
|
|
146
|
+
- `rolling_percentile_binary_labels()` accepts time-based horizon/lookback
|
|
147
|
+
- 51 new tests for time-based horizons
|
|
148
|
+
|
|
149
|
+
### Fixed
|
|
150
|
+
- Chronological sorting in `triple_barrier_labels`, `trend_scanning_labels`,
|
|
151
|
+
`fixed_time_horizon_labels`, and `rolling_percentile_binary_labels`
|
|
152
|
+
- dtype-based timestamp detection (replaces name matching)
|
|
153
|
+
|
|
154
|
+
## [0.1.0a6] - 2026-01-18
|
|
155
|
+
|
|
156
|
+
### Added
|
|
157
|
+
- Validation infrastructure with AFML and mlfinpy reference tests
|
|
158
|
+
- 86 validation tests (AFML formulas + mlfinpy comparison)
|
|
159
|
+
- Triple barrier, meta-labeling, sample weights validated at 1e-10 tolerance
|
|
160
|
+
|
|
161
|
+
### Fixed
|
|
162
|
+
- Triple barrier edge cases
|
|
163
|
+
- Multiple drift detection bugs
|
|
164
|
+
- Tuple syntax for isinstance type checks
|
|
165
|
+
|
|
166
|
+
## [0.1.0a5] - 2026-01-14
|
|
167
|
+
|
|
168
|
+
### Added
|
|
169
|
+
- `get_agent_docs()` for AI agent discoverability
|
|
170
|
+
- Hierarchical AGENTS.md navigation files
|
|
171
|
+
- AGENTS.md files included in wheel builds
|
|
172
|
+
|
|
173
|
+
### Fixed
|
|
174
|
+
- `variance_ratio` Int64 bug
|
|
175
|
+
|
|
176
|
+
## [0.1.0a4] - 2026-01-08
|
|
177
|
+
|
|
178
|
+
### Fixed
|
|
179
|
+
- Synced missing modules from development workspace
|
|
180
|
+
|
|
181
|
+
## [0.1.0a3] - 2026-01-04
|
|
182
|
+
|
|
183
|
+
Initial public alpha release.
|
|
184
|
+
|
|
185
|
+
### Added
|
|
186
|
+
- 120 feature functions across 10 categories (momentum, trend, volatility,
|
|
187
|
+
volume, microstructure, ML, risk, cycle, pattern, statistics)
|
|
188
|
+
- 60 indicators validated against TA-Lib at 1e-6 tolerance
|
|
189
|
+
- Triple-barrier labeling system (De Prado AFML)
|
|
190
|
+
- ATR-adjusted barriers, fixed horizon, trend scanning, percentile labels
|
|
191
|
+
- Meta-labeling and sample uniqueness (sequential bootstrap)
|
|
192
|
+
- Alternative bar types: volume, dollar, tick, imbalance, run bars
|
|
193
|
+
- Polars-native with Numba JIT compilation
|
|
194
|
+
- `compute_features()` pipeline with dependency resolution
|
|
195
|
+
- `FeatureCatalog` for feature discovery and metadata
|
|
196
|
+
- `LabelingConfig` with Pydantic v2 serialization
|
|
197
|
+
- `MLDatasetBuilder` for dataset construction
|
|
198
|
+
- `PreprocessingPipeline` for feature transformation
|
|
199
|
+
|
|
200
|
+
[Unreleased]: https://github.com/ml4t/engineer/compare/v0.1.0b9...HEAD
|
|
201
|
+
[0.1.0b9]: https://github.com/ml4t/engineer/compare/v0.1.0b8...v0.1.0b9
|
|
202
|
+
[0.1.0b8]: https://github.com/ml4t/engineer/compare/v0.1.0b7...v0.1.0b8
|
|
203
|
+
[0.1.0b7]: https://github.com/ml4t/engineer/compare/v0.1.0b6...v0.1.0b7
|
|
204
|
+
[0.1.0b6]: https://github.com/ml4t/engineer/compare/v0.1.0b5...v0.1.0b6
|
|
205
|
+
[0.1.0b5]: https://github.com/ml4t/engineer/compare/v0.1.0b4...v0.1.0b5
|
|
206
|
+
[0.1.0b4]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0b3...v0.1.0b4
|
|
207
|
+
[0.1.0b3]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0b2...v0.1.0b3
|
|
208
|
+
[0.1.0b2]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0b1...v0.1.0b2
|
|
209
|
+
[0.1.0b1]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0a11...v0.1.0b1
|
|
210
|
+
[0.1.0a11]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0a10...v0.1.0a11
|
|
211
|
+
[0.1.0a10]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0a9...v0.1.0a10
|
|
212
|
+
[0.1.0a9]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0a8...v0.1.0a9
|
|
213
|
+
[0.1.0a8]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0a7...v0.1.0a8
|
|
214
|
+
[0.1.0a7]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0a6...v0.1.0a7
|
|
215
|
+
[0.1.0a6]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0a5...v0.1.0a6
|
|
216
|
+
[0.1.0a5]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0a4...v0.1.0a5
|
|
217
|
+
[0.1.0a4]: https://github.com/stefan-jansen/ml4t-engineer/compare/v0.1.0a3...v0.1.0a4
|
|
218
|
+
[0.1.0a3]: https://github.com/stefan-jansen/ml4t-engineer/releases/tag/v0.1.0a3
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-2026 Stefan Jansen
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ml4t-engineer
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: High-performance quantitative finance feature engineering library
|
|
5
|
+
Project-URL: Homepage, https://github.com/ml4t/engineer
|
|
6
|
+
Project-URL: Documentation, https://www.ml4trading.io/docs/engineer/
|
|
7
|
+
Project-URL: Repository, https://github.com/ml4t/engineer
|
|
8
|
+
Project-URL: Issues, https://github.com/ml4t/engineer/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/ml4t/engineer/blob/main/CHANGELOG.md
|
|
10
|
+
Author-email: Stefan Jansen <stefan@ml4trading.io>
|
|
11
|
+
Maintainer-email: Stefan Jansen <stefan@ml4trading.io>
|
|
12
|
+
License: MIT
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Keywords: backtesting,feature-engineering,features,finance,labeling,machine-learning,microstructure,polars,quantitative-finance,technical-analysis,trading
|
|
15
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
18
|
+
Classifier: Intended Audience :: Science/Research
|
|
19
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Programming Language :: Python :: 3
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
25
|
+
Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
26
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
27
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
28
|
+
Classifier: Typing :: Typed
|
|
29
|
+
Requires-Python: >=3.12
|
|
30
|
+
Requires-Dist: ml4t-specs<0.2.0,>=0.1.0
|
|
31
|
+
Requires-Dist: numba>=0.57.0; python_version < '3.15'
|
|
32
|
+
Requires-Dist: numpy<2.6,>=1.24.0
|
|
33
|
+
Requires-Dist: pandas>=2.0.0
|
|
34
|
+
Requires-Dist: polars>=0.20.0
|
|
35
|
+
Requires-Dist: pyarrow>=14.0.0; python_version < '3.15'
|
|
36
|
+
Requires-Dist: pydantic>=2.0.0
|
|
37
|
+
Requires-Dist: python-dateutil>=2.8.0
|
|
38
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
39
|
+
Requires-Dist: scikit-learn>=1.3.0; python_version < '3.15'
|
|
40
|
+
Requires-Dist: scipy>=1.10.0; python_version < '3.15'
|
|
41
|
+
Requires-Dist: statsmodels>=0.14.0; python_version < '3.15'
|
|
42
|
+
Requires-Dist: structlog>=23.0.0
|
|
43
|
+
Provides-Extra: all
|
|
44
|
+
Requires-Dist: arch>=6.0.0; extra == 'all'
|
|
45
|
+
Requires-Dist: duckdb>=0.9.0; extra == 'all'
|
|
46
|
+
Requires-Dist: hypothesis>=6.80.0; extra == 'all'
|
|
47
|
+
Requires-Dist: ipdb>=0.13.0; extra == 'all'
|
|
48
|
+
Requires-Dist: ipython>=8.14.0; extra == 'all'
|
|
49
|
+
Requires-Dist: lightgbm>=4.0.0; extra == 'all'
|
|
50
|
+
Requires-Dist: matplotlib>=3.7.0; extra == 'all'
|
|
51
|
+
Requires-Dist: mkdocs-material>=9.5.0; extra == 'all'
|
|
52
|
+
Requires-Dist: mkdocs<2,>=1.6; extra == 'all'
|
|
53
|
+
Requires-Dist: mkdocstrings[python]>=0.24.0; extra == 'all'
|
|
54
|
+
Requires-Dist: pandas-market-calendars>=4.0.0; extra == 'all'
|
|
55
|
+
Requires-Dist: plotly>=5.15.0; extra == 'all'
|
|
56
|
+
Requires-Dist: pre-commit>=3.3.0; extra == 'all'
|
|
57
|
+
Requires-Dist: pytest-benchmark>=4.0.0; extra == 'all'
|
|
58
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == 'all'
|
|
59
|
+
Requires-Dist: pytest-timeout>=2.1.0; extra == 'all'
|
|
60
|
+
Requires-Dist: pytest-xdist>=3.3.0; extra == 'all'
|
|
61
|
+
Requires-Dist: pytest>=7.4.0; extra == 'all'
|
|
62
|
+
Requires-Dist: ruff>=0.1.0; extra == 'all'
|
|
63
|
+
Requires-Dist: seaborn>=0.12.0; extra == 'all'
|
|
64
|
+
Requires-Dist: shap>=0.44.0; extra == 'all'
|
|
65
|
+
Requires-Dist: ta-lib>=0.4.0; extra == 'all'
|
|
66
|
+
Provides-Extra: calendars
|
|
67
|
+
Requires-Dist: pandas-market-calendars>=4.0.0; extra == 'calendars'
|
|
68
|
+
Provides-Extra: dev
|
|
69
|
+
Requires-Dist: arch>=6.0.0; extra == 'dev'
|
|
70
|
+
Requires-Dist: duckdb>=0.9.0; extra == 'dev'
|
|
71
|
+
Requires-Dist: hypothesis>=6.80.0; extra == 'dev'
|
|
72
|
+
Requires-Dist: ipdb>=0.13.0; extra == 'dev'
|
|
73
|
+
Requires-Dist: ipython>=8.14.0; extra == 'dev'
|
|
74
|
+
Requires-Dist: lightgbm>=4.0.0; extra == 'dev'
|
|
75
|
+
Requires-Dist: pandas-market-calendars>=4.0.0; extra == 'dev'
|
|
76
|
+
Requires-Dist: pre-commit>=3.3.0; extra == 'dev'
|
|
77
|
+
Requires-Dist: pytest-benchmark>=4.0.0; extra == 'dev'
|
|
78
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
|
|
79
|
+
Requires-Dist: pytest-timeout>=2.1.0; extra == 'dev'
|
|
80
|
+
Requires-Dist: pytest-xdist>=3.3.0; extra == 'dev'
|
|
81
|
+
Requires-Dist: pytest>=7.4.0; extra == 'dev'
|
|
82
|
+
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
83
|
+
Requires-Dist: shap>=0.44.0; extra == 'dev'
|
|
84
|
+
Requires-Dist: ta-lib>=0.4.0; extra == 'dev'
|
|
85
|
+
Requires-Dist: yfinance>=0.2.0; extra == 'dev'
|
|
86
|
+
Provides-Extra: docs
|
|
87
|
+
Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
|
|
88
|
+
Requires-Dist: mkdocs<2,>=1.6; extra == 'docs'
|
|
89
|
+
Requires-Dist: mkdocstrings[python]>=0.24.0; extra == 'docs'
|
|
90
|
+
Provides-Extra: ml
|
|
91
|
+
Requires-Dist: lightgbm>=4.0.0; extra == 'ml'
|
|
92
|
+
Requires-Dist: shap>=0.44.0; extra == 'ml'
|
|
93
|
+
Provides-Extra: store
|
|
94
|
+
Requires-Dist: duckdb>=0.9.0; extra == 'store'
|
|
95
|
+
Provides-Extra: ta
|
|
96
|
+
Requires-Dist: ta-lib>=0.4.0; extra == 'ta'
|
|
97
|
+
Provides-Extra: viz
|
|
98
|
+
Requires-Dist: matplotlib>=3.7.0; extra == 'viz'
|
|
99
|
+
Requires-Dist: plotly>=5.15.0; extra == 'viz'
|
|
100
|
+
Requires-Dist: seaborn>=0.12.0; extra == 'viz'
|
|
101
|
+
Description-Content-Type: text/markdown
|
|
102
|
+
|
|
103
|
+
# ml4t-engineer
|
|
104
|
+
|
|
105
|
+
[](https://www.python.org/downloads/)
|
|
106
|
+
[](https://pypi.org/project/ml4t-engineer/)
|
|
107
|
+
[](https://opensource.org/licenses/MIT)
|
|
108
|
+
|
|
109
|
+
Feature engineering for financial machine learning: validated features, labeling
|
|
110
|
+
methods, alternative bars, and leakage-safe dataset preparation.
|
|
111
|
+
|
|
112
|
+
## Part of the ML4T Library Ecosystem
|
|
113
|
+
|
|
114
|
+
This library is one of six interconnected libraries supporting the machine
|
|
115
|
+
learning for trading workflow described in
|
|
116
|
+
[Machine Learning for Trading](https://www.ml4trading.io/):
|
|
117
|
+
|
|
118
|
+

|
|
119
|
+
|
|
120
|
+
Together they cover data infrastructure, feature engineering, modeling, signal evaluation, strategy backtesting, and live deployment.
|
|
121
|
+
|
|
122
|
+
## What This Library Does
|
|
123
|
+
|
|
124
|
+
Transforming raw price data into predictive features is a core task in
|
|
125
|
+
quantitative research. `ml4t-engineer` provides:
|
|
126
|
+
|
|
127
|
+
- 120 registry features across 11 categories (momentum, volatility, trend,
|
|
128
|
+
microstructure, and more)
|
|
129
|
+
- Triple-barrier, ATR-based, percentile, trend-scanning, and meta-labeling
|
|
130
|
+
methods from *Advances in Financial Machine Learning*
|
|
131
|
+
- Alternative bar sampling (volume bars, dollar bars, tick imbalance bars)
|
|
132
|
+
- Dataset building, preprocessing, and feature discovery for leakage-safe ML
|
|
133
|
+
workflows
|
|
134
|
+
|
|
135
|
+
The library is built on Polars with Numba JIT compilation for numerical
|
|
136
|
+
operations. 60 features are validated against TA-Lib at `1e-6` tolerance.
|
|
137
|
+
|
|
138
|
+

|
|
139
|
+
|
|
140
|
+
## Installation
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
pip install ml4t-engineer
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Optional dependencies:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
pip install ml4t-engineer[ta] # TA-Lib backend
|
|
150
|
+
pip install ml4t-engineer[viz] # Visualization
|
|
151
|
+
pip install ml4t-engineer[calendars] # Trading calendars
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Quick Start
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
import polars as pl
|
|
158
|
+
from ml4t.engineer import compute_features
|
|
159
|
+
|
|
160
|
+
df = pl.read_parquet("ohlcv.parquet")
|
|
161
|
+
|
|
162
|
+
# Compute features with default parameters
|
|
163
|
+
result = compute_features(df, ["rsi", "macd", "atr", "obv"])
|
|
164
|
+
|
|
165
|
+
# Or with custom parameters
|
|
166
|
+
result = compute_features(df, [
|
|
167
|
+
{"name": "rsi", "params": {"period": 20}},
|
|
168
|
+
{
|
|
169
|
+
"name": "bollinger_bands",
|
|
170
|
+
"params": {"period": 20, "nbdevup": 2.0, "nbdevdn": 2.0},
|
|
171
|
+
},
|
|
172
|
+
])
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Feature Registry
|
|
176
|
+
|
|
177
|
+
```python
|
|
178
|
+
from ml4t.engineer.core.registry import get_registry
|
|
179
|
+
|
|
180
|
+
registry = get_registry()
|
|
181
|
+
print(registry.list_all()) # All 120 features
|
|
182
|
+
print(registry.list_by_category("momentum")) # 31 momentum indicators
|
|
183
|
+
print(registry.list_ta_lib_compatible()) # 60 TA-Lib validated features
|
|
184
|
+
print(registry.list_normalized()) # 37 bounded (0-100, -1 to 1)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Feature Categories
|
|
188
|
+
|
|
189
|
+
| Category | Count | Examples |
|
|
190
|
+
|----------|-------|----------|
|
|
191
|
+
| Momentum | 31 | RSI, MACD, Stochastic, CCI, ADX, MFI |
|
|
192
|
+
| Microstructure | 15 | Kyle Lambda, VPIN, Amihud, Roll spread |
|
|
193
|
+
| Volatility | 15 | ATR, Bollinger, Yang-Zhang, Parkinson |
|
|
194
|
+
| Statistics | 14 | Variance, Linear Regression, Correlation |
|
|
195
|
+
| ML | 14 | Fractional Diff, Entropy, Lag features |
|
|
196
|
+
| Trend | 10 | SMA, EMA, WMA, DEMA, TEMA, KAMA |
|
|
197
|
+
| Risk | 6 | Max Drawdown, Sortino, CVaR |
|
|
198
|
+
| Price Transform | 5 | Typical Price, Weighted Close |
|
|
199
|
+
| Regime | 4 | Hurst Exponent, Choppiness Index |
|
|
200
|
+
| Volume | 3 | OBV, AD, ADOSC |
|
|
201
|
+
| Math | 3 | MAX, MIN, SUM |
|
|
202
|
+
|
|
203
|
+
## Triple-Barrier Labeling
|
|
204
|
+
|
|
205
|
+
```python
|
|
206
|
+
from ml4t.engineer.config import LabelingConfig
|
|
207
|
+
from ml4t.engineer.labeling import triple_barrier_labels, atr_triple_barrier_labels
|
|
208
|
+
|
|
209
|
+
# Fixed barriers
|
|
210
|
+
tb_config = LabelingConfig.triple_barrier(
|
|
211
|
+
upper_barrier=0.02, # 2% profit target
|
|
212
|
+
lower_barrier=0.01, # 1% stop loss
|
|
213
|
+
max_holding_period=20, # 20 bars
|
|
214
|
+
)
|
|
215
|
+
labels = triple_barrier_labels(
|
|
216
|
+
df,
|
|
217
|
+
config=tb_config,
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
# ATR-based dynamic barriers
|
|
221
|
+
atr_config = LabelingConfig.atr_barrier(
|
|
222
|
+
atr_tp_multiple=2.0,
|
|
223
|
+
atr_sl_multiple=1.0,
|
|
224
|
+
atr_period=14,
|
|
225
|
+
max_holding_period=20,
|
|
226
|
+
)
|
|
227
|
+
labels = atr_triple_barrier_labels(
|
|
228
|
+
df,
|
|
229
|
+
config=atr_config,
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
# Time-based horizons
|
|
233
|
+
tb_time_config = LabelingConfig.triple_barrier(
|
|
234
|
+
upper_barrier=0.02,
|
|
235
|
+
lower_barrier=0.01,
|
|
236
|
+
max_holding_period="4h", # 4 hours
|
|
237
|
+
)
|
|
238
|
+
labels = triple_barrier_labels(
|
|
239
|
+
df,
|
|
240
|
+
config=tb_time_config,
|
|
241
|
+
)
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Alternative Bars
|
|
245
|
+
|
|
246
|
+
```python
|
|
247
|
+
from ml4t.engineer.bars import VolumeBarSampler, DollarBarSampler, TickImbalanceBarSampler
|
|
248
|
+
|
|
249
|
+
# Volume bars (equal volume per bar)
|
|
250
|
+
vbars = VolumeBarSampler(volume_per_bar=1000).sample(tick_data)
|
|
251
|
+
|
|
252
|
+
# Dollar bars (equal dollar volume per bar)
|
|
253
|
+
dbars = DollarBarSampler(dollars_per_bar=1_000_000).sample(tick_data)
|
|
254
|
+
|
|
255
|
+
# Tick imbalance bars (information-driven)
|
|
256
|
+
ibars = TickImbalanceBarSampler(expected_ticks_per_bar=100).sample(tick_data)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## Documentation
|
|
260
|
+
|
|
261
|
+
- [Docs Home](https://www.ml4trading.io/docs/engineer/) - library overview and
|
|
262
|
+
workflow map
|
|
263
|
+
- [Quickstart](https://www.ml4trading.io/docs/engineer/getting-started/quickstart/) -
|
|
264
|
+
first working feature and labeling workflow
|
|
265
|
+
- [Features](https://www.ml4trading.io/docs/engineer/user-guide/features/) -
|
|
266
|
+
120 features across 11 registry categories
|
|
267
|
+
- [Labeling](https://www.ml4trading.io/docs/engineer/user-guide/labeling/) -
|
|
268
|
+
7 labeling methods for supervised learning
|
|
269
|
+
- [Dataset Builder](https://www.ml4trading.io/docs/engineer/user-guide/dataset-builder/) -
|
|
270
|
+
leakage-safe train/test preparation
|
|
271
|
+
- [Examples](https://github.com/ml4t/engineer/blob/main/examples/README.md) -
|
|
272
|
+
runnable scripts for complete workflows and focused features
|
|
273
|
+
|
|
274
|
+
## Technical Characteristics
|
|
275
|
+
|
|
276
|
+
- **Polars-native**: All computations use Polars expressions
|
|
277
|
+
- **Numba-accelerated**: JIT compilation for numerical kernels
|
|
278
|
+
- **TA-Lib validated**: 60 features validated at `1e-6` tolerance
|
|
279
|
+
- **AFML-compliant**: Labeling methods verified against *Advances in Financial Machine Learning*
|
|
280
|
+
- **ML-ready outputs**: 37 features produce bounded outputs (0-100, -1 to 1) for direct model input; remaining features work with standard preprocessing (returns, z-scores, robust scaling)
|
|
281
|
+
|
|
282
|
+
## Related Libraries
|
|
283
|
+
|
|
284
|
+
- **ml4t-specs**: Shared feed and artifact schema definitions across the ML4T stack
|
|
285
|
+
- **ml4t-data**: Market data acquisition and storage
|
|
286
|
+
- **ml4t-diagnostic**: Signal evaluation and statistical validation
|
|
287
|
+
- **ml4t-backtest**: Event-driven backtesting
|
|
288
|
+
- **ml4t-live**: Live trading with broker integration
|
|
289
|
+
|
|
290
|
+
## Development
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
git clone https://github.com/ml4t/engineer.git
|
|
294
|
+
cd ml4t-engineer
|
|
295
|
+
uv sync
|
|
296
|
+
uv run pytest tests/ -q
|
|
297
|
+
uv run ty check
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## References
|
|
301
|
+
|
|
302
|
+
- Lopez de Prado, M. (2018). *Advances in Financial Machine Learning*. Wiley.
|
|
303
|
+
- Lopez de Prado, M. (2020). *Machine Learning for Asset Managers*. Cambridge.
|
|
304
|
+
|
|
305
|
+
## License
|
|
306
|
+
|
|
307
|
+
MIT License - see [LICENSE](LICENSE) for details.
|