rangebar 11.3.0__tar.gz → 11.5.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 (274) hide show
  1. {rangebar-11.3.0 → rangebar-11.5.0}/.gitignore +1 -0
  2. {rangebar-11.3.0 → rangebar-11.5.0}/.mise.toml +180 -7
  3. {rangebar-11.3.0 → rangebar-11.5.0}/CHANGELOG.md +81 -0
  4. {rangebar-11.3.0 → rangebar-11.5.0}/CLAUDE.md +2 -0
  5. {rangebar-11.3.0 → rangebar-11.5.0}/Cargo.lock +10 -9
  6. {rangebar-11.3.0 → rangebar-11.5.0}/Cargo.toml +7 -4
  7. {rangebar-11.3.0 → rangebar-11.5.0}/PKG-INFO +1 -1
  8. rangebar-11.5.0/RESUME.md +140 -0
  9. rangebar-11.5.0/STATISTICAL_VALIDITY_AUDIT.md +591 -0
  10. rangebar-11.5.0/crates/rangebar-streaming/CHANGELOG.md +6 -0
  11. rangebar-11.5.0/crates/rangebar-streaming/Cargo.toml +42 -0
  12. rangebar-11.5.0/crates/rangebar-streaming/README.md +132 -0
  13. rangebar-11.5.0/crates/rangebar-streaming/src/indicators.rs +364 -0
  14. rangebar-11.5.0/crates/rangebar-streaming/src/lib.rs +32 -0
  15. rangebar-11.5.0/crates/rangebar-streaming/src/processor.rs +513 -0
  16. rangebar-11.5.0/crates/rangebar-streaming/src/replay_buffer.rs +359 -0
  17. rangebar-11.5.0/crates/rangebar-streaming/src/stats.rs +565 -0
  18. rangebar-11.5.0/crates/rangebar-streaming/src/universal.rs +353 -0
  19. rangebar-11.5.0/docs/adr/2026-01-31-realtime-streaming-api.md +202 -0
  20. rangebar-11.5.0/docs/research/2026-02-02-intrabar-microstructure-claude-opus.md +174 -0
  21. rangebar-11.5.0/docs/research/2026-02-02-intrabar-microstructure-gemini-3-pro.md +365 -0
  22. rangebar-11.5.0/docs/research/INDEX.md +148 -0
  23. rangebar-11.5.0/docs/research/adversarial-audit-methodology.md +303 -0
  24. rangebar-11.5.0/docs/research/external/time-to-convergence-stationarity-gap.md +417 -0
  25. rangebar-11.5.0/docs/research/labeling-for-ml.md +773 -0
  26. rangebar-11.5.0/docs/research/market-regime-patterns.md +1172 -0
  27. rangebar-11.5.0/docs/research/multi-threshold-patterns.md +157 -0
  28. rangebar-11.5.0/docs/research/multifactor-patterns.md +163 -0
  29. rangebar-11.5.0/docs/research/pattern-research-summary.md +1002 -0
  30. rangebar-11.5.0/docs/research/price-action-patterns.md +313 -0
  31. rangebar-11.5.0/docs/research/tda-parameter-sensitivity-audit.md +530 -0
  32. rangebar-11.5.0/docs/research/tda-regime-patterns.md +391 -0
  33. rangebar-11.5.0/docs/research/volatility-regime-patterns.md +421 -0
  34. {rangebar-11.3.0 → rangebar-11.5.0}/pyproject.toml +14 -0
  35. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/__init__.py +31 -4
  36. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/CLAUDE.md +8 -5
  37. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/orchestration/count_bounded.py +114 -173
  38. rangebar-11.5.0/python/rangebar/orchestration/tick_fetcher.py +226 -0
  39. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/resource_guard.py +162 -11
  40. rangebar-11.5.0/python/rangebar/streaming.py +300 -0
  41. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/validation/continuity.py +24 -274
  42. rangebar-11.5.0/python/rangebar/validation/gap_classification.py +294 -0
  43. rangebar-11.5.0/scripts/adwin_regime_detection_polars.py +359 -0
  44. rangebar-11.5.0/scripts/bootstrap_permutation_validation_polars.py +514 -0
  45. rangebar-11.5.0/scripts/coarse_to_fine_cascade.py +312 -0
  46. rangebar-11.5.0/scripts/combined_pattern_audit_polars.py +625 -0
  47. rangebar-11.5.0/scripts/combined_regime_analysis_polars.py +573 -0
  48. rangebar-11.5.0/scripts/combined_rv_alignment_analysis_polars.py +521 -0
  49. rangebar-11.5.0/scripts/cross_asset_correlation_polars.py +508 -0
  50. rangebar-11.5.0/scripts/cross_regime_correlation_polars.py +553 -0
  51. rangebar-11.5.0/scripts/cross_threshold_alignment.py +321 -0
  52. rangebar-11.5.0/scripts/direction_patterns_reaudit.py +259 -0
  53. rangebar-11.5.0/scripts/download_exness_eurusd.py +107 -0
  54. rangebar-11.5.0/scripts/download_exness_forex.py +133 -0
  55. rangebar-11.5.0/scripts/duration_autocorrelation.py +304 -0
  56. rangebar-11.5.0/scripts/duration_autocorrelation_audit.py +363 -0
  57. rangebar-11.5.0/scripts/duration_volatility_prediction.py +333 -0
  58. rangebar-11.5.0/scripts/fdr_corrected_patterns.py +448 -0
  59. rangebar-11.5.0/scripts/fill_all_symbols.py +186 -0
  60. rangebar-11.5.0/scripts/fill_gaps_2025_2026.py +122 -0
  61. rangebar-11.5.0/scripts/fill_gaps_littleblack.py +147 -0
  62. rangebar-11.5.0/scripts/fill_gaps_retry.py +95 -0
  63. rangebar-11.5.0/scripts/historical_formation_patterns_polars.py +407 -0
  64. rangebar-11.5.0/scripts/historical_formation_regime_polars.py +509 -0
  65. rangebar-11.5.0/scripts/hurst_adjusted_kelly_polars.py +391 -0
  66. rangebar-11.5.0/scripts/hurst_adjusted_psr_analysis_polars.py +348 -0
  67. rangebar-11.5.0/scripts/hurst_exponent_analysis_polars.py +446 -0
  68. rangebar-11.5.0/scripts/hurst_multi_estimator_audit.py +278 -0
  69. rangebar-11.5.0/scripts/microstructure_clickhouse.py +257 -0
  70. rangebar-11.5.0/scripts/microstructure_patterns.py +392 -0
  71. rangebar-11.5.0/scripts/microstructure_simple.py +265 -0
  72. rangebar-11.5.0/scripts/monitor_population.py +227 -0
  73. rangebar-11.5.0/scripts/multi_threshold_pattern_analysis_polars.py +556 -0
  74. rangebar-11.5.0/scripts/multibar_continuation.py +409 -0
  75. rangebar-11.5.0/scripts/multibar_forward_returns_polars.py +457 -0
  76. rangebar-11.5.0/scripts/multifactor_multigranularity_patterns.py +460 -0
  77. rangebar-11.5.0/scripts/multifactor_patterns.py +513 -0
  78. rangebar-11.5.0/scripts/multifactor_patterns_polars.py +520 -0
  79. rangebar-11.5.0/scripts/multithreshold_combinations_polars.py +485 -0
  80. rangebar-11.5.0/scripts/multithreshold_regime_combinations_polars.py +501 -0
  81. rangebar-11.5.0/scripts/oos_validation_polars.py +459 -0
  82. rangebar-11.5.0/scripts/parameter_sensitivity_polars.py +434 -0
  83. rangebar-11.5.0/scripts/pattern_correlation_analysis_polars.py +505 -0
  84. rangebar-11.5.0/scripts/pattern_return_profiles_polars.py +410 -0
  85. rangebar-11.5.0/scripts/pattern_return_stats.py +427 -0
  86. rangebar-11.5.0/scripts/populate_1000dbps.py +80 -0
  87. rangebar-11.5.0/scripts/populate_250dbps.py +77 -0
  88. rangebar-11.5.0/scripts/populate_250dbps_extended.py +113 -0
  89. rangebar-11.5.0/scripts/populate_safe.py +174 -0
  90. rangebar-11.5.0/scripts/position_sizing_analysis_polars.py +455 -0
  91. rangebar-11.5.0/scripts/process_exness_eurusd_to_cache.py +125 -0
  92. rangebar-11.5.0/scripts/psr_mintrl_analysis_polars.py +578 -0
  93. rangebar-11.5.0/scripts/regime_analysis.py +754 -0
  94. rangebar-11.5.0/scripts/regime_analysis_50dbps_polars.py +490 -0
  95. rangebar-11.5.0/scripts/regime_analysis_polars.py +577 -0
  96. rangebar-11.5.0/scripts/regime_transition_analysis_polars.py +552 -0
  97. rangebar-11.5.0/scripts/run_length_momentum_analysis.py +263 -0
  98. rangebar-11.5.0/scripts/run_length_momentum_multi_symbol.py +210 -0
  99. rangebar-11.5.0/scripts/run_length_momentum_wfo.py +249 -0
  100. rangebar-11.5.0/scripts/rv_return_profile_analysis_polars.py +514 -0
  101. rangebar-11.5.0/scripts/tda_break_event_alignment_polars.py +345 -0
  102. rangebar-11.5.0/scripts/tda_conditioned_patterns.py +435 -0
  103. rangebar-11.5.0/scripts/tda_cupy_accelerated.py +352 -0
  104. rangebar-11.5.0/scripts/tda_gpu_analysis.py +310 -0
  105. rangebar-11.5.0/scripts/tda_hurst_by_regime_polars.py +475 -0
  106. rangebar-11.5.0/scripts/tda_parameter_sweep_audit.py +295 -0
  107. rangebar-11.5.0/scripts/tda_regime_hurst_analysis_polars.py +565 -0
  108. rangebar-11.5.0/scripts/tda_regime_pattern_analysis_polars.py +507 -0
  109. rangebar-11.5.0/scripts/tda_ripser_plusplus.py +268 -0
  110. rangebar-11.5.0/scripts/tda_rolling_threshold.py +525 -0
  111. rangebar-11.5.0/scripts/tda_solusdt_250_audit.py +260 -0
  112. rangebar-11.5.0/scripts/tda_solusdt_250_littleblack.py +275 -0
  113. rangebar-11.5.0/scripts/tda_structural_break_analysis_polars.py +553 -0
  114. rangebar-11.5.0/scripts/tda_volatility_forecast.py +423 -0
  115. rangebar-11.5.0/scripts/tda_wfo_3way.py +835 -0
  116. rangebar-11.5.0/scripts/tda_wfo_abstain.py +654 -0
  117. rangebar-11.5.0/scripts/tda_wfo_audit.py +327 -0
  118. rangebar-11.5.0/scripts/temporal_safe_patterns_polars.py +388 -0
  119. rangebar-11.5.0/scripts/three_bar_alignment_analysis_polars.py +481 -0
  120. rangebar-11.5.0/scripts/three_bar_pattern_analysis_polars.py +442 -0
  121. rangebar-11.5.0/scripts/three_bar_pattern_audit_polars.py +618 -0
  122. rangebar-11.5.0/scripts/three_factor_hurst_analysis_polars.py +456 -0
  123. rangebar-11.5.0/scripts/three_factor_pattern_analysis_polars.py +534 -0
  124. rangebar-11.5.0/scripts/transaction_cost_analysis_polars.py +493 -0
  125. rangebar-11.5.0/scripts/trend_filter_analysis.py +411 -0
  126. rangebar-11.5.0/scripts/upload_eurusd_to_clickhouse.py +132 -0
  127. rangebar-11.5.0/scripts/volatility_regime_analysis_polars.py +502 -0
  128. rangebar-11.5.0/scripts/volatility_regime_audit_polars.py +590 -0
  129. rangebar-11.5.0/scripts/volume_conditioned_patterns.py +472 -0
  130. rangebar-11.5.0/scripts/volume_conditioned_patterns_polars.py +477 -0
  131. {rangebar-11.3.0 → rangebar-11.5.0}/src/lib.rs +566 -0
  132. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_get_n_range_bars.py +22 -2
  133. rangebar-11.5.0/tests/test_streaming.py +528 -0
  134. {rangebar-11.3.0 → rangebar-11.5.0}/uv.lock +440 -0
  135. {rangebar-11.3.0 → rangebar-11.5.0}/.mcp.json +0 -0
  136. {rangebar-11.3.0 → rangebar-11.5.0}/.pre-commit-config.yaml +0 -0
  137. {rangebar-11.3.0 → rangebar-11.5.0}/.releaserc.yml +0 -0
  138. {rangebar-11.3.0 → rangebar-11.5.0}/LICENSE +0 -0
  139. {rangebar-11.3.0 → rangebar-11.5.0}/README.md +0 -0
  140. {rangebar-11.3.0 → rangebar-11.5.0}/benches/rangebar_bench.rs +0 -0
  141. {rangebar-11.3.0 → rangebar-11.5.0}/build.rs +0 -0
  142. {rangebar-11.3.0 → rangebar-11.5.0}/crates/CLAUDE.md +0 -0
  143. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/CHANGELOG.md +0 -0
  144. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/Cargo.toml +0 -0
  145. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/README.md +0 -0
  146. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/arrow_export.rs +0 -0
  147. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/checkpoint.rs +0 -0
  148. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/fixed_point.rs +0 -0
  149. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/lib.rs +0 -0
  150. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/processor.rs +0 -0
  151. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/test_data_loader.rs +0 -0
  152. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/test_utils/generators.rs +0 -0
  153. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/test_utils/mod.rs +0 -0
  154. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/timestamp.rs +0 -0
  155. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/src/types.rs +0 -0
  156. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/tests/cross_boundary_validation.rs +0 -0
  157. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/tests/cross_date_real_data_validation.rs +0 -0
  158. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/tests/cross_year_boundary_test.rs +0 -0
  159. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-core/tests/incomplete_bar_continuation_proof.rs +0 -0
  160. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/CHANGELOG.md +0 -0
  161. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/Cargo.toml +0 -0
  162. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/README.md +0 -0
  163. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/checksum.rs +0 -0
  164. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/historical.rs +0 -0
  165. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/mod.rs +0 -0
  166. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/symbols.rs +0 -0
  167. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/websocket.rs +0 -0
  168. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/builder.rs +0 -0
  169. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/client.rs +0 -0
  170. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/conversion.rs +0 -0
  171. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/mod.rs +0 -0
  172. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/types.rs +0 -0
  173. {rangebar-11.3.0 → rangebar-11.5.0}/crates/rangebar-providers/src/lib.rs +0 -0
  174. {rangebar-11.3.0 → rangebar-11.5.0}/deny.toml +0 -0
  175. {rangebar-11.3.0 → rangebar-11.5.0}/docs/ARCHITECTURE.md +0 -0
  176. {rangebar-11.3.0 → rangebar-11.5.0}/docs/CONTEXT.md +0 -0
  177. {rangebar-11.3.0 → rangebar-11.5.0}/docs/MEMORY_REMEDIATION_PLAN.md +0 -0
  178. {rangebar-11.3.0 → rangebar-11.5.0}/docs/analysis/2025-10-10-flash-crash.md +0 -0
  179. {rangebar-11.3.0 → rangebar-11.5.0}/docs/api.md +0 -0
  180. {rangebar-11.3.0 → rangebar-11.5.0}/docs/development/PERFORMANCE.md +0 -0
  181. {rangebar-11.3.0 → rangebar-11.5.0}/docs/development/RELEASE.md +0 -0
  182. {rangebar-11.3.0 → rangebar-11.5.0}/docs/migration-v8.md +0 -0
  183. {rangebar-11.3.0 → rangebar-11.5.0}/docs/rangebar_core_api.md +0 -0
  184. {rangebar-11.3.0 → rangebar-11.5.0}/examples/README.md +0 -0
  185. {rangebar-11.3.0 → rangebar-11.5.0}/examples/backtesting_integration.py +0 -0
  186. {rangebar-11.3.0 → rangebar-11.5.0}/examples/basic_usage.py +0 -0
  187. {rangebar-11.3.0 → rangebar-11.5.0}/examples/binance_csv_example.py +0 -0
  188. {rangebar-11.3.0 → rangebar-11.5.0}/examples/get_range_bars_example.py +0 -0
  189. {rangebar-11.3.0 → rangebar-11.5.0}/examples/validate_output.py +0 -0
  190. {rangebar-11.3.0 → rangebar-11.5.0}/examples/with_clickhouse_cache.py +0 -0
  191. {rangebar-11.3.0 → rangebar-11.5.0}/package-lock.json +0 -0
  192. {rangebar-11.3.0 → rangebar-11.5.0}/package.json +0 -0
  193. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/CLAUDE.md +0 -0
  194. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/__init__.pyi +0 -0
  195. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/checkpoint.py +0 -0
  196. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/cli.py +0 -0
  197. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/__init__.py +0 -0
  198. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/bulk_operations.py +0 -0
  199. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/cache.py +0 -0
  200. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/client.py +0 -0
  201. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/config.py +0 -0
  202. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/mixin.py +0 -0
  203. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/preflight.py +0 -0
  204. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/query_operations.py +0 -0
  205. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/schema.sql +0 -0
  206. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/clickhouse/tunnel.py +0 -0
  207. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/constants.py +0 -0
  208. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/conversion.py +0 -0
  209. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/exceptions.py +0 -0
  210. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/exness.py +0 -0
  211. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/hooks.py +0 -0
  212. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/logging.py +0 -0
  213. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/notify/__init__.py +0 -0
  214. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/notify/pushover.py +0 -0
  215. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/notify/telegram.py +0 -0
  216. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/orchestration/__init__.py +0 -0
  217. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/orchestration/helpers.py +0 -0
  218. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/orchestration/models.py +0 -0
  219. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/orchestration/precompute.py +0 -0
  220. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/orchestration/range_bars.py +0 -0
  221. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/ouroboros.py +0 -0
  222. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/processors/__init__.py +0 -0
  223. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/processors/api.py +0 -0
  224. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/processors/core.py +0 -0
  225. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/storage/__init__.py +0 -0
  226. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/storage/checksum_registry.py +0 -0
  227. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/storage/parquet.py +0 -0
  228. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/validation/__init__.py +0 -0
  229. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/validation/cache_staleness.py +0 -0
  230. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/validation/post_storage.py +0 -0
  231. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/validation/tier1.py +0 -0
  232. {rangebar-11.3.0 → rangebar-11.5.0}/python/rangebar/validation/tier2.py +0 -0
  233. {rangebar-11.3.0 → rangebar-11.5.0}/rust-toolchain.toml +0 -0
  234. {rangebar-11.3.0 → rangebar-11.5.0}/rustfmt.toml +0 -0
  235. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/analyze_flash_crash.py +0 -0
  236. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/build-release.sh +0 -0
  237. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/cache_clear.py +0 -0
  238. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/cache_status.py +0 -0
  239. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/check-release-config.sh +0 -0
  240. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/dependency_monitor.sh +0 -0
  241. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/profiling_tools.sh +0 -0
  242. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/publish-to-pypi.sh +0 -0
  243. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/publish-wheels.sh +0 -0
  244. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/regenerate_cache.py +0 -0
  245. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/run_large_scale_benchmark.sh +0 -0
  246. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/semantic-release.sh +0 -0
  247. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/validate_clickhouse.py +0 -0
  248. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/validate_memory_efficiency.py +0 -0
  249. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/validate_microstructure_features.py +0 -0
  250. {rangebar-11.3.0 → rangebar-11.5.0}/scripts/validate_n_range_bars.py +0 -0
  251. {rangebar-11.3.0 → rangebar-11.5.0}/test_data/BTCUSDT/BTCUSDT_aggTrades_20250901.csv +0 -0
  252. {rangebar-11.3.0 → rangebar-11.5.0}/test_data/ETHUSDT/ETHUSDT_aggTrades_20250901.csv +0 -0
  253. {rangebar-11.3.0 → rangebar-11.5.0}/test_data/README.md +0 -0
  254. {rangebar-11.3.0 → rangebar-11.5.0}/tests/conftest.py +0 -0
  255. {rangebar-11.3.0 → rangebar-11.5.0}/tests/fixtures/.gitignore +0 -0
  256. {rangebar-11.3.0 → rangebar-11.5.0}/tests/fixtures/BTCUSDT-aggTrades-2024-01-01.zip +0 -0
  257. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_cache_schema_evolution.py +0 -0
  258. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_clickhouse.py +0 -0
  259. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_clickhouse_integration.py +0 -0
  260. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_e2e_optimized.py +0 -0
  261. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_edge_cases.py +0 -0
  262. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_examples.py +0 -0
  263. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_get_range_bars_e2e.py +0 -0
  264. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_issue_5_reproduction.py +0 -0
  265. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_issues_7_8.py +0 -0
  266. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_microstructure_features.py +0 -0
  267. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_ouroboros.py +0 -0
  268. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_polars_only_downstream.py +0 -0
  269. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_preflight.py +0 -0
  270. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_python_api.py +0 -0
  271. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_real_data.py +0 -0
  272. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_rust_bindings.py +0 -0
  273. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_storage.py +0 -0
  274. {rangebar-11.3.0 → rangebar-11.5.0}/tests/test_validation_presets.py +0 -0
@@ -113,3 +113,4 @@ user_defined/
113
113
  format_schemas/
114
114
  access/
115
115
  test_data/
116
+ .claude/
@@ -398,14 +398,19 @@ description = "Verify release configuration (GitHub, Doppler, SSH)"
398
398
  run = "./scripts/check-release-config.sh"
399
399
 
400
400
  [tasks."release:build-all"]
401
- description = "Build all platform wheels (Phase 3 - runs AFTER version bump)"
401
+ description = "Build all platform wheels + sdist (Phase 3 - runs AFTER version bump)"
402
402
  depends = ["release:version"]
403
403
  run = """
404
404
  echo "=== BUILD ALL PLATFORMS ==="
405
405
  mise run release:macos-arm64
406
406
  mise run release:linux
407
- echo "OK: All wheels built"
408
- ls -la dist/*.whl 2>/dev/null || true
407
+ mise run release:sdist
408
+ # Copy macOS wheel and sdist to dist/ (Linux wheel already lands there via scp)
409
+ VERSION=$(grep -A5 '\\[workspace.package\\]' Cargo.toml | grep '^version' | head -1 | sed 's/.*= "\\(.*\\)"/\\1/')
410
+ cp -n target/wheels/rangebar-${VERSION}-*.whl dist/ 2>/dev/null || true
411
+ cp -n target/wheels/rangebar-${VERSION}.tar.gz dist/ 2>/dev/null || true
412
+ echo "OK: All wheels + sdist built"
413
+ ls -la dist/rangebar-${VERSION}* 2>/dev/null || true
409
414
  """
410
415
 
411
416
  [tasks."release:postflight"]
@@ -431,15 +436,22 @@ run = "bun install --silent 2>/dev/null && GH_CONFIG_DIR=$HOME/.config/gh/profil
431
436
 
432
437
  [tasks."release:pypi"]
433
438
  description = "Publish to PyPI using Doppler credentials (local-only, ADR-0027)"
439
+ depends = ["release:build-all"]
434
440
  run = "./scripts/publish-to-pypi.sh"
435
441
 
436
442
  [tasks."release:full"]
437
- description = "Full 4-phase release workflow (versioning only - PyPI separate)"
443
+ description = "Full release workflow: version bump build → smoke → publish to PyPI"
438
444
  # Dependency chain enforced via task-level depends:
439
445
  # preflight → sync → version → build-all → postflight
440
- # Only need to list the leaf task; mise resolves the full chain.
441
- depends = ["release:postflight"]
442
- run = "echo 'Release complete! Next: mise run release:pypi'"
446
+ #
447
+ # release:pypi (publish)
448
+ # mise resolves the full DAG automatically.
449
+ depends = ["release:postflight", "release:pypi"]
450
+ run = """
451
+ echo '========================================='
452
+ echo ' Release complete and published to PyPI!'
453
+ echo '========================================='
454
+ """
443
455
 
444
456
  # =============================================================================
445
457
  # Smoke Test Tasks
@@ -511,3 +523,164 @@ result = send_critical_alert(
511
523
  print(f"Pushover alert sent: {result}")
512
524
  '
513
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,84 @@
1
+ # [11.5.0](https://github.com/terrylica/rangebar-py/compare/v11.4.0...v11.5.0) (2026-02-02)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **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)
7
+ * **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)
8
+ * **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)
9
+ * **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)
10
+ * **scripts:** disable RLIMIT_AS for population on Linux ([aa3b541](https://github.com/terrylica/rangebar-py/commit/aa3b541062a88cd8c8e088a24776b7de45506068))
11
+
12
+
13
+ ### Features
14
+
15
+ * **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)
16
+ * **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)
17
+ * **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)
18
+ * **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)
19
+ * **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))
20
+ * **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)
21
+ * **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)
22
+ * **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)
23
+ * **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)
24
+ * **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)
25
+ * **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)
26
+ * **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))
27
+ * **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)
28
+ * **research:** add GPU-accelerated TDA structural break detection ([afc4201](https://github.com/terrylica/rangebar-py/commit/afc42017a1452aba00bc7414c77707f2ca58e4e5))
29
+ * **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)
30
+ * **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)
31
+ * **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)
32
+ * **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)
33
+ * **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)
34
+ * **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)
35
+ * **research:** add memory-safe population script ([e7e871e](https://github.com/terrylica/rangebar-py/commit/e7e871e11632701470d0e14a271a1e67b0e1465b)), closes [hi#volume](https://github.com/hi/issues/volume)
36
+ * **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)
37
+ * **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)
38
+ * **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)
39
+ * **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)
40
+ * **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)
41
+ * **research:** add pattern correlation analysis for portfolio diversification ([5b2a536](https://github.com/terrylica/rangebar-py/commit/5b2a5369e1d125c5213ab7e9c232d5ae7b1a18df))
42
+ * **research:** add population monitoring script ([5e461aa](https://github.com/terrylica/rangebar-py/commit/5e461aa3c0d6f60897e0a8af501b8835afc2a9e1)), closes [#58](https://github.com/terrylica/rangebar-py/issues/58)
43
+ * **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)
44
+ * **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)
45
+ * **research:** add Ripser++ GPU TDA script ([72d13c7](https://github.com/terrylica/rangebar-py/commit/72d13c7f34c4a13208b2a6539d81ab90681c3df8))
46
+ * **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)
47
+ * **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)
48
+ * **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)
49
+ * **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)
50
+ * **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)
51
+ * **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)
52
+ * **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)
53
+ * **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)
54
+ * **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)
55
+ * **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)
56
+ * **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)
57
+ * **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))
58
+ * **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)
59
+ * **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)
60
+ * **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)
61
+ * **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)
62
+ * **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)
63
+ * **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)
64
+ * **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)
65
+ * **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)
66
+ * **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)
67
+
68
+ # [11.4.0](https://github.com/terrylica/rangebar-py/compare/v11.3.0...v11.4.0) (2026-01-31)
69
+
70
+
71
+ ### Bug Fixes
72
+
73
+ * **release:** enforce wheel build dependency before PyPI publish ([39e8fe4](https://github.com/terrylica/rangebar-py/commit/39e8fe40581156c7dc131920cd819281078039da))
74
+ * **research:** correct triple barrier chart to show profit target hit first ([4ca393e](https://github.com/terrylica/rangebar-py/commit/4ca393eef4a7b2fbe1aa4a304c5b0582bd11cd2d))
75
+
76
+
77
+ ### Features
78
+
79
+ * **streaming:** add real-time streaming API for Binance WebSocket ([1b2dbd3](https://github.com/terrylica/rangebar-py/commit/1b2dbd31e80ee31ad05b70d12a81911d6bde6134))
80
+ * **streaming:** add reconnection jitter and max duration to prevent thundering herd ([5acc4ba](https://github.com/terrylica/rangebar-py/commit/5acc4ba3373d9ba8c5ea894349f1bfe396758f64))
81
+
1
82
  # [11.3.0](https://github.com/terrylica/rangebar-py/compare/v11.2.2...v11.3.0) (2026-01-30)
2
83
 
3
84
 
@@ -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.3.0"
3433
+ version = "11.5.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.3.0"
3455
+ version = "11.5.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.3.0"
3467
+ version = "11.5.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.3.0"
3492
+ version = "11.5.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.3.0"
3504
+ version = "11.5.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.3.0"
3521
+ version = "11.5.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.3.0"
3531
+ version = "11.5.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.3.0"
3551
+ version = "11.5.0"
3552
3552
  dependencies = [
3553
3553
  "arrow",
3554
3554
  "arrow-array",
@@ -3559,6 +3559,7 @@ dependencies = [
3559
3559
  "pyo3-build-config",
3560
3560
  "rangebar-core",
3561
3561
  "rangebar-providers",
3562
+ "rangebar-streaming",
3562
3563
  "serde",
3563
3564
  "serde_json",
3564
3565
  "tokio",
@@ -3566,7 +3567,7 @@ dependencies = [
3566
3567
 
3567
3568
  [[package]]
3568
3569
  name = "rangebar-streaming"
3569
- version = "11.3.0"
3570
+ version = "11.5.0"
3570
3571
  dependencies = [
3571
3572
  "async-trait",
3572
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.3.0"
13
+ version = "11.5.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.3.0"
100
+ version = "11.5.0"
101
101
  edition = "2021"
102
102
  authors = ["Terry Li"]
103
103
  license = "MIT"
@@ -114,8 +114,9 @@ crate-type = ["cdylib"]
114
114
  # Use PATH dependencies to internal crates (not crates.io)
115
115
  rangebar-core = { path = "crates/rangebar-core" }
116
116
  rangebar-providers = { path = "crates/rangebar-providers", optional = true, features = ["all-providers"] }
117
+ rangebar-streaming = { path = "crates/rangebar-streaming", optional = true }
117
118
 
118
- # Async runtime for data fetching
119
+ # Async runtime for data fetching and streaming
119
120
  tokio = { version = "1.0", features = ["rt-multi-thread"], optional = true }
120
121
 
121
122
  # PyO3 for Python bindings
@@ -136,11 +137,13 @@ pyo3-arrow = { workspace = true, optional = true }
136
137
 
137
138
  [features]
138
139
  # Default features: Include data-providers and arrow-export so PyPI users get the full API
139
- default = ["data-providers", "arrow-export"]
140
+ default = ["data-providers", "arrow-export", "streaming"]
140
141
  # Enable data fetching from all providers (Binance + Exness)
141
142
  data-providers = ["rangebar-providers", "tokio"]
142
143
  # Arrow export for streaming architecture (memory-efficient)
143
144
  arrow-export = ["arrow", "arrow-array", "arrow-schema", "pyo3-arrow", "rangebar-core/arrow"]
145
+ # Real-time streaming support
146
+ streaming = ["rangebar-streaming", "rangebar-providers", "tokio"]
144
147
  # Legacy feature aliases
145
148
  exness = ["data-providers"]
146
149
  binance = ["data-providers"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rangebar
3
- Version: 11.3.0
3
+ Version: 11.5.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,140 @@
1
+ # RESUME.md - Session Context
2
+
3
+ **Last Updated**: 2026-02-01
4
+ **Purpose**: Quick context for continuing work in future sessions
5
+
6
+ ---
7
+
8
+ ## Current State Summary
9
+
10
+ ### Pattern Research: COMPLETE
11
+
12
+ **Finding**: ZERO ODD robust predictive patterns exist in range bar data.
13
+
14
+ After exhaustive testing across **10 research approaches**, all were invalidated:
15
+
16
+ | Approach | Status | Root Cause |
17
+ | ------------------------- | ----------- | ------------------------------------- |
18
+ | Direction patterns (U/D) | INVALIDATED | Boundary-locked returns (H~0.79) |
19
+ | 2-bar/3-bar patterns | INVALIDATED | Forward returns show mean reversion |
20
+ | TDA regime conditioning | INVALIDATED | Lookback leakage in regime labels |
21
+ | Microstructure features | 0 ODD | Feature noise exceeds signal |
22
+ | Cross-threshold alignment | INVALIDATED | Temporal overlap contaminates signals |
23
+ | Return persistence | INVALIDATED | Same sign but t < 3.0 |
24
+ | Coarse-to-fine cascade | BLOCKED | Combinatorial explosion |
25
+ | Duration autocorrelation | INVALIDATED | 100% mechanical (deferred-open) |
26
+ | TDA velocity forecast | INVALIDATED | t-stats -1.67 to +1.01 |
27
+ | Cross-asset correlation | INVALIDATED | 0 ODD (Issue #145, crypto-forex) |
28
+
29
+ **Key Insight**: Range bars are unsuitable for directional prediction due to:
30
+
31
+ 1. Boundary-locked returns (mechanically bounded by threshold)
32
+ 2. Temporal overlap (75-100% consecutive bar overlap)
33
+ 3. Long memory (Hurst H~0.79 reduces effective sample size)
34
+
35
+ ---
36
+
37
+ ## Available Resources
38
+
39
+ ### Data
40
+
41
+ | Location | Content | Size |
42
+ | ------------------- | ----------------------------- | ---------- |
43
+ | bigblack ClickHouse | Range bars (ouroboros='year') | 260M+ bars |
44
+
45
+ **Data Storage Policy**: All data must be stored on remote ClickHouse (bigblack primary, littleblack secondary). Local storage is FORBIDDEN.
46
+
47
+ **Crypto**: BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT
48
+ **Forex**: EURUSD (Exness Raw_Spread, Issue #143-#145)
49
+ **Thresholds**: 25, 50, 100, 200, 250 dbps (crypto); 50, 100, 200 dbps (forex)
50
+ **Period**: 2022-2026 (continuous, all gaps filled)
51
+
52
+ ### Documentation
53
+
54
+ | Document | Lines | Purpose |
55
+ | ------------------------------------------------ | ----- | ------------------------ |
56
+ | `docs/research/INDEX.md` | 124 | Navigation index |
57
+ | `docs/research/pattern-research-summary.md` | 944 | Master findings |
58
+ | `docs/research/adversarial-audit-methodology.md` | 303 | Reusable audit framework |
59
+
60
+ ### Scripts
61
+
62
+ 42+ research scripts in `scripts/`:
63
+
64
+ - Pattern analysis: `*_patterns*.py` (INVALIDATED)
65
+ - TDA research: `tda_*.py` (INVALIDATED)
66
+ - Audit scripts: `*_audit*.py` (methodology reference)
67
+ - Cache population: `fill_gaps_*.py`
68
+
69
+ ---
70
+
71
+ ## GitHub Issues
72
+
73
+ | Issue | Title | Status |
74
+ | ----- | ------------------------------------------- | ------ |
75
+ | #57 | Research Complete: ZERO ODD Robust Patterns | CLOSED |
76
+ | #56 | TDA Structural Break Detection | CLOSED |
77
+ | #52 | Market Regime Filter | CLOSED |
78
+ | #54 | Volatility Regime Filter | CLOSED |
79
+ | #55 | Multi-Threshold Pattern Confirmation | CLOSED |
80
+
81
+ ---
82
+
83
+ ## What NOT to Retry
84
+
85
+ These approaches have been definitively invalidated:
86
+
87
+ 1. **Any direction-based pattern** - Returns are boundary-locked
88
+ 2. **Duration-based volatility prediction** - Mechanical artifact
89
+ 3. **TDA velocity for forward RV** - No predictive power
90
+ 4. **Microstructure features for alpha** - Noise exceeds signal
91
+ 5. **Cross-threshold alignment signals** - Temporal overlap contamination
92
+
93
+ ---
94
+
95
+ ## Unexplored Directions
96
+
97
+ These remain unexplored but are **operational** (not predictive):
98
+
99
+ | Direction | Rationale | Status |
100
+ | ----------------- | ---------------------------------------------- | ---------- |
101
+ | Execution quality | Bar timing for optimal order placement | UNEXPLORED |
102
+ | Market making | Microstructure for spread/inventory management | UNEXPLORED |
103
+
104
+ **Note**: These are not "ODD robust MULTI-FACTOR patterns" as per the encouraged guidance. They are operational use cases that don't require directional prediction.
105
+
106
+ ---
107
+
108
+ ## Technical Stack
109
+
110
+ - **Python**: 3.13 (REQUIRED, never downgrade)
111
+ - **Package manager**: UV
112
+ - **Data processing**: Polars + Arrow (not Pandas)
113
+ - **Database**: ClickHouse (bigblack via SSH)
114
+ - **TDA**: ripser, persim
115
+ - **Regime detection**: river (ADWIN)
116
+
117
+ ---
118
+
119
+ ## Session Handoff Notes
120
+
121
+ If continuing pattern research:
122
+
123
+ 1. **DO NOT** retry invalidated approaches
124
+ 2. The methodology is sound - the finding is genuinely negative
125
+ 3. 10 approaches exhausted = research is complete
126
+ 4. Focus on operational use cases if any research continues
127
+
128
+ If working on other features:
129
+
130
+ 1. Range bar generation is production-ready
131
+ 2. Microstructure features work correctly
132
+ 3. ClickHouse caching is fully operational
133
+
134
+ ---
135
+
136
+ ## References
137
+
138
+ - Root hub: [CLAUDE.md](/CLAUDE.md)
139
+ - Research index: [docs/research/INDEX.md](/docs/research/INDEX.md)
140
+ - Audit methodology: [docs/research/adversarial-audit-methodology.md](/docs/research/adversarial-audit-methodology.md)