rangebar 11.4.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.
- {rangebar-11.4.0 → rangebar-11.5.0}/.mise.toml +161 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/CHANGELOG.md +67 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/CLAUDE.md +2 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/Cargo.lock +9 -9
- {rangebar-11.4.0 → rangebar-11.5.0}/Cargo.toml +2 -2
- {rangebar-11.4.0 → rangebar-11.5.0}/PKG-INFO +1 -1
- rangebar-11.5.0/RESUME.md +140 -0
- rangebar-11.5.0/STATISTICAL_VALIDITY_AUDIT.md +591 -0
- rangebar-11.5.0/docs/research/2026-02-02-intrabar-microstructure-claude-opus.md +174 -0
- rangebar-11.5.0/docs/research/2026-02-02-intrabar-microstructure-gemini-3-pro.md +365 -0
- rangebar-11.5.0/docs/research/INDEX.md +148 -0
- rangebar-11.5.0/docs/research/adversarial-audit-methodology.md +303 -0
- rangebar-11.5.0/docs/research/external/time-to-convergence-stationarity-gap.md +417 -0
- rangebar-11.5.0/docs/research/market-regime-patterns.md +1172 -0
- rangebar-11.5.0/docs/research/multi-threshold-patterns.md +157 -0
- rangebar-11.5.0/docs/research/multifactor-patterns.md +163 -0
- rangebar-11.5.0/docs/research/pattern-research-summary.md +1002 -0
- rangebar-11.5.0/docs/research/tda-parameter-sensitivity-audit.md +530 -0
- rangebar-11.5.0/docs/research/tda-regime-patterns.md +391 -0
- rangebar-11.5.0/docs/research/volatility-regime-patterns.md +421 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/pyproject.toml +12 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/__init__.py +10 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/CLAUDE.md +8 -5
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/resource_guard.py +162 -11
- rangebar-11.5.0/scripts/adwin_regime_detection_polars.py +359 -0
- rangebar-11.5.0/scripts/bootstrap_permutation_validation_polars.py +514 -0
- rangebar-11.5.0/scripts/coarse_to_fine_cascade.py +312 -0
- rangebar-11.5.0/scripts/combined_pattern_audit_polars.py +625 -0
- rangebar-11.5.0/scripts/combined_regime_analysis_polars.py +573 -0
- rangebar-11.5.0/scripts/combined_rv_alignment_analysis_polars.py +521 -0
- rangebar-11.5.0/scripts/cross_asset_correlation_polars.py +508 -0
- rangebar-11.5.0/scripts/cross_regime_correlation_polars.py +553 -0
- rangebar-11.5.0/scripts/cross_threshold_alignment.py +321 -0
- rangebar-11.5.0/scripts/direction_patterns_reaudit.py +259 -0
- rangebar-11.5.0/scripts/download_exness_eurusd.py +107 -0
- rangebar-11.5.0/scripts/download_exness_forex.py +133 -0
- rangebar-11.5.0/scripts/duration_autocorrelation.py +304 -0
- rangebar-11.5.0/scripts/duration_autocorrelation_audit.py +363 -0
- rangebar-11.5.0/scripts/duration_volatility_prediction.py +333 -0
- rangebar-11.5.0/scripts/fdr_corrected_patterns.py +448 -0
- rangebar-11.5.0/scripts/fill_all_symbols.py +186 -0
- rangebar-11.5.0/scripts/fill_gaps_2025_2026.py +122 -0
- rangebar-11.5.0/scripts/fill_gaps_littleblack.py +147 -0
- rangebar-11.5.0/scripts/fill_gaps_retry.py +95 -0
- rangebar-11.5.0/scripts/historical_formation_patterns_polars.py +407 -0
- rangebar-11.5.0/scripts/historical_formation_regime_polars.py +509 -0
- rangebar-11.5.0/scripts/hurst_adjusted_kelly_polars.py +391 -0
- rangebar-11.5.0/scripts/hurst_adjusted_psr_analysis_polars.py +348 -0
- rangebar-11.5.0/scripts/hurst_exponent_analysis_polars.py +446 -0
- rangebar-11.5.0/scripts/hurst_multi_estimator_audit.py +278 -0
- rangebar-11.5.0/scripts/microstructure_clickhouse.py +257 -0
- rangebar-11.5.0/scripts/microstructure_patterns.py +392 -0
- rangebar-11.5.0/scripts/microstructure_simple.py +265 -0
- rangebar-11.5.0/scripts/monitor_population.py +227 -0
- rangebar-11.5.0/scripts/multi_threshold_pattern_analysis_polars.py +556 -0
- rangebar-11.5.0/scripts/multibar_continuation.py +409 -0
- rangebar-11.5.0/scripts/multibar_forward_returns_polars.py +457 -0
- rangebar-11.5.0/scripts/multifactor_multigranularity_patterns.py +460 -0
- rangebar-11.5.0/scripts/multifactor_patterns.py +513 -0
- rangebar-11.5.0/scripts/multifactor_patterns_polars.py +520 -0
- rangebar-11.5.0/scripts/multithreshold_combinations_polars.py +485 -0
- rangebar-11.5.0/scripts/multithreshold_regime_combinations_polars.py +501 -0
- rangebar-11.5.0/scripts/oos_validation_polars.py +459 -0
- rangebar-11.5.0/scripts/parameter_sensitivity_polars.py +434 -0
- rangebar-11.5.0/scripts/pattern_correlation_analysis_polars.py +505 -0
- rangebar-11.5.0/scripts/pattern_return_profiles_polars.py +410 -0
- rangebar-11.5.0/scripts/pattern_return_stats.py +427 -0
- rangebar-11.5.0/scripts/populate_1000dbps.py +80 -0
- rangebar-11.5.0/scripts/populate_250dbps.py +77 -0
- rangebar-11.5.0/scripts/populate_250dbps_extended.py +113 -0
- rangebar-11.5.0/scripts/populate_safe.py +174 -0
- rangebar-11.5.0/scripts/position_sizing_analysis_polars.py +455 -0
- rangebar-11.5.0/scripts/process_exness_eurusd_to_cache.py +125 -0
- rangebar-11.5.0/scripts/psr_mintrl_analysis_polars.py +578 -0
- rangebar-11.5.0/scripts/regime_analysis.py +754 -0
- rangebar-11.5.0/scripts/regime_analysis_50dbps_polars.py +490 -0
- rangebar-11.5.0/scripts/regime_analysis_polars.py +577 -0
- rangebar-11.5.0/scripts/regime_transition_analysis_polars.py +552 -0
- rangebar-11.5.0/scripts/run_length_momentum_analysis.py +263 -0
- rangebar-11.5.0/scripts/run_length_momentum_multi_symbol.py +210 -0
- rangebar-11.5.0/scripts/run_length_momentum_wfo.py +249 -0
- rangebar-11.5.0/scripts/rv_return_profile_analysis_polars.py +514 -0
- rangebar-11.5.0/scripts/tda_break_event_alignment_polars.py +345 -0
- rangebar-11.5.0/scripts/tda_conditioned_patterns.py +435 -0
- rangebar-11.5.0/scripts/tda_cupy_accelerated.py +352 -0
- rangebar-11.5.0/scripts/tda_gpu_analysis.py +310 -0
- rangebar-11.5.0/scripts/tda_hurst_by_regime_polars.py +475 -0
- rangebar-11.5.0/scripts/tda_parameter_sweep_audit.py +295 -0
- rangebar-11.5.0/scripts/tda_regime_hurst_analysis_polars.py +565 -0
- rangebar-11.5.0/scripts/tda_regime_pattern_analysis_polars.py +507 -0
- rangebar-11.5.0/scripts/tda_ripser_plusplus.py +268 -0
- rangebar-11.5.0/scripts/tda_rolling_threshold.py +525 -0
- rangebar-11.5.0/scripts/tda_solusdt_250_audit.py +260 -0
- rangebar-11.5.0/scripts/tda_solusdt_250_littleblack.py +275 -0
- rangebar-11.5.0/scripts/tda_structural_break_analysis_polars.py +553 -0
- rangebar-11.5.0/scripts/tda_volatility_forecast.py +423 -0
- rangebar-11.5.0/scripts/tda_wfo_3way.py +835 -0
- rangebar-11.5.0/scripts/tda_wfo_abstain.py +654 -0
- rangebar-11.5.0/scripts/tda_wfo_audit.py +327 -0
- rangebar-11.5.0/scripts/temporal_safe_patterns_polars.py +388 -0
- rangebar-11.5.0/scripts/three_bar_alignment_analysis_polars.py +481 -0
- rangebar-11.5.0/scripts/three_bar_pattern_analysis_polars.py +442 -0
- rangebar-11.5.0/scripts/three_bar_pattern_audit_polars.py +618 -0
- rangebar-11.5.0/scripts/three_factor_hurst_analysis_polars.py +456 -0
- rangebar-11.5.0/scripts/three_factor_pattern_analysis_polars.py +534 -0
- rangebar-11.5.0/scripts/transaction_cost_analysis_polars.py +493 -0
- rangebar-11.5.0/scripts/trend_filter_analysis.py +411 -0
- rangebar-11.5.0/scripts/upload_eurusd_to_clickhouse.py +132 -0
- rangebar-11.5.0/scripts/volatility_regime_analysis_polars.py +502 -0
- rangebar-11.5.0/scripts/volatility_regime_audit_polars.py +590 -0
- rangebar-11.5.0/scripts/volume_conditioned_patterns.py +472 -0
- rangebar-11.5.0/scripts/volume_conditioned_patterns_polars.py +477 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/uv.lock +440 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/.gitignore +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/.mcp.json +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/.pre-commit-config.yaml +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/.releaserc.yml +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/LICENSE +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/README.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/benches/rangebar_bench.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/build.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/CLAUDE.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/CHANGELOG.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/Cargo.toml +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/README.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/arrow_export.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/checkpoint.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/fixed_point.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/lib.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/processor.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/test_data_loader.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/test_utils/generators.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/test_utils/mod.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/timestamp.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/src/types.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/tests/cross_boundary_validation.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/tests/cross_date_real_data_validation.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/tests/cross_year_boundary_test.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-core/tests/incomplete_bar_continuation_proof.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/CHANGELOG.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/Cargo.toml +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/README.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/checksum.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/historical.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/mod.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/symbols.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/binance/websocket.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/builder.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/client.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/conversion.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/mod.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/exness/types.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-providers/src/lib.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-streaming/CHANGELOG.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-streaming/Cargo.toml +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-streaming/README.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-streaming/src/indicators.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-streaming/src/lib.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-streaming/src/processor.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-streaming/src/replay_buffer.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-streaming/src/stats.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/crates/rangebar-streaming/src/universal.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/deny.toml +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/ARCHITECTURE.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/CONTEXT.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/MEMORY_REMEDIATION_PLAN.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/adr/2026-01-31-realtime-streaming-api.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/analysis/2025-10-10-flash-crash.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/api.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/development/PERFORMANCE.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/development/RELEASE.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/migration-v8.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/rangebar_core_api.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/research/labeling-for-ml.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/docs/research/price-action-patterns.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/examples/README.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/examples/backtesting_integration.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/examples/basic_usage.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/examples/binance_csv_example.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/examples/get_range_bars_example.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/examples/validate_output.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/examples/with_clickhouse_cache.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/package-lock.json +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/package.json +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/CLAUDE.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/__init__.pyi +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/checkpoint.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/cli.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/__init__.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/bulk_operations.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/cache.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/client.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/config.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/mixin.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/preflight.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/query_operations.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/schema.sql +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/clickhouse/tunnel.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/constants.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/conversion.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/exceptions.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/exness.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/hooks.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/logging.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/notify/__init__.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/notify/pushover.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/notify/telegram.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/orchestration/__init__.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/orchestration/count_bounded.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/orchestration/helpers.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/orchestration/models.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/orchestration/precompute.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/orchestration/range_bars.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/orchestration/tick_fetcher.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/ouroboros.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/processors/__init__.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/processors/api.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/processors/core.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/storage/__init__.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/storage/checksum_registry.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/storage/parquet.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/streaming.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/validation/__init__.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/validation/cache_staleness.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/validation/continuity.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/validation/gap_classification.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/validation/post_storage.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/validation/tier1.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/python/rangebar/validation/tier2.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/rust-toolchain.toml +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/rustfmt.toml +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/analyze_flash_crash.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/build-release.sh +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/cache_clear.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/cache_status.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/check-release-config.sh +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/dependency_monitor.sh +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/profiling_tools.sh +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/publish-to-pypi.sh +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/publish-wheels.sh +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/regenerate_cache.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/run_large_scale_benchmark.sh +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/semantic-release.sh +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/validate_clickhouse.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/validate_memory_efficiency.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/validate_microstructure_features.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/scripts/validate_n_range_bars.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/src/lib.rs +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/test_data/BTCUSDT/BTCUSDT_aggTrades_20250901.csv +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/test_data/ETHUSDT/ETHUSDT_aggTrades_20250901.csv +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/test_data/README.md +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/conftest.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/fixtures/.gitignore +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/fixtures/BTCUSDT-aggTrades-2024-01-01.zip +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_cache_schema_evolution.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_clickhouse.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_clickhouse_integration.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_e2e_optimized.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_edge_cases.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_examples.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_get_n_range_bars.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_get_range_bars_e2e.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_issue_5_reproduction.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_issues_7_8.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_microstructure_features.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_ouroboros.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_polars_only_downstream.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_preflight.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_python_api.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_real_data.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_rust_bindings.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_storage.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_streaming.py +0 -0
- {rangebar-11.4.0 → rangebar-11.5.0}/tests/test_validation_presets.py +0 -0
|
@@ -523,3 +523,164 @@ result = send_critical_alert(
|
|
|
523
523
|
print(f"Pushover alert sent: {result}")
|
|
524
524
|
'
|
|
525
525
|
"""
|
|
526
|
+
|
|
527
|
+
# =============================================================================
|
|
528
|
+
# Research Cache Population Tasks (Issue #58)
|
|
529
|
+
# =============================================================================
|
|
530
|
+
# Sequential execution to avoid OOM on limited-memory hosts
|
|
531
|
+
# Run on littleblack: ssh littleblack "cd /home/kab/eon/rangebar-py && mise run research:populate-250"
|
|
532
|
+
|
|
533
|
+
[tasks."research:populate-symbol"]
|
|
534
|
+
description = "Populate cache for a single symbol (requires SYMBOL and THRESHOLD env vars)"
|
|
535
|
+
run = """
|
|
536
|
+
#!/usr/bin/env bash
|
|
537
|
+
set -e
|
|
538
|
+
|
|
539
|
+
# Use uv to run in the project venv
|
|
540
|
+
uv run --python 3.13 python -c '
|
|
541
|
+
import os
|
|
542
|
+
import sys
|
|
543
|
+
import time
|
|
544
|
+
from datetime import UTC, datetime, timedelta
|
|
545
|
+
|
|
546
|
+
from rangebar import get_range_bars
|
|
547
|
+
|
|
548
|
+
SYMBOL = os.environ.get("SYMBOL")
|
|
549
|
+
if not SYMBOL:
|
|
550
|
+
print("ERROR: SYMBOL env var required", flush=True)
|
|
551
|
+
sys.exit(1)
|
|
552
|
+
|
|
553
|
+
START = os.environ.get("START", "2022-01-01")
|
|
554
|
+
END = os.environ.get("END", "2025-12-31")
|
|
555
|
+
THRESHOLD = int(os.environ.get("THRESHOLD", "250"))
|
|
556
|
+
|
|
557
|
+
def date_range_months(start_str, end_str):
|
|
558
|
+
start = datetime.strptime(start_str, "%Y-%m-%d").replace(tzinfo=UTC)
|
|
559
|
+
end = datetime.strptime(end_str, "%Y-%m-%d").replace(tzinfo=UTC)
|
|
560
|
+
current = start
|
|
561
|
+
while current < end:
|
|
562
|
+
month_end = (current.replace(day=28) + timedelta(days=4)).replace(day=1) - timedelta(days=1)
|
|
563
|
+
month_end = min(month_end, end)
|
|
564
|
+
yield current.strftime("%Y-%m-%d"), month_end.strftime("%Y-%m-%d")
|
|
565
|
+
current = month_end + timedelta(days=1)
|
|
566
|
+
|
|
567
|
+
print(f"Populating {SYMBOL} @ {THRESHOLD} dbps ({START} to {END})", flush=True)
|
|
568
|
+
total_bars = 0
|
|
569
|
+
for chunk_start, chunk_end in date_range_months(START, END):
|
|
570
|
+
t0 = time.time()
|
|
571
|
+
try:
|
|
572
|
+
df = get_range_bars(SYMBOL, chunk_start, chunk_end, threshold_decimal_bps=THRESHOLD, use_cache=True, fetch_if_missing=True)
|
|
573
|
+
elapsed = time.time() - t0
|
|
574
|
+
total_bars += len(df)
|
|
575
|
+
print(f" {chunk_start}: {len(df):>6,} bars ({elapsed:>5.1f}s)", flush=True)
|
|
576
|
+
except Exception as e:
|
|
577
|
+
print(f" {chunk_start}: ERROR - {e}", flush=True)
|
|
578
|
+
print(f"DONE: {total_bars:,} total bars", flush=True)
|
|
579
|
+
'
|
|
580
|
+
"""
|
|
581
|
+
|
|
582
|
+
[tasks."research:populate-all"]
|
|
583
|
+
description = "Populate cache for all symbols at 250 then 1000 dbps (fully sequential)"
|
|
584
|
+
run = """
|
|
585
|
+
#!/usr/bin/env bash
|
|
586
|
+
set -e
|
|
587
|
+
|
|
588
|
+
echo "=========================================="
|
|
589
|
+
echo "FULL CACHE POPULATION - 250 dbps then 1000 dbps"
|
|
590
|
+
echo "=========================================="
|
|
591
|
+
echo "Started: $(date)"
|
|
592
|
+
|
|
593
|
+
# Run 250 dbps first (all symbols)
|
|
594
|
+
mise run research:populate-250
|
|
595
|
+
|
|
596
|
+
# Then run 1000 dbps (all symbols)
|
|
597
|
+
mise run research:populate-1000
|
|
598
|
+
|
|
599
|
+
echo ""
|
|
600
|
+
echo "=========================================="
|
|
601
|
+
echo "ALL POPULATION COMPLETE (250 + 1000 dbps)"
|
|
602
|
+
echo "Finished: $(date)"
|
|
603
|
+
echo "=========================================="
|
|
604
|
+
"""
|
|
605
|
+
|
|
606
|
+
[tasks."research:populate-250"]
|
|
607
|
+
description = "Populate 250 dbps cache for all symbols (sequential, OOM-safe)"
|
|
608
|
+
run = """
|
|
609
|
+
#!/usr/bin/env bash
|
|
610
|
+
set -e
|
|
611
|
+
|
|
612
|
+
echo "=== SEQUENTIAL CACHE POPULATION (250 dbps) ==="
|
|
613
|
+
echo "Running symbols one at a time to avoid OOM..."
|
|
614
|
+
echo "Started: $(date)"
|
|
615
|
+
|
|
616
|
+
SYMBOLS="BTCUSDT ETHUSDT BNBUSDT ADAUSDT AVAXUSDT DOTUSDT MATICUSDT NEARUSDT ATOMUSDT APTUSDT SUIUSDT LINKUSDT UNIUSDT AAVEUSDT DOGEUSDT SHIBUSDT PEPEUSDT FTMUSDT"
|
|
617
|
+
|
|
618
|
+
TOTAL=18
|
|
619
|
+
CURRENT=0
|
|
620
|
+
|
|
621
|
+
for SYMBOL in $SYMBOLS; do
|
|
622
|
+
CURRENT=$((CURRENT + 1))
|
|
623
|
+
echo ""
|
|
624
|
+
echo "=========================================="
|
|
625
|
+
echo "[$CURRENT/$TOTAL] $SYMBOL @ 250 dbps"
|
|
626
|
+
echo "=========================================="
|
|
627
|
+
SYMBOL=$SYMBOL THRESHOLD=250 mise run research:populate-symbol
|
|
628
|
+
echo "Completed $SYMBOL. Sleeping 10s before next..."
|
|
629
|
+
sleep 10
|
|
630
|
+
done
|
|
631
|
+
|
|
632
|
+
echo ""
|
|
633
|
+
echo "=========================================="
|
|
634
|
+
echo "ALL $TOTAL SYMBOLS @ 250 dbps COMPLETE"
|
|
635
|
+
echo "Finished: $(date)"
|
|
636
|
+
echo "=========================================="
|
|
637
|
+
"""
|
|
638
|
+
|
|
639
|
+
[tasks."research:populate-1000"]
|
|
640
|
+
description = "Populate 1000 dbps cache for all symbols (sequential, OOM-safe)"
|
|
641
|
+
run = """
|
|
642
|
+
#!/usr/bin/env bash
|
|
643
|
+
set -e
|
|
644
|
+
|
|
645
|
+
echo "=== SEQUENTIAL CACHE POPULATION (1000 dbps) ==="
|
|
646
|
+
echo "Running symbols one at a time to avoid OOM..."
|
|
647
|
+
echo "Started: $(date)"
|
|
648
|
+
|
|
649
|
+
SYMBOLS="BTCUSDT ETHUSDT BNBUSDT ADAUSDT AVAXUSDT DOTUSDT MATICUSDT NEARUSDT ATOMUSDT APTUSDT SUIUSDT LINKUSDT UNIUSDT AAVEUSDT DOGEUSDT SHIBUSDT PEPEUSDT FTMUSDT"
|
|
650
|
+
|
|
651
|
+
TOTAL=18
|
|
652
|
+
CURRENT=0
|
|
653
|
+
|
|
654
|
+
for SYMBOL in $SYMBOLS; do
|
|
655
|
+
CURRENT=$((CURRENT + 1))
|
|
656
|
+
echo ""
|
|
657
|
+
echo "=========================================="
|
|
658
|
+
echo "[$CURRENT/$TOTAL] $SYMBOL @ 1000 dbps"
|
|
659
|
+
echo "=========================================="
|
|
660
|
+
SYMBOL=$SYMBOL THRESHOLD=1000 mise run research:populate-symbol
|
|
661
|
+
echo "Completed $SYMBOL. Sleeping 10s before next..."
|
|
662
|
+
sleep 10
|
|
663
|
+
done
|
|
664
|
+
|
|
665
|
+
echo ""
|
|
666
|
+
echo "=========================================="
|
|
667
|
+
echo "ALL $TOTAL SYMBOLS @ 1000 dbps COMPLETE"
|
|
668
|
+
echo "Finished: $(date)"
|
|
669
|
+
echo "=========================================="
|
|
670
|
+
"""
|
|
671
|
+
|
|
672
|
+
[tasks."research:status"]
|
|
673
|
+
description = "Check population status on littleblack (single check)"
|
|
674
|
+
run = "python scripts/monitor_population.py --once --host littleblack"
|
|
675
|
+
|
|
676
|
+
[tasks."research:monitor"]
|
|
677
|
+
description = "Start continuous population monitoring (2 min interval)"
|
|
678
|
+
run = "python scripts/monitor_population.py --interval 120 --host littleblack"
|
|
679
|
+
|
|
680
|
+
[tasks."research:momentum-analysis"]
|
|
681
|
+
description = "Run momentum analysis on all populated symbols"
|
|
682
|
+
run = "python scripts/run_length_momentum_multi_symbol.py"
|
|
683
|
+
|
|
684
|
+
[tasks."research:wfo-analysis"]
|
|
685
|
+
description = "Run Walk-Forward regime detection"
|
|
686
|
+
run = "python scripts/run_length_momentum_wfo.py"
|
|
@@ -1,3 +1,70 @@
|
|
|
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
|
+
|
|
1
68
|
# [11.4.0](https://github.com/terrylica/rangebar-py/compare/v11.3.0...v11.4.0) (2026-01-31)
|
|
2
69
|
|
|
3
70
|
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
3551
|
+
version = "11.5.0"
|
|
3552
3552
|
dependencies = [
|
|
3553
3553
|
"arrow",
|
|
3554
3554
|
"arrow-array",
|
|
@@ -3567,7 +3567,7 @@ dependencies = [
|
|
|
3567
3567
|
|
|
3568
3568
|
[[package]]
|
|
3569
3569
|
name = "rangebar-streaming"
|
|
3570
|
-
version = "11.
|
|
3570
|
+
version = "11.5.0"
|
|
3571
3571
|
dependencies = [
|
|
3572
3572
|
"async-trait",
|
|
3573
3573
|
"chrono",
|
|
@@ -10,7 +10,7 @@ resolver = "2"
|
|
|
10
10
|
[workspace.package]
|
|
11
11
|
# CRITICAL: Prevent crates.io publishing - this is a PyPI-only project
|
|
12
12
|
publish = false
|
|
13
|
-
version = "11.
|
|
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.
|
|
100
|
+
version = "11.5.0"
|
|
101
101
|
edition = "2021"
|
|
102
102
|
authors = ["Terry Li"]
|
|
103
103
|
license = "MIT"
|
|
@@ -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)
|