rangebar 11.4.0__tar.gz → 11.6.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 (276) hide show
  1. {rangebar-11.4.0 → rangebar-11.6.0}/.mise.toml +161 -0
  2. {rangebar-11.4.0 → rangebar-11.6.0}/CHANGELOG.md +75 -0
  3. {rangebar-11.4.0 → rangebar-11.6.0}/CLAUDE.md +2 -0
  4. {rangebar-11.4.0 → rangebar-11.6.0}/Cargo.lock +9 -9
  5. {rangebar-11.4.0 → rangebar-11.6.0}/Cargo.toml +2 -2
  6. {rangebar-11.4.0 → rangebar-11.6.0}/PKG-INFO +1 -1
  7. rangebar-11.6.0/RESUME.md +138 -0
  8. rangebar-11.6.0/STATISTICAL_VALIDITY_AUDIT.md +591 -0
  9. {rangebar-11.4.0 → rangebar-11.6.0}/crates/CLAUDE.md +43 -0
  10. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/arrow_export.rs +17 -0
  11. rangebar-11.6.0/crates/rangebar-core/src/interbar.rs +1098 -0
  12. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/lib.rs +2 -0
  13. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/processor.rs +122 -0
  14. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/test_utils/mod.rs +17 -0
  15. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/types.rs +119 -0
  16. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-streaming/src/stats.rs +17 -0
  17. rangebar-11.6.0/docs/plans/issue-59-inter-bar-features.md +1633 -0
  18. rangebar-11.6.0/docs/research/2026-02-02-intrabar-microstructure-claude-opus.md +174 -0
  19. rangebar-11.6.0/docs/research/2026-02-02-intrabar-microstructure-gemini-3-pro.md +365 -0
  20. rangebar-11.6.0/docs/research/INDEX.md +148 -0
  21. rangebar-11.6.0/docs/research/adversarial-audit-methodology.md +303 -0
  22. rangebar-11.6.0/docs/research/external/time-to-convergence-stationarity-gap.md +417 -0
  23. rangebar-11.6.0/docs/research/market-regime-patterns.md +1172 -0
  24. rangebar-11.6.0/docs/research/multi-threshold-patterns.md +157 -0
  25. rangebar-11.6.0/docs/research/multifactor-patterns.md +163 -0
  26. rangebar-11.6.0/docs/research/pattern-research-summary.md +1002 -0
  27. rangebar-11.6.0/docs/research/tda-parameter-sensitivity-audit.md +530 -0
  28. rangebar-11.6.0/docs/research/tda-regime-patterns.md +391 -0
  29. rangebar-11.6.0/docs/research/volatility-regime-patterns.md +421 -0
  30. {rangebar-11.4.0 → rangebar-11.6.0}/pyproject.toml +12 -0
  31. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/__init__.py +12 -0
  32. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/__init__.pyi +47 -0
  33. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/CLAUDE.md +8 -5
  34. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/schema.sql +49 -0
  35. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/constants.py +33 -0
  36. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/orchestration/helpers.py +16 -1
  37. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/orchestration/range_bars.py +10 -0
  38. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/processors/core.py +13 -1
  39. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/resource_guard.py +162 -11
  40. rangebar-11.6.0/scripts/adwin_regime_detection_polars.py +359 -0
  41. rangebar-11.6.0/scripts/bootstrap_permutation_validation_polars.py +514 -0
  42. rangebar-11.6.0/scripts/coarse_to_fine_cascade.py +312 -0
  43. rangebar-11.6.0/scripts/combined_pattern_audit_polars.py +625 -0
  44. rangebar-11.6.0/scripts/combined_regime_analysis_polars.py +573 -0
  45. rangebar-11.6.0/scripts/combined_rv_alignment_analysis_polars.py +521 -0
  46. rangebar-11.6.0/scripts/cross_asset_correlation_polars.py +508 -0
  47. rangebar-11.6.0/scripts/cross_regime_correlation_polars.py +553 -0
  48. rangebar-11.6.0/scripts/cross_threshold_alignment.py +321 -0
  49. rangebar-11.6.0/scripts/direction_patterns_reaudit.py +259 -0
  50. rangebar-11.6.0/scripts/download_exness_eurusd.py +107 -0
  51. rangebar-11.6.0/scripts/download_exness_forex.py +133 -0
  52. rangebar-11.6.0/scripts/duration_autocorrelation.py +304 -0
  53. rangebar-11.6.0/scripts/duration_autocorrelation_audit.py +363 -0
  54. rangebar-11.6.0/scripts/duration_volatility_prediction.py +333 -0
  55. rangebar-11.6.0/scripts/fdr_corrected_patterns.py +448 -0
  56. rangebar-11.6.0/scripts/fill_all_symbols.py +186 -0
  57. rangebar-11.6.0/scripts/fill_gaps_2025_2026.py +122 -0
  58. rangebar-11.6.0/scripts/fill_gaps_littleblack.py +147 -0
  59. rangebar-11.6.0/scripts/fill_gaps_retry.py +95 -0
  60. rangebar-11.6.0/scripts/historical_formation_patterns_polars.py +407 -0
  61. rangebar-11.6.0/scripts/historical_formation_regime_polars.py +509 -0
  62. rangebar-11.6.0/scripts/hurst_adjusted_kelly_polars.py +391 -0
  63. rangebar-11.6.0/scripts/hurst_adjusted_psr_analysis_polars.py +348 -0
  64. rangebar-11.6.0/scripts/hurst_exponent_analysis_polars.py +446 -0
  65. rangebar-11.6.0/scripts/hurst_multi_estimator_audit.py +278 -0
  66. rangebar-11.6.0/scripts/microstructure_clickhouse.py +257 -0
  67. rangebar-11.6.0/scripts/microstructure_patterns.py +392 -0
  68. rangebar-11.6.0/scripts/microstructure_simple.py +265 -0
  69. rangebar-11.6.0/scripts/monitor_population.py +227 -0
  70. rangebar-11.6.0/scripts/multi_threshold_pattern_analysis_polars.py +556 -0
  71. rangebar-11.6.0/scripts/multibar_continuation.py +409 -0
  72. rangebar-11.6.0/scripts/multibar_forward_returns_polars.py +457 -0
  73. rangebar-11.6.0/scripts/multifactor_multigranularity_patterns.py +460 -0
  74. rangebar-11.6.0/scripts/multifactor_patterns.py +513 -0
  75. rangebar-11.6.0/scripts/multifactor_patterns_polars.py +520 -0
  76. rangebar-11.6.0/scripts/multithreshold_combinations_polars.py +485 -0
  77. rangebar-11.6.0/scripts/multithreshold_regime_combinations_polars.py +501 -0
  78. rangebar-11.6.0/scripts/oos_validation_polars.py +459 -0
  79. rangebar-11.6.0/scripts/parameter_sensitivity_polars.py +434 -0
  80. rangebar-11.6.0/scripts/pattern_correlation_analysis_polars.py +505 -0
  81. rangebar-11.6.0/scripts/pattern_return_profiles_polars.py +410 -0
  82. rangebar-11.6.0/scripts/pattern_return_stats.py +427 -0
  83. rangebar-11.6.0/scripts/populate_1000dbps.py +80 -0
  84. rangebar-11.6.0/scripts/populate_250dbps.py +77 -0
  85. rangebar-11.6.0/scripts/populate_250dbps_extended.py +113 -0
  86. rangebar-11.6.0/scripts/populate_safe.py +174 -0
  87. rangebar-11.6.0/scripts/position_sizing_analysis_polars.py +455 -0
  88. rangebar-11.6.0/scripts/process_exness_eurusd_to_cache.py +125 -0
  89. rangebar-11.6.0/scripts/psr_mintrl_analysis_polars.py +578 -0
  90. rangebar-11.6.0/scripts/regime_analysis.py +754 -0
  91. rangebar-11.6.0/scripts/regime_analysis_50dbps_polars.py +490 -0
  92. rangebar-11.6.0/scripts/regime_analysis_polars.py +577 -0
  93. rangebar-11.6.0/scripts/regime_transition_analysis_polars.py +552 -0
  94. rangebar-11.6.0/scripts/run_length_momentum_analysis.py +263 -0
  95. rangebar-11.6.0/scripts/run_length_momentum_multi_symbol.py +210 -0
  96. rangebar-11.6.0/scripts/run_length_momentum_wfo.py +249 -0
  97. rangebar-11.6.0/scripts/rv_return_profile_analysis_polars.py +514 -0
  98. rangebar-11.6.0/scripts/tda_break_event_alignment_polars.py +345 -0
  99. rangebar-11.6.0/scripts/tda_conditioned_patterns.py +435 -0
  100. rangebar-11.6.0/scripts/tda_cupy_accelerated.py +352 -0
  101. rangebar-11.6.0/scripts/tda_gpu_analysis.py +310 -0
  102. rangebar-11.6.0/scripts/tda_hurst_by_regime_polars.py +475 -0
  103. rangebar-11.6.0/scripts/tda_parameter_sweep_audit.py +295 -0
  104. rangebar-11.6.0/scripts/tda_regime_hurst_analysis_polars.py +565 -0
  105. rangebar-11.6.0/scripts/tda_regime_pattern_analysis_polars.py +507 -0
  106. rangebar-11.6.0/scripts/tda_ripser_plusplus.py +268 -0
  107. rangebar-11.6.0/scripts/tda_rolling_threshold.py +525 -0
  108. rangebar-11.6.0/scripts/tda_solusdt_250_audit.py +260 -0
  109. rangebar-11.6.0/scripts/tda_solusdt_250_littleblack.py +275 -0
  110. rangebar-11.6.0/scripts/tda_structural_break_analysis_polars.py +553 -0
  111. rangebar-11.6.0/scripts/tda_volatility_forecast.py +423 -0
  112. rangebar-11.6.0/scripts/tda_wfo_3way.py +835 -0
  113. rangebar-11.6.0/scripts/tda_wfo_abstain.py +654 -0
  114. rangebar-11.6.0/scripts/tda_wfo_audit.py +327 -0
  115. rangebar-11.6.0/scripts/temporal_safe_patterns_polars.py +388 -0
  116. rangebar-11.6.0/scripts/three_bar_alignment_analysis_polars.py +481 -0
  117. rangebar-11.6.0/scripts/three_bar_pattern_analysis_polars.py +442 -0
  118. rangebar-11.6.0/scripts/three_bar_pattern_audit_polars.py +618 -0
  119. rangebar-11.6.0/scripts/three_factor_hurst_analysis_polars.py +456 -0
  120. rangebar-11.6.0/scripts/three_factor_pattern_analysis_polars.py +534 -0
  121. rangebar-11.6.0/scripts/transaction_cost_analysis_polars.py +493 -0
  122. rangebar-11.6.0/scripts/trend_filter_analysis.py +411 -0
  123. rangebar-11.6.0/scripts/upload_eurusd_to_clickhouse.py +132 -0
  124. rangebar-11.6.0/scripts/volatility_regime_analysis_polars.py +502 -0
  125. rangebar-11.6.0/scripts/volatility_regime_audit_polars.py +590 -0
  126. rangebar-11.6.0/scripts/volume_conditioned_patterns.py +472 -0
  127. rangebar-11.6.0/scripts/volume_conditioned_patterns_polars.py +477 -0
  128. {rangebar-11.4.0 → rangebar-11.6.0}/src/lib.rs +82 -10
  129. {rangebar-11.4.0 → rangebar-11.6.0}/uv.lock +440 -0
  130. {rangebar-11.4.0 → rangebar-11.6.0}/.gitignore +0 -0
  131. {rangebar-11.4.0 → rangebar-11.6.0}/.mcp.json +0 -0
  132. {rangebar-11.4.0 → rangebar-11.6.0}/.pre-commit-config.yaml +0 -0
  133. {rangebar-11.4.0 → rangebar-11.6.0}/.releaserc.yml +0 -0
  134. {rangebar-11.4.0 → rangebar-11.6.0}/LICENSE +0 -0
  135. {rangebar-11.4.0 → rangebar-11.6.0}/README.md +0 -0
  136. {rangebar-11.4.0 → rangebar-11.6.0}/benches/rangebar_bench.rs +0 -0
  137. {rangebar-11.4.0 → rangebar-11.6.0}/build.rs +0 -0
  138. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/CHANGELOG.md +0 -0
  139. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/Cargo.toml +0 -0
  140. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/README.md +0 -0
  141. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/checkpoint.rs +0 -0
  142. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/fixed_point.rs +0 -0
  143. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/test_data_loader.rs +0 -0
  144. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/test_utils/generators.rs +0 -0
  145. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/src/timestamp.rs +0 -0
  146. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/tests/cross_boundary_validation.rs +0 -0
  147. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/tests/cross_date_real_data_validation.rs +0 -0
  148. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/tests/cross_year_boundary_test.rs +0 -0
  149. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-core/tests/incomplete_bar_continuation_proof.rs +0 -0
  150. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/CHANGELOG.md +0 -0
  151. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/Cargo.toml +0 -0
  152. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/README.md +0 -0
  153. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/binance/checksum.rs +0 -0
  154. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/binance/historical.rs +0 -0
  155. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/binance/mod.rs +0 -0
  156. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/binance/symbols.rs +0 -0
  157. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/binance/websocket.rs +0 -0
  158. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/exness/builder.rs +0 -0
  159. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/exness/client.rs +0 -0
  160. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/exness/conversion.rs +0 -0
  161. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/exness/mod.rs +0 -0
  162. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/exness/types.rs +0 -0
  163. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-providers/src/lib.rs +0 -0
  164. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-streaming/CHANGELOG.md +0 -0
  165. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-streaming/Cargo.toml +0 -0
  166. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-streaming/README.md +0 -0
  167. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-streaming/src/indicators.rs +0 -0
  168. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-streaming/src/lib.rs +0 -0
  169. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-streaming/src/processor.rs +0 -0
  170. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-streaming/src/replay_buffer.rs +0 -0
  171. {rangebar-11.4.0 → rangebar-11.6.0}/crates/rangebar-streaming/src/universal.rs +0 -0
  172. {rangebar-11.4.0 → rangebar-11.6.0}/deny.toml +0 -0
  173. {rangebar-11.4.0 → rangebar-11.6.0}/docs/ARCHITECTURE.md +0 -0
  174. {rangebar-11.4.0 → rangebar-11.6.0}/docs/CONTEXT.md +0 -0
  175. {rangebar-11.4.0 → rangebar-11.6.0}/docs/MEMORY_REMEDIATION_PLAN.md +0 -0
  176. {rangebar-11.4.0 → rangebar-11.6.0}/docs/adr/2026-01-31-realtime-streaming-api.md +0 -0
  177. {rangebar-11.4.0 → rangebar-11.6.0}/docs/analysis/2025-10-10-flash-crash.md +0 -0
  178. {rangebar-11.4.0 → rangebar-11.6.0}/docs/api.md +0 -0
  179. {rangebar-11.4.0 → rangebar-11.6.0}/docs/development/PERFORMANCE.md +0 -0
  180. {rangebar-11.4.0 → rangebar-11.6.0}/docs/development/RELEASE.md +0 -0
  181. {rangebar-11.4.0 → rangebar-11.6.0}/docs/migration-v8.md +0 -0
  182. {rangebar-11.4.0 → rangebar-11.6.0}/docs/rangebar_core_api.md +0 -0
  183. {rangebar-11.4.0 → rangebar-11.6.0}/docs/research/labeling-for-ml.md +0 -0
  184. {rangebar-11.4.0 → rangebar-11.6.0}/docs/research/price-action-patterns.md +0 -0
  185. {rangebar-11.4.0 → rangebar-11.6.0}/examples/README.md +0 -0
  186. {rangebar-11.4.0 → rangebar-11.6.0}/examples/backtesting_integration.py +0 -0
  187. {rangebar-11.4.0 → rangebar-11.6.0}/examples/basic_usage.py +0 -0
  188. {rangebar-11.4.0 → rangebar-11.6.0}/examples/binance_csv_example.py +0 -0
  189. {rangebar-11.4.0 → rangebar-11.6.0}/examples/get_range_bars_example.py +0 -0
  190. {rangebar-11.4.0 → rangebar-11.6.0}/examples/validate_output.py +0 -0
  191. {rangebar-11.4.0 → rangebar-11.6.0}/examples/with_clickhouse_cache.py +0 -0
  192. {rangebar-11.4.0 → rangebar-11.6.0}/package-lock.json +0 -0
  193. {rangebar-11.4.0 → rangebar-11.6.0}/package.json +0 -0
  194. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/CLAUDE.md +0 -0
  195. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/checkpoint.py +0 -0
  196. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/cli.py +0 -0
  197. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/__init__.py +0 -0
  198. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/bulk_operations.py +0 -0
  199. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/cache.py +0 -0
  200. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/client.py +0 -0
  201. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/config.py +0 -0
  202. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/mixin.py +0 -0
  203. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/preflight.py +0 -0
  204. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/query_operations.py +0 -0
  205. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/clickhouse/tunnel.py +0 -0
  206. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/conversion.py +0 -0
  207. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/exceptions.py +0 -0
  208. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/exness.py +0 -0
  209. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/hooks.py +0 -0
  210. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/logging.py +0 -0
  211. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/notify/__init__.py +0 -0
  212. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/notify/pushover.py +0 -0
  213. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/notify/telegram.py +0 -0
  214. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/orchestration/__init__.py +0 -0
  215. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/orchestration/count_bounded.py +0 -0
  216. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/orchestration/models.py +0 -0
  217. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/orchestration/precompute.py +0 -0
  218. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/orchestration/tick_fetcher.py +0 -0
  219. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/ouroboros.py +0 -0
  220. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/processors/__init__.py +0 -0
  221. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/processors/api.py +0 -0
  222. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/storage/__init__.py +0 -0
  223. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/storage/checksum_registry.py +0 -0
  224. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/storage/parquet.py +0 -0
  225. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/streaming.py +0 -0
  226. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/validation/__init__.py +0 -0
  227. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/validation/cache_staleness.py +0 -0
  228. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/validation/continuity.py +0 -0
  229. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/validation/gap_classification.py +0 -0
  230. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/validation/post_storage.py +0 -0
  231. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/validation/tier1.py +0 -0
  232. {rangebar-11.4.0 → rangebar-11.6.0}/python/rangebar/validation/tier2.py +0 -0
  233. {rangebar-11.4.0 → rangebar-11.6.0}/rust-toolchain.toml +0 -0
  234. {rangebar-11.4.0 → rangebar-11.6.0}/rustfmt.toml +0 -0
  235. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/analyze_flash_crash.py +0 -0
  236. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/build-release.sh +0 -0
  237. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/cache_clear.py +0 -0
  238. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/cache_status.py +0 -0
  239. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/check-release-config.sh +0 -0
  240. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/dependency_monitor.sh +0 -0
  241. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/profiling_tools.sh +0 -0
  242. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/publish-to-pypi.sh +0 -0
  243. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/publish-wheels.sh +0 -0
  244. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/regenerate_cache.py +0 -0
  245. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/run_large_scale_benchmark.sh +0 -0
  246. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/semantic-release.sh +0 -0
  247. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/validate_clickhouse.py +0 -0
  248. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/validate_memory_efficiency.py +0 -0
  249. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/validate_microstructure_features.py +0 -0
  250. {rangebar-11.4.0 → rangebar-11.6.0}/scripts/validate_n_range_bars.py +0 -0
  251. {rangebar-11.4.0 → rangebar-11.6.0}/test_data/BTCUSDT/BTCUSDT_aggTrades_20250901.csv +0 -0
  252. {rangebar-11.4.0 → rangebar-11.6.0}/test_data/ETHUSDT/ETHUSDT_aggTrades_20250901.csv +0 -0
  253. {rangebar-11.4.0 → rangebar-11.6.0}/test_data/README.md +0 -0
  254. {rangebar-11.4.0 → rangebar-11.6.0}/tests/conftest.py +0 -0
  255. {rangebar-11.4.0 → rangebar-11.6.0}/tests/fixtures/.gitignore +0 -0
  256. {rangebar-11.4.0 → rangebar-11.6.0}/tests/fixtures/BTCUSDT-aggTrades-2024-01-01.zip +0 -0
  257. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_cache_schema_evolution.py +0 -0
  258. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_clickhouse.py +0 -0
  259. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_clickhouse_integration.py +0 -0
  260. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_e2e_optimized.py +0 -0
  261. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_edge_cases.py +0 -0
  262. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_examples.py +0 -0
  263. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_get_n_range_bars.py +0 -0
  264. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_get_range_bars_e2e.py +0 -0
  265. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_issue_5_reproduction.py +0 -0
  266. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_issues_7_8.py +0 -0
  267. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_microstructure_features.py +0 -0
  268. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_ouroboros.py +0 -0
  269. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_polars_only_downstream.py +0 -0
  270. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_preflight.py +0 -0
  271. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_python_api.py +0 -0
  272. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_real_data.py +0 -0
  273. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_rust_bindings.py +0 -0
  274. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_storage.py +0 -0
  275. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_streaming.py +0 -0
  276. {rangebar-11.4.0 → rangebar-11.6.0}/tests/test_validation_presets.py +0 -0
@@ -523,3 +523,164 @@ result = send_critical_alert(
523
523
  print(f"Pushover alert sent: {result}")
524
524
  '
525
525
  """
526
+
527
+ # =============================================================================
528
+ # Research Cache Population Tasks (Issue #58)
529
+ # =============================================================================
530
+ # Sequential execution to avoid OOM on limited-memory hosts
531
+ # Run on littleblack: ssh littleblack "cd /home/kab/eon/rangebar-py && mise run research:populate-250"
532
+
533
+ [tasks."research:populate-symbol"]
534
+ description = "Populate cache for a single symbol (requires SYMBOL and THRESHOLD env vars)"
535
+ run = """
536
+ #!/usr/bin/env bash
537
+ set -e
538
+
539
+ # Use uv to run in the project venv
540
+ uv run --python 3.13 python -c '
541
+ import os
542
+ import sys
543
+ import time
544
+ from datetime import UTC, datetime, timedelta
545
+
546
+ from rangebar import get_range_bars
547
+
548
+ SYMBOL = os.environ.get("SYMBOL")
549
+ if not SYMBOL:
550
+ print("ERROR: SYMBOL env var required", flush=True)
551
+ sys.exit(1)
552
+
553
+ START = os.environ.get("START", "2022-01-01")
554
+ END = os.environ.get("END", "2025-12-31")
555
+ THRESHOLD = int(os.environ.get("THRESHOLD", "250"))
556
+
557
+ def date_range_months(start_str, end_str):
558
+ start = datetime.strptime(start_str, "%Y-%m-%d").replace(tzinfo=UTC)
559
+ end = datetime.strptime(end_str, "%Y-%m-%d").replace(tzinfo=UTC)
560
+ current = start
561
+ while current < end:
562
+ month_end = (current.replace(day=28) + timedelta(days=4)).replace(day=1) - timedelta(days=1)
563
+ month_end = min(month_end, end)
564
+ yield current.strftime("%Y-%m-%d"), month_end.strftime("%Y-%m-%d")
565
+ current = month_end + timedelta(days=1)
566
+
567
+ print(f"Populating {SYMBOL} @ {THRESHOLD} dbps ({START} to {END})", flush=True)
568
+ total_bars = 0
569
+ for chunk_start, chunk_end in date_range_months(START, END):
570
+ t0 = time.time()
571
+ try:
572
+ df = get_range_bars(SYMBOL, chunk_start, chunk_end, threshold_decimal_bps=THRESHOLD, use_cache=True, fetch_if_missing=True)
573
+ elapsed = time.time() - t0
574
+ total_bars += len(df)
575
+ print(f" {chunk_start}: {len(df):>6,} bars ({elapsed:>5.1f}s)", flush=True)
576
+ except Exception as e:
577
+ print(f" {chunk_start}: ERROR - {e}", flush=True)
578
+ print(f"DONE: {total_bars:,} total bars", flush=True)
579
+ '
580
+ """
581
+
582
+ [tasks."research:populate-all"]
583
+ description = "Populate cache for all symbols at 250 then 1000 dbps (fully sequential)"
584
+ run = """
585
+ #!/usr/bin/env bash
586
+ set -e
587
+
588
+ echo "=========================================="
589
+ echo "FULL CACHE POPULATION - 250 dbps then 1000 dbps"
590
+ echo "=========================================="
591
+ echo "Started: $(date)"
592
+
593
+ # Run 250 dbps first (all symbols)
594
+ mise run research:populate-250
595
+
596
+ # Then run 1000 dbps (all symbols)
597
+ mise run research:populate-1000
598
+
599
+ echo ""
600
+ echo "=========================================="
601
+ echo "ALL POPULATION COMPLETE (250 + 1000 dbps)"
602
+ echo "Finished: $(date)"
603
+ echo "=========================================="
604
+ """
605
+
606
+ [tasks."research:populate-250"]
607
+ description = "Populate 250 dbps cache for all symbols (sequential, OOM-safe)"
608
+ run = """
609
+ #!/usr/bin/env bash
610
+ set -e
611
+
612
+ echo "=== SEQUENTIAL CACHE POPULATION (250 dbps) ==="
613
+ echo "Running symbols one at a time to avoid OOM..."
614
+ echo "Started: $(date)"
615
+
616
+ SYMBOLS="BTCUSDT ETHUSDT BNBUSDT ADAUSDT AVAXUSDT DOTUSDT MATICUSDT NEARUSDT ATOMUSDT APTUSDT SUIUSDT LINKUSDT UNIUSDT AAVEUSDT DOGEUSDT SHIBUSDT PEPEUSDT FTMUSDT"
617
+
618
+ TOTAL=18
619
+ CURRENT=0
620
+
621
+ for SYMBOL in $SYMBOLS; do
622
+ CURRENT=$((CURRENT + 1))
623
+ echo ""
624
+ echo "=========================================="
625
+ echo "[$CURRENT/$TOTAL] $SYMBOL @ 250 dbps"
626
+ echo "=========================================="
627
+ SYMBOL=$SYMBOL THRESHOLD=250 mise run research:populate-symbol
628
+ echo "Completed $SYMBOL. Sleeping 10s before next..."
629
+ sleep 10
630
+ done
631
+
632
+ echo ""
633
+ echo "=========================================="
634
+ echo "ALL $TOTAL SYMBOLS @ 250 dbps COMPLETE"
635
+ echo "Finished: $(date)"
636
+ echo "=========================================="
637
+ """
638
+
639
+ [tasks."research:populate-1000"]
640
+ description = "Populate 1000 dbps cache for all symbols (sequential, OOM-safe)"
641
+ run = """
642
+ #!/usr/bin/env bash
643
+ set -e
644
+
645
+ echo "=== SEQUENTIAL CACHE POPULATION (1000 dbps) ==="
646
+ echo "Running symbols one at a time to avoid OOM..."
647
+ echo "Started: $(date)"
648
+
649
+ SYMBOLS="BTCUSDT ETHUSDT BNBUSDT ADAUSDT AVAXUSDT DOTUSDT MATICUSDT NEARUSDT ATOMUSDT APTUSDT SUIUSDT LINKUSDT UNIUSDT AAVEUSDT DOGEUSDT SHIBUSDT PEPEUSDT FTMUSDT"
650
+
651
+ TOTAL=18
652
+ CURRENT=0
653
+
654
+ for SYMBOL in $SYMBOLS; do
655
+ CURRENT=$((CURRENT + 1))
656
+ echo ""
657
+ echo "=========================================="
658
+ echo "[$CURRENT/$TOTAL] $SYMBOL @ 1000 dbps"
659
+ echo "=========================================="
660
+ SYMBOL=$SYMBOL THRESHOLD=1000 mise run research:populate-symbol
661
+ echo "Completed $SYMBOL. Sleeping 10s before next..."
662
+ sleep 10
663
+ done
664
+
665
+ echo ""
666
+ echo "=========================================="
667
+ echo "ALL $TOTAL SYMBOLS @ 1000 dbps COMPLETE"
668
+ echo "Finished: $(date)"
669
+ echo "=========================================="
670
+ """
671
+
672
+ [tasks."research:status"]
673
+ description = "Check population status on littleblack (single check)"
674
+ run = "python scripts/monitor_population.py --once --host littleblack"
675
+
676
+ [tasks."research:monitor"]
677
+ description = "Start continuous population monitoring (2 min interval)"
678
+ run = "python scripts/monitor_population.py --interval 120 --host littleblack"
679
+
680
+ [tasks."research:momentum-analysis"]
681
+ description = "Run momentum analysis on all populated symbols"
682
+ run = "python scripts/run_length_momentum_multi_symbol.py"
683
+
684
+ [tasks."research:wfo-analysis"]
685
+ description = "Run Walk-Forward regime detection"
686
+ run = "python scripts/run_length_momentum_wfo.py"
@@ -1,3 +1,78 @@
1
+ # [11.6.0](https://github.com/terrylica/rangebar-py/compare/v11.5.0...v11.6.0) (2026-02-02)
2
+
3
+
4
+ ### Features
5
+
6
+ * **core:** add inter-bar microstructure features (Issue [#59](https://github.com/terrylica/rangebar-py/issues/59) Phase 1) ([dd27556](https://github.com/terrylica/rangebar-py/commit/dd275565fbd093b6d5647e51c72548ef4be1e715))
7
+ * **inter-bar:** add inter-bar feature computation (Issue [#59](https://github.com/terrylica/rangebar-py/issues/59)) ([94dbf64](https://github.com/terrylica/rangebar-py/commit/94dbf647f3ba524fb818b4927080afc2fc9b7ea5))
8
+
9
+ # [11.5.0](https://github.com/terrylica/rangebar-py/compare/v11.4.0...v11.5.0) (2026-02-02)
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **mise:** include all symbols in sequential population task ([18e0c4d](https://github.com/terrylica/rangebar-py/commit/18e0c4dc44c0404a0dec483a6e8e50fe5f7256b5)), closes [#58](https://github.com/terrylica/rangebar-py/issues/58)
15
+ * **mise:** use uv run for venv and sequential execution ([957354e](https://github.com/terrylica/rangebar-py/commit/957354e46c1a0aa310560e44ecdfeff81b4c42ef)), closes [#58](https://github.com/terrylica/rangebar-py/issues/58)
16
+ * **research:** correct datetime timezone import in regime analysis ([d1da329](https://github.com/terrylica/rangebar-py/commit/d1da329239a6ef3278a2231e28f988948cd38bd2)), closes [#76](https://github.com/terrylica/rangebar-py/issues/76) [#52](https://github.com/terrylica/rangebar-py/issues/52)
17
+ * **research:** correct transaction costs to 15 dbps for high VIP tier ([3c129cf](https://github.com/terrylica/rangebar-py/commit/3c129cf970e04ae49e5d893981399bc359a7943a)), closes [#90](https://github.com/terrylica/rangebar-py/issues/90)
18
+ * **scripts:** disable RLIMIT_AS for population on Linux ([aa3b541](https://github.com/terrylica/rangebar-py/commit/aa3b541062a88cd8c8e088a24776b7de45506068))
19
+
20
+
21
+ ### Features
22
+
23
+ * **forex:** add EURUSD range bar pipeline scripts ([5e1628c](https://github.com/terrylica/rangebar-py/commit/5e1628c31e027824de208bd24acfdb1d5e789e7c)), closes [#143](https://github.com/terrylica/rangebar-py/issues/143)
24
+ * **memory:** auto-enable memory guard on import (MEM-011) ([5e57767](https://github.com/terrylica/rangebar-py/commit/5e5776798104189fdd7c3d5b9a371a5b5c0908e2)), closes [#49](https://github.com/terrylica/rangebar-py/issues/49)
25
+ * **mise:** add 1000 dbps cache population and unified task ([9ad487e](https://github.com/terrylica/rangebar-py/commit/9ad487e11c725c069e0c6cf9d3b2f487ef5038a7)), closes [#58](https://github.com/terrylica/rangebar-py/issues/58)
26
+ * **mise:** add population status and monitor tasks ([f4a6197](https://github.com/terrylica/rangebar-py/commit/f4a619793a4144958dcdb18c0211cfba2a0946e8)), closes [#58](https://github.com/terrylica/rangebar-py/issues/58)
27
+ * **mise:** add sequential cache population tasks for Issue [#58](https://github.com/terrylica/rangebar-py/issues/58) ([f5010d0](https://github.com/terrylica/rangebar-py/commit/f5010d02c01a97f6009e49ac74eb53d2a9833595))
28
+ * **research:** add 3-bar + alignment combined analysis ([ff9a538](https://github.com/terrylica/rangebar-py/commit/ff9a5384c0ad6387cfa2de34e2adafe1bc3d5247)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54) [#55](https://github.com/terrylica/rangebar-py/issues/55)
29
+ * **research:** add 3-bar pattern adversarial audit ([f2c8ba9](https://github.com/terrylica/rangebar-py/commit/f2c8ba9dd75f93496a5def5eb7395f660fc8b424)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54) [#55](https://github.com/terrylica/rangebar-py/issues/55)
30
+ * **research:** add 3-bar pattern analysis script ([4f984ad](https://github.com/terrylica/rangebar-py/commit/4f984adf78635066ed9d297612646228cbe77721)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54) [#55](https://github.com/terrylica/rangebar-py/issues/55)
31
+ * **research:** add ADWIN regime detection analysis ([de1f721](https://github.com/terrylica/rangebar-py/commit/de1f721401d3224df2067eae1b0fc14cfcfeb1ef)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
32
+ * **research:** add Benjamini-Hochberg FDR correction for pattern testing ([7c159f6](https://github.com/terrylica/rangebar-py/commit/7c159f651f6373e3a3b8bbc7aac1d1cb163c424f)), closes [#52](https://github.com/terrylica/rangebar-py/issues/52) [#56](https://github.com/terrylica/rangebar-py/issues/56)
33
+ * **research:** add combined SMA/RSI x RV regime analysis ([789b5b0](https://github.com/terrylica/rangebar-py/commit/789b5b0301567aba3c04afc0d96037df7b2338d1)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
34
+ * **research:** add cross-asset correlation analysis (Issue [#145](https://github.com/terrylica/rangebar-py/issues/145)) ([ee5260c](https://github.com/terrylica/rangebar-py/commit/ee5260c8abc234792b06b4d6f2c898a314ee28a9))
35
+ * **research:** add extended symbol set for 250 dbps cross-board examination ([2cbc3f7](https://github.com/terrylica/rangebar-py/commit/2cbc3f72a58c23967619443e8acfa8f183c26c12)), closes [#58](https://github.com/terrylica/rangebar-py/issues/58)
36
+ * **research:** add GPU-accelerated TDA structural break detection ([afc4201](https://github.com/terrylica/rangebar-py/commit/afc42017a1452aba00bc7414c77707f2ca58e4e5))
37
+ * **research:** add Hurst exponent analysis for long memory effects ([cc66023](https://github.com/terrylica/rangebar-py/commit/cc660235b1059be7c6730cd989f2ca6dadb64314)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
38
+ * **research:** add Hurst exponent analysis per TDA regime ([5a731fc](https://github.com/terrylica/rangebar-py/commit/5a731fc8836b24822fc8e0ff919feff565425746)), closes [#56](https://github.com/terrylica/rangebar-py/issues/56)
39
+ * **research:** add Hurst-adjusted Kelly fraction analysis ([149b754](https://github.com/terrylica/rangebar-py/commit/149b754d7276874ec0fe088357d9e221938834ec)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
40
+ * **research:** add Hurst-adjusted PSR/MinTRL validation ([c2709da](https://github.com/terrylica/rangebar-py/commit/c2709da5c5d54b7715e7fcfab2d7b5d4d40c7d3a)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
41
+ * **research:** add Kelly criterion position sizing analysis ([25dab7b](https://github.com/terrylica/rangebar-py/commit/25dab7b1963224dffeb574e78986556459aad6cb)), closes [#92](https://github.com/terrylica/rangebar-py/issues/92)
42
+ * **research:** add market regime analysis script ([4eea8f9](https://github.com/terrylica/rangebar-py/commit/4eea8f99dc7777440536c1221f6df0088df7b84f)), closes [#74](https://github.com/terrylica/rangebar-py/issues/74) [#52](https://github.com/terrylica/rangebar-py/issues/52)
43
+ * **research:** add memory-safe population script ([e7e871e](https://github.com/terrylica/rangebar-py/commit/e7e871e11632701470d0e14a271a1e67b0e1465b)), closes [hi#volume](https://github.com/hi/issues/volume)
44
+ * **research:** add microstructure pattern analysis scripts ([bb0a8d2](https://github.com/terrylica/rangebar-py/commit/bb0a8d25dbce4a3fc1a0c9af50d51fa7adb826f6)), closes [#52](https://github.com/terrylica/rangebar-py/issues/52) [#56](https://github.com/terrylica/rangebar-py/issues/56)
45
+ * **research:** add multi-bar horizon analysis - confirms genuine alpha ([bd2d326](https://github.com/terrylica/rangebar-py/commit/bd2d326e3e9ba9727d6bea640719a16b9952bf5b)), closes [#80](https://github.com/terrylica/rangebar-py/issues/80)
46
+ * **research:** add multi-factor multi-granularity pattern analysis ([61847d4](https://github.com/terrylica/rangebar-py/commit/61847d44511500ef533cdc9d2bc425f6357cfde3)), closes [#52](https://github.com/terrylica/rangebar-py/issues/52)
47
+ * **research:** add multi-threshold combination analysis ([74a658d](https://github.com/terrylica/rangebar-py/commit/74a658d59d1d708f9c72e57d003ec3da37d5900c)), closes [#86](https://github.com/terrylica/rangebar-py/issues/86) [#52](https://github.com/terrylica/rangebar-py/issues/52) [#86](https://github.com/terrylica/rangebar-py/issues/86)
48
+ * **research:** add parameter sensitivity analysis for regime patterns ([3d7b969](https://github.com/terrylica/rangebar-py/commit/3d7b9698fba12ed8ee9c5d075ca6d7df06f357cd)), closes [#89](https://github.com/terrylica/rangebar-py/issues/89)
49
+ * **research:** add pattern correlation analysis for portfolio diversification ([5b2a536](https://github.com/terrylica/rangebar-py/commit/5b2a5369e1d125c5213ab7e9c232d5ae7b1a18df))
50
+ * **research:** add population monitoring script ([5e461aa](https://github.com/terrylica/rangebar-py/commit/5e461aa3c0d6f60897e0a8af501b8835afc2a9e1)), closes [#58](https://github.com/terrylica/rangebar-py/issues/58)
51
+ * **research:** add PSR/MinTRL stationarity gap analysis ([0557b27](https://github.com/terrylica/rangebar-py/commit/0557b274c6cdd950e8bd3ae9a6c972a544f055e2)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54) [#55](https://github.com/terrylica/rangebar-py/issues/55)
52
+ * **research:** add regime + multi-threshold combination analysis ([f996275](https://github.com/terrylica/rangebar-py/commit/f996275b295196aa2495457edae34836f79fa190)), closes [#52](https://github.com/terrylica/rangebar-py/issues/52) [#87](https://github.com/terrylica/rangebar-py/issues/87)
53
+ * **research:** add Ripser++ GPU TDA script ([72d13c7](https://github.com/terrylica/rangebar-py/commit/72d13c7f34c4a13208b2a6539d81ab90681c3df8))
54
+ * **research:** add rolling TDA threshold (no data leakage) ([38f67f5](https://github.com/terrylica/rangebar-py/commit/38f67f587f21595d0beeef16b644c15eaee75262)), closes [#52](https://github.com/terrylica/rangebar-py/issues/52) [#56](https://github.com/terrylica/rangebar-py/issues/56)
55
+ * **research:** add TDA break event alignment analysis ([3960eb6](https://github.com/terrylica/rangebar-py/commit/3960eb6cf3c30eef528cb6701319973f86893040)), closes [#56](https://github.com/terrylica/rangebar-py/issues/56)
56
+ * **research:** add TDA regime Hurst exponent analysis ([9626d07](https://github.com/terrylica/rangebar-py/commit/9626d0742aa98e0e8387111ad76fb6e3219df3ed)), closes [#56](https://github.com/terrylica/rangebar-py/issues/56)
57
+ * **research:** add TDA regime pattern analysis ([7055673](https://github.com/terrylica/rangebar-py/commit/70556738af8a6f5d2e267ba9af751f2c8647dcd9)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54) [#56](https://github.com/terrylica/rangebar-py/issues/56)
58
+ * **research:** add TDA regime-conditioned pattern ODD robustness testing ([89a0b19](https://github.com/terrylica/rangebar-py/commit/89a0b193013942b4777cba36b831506c854e5f7d)), closes [#56](https://github.com/terrylica/rangebar-py/issues/56)
59
+ * **research:** add TDA structural break detection analysis ([32b20a1](https://github.com/terrylica/rangebar-py/commit/32b20a1a678ea9e9c9ba6a7e34df1c57e866b5d5)), closes [#114](https://github.com/terrylica/rangebar-py/issues/114)
60
+ * **research:** add TDA structural break detection script ([1480ee9](https://github.com/terrylica/rangebar-py/commit/1480ee94bd4220a17acb6066ff982c7d62caebea)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
61
+ * **research:** add temporal-safe pattern validation ([bcf1c0d](https://github.com/terrylica/rangebar-py/commit/bcf1c0d25e94ee2537775764aa88eef818bbfeff)), closes [#52](https://github.com/terrylica/rangebar-py/issues/52) [#56](https://github.com/terrylica/rangebar-py/issues/56)
62
+ * **research:** add three-factor Hurst exponent analysis ([dd15576](https://github.com/terrylica/rangebar-py/commit/dd15576280742ed0adf168c175521de53ae0d27b)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
63
+ * **research:** add three-factor pattern analysis ([26659a8](https://github.com/terrylica/rangebar-py/commit/26659a8d0b633d13e275313cd731b288a7c8ab1d)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54) [#55](https://github.com/terrylica/rangebar-py/issues/55)
64
+ * **research:** add transaction cost analysis for regime patterns ([8c555e0](https://github.com/terrylica/rangebar-py/commit/8c555e0460e0b18710ceff34ee5831798b1c8e02)), closes [#90](https://github.com/terrylica/rangebar-py/issues/90)
65
+ * **research:** add volatility regime pattern analysis (Issue [#54](https://github.com/terrylica/rangebar-py/issues/54)) ([64feab1](https://github.com/terrylica/rangebar-py/commit/64feab154dc838b67b9fe41858f0fd536637f843))
66
+ * **research:** adversarial audit of combined RV+alignment patterns ([c5178b6](https://github.com/terrylica/rangebar-py/commit/c5178b6efe72e7706e362aeff8cc65a2a8c78732)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54) [#55](https://github.com/terrylica/rangebar-py/issues/55)
67
+ * **research:** adversarial audit of volatility regime patterns ([7c30a46](https://github.com/terrylica/rangebar-py/commit/7c30a46d4d9b874aa916cc550ce3667d5b1f3edd)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
68
+ * **research:** analyze 50 dbps patterns - fewer robust than 100 dbps ([da7af16](https://github.com/terrylica/rangebar-py/commit/da7af1623b987e283ddbd7ae332262a4840c7aab)), closes [#91](https://github.com/terrylica/rangebar-py/issues/91)
69
+ * **research:** combined RV regime + multi-threshold alignment analysis ([7934be9](https://github.com/terrylica/rangebar-py/commit/7934be923127e240d5b0380a1785fcf64c107921)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54) [#55](https://github.com/terrylica/rangebar-py/issues/55)
70
+ * **research:** cross-regime correlation analysis for portfolio diversification ([bd5a13c](https://github.com/terrylica/rangebar-py/commit/bd5a13c5e175b753035d1639f392334cafd901f8)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
71
+ * **research:** cross-threshold signal alignment analysis ([1f43e1e](https://github.com/terrylica/rangebar-py/commit/1f43e1e783ebabd1c8bfd3919a4d0e63f9c32bfe)), closes [#52](https://github.com/terrylica/rangebar-py/issues/52) [#56](https://github.com/terrylica/rangebar-py/issues/56)
72
+ * **research:** microstructure feature analysis via ClickHouse ([45f1627](https://github.com/terrylica/rangebar-py/commit/45f16276bf46af8fb5c9040346bf67e59beed490)), closes [#52](https://github.com/terrylica/rangebar-py/issues/52) [#56](https://github.com/terrylica/rangebar-py/issues/56)
73
+ * **research:** multi-threshold pattern confirmation signals ([b4fc08a](https://github.com/terrylica/rangebar-py/commit/b4fc08a3dd232788d783a5d53a7ed63e74645845)), closes [#55](https://github.com/terrylica/rangebar-py/issues/55)
74
+ * **research:** return profile analysis for RV regime patterns ([6b626e7](https://github.com/terrylica/rangebar-py/commit/6b626e76c74e5ba2619f3244087262a2d1538e16)), closes [#54](https://github.com/terrylica/rangebar-py/issues/54)
75
+
1
76
  # [11.4.0](https://github.com/terrylica/rangebar-py/compare/v11.3.0...v11.4.0) (2026-01-31)
2
77
 
3
78
 
@@ -16,6 +16,8 @@
16
16
  | Performance monitoring | [docs/development/PERFORMANCE.md](/docs/development/PERFORMANCE.md) | Benchmarks, metrics |
17
17
  | Project context | [docs/CONTEXT.md](/docs/CONTEXT.md) | Why this project exists |
18
18
  | API reference | [docs/api.md](/docs/api.md) | Full Python API docs |
19
+ | Pattern research | [docs/research/INDEX.md](/docs/research/INDEX.md) | Research findings (complete) |
20
+ | Session handoff | [RESUME.md](/RESUME.md) | Context for new sessions |
19
21
 
20
22
  ---
21
23
 
@@ -3430,7 +3430,7 @@ dependencies = [
3430
3430
 
3431
3431
  [[package]]
3432
3432
  name = "rangebar"
3433
- version = "11.4.0"
3433
+ version = "11.6.0"
3434
3434
  dependencies = [
3435
3435
  "chrono",
3436
3436
  "insta",
@@ -3452,7 +3452,7 @@ dependencies = [
3452
3452
 
3453
3453
  [[package]]
3454
3454
  name = "rangebar-batch"
3455
- version = "11.4.0"
3455
+ version = "11.6.0"
3456
3456
  dependencies = [
3457
3457
  "polars",
3458
3458
  "rangebar-core",
@@ -3464,7 +3464,7 @@ dependencies = [
3464
3464
 
3465
3465
  [[package]]
3466
3466
  name = "rangebar-cli"
3467
- version = "11.4.0"
3467
+ version = "11.6.0"
3468
3468
  dependencies = [
3469
3469
  "chrono",
3470
3470
  "clap",
@@ -3489,7 +3489,7 @@ dependencies = [
3489
3489
 
3490
3490
  [[package]]
3491
3491
  name = "rangebar-config"
3492
- version = "11.4.0"
3492
+ version = "11.6.0"
3493
3493
  dependencies = [
3494
3494
  "chrono",
3495
3495
  "config",
@@ -3501,7 +3501,7 @@ dependencies = [
3501
3501
 
3502
3502
  [[package]]
3503
3503
  name = "rangebar-core"
3504
- version = "11.4.0"
3504
+ version = "11.6.0"
3505
3505
  dependencies = [
3506
3506
  "ahash",
3507
3507
  "arrow",
@@ -3518,7 +3518,7 @@ dependencies = [
3518
3518
 
3519
3519
  [[package]]
3520
3520
  name = "rangebar-io"
3521
- version = "11.4.0"
3521
+ version = "11.6.0"
3522
3522
  dependencies = [
3523
3523
  "polars",
3524
3524
  "rangebar-core",
@@ -3528,7 +3528,7 @@ dependencies = [
3528
3528
 
3529
3529
  [[package]]
3530
3530
  name = "rangebar-providers"
3531
- version = "11.4.0"
3531
+ version = "11.6.0"
3532
3532
  dependencies = [
3533
3533
  "chrono",
3534
3534
  "csv",
@@ -3548,7 +3548,7 @@ dependencies = [
3548
3548
 
3549
3549
  [[package]]
3550
3550
  name = "rangebar-py"
3551
- version = "11.4.0"
3551
+ version = "11.6.0"
3552
3552
  dependencies = [
3553
3553
  "arrow",
3554
3554
  "arrow-array",
@@ -3567,7 +3567,7 @@ dependencies = [
3567
3567
 
3568
3568
  [[package]]
3569
3569
  name = "rangebar-streaming"
3570
- version = "11.4.0"
3570
+ version = "11.6.0"
3571
3571
  dependencies = [
3572
3572
  "async-trait",
3573
3573
  "chrono",
@@ -10,7 +10,7 @@ resolver = "2"
10
10
  [workspace.package]
11
11
  # CRITICAL: Prevent crates.io publishing - this is a PyPI-only project
12
12
  publish = false
13
- version = "11.4.0"
13
+ version = "11.6.0"
14
14
  authors = ["Terry Li <terry@eonlabs.com>"]
15
15
  categories = ["algorithms", "data-structures", "finance"]
16
16
  documentation = "https://docs.rs/rangebar"
@@ -97,7 +97,7 @@ criterion = { version = "0.5", features = ["html_reports"] }
97
97
 
98
98
  [package]
99
99
  name = "rangebar-py"
100
- version = "11.4.0"
100
+ version = "11.6.0"
101
101
  edition = "2021"
102
102
  authors = ["Terry Li"]
103
103
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rangebar
3
- Version: 11.4.0
3
+ Version: 11.6.0
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Financial and Insurance Industry
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -0,0 +1,138 @@
1
+ # RESUME.md - Session Context
2
+
3
+ **Last Updated**: 2026-02-02
4
+ **Purpose**: Quick context for continuing work in future sessions
5
+
6
+ ---
7
+
8
+ ## Current Work: Issue #59 Inter-Bar Features
9
+
10
+ ### Status: Phase 1 COMPLETE (Rust Core)
11
+
12
+ **Objective**: Enrich 1000 dbps bars with microstructure features computed from raw aggTrades in a lookback window BEFORE each bar opens.
13
+
14
+ **Plan**: [docs/plans/issue-59-inter-bar-features.md](/docs/plans/issue-59-inter-bar-features.md)
15
+
16
+ ### Completed (Phase 1)
17
+
18
+ - Created `crates/rangebar-core/src/interbar.rs` - 16 inter-bar features
19
+ - Added 16 `Option<T>` fields to `RangeBar` struct
20
+ - All 222 workspace tests pass
21
+ - Academic validation: Kyle (1985), Goh-Barabási (2008), Garman-Klass (1980), Bandt-Pompe (2002)
22
+
23
+ ### Remaining Phases
24
+
25
+ | Phase | Task | Status |
26
+ | ----- | ------------------------------------------------------ | ------ |
27
+ | 2 | Integrate `TradeHistory` into `RangeBarProcessor` | TODO |
28
+ | 3 | Update PyO3 bindings to expose features to Python | TODO |
29
+ | 4 | Update Python type hints, constants, ClickHouse schema | TODO |
30
+
31
+ ### Key Files
32
+
33
+ | File | Purpose |
34
+ | --------------------------------------- | ---------------------------------- |
35
+ | `crates/rangebar-core/src/interbar.rs` | Core feature computation (NEW) |
36
+ | `crates/rangebar-core/src/types.rs` | RangeBar struct with 16 new fields |
37
+ | `crates/rangebar-core/src/processor.rs` | Needs TradeHistory integration |
38
+
39
+ ---
40
+
41
+ ## Pattern Research: COMPLETE
42
+
43
+ **Finding**: ZERO ODD robust predictive patterns exist in range bar data.
44
+
45
+ After exhaustive testing across **10 research approaches**, all were invalidated:
46
+
47
+ | Approach | Status | Root Cause |
48
+ | ------------------------- | ----------- | ------------------------------------- |
49
+ | Direction patterns (U/D) | INVALIDATED | Boundary-locked returns (H~0.79) |
50
+ | 2-bar/3-bar patterns | INVALIDATED | Forward returns show mean reversion |
51
+ | TDA regime conditioning | INVALIDATED | Lookback leakage in regime labels |
52
+ | Microstructure features | 0 ODD | Feature noise exceeds signal |
53
+ | Cross-threshold alignment | INVALIDATED | Temporal overlap contaminates signals |
54
+ | Return persistence | INVALIDATED | Same sign but t < 3.0 |
55
+ | Coarse-to-fine cascade | BLOCKED | Combinatorial explosion |
56
+ | Duration autocorrelation | INVALIDATED | 100% mechanical (deferred-open) |
57
+ | TDA velocity forecast | INVALIDATED | t-stats -1.67 to +1.01 |
58
+ | Cross-asset correlation | INVALIDATED | 0 ODD (Issue #145, crypto-forex) |
59
+
60
+ **Key Insight**: Range bars are unsuitable for directional prediction due to:
61
+
62
+ 1. Boundary-locked returns (mechanically bounded by threshold)
63
+ 2. Temporal overlap (75-100% consecutive bar overlap)
64
+ 3. Long memory (Hurst H~0.79 reduces effective sample size)
65
+
66
+ ---
67
+
68
+ ## Available Resources
69
+
70
+ ### Data
71
+
72
+ | Location | Content | Size |
73
+ | ------------------- | ----------------------------- | ---------- |
74
+ | bigblack ClickHouse | Range bars (ouroboros='year') | 260M+ bars |
75
+
76
+ **Data Storage Policy**: All data must be stored on remote ClickHouse (bigblack primary, littleblack secondary). Local storage is FORBIDDEN.
77
+
78
+ **Crypto**: BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT
79
+ **Forex**: EURUSD (Exness Raw_Spread, Issue #143-#145)
80
+ **Thresholds**: 25, 50, 100, 200, 250 dbps (crypto); 50, 100, 200 dbps (forex)
81
+ **Period**: 2022-2026 (continuous, all gaps filled)
82
+
83
+ ### Documentation
84
+
85
+ | Document | Purpose |
86
+ | ------------------------------------------------ | ------------------------ |
87
+ | `docs/research/INDEX.md` | Navigation index |
88
+ | `docs/research/pattern-research-summary.md` | Master findings |
89
+ | `docs/research/adversarial-audit-methodology.md` | Reusable audit framework |
90
+ | `docs/plans/issue-59-inter-bar-features.md` | Inter-bar features plan |
91
+
92
+ ---
93
+
94
+ ## What NOT to Retry
95
+
96
+ These approaches have been definitively invalidated:
97
+
98
+ 1. **Any direction-based pattern** - Returns are boundary-locked
99
+ 2. **Duration-based volatility prediction** - Mechanical artifact
100
+ 3. **TDA velocity for forward RV** - No predictive power
101
+ 4. **Microstructure features for alpha** - Noise exceeds signal
102
+ 5. **Cross-threshold alignment signals** - Temporal overlap contamination
103
+
104
+ ---
105
+
106
+ ## Technical Stack
107
+
108
+ - **Python**: 3.13 (REQUIRED, never downgrade)
109
+ - **Package manager**: UV
110
+ - **Data processing**: Polars + Arrow (not Pandas)
111
+ - **Database**: ClickHouse (bigblack via SSH)
112
+ - **TDA**: ripser, persim
113
+ - **Regime detection**: river (ADWIN)
114
+
115
+ ---
116
+
117
+ ## Session Handoff Notes
118
+
119
+ If continuing Issue #59:
120
+
121
+ 1. Phase 1 (Rust core) is complete - 73 tests in interbar.rs pass
122
+ 2. Next: Integrate `TradeHistory` into `RangeBarProcessor::process_trade()`
123
+ 3. Plan file has detailed pseudocode for Phase 2-4
124
+
125
+ If continuing pattern research:
126
+
127
+ 1. **DO NOT** retry invalidated approaches
128
+ 2. The methodology is sound - the finding is genuinely negative
129
+ 3. 10 approaches exhausted = research is complete
130
+
131
+ ---
132
+
133
+ ## References
134
+
135
+ - Root hub: [CLAUDE.md](/CLAUDE.md)
136
+ - Crates: [crates/CLAUDE.md](/crates/CLAUDE.md)
137
+ - Research index: [docs/research/INDEX.md](/docs/research/INDEX.md)
138
+ - Inter-bar plan: [docs/plans/issue-59-inter-bar-features.md](/docs/plans/issue-59-inter-bar-features.md)