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.
Files changed (373) hide show
  1. ml4t_engineer-0.1.0/.gitignore +16 -0
  2. ml4t_engineer-0.1.0/CHANGELOG.md +218 -0
  3. ml4t_engineer-0.1.0/LICENSE +21 -0
  4. ml4t_engineer-0.1.0/PKG-INFO +307 -0
  5. ml4t_engineer-0.1.0/README.md +205 -0
  6. ml4t_engineer-0.1.0/pyproject.toml +283 -0
  7. ml4t_engineer-0.1.0/src/ml4t/engineer/AGENTS.md +83 -0
  8. ml4t_engineer-0.1.0/src/ml4t/engineer/__init__.py +151 -0
  9. ml4t_engineer-0.1.0/src/ml4t/engineer/_numba.py +32 -0
  10. ml4t_engineer-0.1.0/src/ml4t/engineer/_polars_compat.py +71 -0
  11. ml4t_engineer-0.1.0/src/ml4t/engineer/_version.py +24 -0
  12. ml4t_engineer-0.1.0/src/ml4t/engineer/api.py +620 -0
  13. ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/AGENTS.md +17 -0
  14. ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/__init__.py +17 -0
  15. ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/features.py +72 -0
  16. ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/labels.py +85 -0
  17. ml4t_engineer-0.1.0/src/ml4t/engineer/artifacts/predictions.py +80 -0
  18. ml4t_engineer-0.1.0/src/ml4t/engineer/bars/AGENTS.md +72 -0
  19. ml4t_engineer-0.1.0/src/ml4t/engineer/bars/__init__.py +88 -0
  20. ml4t_engineer-0.1.0/src/ml4t/engineer/bars/base.py +152 -0
  21. ml4t_engineer-0.1.0/src/ml4t/engineer/bars/imbalance.py +1766 -0
  22. ml4t_engineer-0.1.0/src/ml4t/engineer/bars/run.py +1008 -0
  23. ml4t_engineer-0.1.0/src/ml4t/engineer/bars/tick.py +97 -0
  24. ml4t_engineer-0.1.0/src/ml4t/engineer/bars/vectorized.py +644 -0
  25. ml4t_engineer-0.1.0/src/ml4t/engineer/bars/volume.py +309 -0
  26. ml4t_engineer-0.1.0/src/ml4t/engineer/config/AGENTS.md +28 -0
  27. ml4t_engineer-0.1.0/src/ml4t/engineer/config/__init__.py +44 -0
  28. ml4t_engineer-0.1.0/src/ml4t/engineer/config/base.py +330 -0
  29. ml4t_engineer-0.1.0/src/ml4t/engineer/config/data_contract.py +35 -0
  30. ml4t_engineer-0.1.0/src/ml4t/engineer/config/experiment.py +348 -0
  31. ml4t_engineer-0.1.0/src/ml4t/engineer/config/labeling.py +526 -0
  32. ml4t_engineer-0.1.0/src/ml4t/engineer/config/preprocessing_config.py +311 -0
  33. ml4t_engineer-0.1.0/src/ml4t/engineer/config/spec_bridge.py +35 -0
  34. ml4t_engineer-0.1.0/src/ml4t/engineer/core/AGENTS.md +22 -0
  35. ml4t_engineer-0.1.0/src/ml4t/engineer/core/__init__.py +113 -0
  36. ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/AGENTS.md +16 -0
  37. ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/__init__.py +19 -0
  38. ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/base.py +66 -0
  39. ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/crypto.py +107 -0
  40. ml4t_engineer-0.1.0/src/ml4t/engineer/core/calendars/equity.py +215 -0
  41. ml4t_engineer-0.1.0/src/ml4t/engineer/core/decorators.py +225 -0
  42. ml4t_engineer-0.1.0/src/ml4t/engineer/core/dispatch.py +22 -0
  43. ml4t_engineer-0.1.0/src/ml4t/engineer/core/exceptions.py +311 -0
  44. ml4t_engineer-0.1.0/src/ml4t/engineer/core/lookbacks.py +242 -0
  45. ml4t_engineer-0.1.0/src/ml4t/engineer/core/registry.py +250 -0
  46. ml4t_engineer-0.1.0/src/ml4t/engineer/core/schemas.py +198 -0
  47. ml4t_engineer-0.1.0/src/ml4t/engineer/core/types.py +49 -0
  48. ml4t_engineer-0.1.0/src/ml4t/engineer/core/validation.py +218 -0
  49. ml4t_engineer-0.1.0/src/ml4t/engineer/dataset.py +778 -0
  50. ml4t_engineer-0.1.0/src/ml4t/engineer/discovery/AGENTS.md +19 -0
  51. ml4t_engineer-0.1.0/src/ml4t/engineer/discovery/__init__.py +9 -0
  52. ml4t_engineer-0.1.0/src/ml4t/engineer/discovery/catalog.py +578 -0
  53. ml4t_engineer-0.1.0/src/ml4t/engineer/features/AGENTS.md +65 -0
  54. ml4t_engineer-0.1.0/src/ml4t/engineer/features/__init__.py +53 -0
  55. ml4t_engineer-0.1.0/src/ml4t/engineer/features/composite.py +312 -0
  56. ml4t_engineer-0.1.0/src/ml4t/engineer/features/cross_asset.py +711 -0
  57. ml4t_engineer-0.1.0/src/ml4t/engineer/features/fdiff.py +394 -0
  58. ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/AGENTS.md +35 -0
  59. ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/__init__.py +10 -0
  60. ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/max.py +155 -0
  61. ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/min.py +155 -0
  62. ml4t_engineer-0.1.0/src/ml4t/engineer/features/math/sum.py +127 -0
  63. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/AGENTS.md +37 -0
  64. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/__init__.py +20 -0
  65. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/amihud_illiquidity.py +202 -0
  66. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/effective_tick_rule.py +41 -0
  67. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/kyle_lambda.py +192 -0
  68. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/order_book.py +297 -0
  69. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/order_flow_imbalance.py +94 -0
  70. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/price_impact_ratio.py +78 -0
  71. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/quote_stuffing_indicator.py +79 -0
  72. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/realized_spread.py +58 -0
  73. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/roll_spread_estimator.py +68 -0
  74. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/trade_intensity.py +61 -0
  75. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/volume_at_price_ratio.py +76 -0
  76. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/volume_synchronicity.py +70 -0
  77. ml4t_engineer-0.1.0/src/ml4t/engineer/features/microstructure/volume_weighted_price_momentum.py +60 -0
  78. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/AGENTS.md +35 -0
  79. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/__init__.py +18 -0
  80. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/create_lag_features.py +87 -0
  81. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/cyclical_encode.py +73 -0
  82. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/directional_targets.py +96 -0
  83. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/fourier_features.py +68 -0
  84. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/interaction_features.py +84 -0
  85. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/multi_horizon_returns.py +72 -0
  86. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/percentile_rank_features.py +83 -0
  87. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/regime_conditional_features.py +73 -0
  88. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/rolling_entropy.py +713 -0
  89. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/time_decay_weights.py +84 -0
  90. ml4t_engineer-0.1.0/src/ml4t/engineer/features/ml/volatility_adjusted_returns.py +70 -0
  91. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/AGENTS.md +104 -0
  92. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/__init__.py +35 -0
  93. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/adx.py +405 -0
  94. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/adxr.py +174 -0
  95. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/apo.py +182 -0
  96. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/aroon.py +374 -0
  97. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/bop.py +175 -0
  98. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/cci.py +119 -0
  99. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/cmo.py +180 -0
  100. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/directional.py +473 -0
  101. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/imi.py +166 -0
  102. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/macd.py +426 -0
  103. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/macdfix.py +315 -0
  104. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/mfi.py +266 -0
  105. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/minus_dm.py +159 -0
  106. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/mom.py +152 -0
  107. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/plus_dm.py +159 -0
  108. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/ppo.py +185 -0
  109. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/roc.py +87 -0
  110. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/rocp.py +121 -0
  111. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/rocr.py +119 -0
  112. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/rocr100.py +119 -0
  113. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/rsi.py +181 -0
  114. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/sar.py +305 -0
  115. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/stochastic.py +270 -0
  116. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/stochf.py +256 -0
  117. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/stochrsi.py +252 -0
  118. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/trix.py +144 -0
  119. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/ultosc.py +246 -0
  120. ml4t_engineer-0.1.0/src/ml4t/engineer/features/momentum/willr.py +115 -0
  121. ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/AGENTS.md +34 -0
  122. ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/__init__.py +12 -0
  123. ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/avgprice.py +158 -0
  124. ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/medprice.py +139 -0
  125. ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/midprice.py +245 -0
  126. ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/typprice.py +153 -0
  127. ml4t_engineer-0.1.0/src/ml4t/engineer/features/price_transform/wclprice.py +155 -0
  128. ml4t_engineer-0.1.0/src/ml4t/engineer/features/regime.py +547 -0
  129. ml4t_engineer-0.1.0/src/ml4t/engineer/features/risk.py +749 -0
  130. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/AGENTS.md +25 -0
  131. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/__init__.py +16 -0
  132. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/avgdev.py +147 -0
  133. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/linearreg.py +158 -0
  134. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/linearreg_angle.py +159 -0
  135. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/linearreg_intercept.py +158 -0
  136. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/linearreg_slope.py +156 -0
  137. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/stddev.py +179 -0
  138. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/structural_break.py +659 -0
  139. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/tsf.py +151 -0
  140. ml4t_engineer-0.1.0/src/ml4t/engineer/features/statistics/var.py +173 -0
  141. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/AGENTS.md +26 -0
  142. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/__init__.py +17 -0
  143. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/dema.py +159 -0
  144. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/donchian.py +200 -0
  145. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/ema.py +174 -0
  146. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/kama.py +184 -0
  147. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/midpoint.py +135 -0
  148. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/sma.py +160 -0
  149. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/t3.py +243 -0
  150. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/tema.py +131 -0
  151. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/trima.py +142 -0
  152. ml4t_engineer-0.1.0/src/ml4t/engineer/features/trend/wma.py +123 -0
  153. ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/AGENTS.md +16 -0
  154. ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/__init__.py +8 -0
  155. ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/arithmetic.py +119 -0
  156. ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/helpers.py +87 -0
  157. ml4t_engineer-0.1.0/src/ml4t/engineer/features/utils/ma_types.py +92 -0
  158. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/AGENTS.md +31 -0
  159. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/__init__.py +22 -0
  160. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/atr.py +243 -0
  161. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/bollinger_bands.py +183 -0
  162. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/conditional_volatility_ratio.py +72 -0
  163. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/ewma_volatility.py +88 -0
  164. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/garch_forecast.py +132 -0
  165. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/garman_klass_volatility.py +79 -0
  166. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/natr.py +177 -0
  167. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/parkinson_volatility.py +76 -0
  168. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/realized_volatility.py +65 -0
  169. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/rogers_satchell_volatility.py +77 -0
  170. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/trange.py +208 -0
  171. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/volatility_of_volatility.py +128 -0
  172. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/volatility_percentile_rank.py +74 -0
  173. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/volatility_regime_probability.py +83 -0
  174. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volatility/yang_zhang_volatility.py +156 -0
  175. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/AGENTS.md +32 -0
  176. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/__init__.py +10 -0
  177. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/ad.py +213 -0
  178. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/adosc.py +184 -0
  179. ml4t_engineer-0.1.0/src/ml4t/engineer/features/volume/obv.py +162 -0
  180. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/AGENTS.md +71 -0
  181. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/__init__.py +121 -0
  182. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/atr_barriers.py +402 -0
  183. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/calendar.py +505 -0
  184. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/horizon_labels.py +611 -0
  185. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/meta_labels.py +349 -0
  186. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/numba_ops.py +473 -0
  187. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/percentile_labels.py +645 -0
  188. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/triple_barrier.py +557 -0
  189. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/uniqueness.py +417 -0
  190. ml4t_engineer-0.1.0/src/ml4t/engineer/labeling/utils.py +499 -0
  191. ml4t_engineer-0.1.0/src/ml4t/engineer/logging/AGENTS.md +14 -0
  192. ml4t_engineer-0.1.0/src/ml4t/engineer/logging/__init__.py +24 -0
  193. ml4t_engineer-0.1.0/src/ml4t/engineer/logging/config.py +212 -0
  194. ml4t_engineer-0.1.0/src/ml4t/engineer/logging/core.py +598 -0
  195. ml4t_engineer-0.1.0/src/ml4t/engineer/preprocessing.py +1131 -0
  196. ml4t_engineer-0.1.0/src/ml4t/engineer/py.typed +0 -0
  197. ml4t_engineer-0.1.0/src/ml4t/engineer/relationships/AGENTS.md +15 -0
  198. ml4t_engineer-0.1.0/src/ml4t/engineer/relationships/__init__.py +31 -0
  199. ml4t_engineer-0.1.0/src/ml4t/engineer/relationships/correlation.py +248 -0
  200. ml4t_engineer-0.1.0/src/ml4t/engineer/relationships/plot_correlation.py +220 -0
  201. ml4t_engineer-0.1.0/src/ml4t/engineer/store/AGENTS.md +14 -0
  202. ml4t_engineer-0.1.0/src/ml4t/engineer/store/__init__.py +9 -0
  203. ml4t_engineer-0.1.0/src/ml4t/engineer/store/offline.py +576 -0
  204. ml4t_engineer-0.1.0/src/ml4t/engineer/utils/AGENTS.md +13 -0
  205. ml4t_engineer-0.1.0/src/ml4t/engineer/utils/__init__.py +0 -0
  206. ml4t_engineer-0.1.0/src/ml4t/engineer/utils/dependencies.py +320 -0
  207. ml4t_engineer-0.1.0/tests/__init__.py +1 -0
  208. ml4t_engineer-0.1.0/tests/bars/__init__.py +1 -0
  209. ml4t_engineer-0.1.0/tests/bars/test_bars_core.py +503 -0
  210. ml4t_engineer-0.1.0/tests/bars/test_imbalance_bars.py +546 -0
  211. ml4t_engineer-0.1.0/tests/bars/test_imbalance_variants.py +249 -0
  212. ml4t_engineer-0.1.0/tests/bars/test_input_contract.py +230 -0
  213. ml4t_engineer-0.1.0/tests/bars/test_run_bars.py +777 -0
  214. ml4t_engineer-0.1.0/tests/bars/test_vectorized_bars.py +578 -0
  215. ml4t_engineer-0.1.0/tests/conftest.py +309 -0
  216. ml4t_engineer-0.1.0/tests/core/__init__.py +1 -0
  217. ml4t_engineer-0.1.0/tests/core/test_calendars.py +705 -0
  218. ml4t_engineer-0.1.0/tests/core/test_registry.py +584 -0
  219. ml4t_engineer-0.1.0/tests/core/test_schemas_coverage.py +396 -0
  220. ml4t_engineer-0.1.0/tests/core/test_validation.py +257 -0
  221. ml4t_engineer-0.1.0/tests/documentation_workflows.py +61 -0
  222. ml4t_engineer-0.1.0/tests/features/math/test_math_coverage.py +290 -0
  223. ml4t_engineer-0.1.0/tests/features/ml/test_entropy.py +311 -0
  224. ml4t_engineer-0.1.0/tests/features/ml/test_rolling_entropy_coverage.py +690 -0
  225. ml4t_engineer-0.1.0/tests/features/ml/test_rolling_entropy_extended.py +532 -0
  226. ml4t_engineer-0.1.0/tests/features/momentum/test_adx.py +337 -0
  227. ml4t_engineer-0.1.0/tests/features/momentum/test_aroon.py +443 -0
  228. ml4t_engineer-0.1.0/tests/features/momentum/test_aroon_coverage.py +275 -0
  229. ml4t_engineer-0.1.0/tests/features/momentum/test_directional.py +402 -0
  230. ml4t_engineer-0.1.0/tests/features/momentum/test_directional_coverage.py +170 -0
  231. ml4t_engineer-0.1.0/tests/features/momentum/test_macd.py +316 -0
  232. ml4t_engineer-0.1.0/tests/features/momentum/test_macd_coverage.py +115 -0
  233. ml4t_engineer-0.1.0/tests/features/momentum/test_macdfix.py +376 -0
  234. ml4t_engineer-0.1.0/tests/features/momentum/test_mfi.py +375 -0
  235. ml4t_engineer-0.1.0/tests/features/momentum/test_momentum_coverage.py +590 -0
  236. ml4t_engineer-0.1.0/tests/features/momentum/test_momentum_extended_coverage.py +842 -0
  237. ml4t_engineer-0.1.0/tests/features/momentum/test_momentum_numba_coverage.py +705 -0
  238. ml4t_engineer-0.1.0/tests/features/momentum/test_momentum_numba_paths.py +370 -0
  239. ml4t_engineer-0.1.0/tests/features/momentum/test_rsi.py +279 -0
  240. ml4t_engineer-0.1.0/tests/features/momentum/test_rsi_coverage.py +97 -0
  241. ml4t_engineer-0.1.0/tests/features/momentum/test_sar.py +367 -0
  242. ml4t_engineer-0.1.0/tests/features/statistics/test_linearreg_extended.py +443 -0
  243. ml4t_engineer-0.1.0/tests/features/statistics/test_statistics_extended.py +499 -0
  244. ml4t_engineer-0.1.0/tests/features/statistics/test_statistics_numba_coverage.py +605 -0
  245. ml4t_engineer-0.1.0/tests/features/statistics/test_stats_numba_boost.py +701 -0
  246. ml4t_engineer-0.1.0/tests/features/statistics/test_stddev.py +362 -0
  247. ml4t_engineer-0.1.0/tests/features/statistics/test_structural_break.py +423 -0
  248. ml4t_engineer-0.1.0/tests/features/statistics/test_structural_break_extended.py +546 -0
  249. ml4t_engineer-0.1.0/tests/features/statistics/test_var.py +353 -0
  250. ml4t_engineer-0.1.0/tests/features/test_composite.py +361 -0
  251. ml4t_engineer-0.1.0/tests/features/test_labeling.py +271 -0
  252. ml4t_engineer-0.1.0/tests/features/test_low_coverage_boost.py +1061 -0
  253. ml4t_engineer-0.1.0/tests/features/test_microstructure.py +568 -0
  254. ml4t_engineer-0.1.0/tests/features/test_ml.py +457 -0
  255. ml4t_engineer-0.1.0/tests/features/test_order_book.py +485 -0
  256. ml4t_engineer-0.1.0/tests/features/test_risk_coverage.py +494 -0
  257. ml4t_engineer-0.1.0/tests/features/test_statistics.py +475 -0
  258. ml4t_engineer-0.1.0/tests/features/test_volatility_advanced.py +339 -0
  259. ml4t_engineer-0.1.0/tests/features/test_volume.py +513 -0
  260. ml4t_engineer-0.1.0/tests/features/test_volume_crossasset_coverage.py +859 -0
  261. ml4t_engineer-0.1.0/tests/features/trend/test_dema.py +310 -0
  262. ml4t_engineer-0.1.0/tests/features/trend/test_donchian.py +45 -0
  263. ml4t_engineer-0.1.0/tests/features/trend/test_ema.py +365 -0
  264. ml4t_engineer-0.1.0/tests/features/trend/test_ema_coverage.py +98 -0
  265. ml4t_engineer-0.1.0/tests/features/trend/test_kama.py +357 -0
  266. ml4t_engineer-0.1.0/tests/features/trend/test_t3.py +348 -0
  267. ml4t_engineer-0.1.0/tests/features/trend/test_trend_coverage.py +650 -0
  268. ml4t_engineer-0.1.0/tests/features/trend/test_trend_numba_coverage.py +844 -0
  269. ml4t_engineer-0.1.0/tests/features/utils/test_helpers.py +213 -0
  270. ml4t_engineer-0.1.0/tests/features/utils/test_ma_types.py +54 -0
  271. ml4t_engineer-0.1.0/tests/features/volatility/test_atr_coverage.py +98 -0
  272. ml4t_engineer-0.1.0/tests/features/volatility/test_volatility_comprehensive.py +950 -0
  273. ml4t_engineer-0.1.0/tests/features/volatility/test_volatility_coverage.py +239 -0
  274. ml4t_engineer-0.1.0/tests/features/volume/test_adosc.py +463 -0
  275. ml4t_engineer-0.1.0/tests/features/volume/test_obv.py +418 -0
  276. ml4t_engineer-0.1.0/tests/features/volume/test_volume_coverage.py +501 -0
  277. ml4t_engineer-0.1.0/tests/labeling/test_labeling_coverage.py +963 -0
  278. ml4t_engineer-0.1.0/tests/labeling/test_meta_labels.py +468 -0
  279. ml4t_engineer-0.1.0/tests/labeling/test_percentile_labels.py +599 -0
  280. ml4t_engineer-0.1.0/tests/labeling/test_release_critical_paths.py +602 -0
  281. ml4t_engineer-0.1.0/tests/labeling/test_time_horizons.py +712 -0
  282. ml4t_engineer-0.1.0/tests/relationships/__init__.py +1 -0
  283. ml4t_engineer-0.1.0/tests/relationships/test_correlation.py +391 -0
  284. ml4t_engineer-0.1.0/tests/relationships/test_plot_correlation.py +447 -0
  285. ml4t_engineer-0.1.0/tests/store/__init__.py +0 -0
  286. ml4t_engineer-0.1.0/tests/store/test_offline.py +809 -0
  287. ml4t_engineer-0.1.0/tests/test_accuracy_validation.py +238 -0
  288. ml4t_engineer-0.1.0/tests/test_ad.py +215 -0
  289. ml4t_engineer-0.1.0/tests/test_adosc.py +247 -0
  290. ml4t_engineer-0.1.0/tests/test_adx_helpers.py +572 -0
  291. ml4t_engineer-0.1.0/tests/test_adxr.py +243 -0
  292. ml4t_engineer-0.1.0/tests/test_all_features_integration.py +298 -0
  293. ml4t_engineer-0.1.0/tests/test_all_indicators_accuracy.py +344 -0
  294. ml4t_engineer-0.1.0/tests/test_api.py +672 -0
  295. ml4t_engineer-0.1.0/tests/test_artifacts.py +141 -0
  296. ml4t_engineer-0.1.0/tests/test_atr_barriers.py +492 -0
  297. ml4t_engineer-0.1.0/tests/test_avgdev.py +216 -0
  298. ml4t_engineer-0.1.0/tests/test_avgprice.py +200 -0
  299. ml4t_engineer-0.1.0/tests/test_bar_sampler_performance.py +146 -0
  300. ml4t_engineer-0.1.0/tests/test_bars.py +649 -0
  301. ml4t_engineer-0.1.0/tests/test_bars_comprehensive.py +287 -0
  302. ml4t_engineer-0.1.0/tests/test_bars_specialized.py +538 -0
  303. ml4t_engineer-0.1.0/tests/test_catalog.py +340 -0
  304. ml4t_engineer-0.1.0/tests/test_cmo.py +217 -0
  305. ml4t_engineer-0.1.0/tests/test_config.py +118 -0
  306. ml4t_engineer-0.1.0/tests/test_config_system.py +476 -0
  307. ml4t_engineer-0.1.0/tests/test_coverage_policy.py +113 -0
  308. ml4t_engineer-0.1.0/tests/test_cross_asset.py +495 -0
  309. ml4t_engineer-0.1.0/tests/test_data_contract_config.py +108 -0
  310. ml4t_engineer-0.1.0/tests/test_dataset.py +994 -0
  311. ml4t_engineer-0.1.0/tests/test_directional_indicators.py +313 -0
  312. ml4t_engineer-0.1.0/tests/test_directional_indicators_strict.py +130 -0
  313. ml4t_engineer-0.1.0/tests/test_dm_indicators.py +294 -0
  314. ml4t_engineer-0.1.0/tests/test_documentation_workflows.py +21 -0
  315. ml4t_engineer-0.1.0/tests/test_end_to_end_integration.py +56 -0
  316. ml4t_engineer-0.1.0/tests/test_exact_validation.py +812 -0
  317. ml4t_engineer-0.1.0/tests/test_examples.py +40 -0
  318. ml4t_engineer-0.1.0/tests/test_experiment_config.py +544 -0
  319. ml4t_engineer-0.1.0/tests/test_fdiff.py +270 -0
  320. ml4t_engineer-0.1.0/tests/test_imi.py +229 -0
  321. ml4t_engineer-0.1.0/tests/test_kama.py +193 -0
  322. ml4t_engineer-0.1.0/tests/test_labeling.py +1509 -0
  323. ml4t_engineer-0.1.0/tests/test_labeling_calendar.py +701 -0
  324. ml4t_engineer-0.1.0/tests/test_labeling_enhanced.py +495 -0
  325. ml4t_engineer-0.1.0/tests/test_linearreg.py +258 -0
  326. ml4t_engineer-0.1.0/tests/test_linearreg_family.py +385 -0
  327. ml4t_engineer-0.1.0/tests/test_logging.py +420 -0
  328. ml4t_engineer-0.1.0/tests/test_lookahead_bias_fixes.py +219 -0
  329. ml4t_engineer-0.1.0/tests/test_math_operators.py +297 -0
  330. ml4t_engineer-0.1.0/tests/test_medprice.py +175 -0
  331. ml4t_engineer-0.1.0/tests/test_microstructure.py +337 -0
  332. ml4t_engineer-0.1.0/tests/test_midpoint.py +216 -0
  333. ml4t_engineer-0.1.0/tests/test_midprice.py +294 -0
  334. ml4t_engineer-0.1.0/tests/test_ml_features.py +478 -0
  335. ml4t_engineer-0.1.0/tests/test_natr.py +214 -0
  336. ml4t_engineer-0.1.0/tests/test_new_indicators.py +559 -0
  337. ml4t_engineer-0.1.0/tests/test_new_labeling_methods.py +470 -0
  338. ml4t_engineer-0.1.0/tests/test_numba_compat.py +35 -0
  339. ml4t_engineer-0.1.0/tests/test_optimized_indicators.py +431 -0
  340. ml4t_engineer-0.1.0/tests/test_performance.py +304 -0
  341. ml4t_engineer-0.1.0/tests/test_polars_compat.py +26 -0
  342. ml4t_engineer-0.1.0/tests/test_preprocessing.py +901 -0
  343. ml4t_engineer-0.1.0/tests/test_property_based.py +593 -0
  344. ml4t_engineer-0.1.0/tests/test_regime.py +410 -0
  345. ml4t_engineer-0.1.0/tests/test_registry_lookbacks.py +280 -0
  346. ml4t_engineer-0.1.0/tests/test_release_policy.py +200 -0
  347. ml4t_engineer-0.1.0/tests/test_risk.py +519 -0
  348. ml4t_engineer-0.1.0/tests/test_roc_variants.py +280 -0
  349. ml4t_engineer-0.1.0/tests/test_stochf.py +280 -0
  350. ml4t_engineer-0.1.0/tests/test_t3.py +217 -0
  351. ml4t_engineer-0.1.0/tests/test_talib_accuracy.py +804 -0
  352. ml4t_engineer-0.1.0/tests/test_talib_p0_indicators.py +452 -0
  353. ml4t_engineer-0.1.0/tests/test_talib_p1_indicators.py +386 -0
  354. ml4t_engineer-0.1.0/tests/test_talib_p2_indicators.py +340 -0
  355. ml4t_engineer-0.1.0/tests/test_talib_p3_indicators.py +367 -0
  356. ml4t_engineer-0.1.0/tests/test_talib_remaining.py +225 -0
  357. ml4t_engineer-0.1.0/tests/test_timezone_handling.py +250 -0
  358. ml4t_engineer-0.1.0/tests/test_trange.py +193 -0
  359. ml4t_engineer-0.1.0/tests/test_trix.py +179 -0
  360. ml4t_engineer-0.1.0/tests/test_tsf.py +199 -0
  361. ml4t_engineer-0.1.0/tests/test_typprice.py +191 -0
  362. ml4t_engineer-0.1.0/tests/test_ultosc.py +219 -0
  363. ml4t_engineer-0.1.0/tests/test_validation.py +455 -0
  364. ml4t_engineer-0.1.0/tests/test_var.py +225 -0
  365. ml4t_engineer-0.1.0/tests/test_volatility_advanced.py +499 -0
  366. ml4t_engineer-0.1.0/tests/test_volume_comprehensive.py +372 -0
  367. ml4t_engineer-0.1.0/tests/test_wclprice.py +207 -0
  368. ml4t_engineer-0.1.0/tests/type_stubs/duckdb/__init__.pyi +9 -0
  369. ml4t_engineer-0.1.0/tests/type_stubs/matplotlib/__init__.pyi +1 -0
  370. ml4t_engineer-0.1.0/tests/type_stubs/matplotlib/axes.pyi +5 -0
  371. ml4t_engineer-0.1.0/tests/type_stubs/matplotlib/figure.pyi +7 -0
  372. ml4t_engineer-0.1.0/tests/type_stubs/matplotlib/pyplot.pyi +6 -0
  373. ml4t_engineer-0.1.0/tests/utils/test_dependencies.py +406 -0
@@ -0,0 +1,16 @@
1
+ src/ml4t/engineer/_version.py
2
+ __pycache__/
3
+ *.pyc
4
+ .pytest_cache/
5
+ .coverage
6
+ .hypothesis/
7
+ htmlcov/
8
+
9
+ # MkDocs build output
10
+ site/
11
+
12
+ # Claude Code (local development only)
13
+ CLAUDE.md
14
+ .claude/
15
+ .venv-mlfinpy/
16
+ .idea/
@@ -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
+ [![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
106
+ [![PyPI](https://img.shields.io/pypi/v/ml4t-engineer)](https://pypi.org/project/ml4t-engineer/)
107
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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
+ ![ML4T Library Ecosystem](docs/images/ml4t_ecosystem_workflow_color.png)
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
+ ![ml4t-engineer Architecture](docs/images/ml4t_engineer_architecture_print.jpeg)
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.