rangebar 11.5.0__tar.gz → 11.6.1__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.5.0 → rangebar-11.6.1}/.mise.toml +5 -6
  2. {rangebar-11.5.0 → rangebar-11.6.1}/CHANGELOG.md +17 -0
  3. {rangebar-11.5.0 → rangebar-11.6.1}/Cargo.lock +9 -9
  4. {rangebar-11.5.0 → rangebar-11.6.1}/Cargo.toml +2 -2
  5. {rangebar-11.5.0 → rangebar-11.6.1}/PKG-INFO +1 -1
  6. {rangebar-11.5.0 → rangebar-11.6.1}/RESUME.md +48 -50
  7. {rangebar-11.5.0 → rangebar-11.6.1}/crates/CLAUDE.md +43 -0
  8. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/arrow_export.rs +17 -0
  9. rangebar-11.6.1/crates/rangebar-core/src/interbar.rs +1098 -0
  10. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/lib.rs +2 -0
  11. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/processor.rs +122 -0
  12. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/test_utils/mod.rs +17 -0
  13. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/types.rs +119 -0
  14. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/stats.rs +17 -0
  15. rangebar-11.6.1/docs/plans/issue-59-inter-bar-features.md +1633 -0
  16. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/__init__.py +2 -0
  17. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/__init__.pyi +47 -0
  18. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/schema.sql +49 -0
  19. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/constants.py +33 -0
  20. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/helpers.py +16 -1
  21. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/range_bars.py +10 -0
  22. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/processors/core.py +13 -1
  23. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/resource_guard.py +80 -6
  24. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/publish-to-pypi.sh +37 -30
  25. {rangebar-11.5.0 → rangebar-11.6.1}/src/lib.rs +82 -10
  26. {rangebar-11.5.0 → rangebar-11.6.1}/.gitignore +0 -0
  27. {rangebar-11.5.0 → rangebar-11.6.1}/.mcp.json +0 -0
  28. {rangebar-11.5.0 → rangebar-11.6.1}/.pre-commit-config.yaml +0 -0
  29. {rangebar-11.5.0 → rangebar-11.6.1}/.releaserc.yml +0 -0
  30. {rangebar-11.5.0 → rangebar-11.6.1}/CLAUDE.md +0 -0
  31. {rangebar-11.5.0 → rangebar-11.6.1}/LICENSE +0 -0
  32. {rangebar-11.5.0 → rangebar-11.6.1}/README.md +0 -0
  33. {rangebar-11.5.0 → rangebar-11.6.1}/STATISTICAL_VALIDITY_AUDIT.md +0 -0
  34. {rangebar-11.5.0 → rangebar-11.6.1}/benches/rangebar_bench.rs +0 -0
  35. {rangebar-11.5.0 → rangebar-11.6.1}/build.rs +0 -0
  36. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/CHANGELOG.md +0 -0
  37. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/Cargo.toml +0 -0
  38. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/README.md +0 -0
  39. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/checkpoint.rs +0 -0
  40. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/fixed_point.rs +0 -0
  41. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/test_data_loader.rs +0 -0
  42. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/test_utils/generators.rs +0 -0
  43. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/timestamp.rs +0 -0
  44. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/tests/cross_boundary_validation.rs +0 -0
  45. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/tests/cross_date_real_data_validation.rs +0 -0
  46. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/tests/cross_year_boundary_test.rs +0 -0
  47. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/tests/incomplete_bar_continuation_proof.rs +0 -0
  48. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/CHANGELOG.md +0 -0
  49. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/Cargo.toml +0 -0
  50. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/README.md +0 -0
  51. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/checksum.rs +0 -0
  52. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/historical.rs +0 -0
  53. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/mod.rs +0 -0
  54. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/symbols.rs +0 -0
  55. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/websocket.rs +0 -0
  56. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/builder.rs +0 -0
  57. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/client.rs +0 -0
  58. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/conversion.rs +0 -0
  59. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/mod.rs +0 -0
  60. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/types.rs +0 -0
  61. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/lib.rs +0 -0
  62. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/CHANGELOG.md +0 -0
  63. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/Cargo.toml +0 -0
  64. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/README.md +0 -0
  65. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/indicators.rs +0 -0
  66. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/lib.rs +0 -0
  67. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/processor.rs +0 -0
  68. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/replay_buffer.rs +0 -0
  69. {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/universal.rs +0 -0
  70. {rangebar-11.5.0 → rangebar-11.6.1}/deny.toml +0 -0
  71. {rangebar-11.5.0 → rangebar-11.6.1}/docs/ARCHITECTURE.md +0 -0
  72. {rangebar-11.5.0 → rangebar-11.6.1}/docs/CONTEXT.md +0 -0
  73. {rangebar-11.5.0 → rangebar-11.6.1}/docs/MEMORY_REMEDIATION_PLAN.md +0 -0
  74. {rangebar-11.5.0 → rangebar-11.6.1}/docs/adr/2026-01-31-realtime-streaming-api.md +0 -0
  75. {rangebar-11.5.0 → rangebar-11.6.1}/docs/analysis/2025-10-10-flash-crash.md +0 -0
  76. {rangebar-11.5.0 → rangebar-11.6.1}/docs/api.md +0 -0
  77. {rangebar-11.5.0 → rangebar-11.6.1}/docs/development/PERFORMANCE.md +0 -0
  78. {rangebar-11.5.0 → rangebar-11.6.1}/docs/development/RELEASE.md +0 -0
  79. {rangebar-11.5.0 → rangebar-11.6.1}/docs/migration-v8.md +0 -0
  80. {rangebar-11.5.0 → rangebar-11.6.1}/docs/rangebar_core_api.md +0 -0
  81. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/2026-02-02-intrabar-microstructure-claude-opus.md +0 -0
  82. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/2026-02-02-intrabar-microstructure-gemini-3-pro.md +0 -0
  83. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/INDEX.md +0 -0
  84. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/adversarial-audit-methodology.md +0 -0
  85. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/external/time-to-convergence-stationarity-gap.md +0 -0
  86. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/labeling-for-ml.md +0 -0
  87. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/market-regime-patterns.md +0 -0
  88. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/multi-threshold-patterns.md +0 -0
  89. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/multifactor-patterns.md +0 -0
  90. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/pattern-research-summary.md +0 -0
  91. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/price-action-patterns.md +0 -0
  92. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/tda-parameter-sensitivity-audit.md +0 -0
  93. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/tda-regime-patterns.md +0 -0
  94. {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/volatility-regime-patterns.md +0 -0
  95. {rangebar-11.5.0 → rangebar-11.6.1}/examples/README.md +0 -0
  96. {rangebar-11.5.0 → rangebar-11.6.1}/examples/backtesting_integration.py +0 -0
  97. {rangebar-11.5.0 → rangebar-11.6.1}/examples/basic_usage.py +0 -0
  98. {rangebar-11.5.0 → rangebar-11.6.1}/examples/binance_csv_example.py +0 -0
  99. {rangebar-11.5.0 → rangebar-11.6.1}/examples/get_range_bars_example.py +0 -0
  100. {rangebar-11.5.0 → rangebar-11.6.1}/examples/validate_output.py +0 -0
  101. {rangebar-11.5.0 → rangebar-11.6.1}/examples/with_clickhouse_cache.py +0 -0
  102. {rangebar-11.5.0 → rangebar-11.6.1}/package-lock.json +0 -0
  103. {rangebar-11.5.0 → rangebar-11.6.1}/package.json +0 -0
  104. {rangebar-11.5.0 → rangebar-11.6.1}/pyproject.toml +0 -0
  105. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/CLAUDE.md +0 -0
  106. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/checkpoint.py +0 -0
  107. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/cli.py +0 -0
  108. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/CLAUDE.md +0 -0
  109. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/__init__.py +0 -0
  110. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/bulk_operations.py +0 -0
  111. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/cache.py +0 -0
  112. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/client.py +0 -0
  113. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/config.py +0 -0
  114. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/mixin.py +0 -0
  115. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/preflight.py +0 -0
  116. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/query_operations.py +0 -0
  117. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/tunnel.py +0 -0
  118. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/conversion.py +0 -0
  119. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/exceptions.py +0 -0
  120. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/exness.py +0 -0
  121. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/hooks.py +0 -0
  122. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/logging.py +0 -0
  123. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/notify/__init__.py +0 -0
  124. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/notify/pushover.py +0 -0
  125. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/notify/telegram.py +0 -0
  126. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/__init__.py +0 -0
  127. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/count_bounded.py +0 -0
  128. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/models.py +0 -0
  129. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/precompute.py +0 -0
  130. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/tick_fetcher.py +0 -0
  131. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/ouroboros.py +0 -0
  132. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/processors/__init__.py +0 -0
  133. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/processors/api.py +0 -0
  134. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/storage/__init__.py +0 -0
  135. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/storage/checksum_registry.py +0 -0
  136. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/storage/parquet.py +0 -0
  137. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/streaming.py +0 -0
  138. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/__init__.py +0 -0
  139. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/cache_staleness.py +0 -0
  140. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/continuity.py +0 -0
  141. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/gap_classification.py +0 -0
  142. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/post_storage.py +0 -0
  143. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/tier1.py +0 -0
  144. {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/tier2.py +0 -0
  145. {rangebar-11.5.0 → rangebar-11.6.1}/rust-toolchain.toml +0 -0
  146. {rangebar-11.5.0 → rangebar-11.6.1}/rustfmt.toml +0 -0
  147. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/adwin_regime_detection_polars.py +0 -0
  148. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/analyze_flash_crash.py +0 -0
  149. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/bootstrap_permutation_validation_polars.py +0 -0
  150. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/build-release.sh +0 -0
  151. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cache_clear.py +0 -0
  152. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cache_status.py +0 -0
  153. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/check-release-config.sh +0 -0
  154. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/coarse_to_fine_cascade.py +0 -0
  155. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/combined_pattern_audit_polars.py +0 -0
  156. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/combined_regime_analysis_polars.py +0 -0
  157. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/combined_rv_alignment_analysis_polars.py +0 -0
  158. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cross_asset_correlation_polars.py +0 -0
  159. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cross_regime_correlation_polars.py +0 -0
  160. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cross_threshold_alignment.py +0 -0
  161. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/dependency_monitor.sh +0 -0
  162. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/direction_patterns_reaudit.py +0 -0
  163. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/download_exness_eurusd.py +0 -0
  164. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/download_exness_forex.py +0 -0
  165. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/duration_autocorrelation.py +0 -0
  166. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/duration_autocorrelation_audit.py +0 -0
  167. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/duration_volatility_prediction.py +0 -0
  168. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fdr_corrected_patterns.py +0 -0
  169. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fill_all_symbols.py +0 -0
  170. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fill_gaps_2025_2026.py +0 -0
  171. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fill_gaps_littleblack.py +0 -0
  172. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fill_gaps_retry.py +0 -0
  173. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/historical_formation_patterns_polars.py +0 -0
  174. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/historical_formation_regime_polars.py +0 -0
  175. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/hurst_adjusted_kelly_polars.py +0 -0
  176. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/hurst_adjusted_psr_analysis_polars.py +0 -0
  177. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/hurst_exponent_analysis_polars.py +0 -0
  178. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/hurst_multi_estimator_audit.py +0 -0
  179. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/microstructure_clickhouse.py +0 -0
  180. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/microstructure_patterns.py +0 -0
  181. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/microstructure_simple.py +0 -0
  182. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/monitor_population.py +0 -0
  183. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multi_threshold_pattern_analysis_polars.py +0 -0
  184. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multibar_continuation.py +0 -0
  185. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multibar_forward_returns_polars.py +0 -0
  186. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multifactor_multigranularity_patterns.py +0 -0
  187. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multifactor_patterns.py +0 -0
  188. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multifactor_patterns_polars.py +0 -0
  189. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multithreshold_combinations_polars.py +0 -0
  190. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multithreshold_regime_combinations_polars.py +0 -0
  191. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/oos_validation_polars.py +0 -0
  192. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/parameter_sensitivity_polars.py +0 -0
  193. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/pattern_correlation_analysis_polars.py +0 -0
  194. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/pattern_return_profiles_polars.py +0 -0
  195. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/pattern_return_stats.py +0 -0
  196. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/populate_1000dbps.py +0 -0
  197. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/populate_250dbps.py +0 -0
  198. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/populate_250dbps_extended.py +0 -0
  199. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/populate_safe.py +0 -0
  200. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/position_sizing_analysis_polars.py +0 -0
  201. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/process_exness_eurusd_to_cache.py +0 -0
  202. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/profiling_tools.sh +0 -0
  203. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/psr_mintrl_analysis_polars.py +0 -0
  204. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/publish-wheels.sh +0 -0
  205. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regenerate_cache.py +0 -0
  206. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regime_analysis.py +0 -0
  207. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regime_analysis_50dbps_polars.py +0 -0
  208. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regime_analysis_polars.py +0 -0
  209. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regime_transition_analysis_polars.py +0 -0
  210. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/run_large_scale_benchmark.sh +0 -0
  211. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/run_length_momentum_analysis.py +0 -0
  212. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/run_length_momentum_multi_symbol.py +0 -0
  213. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/run_length_momentum_wfo.py +0 -0
  214. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/rv_return_profile_analysis_polars.py +0 -0
  215. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/semantic-release.sh +0 -0
  216. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_break_event_alignment_polars.py +0 -0
  217. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_conditioned_patterns.py +0 -0
  218. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_cupy_accelerated.py +0 -0
  219. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_gpu_analysis.py +0 -0
  220. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_hurst_by_regime_polars.py +0 -0
  221. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_parameter_sweep_audit.py +0 -0
  222. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_regime_hurst_analysis_polars.py +0 -0
  223. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_regime_pattern_analysis_polars.py +0 -0
  224. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_ripser_plusplus.py +0 -0
  225. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_rolling_threshold.py +0 -0
  226. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_solusdt_250_audit.py +0 -0
  227. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_solusdt_250_littleblack.py +0 -0
  228. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_structural_break_analysis_polars.py +0 -0
  229. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_volatility_forecast.py +0 -0
  230. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_wfo_3way.py +0 -0
  231. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_wfo_abstain.py +0 -0
  232. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_wfo_audit.py +0 -0
  233. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/temporal_safe_patterns_polars.py +0 -0
  234. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_bar_alignment_analysis_polars.py +0 -0
  235. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_bar_pattern_analysis_polars.py +0 -0
  236. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_bar_pattern_audit_polars.py +0 -0
  237. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_factor_hurst_analysis_polars.py +0 -0
  238. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_factor_pattern_analysis_polars.py +0 -0
  239. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/transaction_cost_analysis_polars.py +0 -0
  240. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/trend_filter_analysis.py +0 -0
  241. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/upload_eurusd_to_clickhouse.py +0 -0
  242. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/validate_clickhouse.py +0 -0
  243. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/validate_memory_efficiency.py +0 -0
  244. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/validate_microstructure_features.py +0 -0
  245. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/validate_n_range_bars.py +0 -0
  246. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/volatility_regime_analysis_polars.py +0 -0
  247. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/volatility_regime_audit_polars.py +0 -0
  248. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/volume_conditioned_patterns.py +0 -0
  249. {rangebar-11.5.0 → rangebar-11.6.1}/scripts/volume_conditioned_patterns_polars.py +0 -0
  250. {rangebar-11.5.0 → rangebar-11.6.1}/test_data/BTCUSDT/BTCUSDT_aggTrades_20250901.csv +0 -0
  251. {rangebar-11.5.0 → rangebar-11.6.1}/test_data/ETHUSDT/ETHUSDT_aggTrades_20250901.csv +0 -0
  252. {rangebar-11.5.0 → rangebar-11.6.1}/test_data/README.md +0 -0
  253. {rangebar-11.5.0 → rangebar-11.6.1}/tests/conftest.py +0 -0
  254. {rangebar-11.5.0 → rangebar-11.6.1}/tests/fixtures/.gitignore +0 -0
  255. {rangebar-11.5.0 → rangebar-11.6.1}/tests/fixtures/BTCUSDT-aggTrades-2024-01-01.zip +0 -0
  256. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_cache_schema_evolution.py +0 -0
  257. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_clickhouse.py +0 -0
  258. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_clickhouse_integration.py +0 -0
  259. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_e2e_optimized.py +0 -0
  260. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_edge_cases.py +0 -0
  261. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_examples.py +0 -0
  262. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_get_n_range_bars.py +0 -0
  263. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_get_range_bars_e2e.py +0 -0
  264. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_issue_5_reproduction.py +0 -0
  265. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_issues_7_8.py +0 -0
  266. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_microstructure_features.py +0 -0
  267. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_ouroboros.py +0 -0
  268. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_polars_only_downstream.py +0 -0
  269. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_preflight.py +0 -0
  270. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_python_api.py +0 -0
  271. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_real_data.py +0 -0
  272. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_rust_bindings.py +0 -0
  273. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_storage.py +0 -0
  274. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_streaming.py +0 -0
  275. {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_validation_presets.py +0 -0
  276. {rangebar-11.5.0 → rangebar-11.6.1}/uv.lock +0 -0
@@ -17,12 +17,11 @@ GH_TOKEN = "{{ read_file(path=env.HOME ~ '/.claude/.secrets/gh-token-terrylica')
17
17
  GITHUB_TOKEN = "{{ read_file(path=env.HOME ~ '/.claude/.secrets/gh-token-terrylica') | trim }}"
18
18
 
19
19
  # =============================================================================
20
- # Doppler Configuration (SSoT for secrets)
20
+ # 1Password Configuration (SSoT for secrets)
21
21
  # =============================================================================
22
- # PyPI: doppler secrets get PYPI_TOKEN --project claude-config --config prd
23
- # GitHub PAT: doppler secrets get GH_TOKEN_TERRYLICA --project main --config dev
24
- DOPPLER_PYPI_PROJECT = "claude-config"
25
- DOPPLER_PYPI_CONFIG = "prd"
22
+ # PyPI: op item get djevteztvbcqgcm3yl4njkawjq --fields credential --reveal
23
+ # GitHub PAT: stored in gh-token-terrylica file
24
+ OP_PYPI_ITEM = "djevteztvbcqgcm3yl4njkawjq"
26
25
 
27
26
  # =============================================================================
28
27
  # ClickHouse Cache Configuration (SSoT for cache hosts)
@@ -435,7 +434,7 @@ description = "Preview what semantic-release would do (no changes)"
435
434
  run = "bun install --silent 2>/dev/null && GH_CONFIG_DIR=$HOME/.config/gh/profiles/terrylica GITHUB_TOKEN=$(gh auth token) bun run semantic-release --dry-run --no-ci"
436
435
 
437
436
  [tasks."release:pypi"]
438
- description = "Publish to PyPI using Doppler credentials (local-only, ADR-0027)"
437
+ description = "Publish to PyPI using 1Password credentials (local-only, ADR-0027)"
439
438
  depends = ["release:build-all"]
440
439
  run = "./scripts/publish-to-pypi.sh"
441
440
 
@@ -1,3 +1,20 @@
1
+ ## [11.6.1](https://github.com/terrylica/rangebar-py/compare/v11.6.0...v11.6.1) (2026-02-02)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **ci:** correct rust-toolchain action name ([fa252ce](https://github.com/terrylica/rangebar-py/commit/fa252ceeb1b2f3d4216fceb3e0eaf3fbdc4bed6a))
7
+ * **ci:** simplify workflow to match working configuration ([5128fd6](https://github.com/terrylica/rangebar-py/commit/5128fd6a5ade367dbde371c186de0512095c0116))
8
+ * **resource:** make auto_memory_guard() multiprocessing-safe (Issue [#61](https://github.com/terrylica/rangebar-py/issues/61)) ([b55057a](https://github.com/terrylica/rangebar-py/commit/b55057afb3a10f530ec8d1ac1520d81169ad5fcc))
9
+
10
+ # [11.6.0](https://github.com/terrylica/rangebar-py/compare/v11.5.0...v11.6.0) (2026-02-02)
11
+
12
+
13
+ ### Features
14
+
15
+ * **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))
16
+ * **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))
17
+
1
18
  # [11.5.0](https://github.com/terrylica/rangebar-py/compare/v11.4.0...v11.5.0) (2026-02-02)
2
19
 
3
20
 
@@ -3430,7 +3430,7 @@ dependencies = [
3430
3430
 
3431
3431
  [[package]]
3432
3432
  name = "rangebar"
3433
- version = "11.5.0"
3433
+ version = "11.6.1"
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.5.0"
3455
+ version = "11.6.1"
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.5.0"
3467
+ version = "11.6.1"
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.5.0"
3492
+ version = "11.6.1"
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.5.0"
3504
+ version = "11.6.1"
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.5.0"
3521
+ version = "11.6.1"
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.5.0"
3531
+ version = "11.6.1"
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.5.0"
3551
+ version = "11.6.1"
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.5.0"
3570
+ version = "11.6.1"
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.5.0"
13
+ version = "11.6.1"
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.5.0"
100
+ version = "11.6.1"
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.5.0
3
+ Version: 11.6.1
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Financial and Insurance Industry
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -1,13 +1,44 @@
1
1
  # RESUME.md - Session Context
2
2
 
3
- **Last Updated**: 2026-02-01
3
+ **Last Updated**: 2026-02-02
4
4
  **Purpose**: Quick context for continuing work in future sessions
5
5
 
6
6
  ---
7
7
 
8
- ## Current State Summary
8
+ ## Current Work: Issue #59 Inter-Bar Features
9
9
 
10
- ### Pattern Research: COMPLETE
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
11
42
 
12
43
  **Finding**: ZERO ODD robust predictive patterns exist in range bar data.
13
44
 
@@ -51,32 +82,12 @@ After exhaustive testing across **10 research approaches**, all were invalidated
51
82
 
52
83
  ### Documentation
53
84
 
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 |
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 |
80
91
 
81
92
  ---
82
93
 
@@ -92,19 +103,6 @@ These approaches have been definitively invalidated:
92
103
 
93
104
  ---
94
105
 
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
106
  ## Technical Stack
109
107
 
110
108
  - **Python**: 3.13 (REQUIRED, never downgrade)
@@ -118,23 +116,23 @@ These remain unexplored but are **operational** (not predictive):
118
116
 
119
117
  ## Session Handoff Notes
120
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
+
121
125
  If continuing pattern research:
122
126
 
123
127
  1. **DO NOT** retry invalidated approaches
124
128
  2. The methodology is sound - the finding is genuinely negative
125
129
  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
130
 
134
131
  ---
135
132
 
136
133
  ## References
137
134
 
138
135
  - Root hub: [CLAUDE.md](/CLAUDE.md)
136
+ - Crates: [crates/CLAUDE.md](/crates/CLAUDE.md)
139
137
  - 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)
138
+ - Inter-bar plan: [docs/plans/issue-59-inter-bar-features.md](/docs/plans/issue-59-inter-bar-features.md)
@@ -68,6 +68,49 @@ rangebar-cli rangebar-batch rangebar-streaming
68
68
 
69
69
  ---
70
70
 
71
+ ## Inter-Bar Features (Issue #59)
72
+
73
+ **Location**: `rangebar-core/src/interbar.rs`
74
+
75
+ 16 features computed from a lookback window of trades BEFORE each bar opens. All fields are `Option<T>` (None when lookback disabled or insufficient data).
76
+
77
+ ### Tier 1: Core (7 features)
78
+
79
+ | Feature | Formula | Range |
80
+ | -------------------------- | -------------------------------- | ---------- |
81
+ | `lookback_trade_count` | COUNT(trades) | [0, ∞) |
82
+ | `lookback_ofi` | (buy_vol - sell_vol) / total | [-1, 1] |
83
+ | `lookback_duration_us` | last_ts - first_ts | [0, ∞) |
84
+ | `lookback_intensity` | trade_count / duration_sec | [0, ∞) |
85
+ | `lookback_vwap_raw` | Σ(price×vol) / Σ(vol) | FixedPoint |
86
+ | `lookback_vwap_position` | (vwap - low) / (high - low) | [0, 1] |
87
+ | `lookback_count_imbalance` | (buy_count - sell_count) / total | [-1, 1] |
88
+
89
+ ### Tier 2: Statistical (5 features)
90
+
91
+ | Feature | Formula | Range |
92
+ | ---------------------- | -------------------------- | ------- |
93
+ | `lookback_kyle_lambda` | (Δp/p) / (imbalance/vol) | (-∞, ∞) |
94
+ | `lookback_burstiness` | (σ*τ - μ*τ) / (σ*τ + μ*τ) | [-1, 1] |
95
+ | `lookback_volume_skew` | E[(V-μ)³] / σ³ | (-∞, ∞) |
96
+ | `lookback_volume_kurt` | E[(V-μ)⁴] / σ⁴ - 3 | [-2, ∞) |
97
+ | `lookback_price_range` | (high - low) / first_price | [0, ∞) |
98
+
99
+ ### Tier 3: Advanced (4 features)
100
+
101
+ | Feature | Formula | Range | Min Trades |
102
+ | ------------------------------ | ---------------------------- | ------ | ---------- |
103
+ | `lookback_kaufman_er` | \|net\| / Σ\|changes\| | [0, 1] | 2 |
104
+ | `lookback_garman_klass_vol` | OHLC volatility | [0, ∞) | 1 |
105
+ | `lookback_hurst` | DFA estimator (soft-clamped) | [0, 1] | 64 |
106
+ | `lookback_permutation_entropy` | Bandt-Pompe m=3 | [0, 1] | 60 |
107
+
108
+ **Academic backing**: Kyle (1985), Goh-Barabási (2008), Garman-Klass (1980), Bandt-Pompe (2002), Peng (1994).
109
+
110
+ **Plan**: [/docs/plans/issue-59-inter-bar-features.md](/docs/plans/issue-59-inter-bar-features.md)
111
+
112
+ ---
113
+
71
114
  ## Crate Details
72
115
 
73
116
  ### Layer 0: Foundation
@@ -270,6 +270,23 @@ mod tests {
270
270
  aggression_ratio: 1.5,
271
271
  aggregation_density_f64: 10.0,
272
272
  turnover_imbalance: 0.142857,
273
+ // Inter-bar features (Issue #59) - test defaults
274
+ lookback_trade_count: None,
275
+ lookback_ofi: None,
276
+ lookback_duration_us: None,
277
+ lookback_intensity: None,
278
+ lookback_vwap_raw: None,
279
+ lookback_vwap_position: None,
280
+ lookback_count_imbalance: None,
281
+ lookback_kyle_lambda: None,
282
+ lookback_burstiness: None,
283
+ lookback_volume_skew: None,
284
+ lookback_volume_kurt: None,
285
+ lookback_price_range: None,
286
+ lookback_kaufman_er: None,
287
+ lookback_garman_klass_vol: None,
288
+ lookback_hurst: None,
289
+ lookback_permutation_entropy: None,
273
290
  }
274
291
  }
275
292