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.
- {rangebar-11.5.0 → rangebar-11.6.1}/.mise.toml +5 -6
- {rangebar-11.5.0 → rangebar-11.6.1}/CHANGELOG.md +17 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/Cargo.lock +9 -9
- {rangebar-11.5.0 → rangebar-11.6.1}/Cargo.toml +2 -2
- {rangebar-11.5.0 → rangebar-11.6.1}/PKG-INFO +1 -1
- {rangebar-11.5.0 → rangebar-11.6.1}/RESUME.md +48 -50
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/CLAUDE.md +43 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/arrow_export.rs +17 -0
- rangebar-11.6.1/crates/rangebar-core/src/interbar.rs +1098 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/lib.rs +2 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/processor.rs +122 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/test_utils/mod.rs +17 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/types.rs +119 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/stats.rs +17 -0
- rangebar-11.6.1/docs/plans/issue-59-inter-bar-features.md +1633 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/__init__.py +2 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/__init__.pyi +47 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/schema.sql +49 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/constants.py +33 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/helpers.py +16 -1
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/range_bars.py +10 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/processors/core.py +13 -1
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/resource_guard.py +80 -6
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/publish-to-pypi.sh +37 -30
- {rangebar-11.5.0 → rangebar-11.6.1}/src/lib.rs +82 -10
- {rangebar-11.5.0 → rangebar-11.6.1}/.gitignore +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/.mcp.json +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/.pre-commit-config.yaml +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/.releaserc.yml +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/CLAUDE.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/LICENSE +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/README.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/STATISTICAL_VALIDITY_AUDIT.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/benches/rangebar_bench.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/build.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/CHANGELOG.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/Cargo.toml +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/README.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/checkpoint.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/fixed_point.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/test_data_loader.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/test_utils/generators.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/src/timestamp.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/tests/cross_boundary_validation.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/tests/cross_date_real_data_validation.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/tests/cross_year_boundary_test.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-core/tests/incomplete_bar_continuation_proof.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/CHANGELOG.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/Cargo.toml +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/README.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/checksum.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/historical.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/mod.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/symbols.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/binance/websocket.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/builder.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/client.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/conversion.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/mod.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/exness/types.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-providers/src/lib.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/CHANGELOG.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/Cargo.toml +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/README.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/indicators.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/lib.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/processor.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/replay_buffer.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/crates/rangebar-streaming/src/universal.rs +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/deny.toml +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/ARCHITECTURE.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/CONTEXT.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/MEMORY_REMEDIATION_PLAN.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/adr/2026-01-31-realtime-streaming-api.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/analysis/2025-10-10-flash-crash.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/api.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/development/PERFORMANCE.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/development/RELEASE.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/migration-v8.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/rangebar_core_api.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/2026-02-02-intrabar-microstructure-claude-opus.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/2026-02-02-intrabar-microstructure-gemini-3-pro.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/INDEX.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/adversarial-audit-methodology.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/external/time-to-convergence-stationarity-gap.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/labeling-for-ml.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/market-regime-patterns.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/multi-threshold-patterns.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/multifactor-patterns.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/pattern-research-summary.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/price-action-patterns.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/tda-parameter-sensitivity-audit.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/tda-regime-patterns.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/docs/research/volatility-regime-patterns.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/examples/README.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/examples/backtesting_integration.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/examples/basic_usage.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/examples/binance_csv_example.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/examples/get_range_bars_example.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/examples/validate_output.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/examples/with_clickhouse_cache.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/package-lock.json +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/package.json +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/pyproject.toml +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/CLAUDE.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/checkpoint.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/cli.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/CLAUDE.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/__init__.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/bulk_operations.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/cache.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/client.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/config.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/mixin.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/preflight.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/query_operations.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/clickhouse/tunnel.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/conversion.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/exceptions.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/exness.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/hooks.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/logging.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/notify/__init__.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/notify/pushover.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/notify/telegram.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/__init__.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/count_bounded.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/models.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/precompute.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/orchestration/tick_fetcher.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/ouroboros.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/processors/__init__.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/processors/api.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/storage/__init__.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/storage/checksum_registry.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/storage/parquet.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/streaming.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/__init__.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/cache_staleness.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/continuity.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/gap_classification.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/post_storage.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/tier1.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/python/rangebar/validation/tier2.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/rust-toolchain.toml +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/rustfmt.toml +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/adwin_regime_detection_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/analyze_flash_crash.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/bootstrap_permutation_validation_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/build-release.sh +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cache_clear.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cache_status.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/check-release-config.sh +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/coarse_to_fine_cascade.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/combined_pattern_audit_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/combined_regime_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/combined_rv_alignment_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cross_asset_correlation_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cross_regime_correlation_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/cross_threshold_alignment.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/dependency_monitor.sh +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/direction_patterns_reaudit.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/download_exness_eurusd.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/download_exness_forex.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/duration_autocorrelation.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/duration_autocorrelation_audit.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/duration_volatility_prediction.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fdr_corrected_patterns.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fill_all_symbols.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fill_gaps_2025_2026.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fill_gaps_littleblack.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/fill_gaps_retry.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/historical_formation_patterns_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/historical_formation_regime_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/hurst_adjusted_kelly_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/hurst_adjusted_psr_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/hurst_exponent_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/hurst_multi_estimator_audit.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/microstructure_clickhouse.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/microstructure_patterns.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/microstructure_simple.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/monitor_population.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multi_threshold_pattern_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multibar_continuation.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multibar_forward_returns_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multifactor_multigranularity_patterns.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multifactor_patterns.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multifactor_patterns_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multithreshold_combinations_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/multithreshold_regime_combinations_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/oos_validation_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/parameter_sensitivity_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/pattern_correlation_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/pattern_return_profiles_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/pattern_return_stats.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/populate_1000dbps.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/populate_250dbps.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/populate_250dbps_extended.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/populate_safe.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/position_sizing_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/process_exness_eurusd_to_cache.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/profiling_tools.sh +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/psr_mintrl_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/publish-wheels.sh +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regenerate_cache.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regime_analysis.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regime_analysis_50dbps_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regime_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/regime_transition_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/run_large_scale_benchmark.sh +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/run_length_momentum_analysis.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/run_length_momentum_multi_symbol.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/run_length_momentum_wfo.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/rv_return_profile_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/semantic-release.sh +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_break_event_alignment_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_conditioned_patterns.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_cupy_accelerated.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_gpu_analysis.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_hurst_by_regime_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_parameter_sweep_audit.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_regime_hurst_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_regime_pattern_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_ripser_plusplus.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_rolling_threshold.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_solusdt_250_audit.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_solusdt_250_littleblack.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_structural_break_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_volatility_forecast.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_wfo_3way.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_wfo_abstain.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/tda_wfo_audit.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/temporal_safe_patterns_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_bar_alignment_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_bar_pattern_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_bar_pattern_audit_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_factor_hurst_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/three_factor_pattern_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/transaction_cost_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/trend_filter_analysis.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/upload_eurusd_to_clickhouse.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/validate_clickhouse.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/validate_memory_efficiency.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/validate_microstructure_features.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/validate_n_range_bars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/volatility_regime_analysis_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/volatility_regime_audit_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/volume_conditioned_patterns.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/scripts/volume_conditioned_patterns_polars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/test_data/BTCUSDT/BTCUSDT_aggTrades_20250901.csv +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/test_data/ETHUSDT/ETHUSDT_aggTrades_20250901.csv +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/test_data/README.md +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/conftest.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/fixtures/.gitignore +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/fixtures/BTCUSDT-aggTrades-2024-01-01.zip +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_cache_schema_evolution.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_clickhouse.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_clickhouse_integration.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_e2e_optimized.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_edge_cases.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_examples.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_get_n_range_bars.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_get_range_bars_e2e.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_issue_5_reproduction.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_issues_7_8.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_microstructure_features.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_ouroboros.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_polars_only_downstream.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_preflight.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_python_api.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_real_data.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_rust_bindings.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_storage.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_streaming.py +0 -0
- {rangebar-11.5.0 → rangebar-11.6.1}/tests/test_validation_presets.py +0 -0
- {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
|
-
#
|
|
20
|
+
# 1Password Configuration (SSoT for secrets)
|
|
21
21
|
# =============================================================================
|
|
22
|
-
# PyPI:
|
|
23
|
-
# GitHub PAT:
|
|
24
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
100
|
+
version = "11.6.1"
|
|
101
101
|
edition = "2021"
|
|
102
102
|
authors = ["Terry Li"]
|
|
103
103
|
license = "MIT"
|
|
@@ -1,13 +1,44 @@
|
|
|
1
1
|
# RESUME.md - Session Context
|
|
2
2
|
|
|
3
|
-
**Last Updated**: 2026-02-
|
|
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
|
|
8
|
+
## Current Work: Issue #59 Inter-Bar Features
|
|
9
9
|
|
|
10
|
-
###
|
|
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 |
|
|
55
|
-
| ------------------------------------------------ |
|
|
56
|
-
| `docs/research/INDEX.md` |
|
|
57
|
-
| `docs/research/pattern-research-summary.md` |
|
|
58
|
-
| `docs/research/adversarial-audit-methodology.md` |
|
|
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
|
-
-
|
|
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
|
|