gapless-crypto-data 2.8.0__tar.gz → 2.9.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.
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/.gitignore +2 -0
- gapless_crypto_data-2.8.0/README.md → gapless_crypto_data-2.9.0/PKG-INFO +183 -37
- gapless_crypto_data-2.8.0/PKG-INFO → gapless_crypto_data-2.9.0/README.md +135 -85
- gapless_crypto_data-2.9.0/docs/milestones/MILESTONE_v2.9.0.yaml +396 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/examples/advanced_api_examples.py +85 -2
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/pyproject.toml +5 -3
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/__init__.py +6 -3
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/api.py +5 -1
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/cli.py +5 -8
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/collectors/binance_public_data_collector.py +101 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/gap_filling/universal_gap_filler.py +24 -6
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.csv +1 -1
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.metadata.json +2 -2
- gapless_crypto_data-2.9.0/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250917-20250917_v2.5.0.csv +12 -0
- gapless_crypto_data-2.9.0/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250917-20250917_v2.5.0.metadata.json +95 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.csv +1 -1
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.metadata.json +2 -2
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.csv +1 -1
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.metadata.json +2 -2
- gapless_crypto_data-2.9.0/tests/test_1s_1d_gap_filling.py +659 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_cli.py +2 -2
- gapless_crypto_data-2.9.0/tests/test_gapless_validation_1d_2018_present.py +323 -0
- gapless_crypto_data-2.9.0/tests/test_monthly_to_daily_fallback.py +191 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/uv.lock +1 -1
- gapless_crypto_data-2.8.0/.gapless_checkpoints/joblib_cache/.gitignore +0 -2
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183058_36e7d2ec.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183100_7e130f98.json +0 -37
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183101_515b4690.json +0 -43
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183103_828c36f1.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183117_9d842ca2.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183118_35b71e32.json +0 -37
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183120_e201f120.json +0 -43
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183121_7aa0a4fd.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183841_63564a52.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183843_01458e87.json +0 -37
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183844_30f0e3c0.json +0 -43
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_183846_8c1e44b4.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_184500_9b6f812c.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_184502_ae48d84a.json +0 -37
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_184503_b094245f.json +0 -43
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_184505_665fb523.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_184510_fe5d92fa.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_185913_7e391e5f.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_185915_9eeeaea3.json +0 -37
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_185917_315392bf.json +0 -43
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_185918_82d9bb0d.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_190357_002f8cec.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_190358_be23058d.json +0 -37
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_190359_c676ca87.json +0 -43
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_190401_ccacb147.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250917_190406_d23113c8.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_082857_e107aef5.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_082858_efc4eae8.json +0 -37
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_082859_84bade3f.json +0 -43
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_082901_45048a4f.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_082906_558fd67a.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_132005_8396fab6.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_132006_b9593562.json +0 -37
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_132008_360234c8.json +0 -43
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_132009_335a0621.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_132014_d611fcb8.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_203023_b06289be.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_203024_d9a539b2.json +0 -37
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_203026_19201fbf.json +0 -43
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_203028_131eb03c.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/progress_report_20250918_203036_cadae0d8.json +0 -36
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183058_36e7d2ec.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183100_7e130f98.json +0 -23
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183101_515b4690.json +0 -29
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183103_828c36f1.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183117_9d842ca2.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183118_35b71e32.json +0 -23
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183120_e201f120.json +0 -29
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183121_7aa0a4fd.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183841_63564a52.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183843_01458e87.json +0 -23
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183844_30f0e3c0.json +0 -29
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_183846_8c1e44b4.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_184500_9b6f812c.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_184502_ae48d84a.json +0 -23
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_184503_b094245f.json +0 -29
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_184505_665fb523.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_184510_fe5d92fa.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_185913_7e391e5f.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_185915_9eeeaea3.json +0 -23
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_185917_315392bf.json +0 -29
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_185918_82d9bb0d.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_190357_002f8cec.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_190358_be23058d.json +0 -23
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_190359_c676ca87.json +0 -29
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_190401_ccacb147.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250917_190406_d23113c8.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_082857_e107aef5.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_082858_efc4eae8.json +0 -23
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_082859_84bade3f.json +0 -29
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_082901_45048a4f.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_082906_558fd67a.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_132005_8396fab6.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_132006_b9593562.json +0 -23
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_132008_360234c8.json +0 -29
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_132009_335a0621.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_132014_d611fcb8.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_203023_b06289be.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_203024_d9a539b2.json +0 -23
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_203026_19201fbf.json +0 -29
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_203028_131eb03c.json +0 -22
- gapless_crypto_data-2.8.0/.gapless_checkpoints/session_20250918_203036_cadae0d8.json +0 -22
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/.gitattributes +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/.github/workflows/ci-cd.yml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/.github/workflows/publish.yml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/.pre-commit-config.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/.python-version +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/AUTHORS.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/CHANGELOG.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/CLAUDE.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/CONTRIBUTING.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/LICENSE +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/MANIFEST.in +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/CURRENT_ARCHITECTURE_STATUS.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/PUBLISHING.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/PYPI_PUBLISHING_CONFIGURATION.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/README.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/api/dual-parameter-enhancement.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/api/quick-start.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/guides/pypi-documentation.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.0.0.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.0.1.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.0.2.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.0.3.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.0.4.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.0.5.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.1.0.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.1.1.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.2.0.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.3.0.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.4.0.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.5.0.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.6.0.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.6.1.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.7.0.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/milestones/MILESTONE_v2.8.0.yaml +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/docs/release-notes.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/examples/README.md +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/examples/basic_data_collection.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/examples/cli_usage_examples.sh +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/examples/complete_workflow.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/examples/gap_filling_example.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/examples/safe_data_collection.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/examples/simple_api_examples.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/collectors/__init__.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/collectors/concurrent_collection_orchestrator.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/collectors/httpx_downloader.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/collectors/hybrid_url_generator.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/gap_filling/__init__.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/gap_filling/safe_file_operations.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/regression/__init__.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/regression/regression_detector.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/resume/__init__.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/resume/intelligent_checkpointing.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/streaming/__init__.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/streaming/memory_streaming.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/utils/__init__.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/utils/error_handling.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/__init__.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/conftest.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/fixtures/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/fixtures/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0_gapped.csv.bak +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_atomic_operations.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_binance_collector.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_cli_integration.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_concurrent_download.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_gap_filler.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_integration.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_output_dir_dataframe_fix.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_package.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_regression.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_simple_api.py +0 -0
- {gapless_crypto_data-2.8.0 → gapless_crypto_data-2.9.0}/tests/test_streaming.py +0 -0
|
@@ -1,3 +1,51 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gapless-crypto-data
|
|
3
|
+
Version: 2.9.0
|
|
4
|
+
Summary: Ultra-fast cryptocurrency data collection with zero gaps guarantee. 22x faster via Binance public repository with complete 13-timeframe support (1s-1d) and intelligent monthly-to-daily fallback. Provides 11-column microstructure format with order flow metrics.
|
|
5
|
+
Project-URL: Homepage, https://github.com/Eon-Labs/gapless-crypto-data
|
|
6
|
+
Project-URL: Documentation, https://github.com/Eon-Labs/gapless-crypto-data#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/Eon-Labs/gapless-crypto-data.git
|
|
8
|
+
Project-URL: Issues, https://github.com/Eon-Labs/gapless-crypto-data/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/Eon-Labs/gapless-crypto-data/blob/main/CHANGELOG.md
|
|
10
|
+
Author-email: Eon Labs <terry@eonlabs.com>
|
|
11
|
+
Maintainer-email: Terry Li <terry@eonlabs.com>
|
|
12
|
+
License: MIT
|
|
13
|
+
License-File: AUTHORS.md
|
|
14
|
+
License-File: LICENSE
|
|
15
|
+
Keywords: 13-timeframes,1s-1d,22x-faster,OHLCV,api,authentic-data,backward-compatibility,binance,ccxt,collection,crypto,cryptocurrency,data,download,dual-parameter,fetch-data,financial-data,function-based,gap-filling,gapless,interval,liquidity,microstructure,monthly-daily-fallback,order-flow,pandas,performance,taker-volume,time-series,timeframe,trading,ultra-high-frequency,zero-gaps
|
|
16
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
17
|
+
Classifier: Intended Audience :: Developers
|
|
18
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
19
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Programming Language :: Python :: 3
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
24
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
27
|
+
Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
28
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
29
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
30
|
+
Requires-Python: >=3.9
|
|
31
|
+
Requires-Dist: httpx>=0.25.0
|
|
32
|
+
Requires-Dist: joblib>=1.5.2
|
|
33
|
+
Requires-Dist: pandas>=2.0.0
|
|
34
|
+
Requires-Dist: polars>=1.33.1
|
|
35
|
+
Requires-Dist: pyarrow>=21.0.0
|
|
36
|
+
Requires-Dist: pyod>=2.0.5
|
|
37
|
+
Provides-Extra: dev
|
|
38
|
+
Requires-Dist: black>=23.0.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: mypy>=1.5.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
42
|
+
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
43
|
+
Provides-Extra: test
|
|
44
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
|
|
45
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
|
|
46
|
+
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
47
|
+
Description-Content-Type: text/markdown
|
|
48
|
+
|
|
1
49
|
# Gapless Crypto Data
|
|
2
50
|
|
|
3
51
|
[](https://badge.fury.io/py/gapless-crypto-data)
|
|
@@ -5,18 +53,22 @@
|
|
|
5
53
|
[](https://opensource.org/licenses/MIT)
|
|
6
54
|
[](https://github.com/astral-sh/uv)
|
|
7
55
|
|
|
8
|
-
|
|
56
|
+
Ultra-fast cryptocurrency data collection with zero gaps guarantee. Provides 11-column microstructure format through Binance public data repository with intelligent monthly-to-daily fallback for seamless coverage.
|
|
9
57
|
|
|
10
58
|
## Features
|
|
11
59
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
60
|
+
- **22x faster** data collection via Binance public data repository
|
|
61
|
+
- **Zero gaps guarantee** through intelligent monthly-to-daily fallback
|
|
62
|
+
- **Complete 13-timeframe support**: 1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d
|
|
63
|
+
- **Ultra-high frequency** to daily data collection (1-second to 1-day intervals)
|
|
64
|
+
- **11-column microstructure format** with order flow and liquidity metrics
|
|
65
|
+
- **Intelligent fallback system** automatically switches to daily files when monthly files unavailable
|
|
66
|
+
- **Gap detection and filling** with authentic Binance API data only
|
|
67
|
+
- **UV-based Python tooling** for modern dependency management
|
|
68
|
+
- **Atomic file operations** ensuring data integrity
|
|
69
|
+
- **Multi-symbol & multi-timeframe** concurrent collection
|
|
70
|
+
- **CCXT-compatible** dual parameter support (timeframe/interval)
|
|
71
|
+
- **Production-grade** with comprehensive test coverage
|
|
20
72
|
|
|
21
73
|
## Quick Start
|
|
22
74
|
|
|
@@ -39,11 +91,17 @@ pip install gapless-crypto-data
|
|
|
39
91
|
### CLI Usage
|
|
40
92
|
|
|
41
93
|
```bash
|
|
42
|
-
# Collect data for multiple timeframes (
|
|
43
|
-
gapless-crypto-data --symbol SOLUSDT --timeframes 1m,
|
|
94
|
+
# Collect data for multiple timeframes (all 13 timeframes supported)
|
|
95
|
+
gapless-crypto-data --symbol SOLUSDT --timeframes 1s,1m,5m,1h,4h,1d
|
|
96
|
+
|
|
97
|
+
# Ultra-high frequency data collection (1-second intervals)
|
|
98
|
+
gapless-crypto-data --symbol BTCUSDT --timeframes 1s,1m,3m
|
|
99
|
+
|
|
100
|
+
# Extended timeframes with intelligent fallback
|
|
101
|
+
gapless-crypto-data --symbol ETHUSDT --timeframes 6h,8h,12h,1d
|
|
44
102
|
|
|
45
103
|
# Collect multiple symbols at once (native multi-symbol support)
|
|
46
|
-
gapless-crypto-data --symbol BTCUSDT,ETHUSDT,SOLUSDT --timeframes 1h,4h
|
|
104
|
+
gapless-crypto-data --symbol BTCUSDT,ETHUSDT,SOLUSDT --timeframes 1h,4h,1d
|
|
47
105
|
|
|
48
106
|
# Collect specific date range with custom output directory
|
|
49
107
|
gapless-crypto-data --symbol BTCUSDT --timeframes 1h --start 2023-01-01 --end 2023-12-31 --output-dir ./crypto_data
|
|
@@ -405,16 +463,23 @@ gapless-crypto-data/
|
|
|
405
463
|
|
|
406
464
|
## 🔍 Supported Timeframes
|
|
407
465
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
|
411
|
-
|
|
412
|
-
|
|
|
413
|
-
|
|
|
414
|
-
|
|
|
415
|
-
|
|
|
416
|
-
|
|
|
417
|
-
|
|
|
466
|
+
All 13 Binance timeframes supported for complete market coverage:
|
|
467
|
+
|
|
468
|
+
| Timeframe | Code | Description | Use Case |
|
|
469
|
+
|-----------|------|-------------|----------|
|
|
470
|
+
| 1 second | `1s` | Ultra-high frequency | HFT, microstructure analysis |
|
|
471
|
+
| 1 minute | `1m` | High resolution | Scalping, order flow |
|
|
472
|
+
| 3 minutes | `3m` | Short-term analysis | Quick trend detection |
|
|
473
|
+
| 5 minutes | `5m` | Common trading timeframe | Day trading signals |
|
|
474
|
+
| 15 minutes| `15m`| Medium-term signals | Swing trading entry |
|
|
475
|
+
| 30 minutes| `30m`| Longer-term patterns | Position management |
|
|
476
|
+
| 1 hour | `1h` | Popular for backtesting | Strategy development |
|
|
477
|
+
| 2 hours | `2h` | Extended analysis | Multi-timeframe confluence |
|
|
478
|
+
| 4 hours | `4h` | Daily cycle patterns | Trend following |
|
|
479
|
+
| 6 hours | `6h` | Quarter-day analysis | Position sizing |
|
|
480
|
+
| 8 hours | `8h` | Third-day cycles | Risk management |
|
|
481
|
+
| 12 hours | `12h`| Half-day patterns | Overnight positions |
|
|
482
|
+
| 1 day | `1d` | Daily analysis | Long-term trends |
|
|
418
483
|
|
|
419
484
|
## ⚠️ Requirements
|
|
420
485
|
|
|
@@ -564,23 +629,104 @@ success = merger.merge_gap_data_safe(
|
|
|
564
629
|
)
|
|
565
630
|
```
|
|
566
631
|
|
|
567
|
-
|
|
632
|
+
## Output Formats
|
|
633
|
+
|
|
634
|
+
### DataFrame Structure (Python API)
|
|
635
|
+
|
|
636
|
+
Returns pandas DataFrame with 11-column microstructure format:
|
|
637
|
+
|
|
638
|
+
| Column | Type | Description | Example |
|
|
639
|
+
|--------|------|-------------|---------|
|
|
640
|
+
| `date` | datetime64[ns] | Open timestamp | `2024-01-01 12:00:00` |
|
|
641
|
+
| `open` | float64 | Opening price | `42150.50` |
|
|
642
|
+
| `high` | float64 | Highest price | `42200.00` |
|
|
643
|
+
| `low` | float64 | Lowest price | `42100.25` |
|
|
644
|
+
| `close` | float64 | Closing price | `42175.75` |
|
|
645
|
+
| `volume` | float64 | Base asset volume | `15.250000` |
|
|
646
|
+
| `close_time` | datetime64[ns] | Close timestamp | `2024-01-01 12:59:59` |
|
|
647
|
+
| `quote_asset_volume` | float64 | Quote asset volume | `643238.125` |
|
|
648
|
+
| `number_of_trades` | int64 | Trade count | `1547` |
|
|
649
|
+
| `taker_buy_base_asset_volume` | float64 | Taker buy base volume | `7.825000` |
|
|
650
|
+
| `taker_buy_quote_asset_volume` | float64 | Taker buy quote volume | `329891.750` |
|
|
651
|
+
|
|
652
|
+
### CSV File Structure
|
|
653
|
+
|
|
654
|
+
CSV files include header comments with metadata followed by data:
|
|
655
|
+
|
|
656
|
+
```csv
|
|
657
|
+
# Binance Spot Market Data v2.5.0
|
|
658
|
+
# Generated: 2025-09-18T23:09:25.391126+00:00Z
|
|
659
|
+
# Source: Binance Public Data Repository
|
|
660
|
+
# Market: SPOT | Symbol: BTCUSDT | Timeframe: 1h
|
|
661
|
+
# Coverage: 48 bars
|
|
662
|
+
# Period: 2024-01-01 00:00:00 to 2024-01-02 23:00:00
|
|
663
|
+
# Collection: direct_download in 0.0s
|
|
664
|
+
# Data Hash: 5fba9d2e5d3db849...
|
|
665
|
+
# Compliance: Zero-Magic-Numbers, Temporal-Integrity, Official-Binance-Source
|
|
666
|
+
#
|
|
667
|
+
date,open,high,low,close,volume,close_time,quote_asset_volume,number_of_trades,taker_buy_base_asset_volume,taker_buy_quote_asset_volume
|
|
668
|
+
2024-01-01 00:00:00,42283.58,42554.57,42261.02,42475.23,1271.68108,2024-01-01 00:59:59,53957248.973789,47134,682.57581,28957416.819645
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
### Metadata JSON Structure
|
|
672
|
+
|
|
673
|
+
Each CSV file includes comprehensive metadata in `.metadata.json`:
|
|
674
|
+
|
|
675
|
+
```json
|
|
676
|
+
{
|
|
677
|
+
"version": "v2.5.0",
|
|
678
|
+
"generator": "BinancePublicDataCollector",
|
|
679
|
+
"data_source": "Binance Public Data Repository",
|
|
680
|
+
"symbol": "BTCUSDT",
|
|
681
|
+
"timeframe": "1h",
|
|
682
|
+
"enhanced_microstructure_format": {
|
|
683
|
+
"total_columns": 11,
|
|
684
|
+
"analysis_capabilities": [
|
|
685
|
+
"order_flow_analysis",
|
|
686
|
+
"liquidity_metrics",
|
|
687
|
+
"market_microstructure",
|
|
688
|
+
"trade_weighted_prices",
|
|
689
|
+
"institutional_data_patterns"
|
|
690
|
+
]
|
|
691
|
+
},
|
|
692
|
+
"gap_analysis": {
|
|
693
|
+
"total_gaps_detected": 0,
|
|
694
|
+
"data_completeness_score": 1.0,
|
|
695
|
+
"gap_filling_method": "authentic_binance_api"
|
|
696
|
+
},
|
|
697
|
+
"data_integrity": {
|
|
698
|
+
"chronological_order": true,
|
|
699
|
+
"corruption_detected": false
|
|
700
|
+
}
|
|
701
|
+
}
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
### Streaming Output (Memory-Efficient)
|
|
705
|
+
|
|
706
|
+
For large datasets, Polars streaming provides constant memory usage:
|
|
568
707
|
|
|
569
|
-
|
|
708
|
+
```python
|
|
709
|
+
from gapless_crypto_data.streaming import StreamingDataProcessor
|
|
710
|
+
|
|
711
|
+
processor = StreamingDataProcessor(chunk_size=10_000, memory_limit_mb=100)
|
|
712
|
+
for chunk in processor.stream_csv_chunks("large_dataset.csv"):
|
|
713
|
+
# Process chunk with constant memory usage
|
|
714
|
+
print(f"Chunk shape: {chunk.shape}")
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
### File Naming Convention
|
|
718
|
+
|
|
719
|
+
Output files follow consistent naming pattern:
|
|
720
|
+
|
|
721
|
+
```
|
|
722
|
+
binance_spot_{SYMBOL}-{TIMEFRAME}_{START_DATE}-{END_DATE}_v{VERSION}.csv
|
|
723
|
+
binance_spot_{SYMBOL}-{TIMEFRAME}_{START_DATE}-{END_DATE}_v{VERSION}.metadata.json
|
|
724
|
+
```
|
|
570
725
|
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
| `high` | Highest price | `42200.00` |
|
|
576
|
-
| `low` | Lowest price | `42100.25` |
|
|
577
|
-
| `close` | Closing price | `42175.75` |
|
|
578
|
-
| `volume` | Base asset volume | `15.250000` |
|
|
579
|
-
| `close_time` | Close timestamp | `2024-01-01 12:59:59` |
|
|
580
|
-
| `quote_asset_volume` | Quote asset volume | `643238.125` |
|
|
581
|
-
| `number_of_trades` | Trade count | `1547` |
|
|
582
|
-
| `taker_buy_base_asset_volume` | Taker buy base volume | `7.825000` |
|
|
583
|
-
| `taker_buy_quote_asset_volume` | Taker buy quote volume | `329891.750` |
|
|
726
|
+
Examples:
|
|
727
|
+
- `binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.csv`
|
|
728
|
+
- `binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.csv`
|
|
729
|
+
- `binance_spot_SOLUSDT-1d_20240101-20241231_v2.5.0.csv`
|
|
584
730
|
|
|
585
731
|
### Error Handling
|
|
586
732
|
|
|
@@ -1,51 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: gapless-crypto-data
|
|
3
|
-
Version: 2.8.0
|
|
4
|
-
Summary: Cryptocurrency data collection with gap detection and filling capabilities. Provides 11-column microstructure format with dual parameter support (timeframe/interval) for CCXT compatibility.
|
|
5
|
-
Project-URL: Homepage, https://github.com/Eon-Labs/gapless-crypto-data
|
|
6
|
-
Project-URL: Documentation, https://github.com/Eon-Labs/gapless-crypto-data#readme
|
|
7
|
-
Project-URL: Repository, https://github.com/Eon-Labs/gapless-crypto-data.git
|
|
8
|
-
Project-URL: Issues, https://github.com/Eon-Labs/gapless-crypto-data/issues
|
|
9
|
-
Project-URL: Changelog, https://github.com/Eon-Labs/gapless-crypto-data/blob/main/CHANGELOG.md
|
|
10
|
-
Author-email: Eon Labs <terry@eonlabs.com>
|
|
11
|
-
Maintainer-email: Terry Li <terry@eonlabs.com>
|
|
12
|
-
License: MIT
|
|
13
|
-
License-File: AUTHORS.md
|
|
14
|
-
License-File: LICENSE
|
|
15
|
-
Keywords: OHLCV,api,authentic-data,backward-compatibility,binance,ccxt,collection,crypto,cryptocurrency,data,download,dual-parameter,fetch-data,financial-data,function-based,gap-filling,interval,liquidity,microstructure,order-flow,pandas,taker-volume,time-series,timeframe,trading
|
|
16
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
17
|
-
Classifier: Intended Audience :: Developers
|
|
18
|
-
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
19
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
20
|
-
Classifier: Operating System :: OS Independent
|
|
21
|
-
Classifier: Programming Language :: Python :: 3
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
23
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
24
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
26
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
27
|
-
Classifier: Topic :: Office/Business :: Financial :: Investment
|
|
28
|
-
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
29
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
30
|
-
Requires-Python: >=3.9
|
|
31
|
-
Requires-Dist: httpx>=0.25.0
|
|
32
|
-
Requires-Dist: joblib>=1.5.2
|
|
33
|
-
Requires-Dist: pandas>=2.0.0
|
|
34
|
-
Requires-Dist: polars>=1.33.1
|
|
35
|
-
Requires-Dist: pyarrow>=21.0.0
|
|
36
|
-
Requires-Dist: pyod>=2.0.5
|
|
37
|
-
Provides-Extra: dev
|
|
38
|
-
Requires-Dist: black>=23.0.0; extra == 'dev'
|
|
39
|
-
Requires-Dist: mypy>=1.5.0; extra == 'dev'
|
|
40
|
-
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
|
41
|
-
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
42
|
-
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
43
|
-
Provides-Extra: test
|
|
44
|
-
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
|
|
45
|
-
Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
|
|
46
|
-
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
47
|
-
Description-Content-Type: text/markdown
|
|
48
|
-
|
|
49
1
|
# Gapless Crypto Data
|
|
50
2
|
|
|
51
3
|
[](https://badge.fury.io/py/gapless-crypto-data)
|
|
@@ -53,18 +5,22 @@ Description-Content-Type: text/markdown
|
|
|
53
5
|
[](https://opensource.org/licenses/MIT)
|
|
54
6
|
[](https://github.com/astral-sh/uv)
|
|
55
7
|
|
|
56
|
-
|
|
8
|
+
Ultra-fast cryptocurrency data collection with zero gaps guarantee. Provides 11-column microstructure format through Binance public data repository with intelligent monthly-to-daily fallback for seamless coverage.
|
|
57
9
|
|
|
58
10
|
## Features
|
|
59
11
|
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
12
|
+
- **22x faster** data collection via Binance public data repository
|
|
13
|
+
- **Zero gaps guarantee** through intelligent monthly-to-daily fallback
|
|
14
|
+
- **Complete 13-timeframe support**: 1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d
|
|
15
|
+
- **Ultra-high frequency** to daily data collection (1-second to 1-day intervals)
|
|
16
|
+
- **11-column microstructure format** with order flow and liquidity metrics
|
|
17
|
+
- **Intelligent fallback system** automatically switches to daily files when monthly files unavailable
|
|
18
|
+
- **Gap detection and filling** with authentic Binance API data only
|
|
19
|
+
- **UV-based Python tooling** for modern dependency management
|
|
20
|
+
- **Atomic file operations** ensuring data integrity
|
|
21
|
+
- **Multi-symbol & multi-timeframe** concurrent collection
|
|
22
|
+
- **CCXT-compatible** dual parameter support (timeframe/interval)
|
|
23
|
+
- **Production-grade** with comprehensive test coverage
|
|
68
24
|
|
|
69
25
|
## Quick Start
|
|
70
26
|
|
|
@@ -87,11 +43,17 @@ pip install gapless-crypto-data
|
|
|
87
43
|
### CLI Usage
|
|
88
44
|
|
|
89
45
|
```bash
|
|
90
|
-
# Collect data for multiple timeframes (
|
|
91
|
-
gapless-crypto-data --symbol SOLUSDT --timeframes 1m,
|
|
46
|
+
# Collect data for multiple timeframes (all 13 timeframes supported)
|
|
47
|
+
gapless-crypto-data --symbol SOLUSDT --timeframes 1s,1m,5m,1h,4h,1d
|
|
48
|
+
|
|
49
|
+
# Ultra-high frequency data collection (1-second intervals)
|
|
50
|
+
gapless-crypto-data --symbol BTCUSDT --timeframes 1s,1m,3m
|
|
51
|
+
|
|
52
|
+
# Extended timeframes with intelligent fallback
|
|
53
|
+
gapless-crypto-data --symbol ETHUSDT --timeframes 6h,8h,12h,1d
|
|
92
54
|
|
|
93
55
|
# Collect multiple symbols at once (native multi-symbol support)
|
|
94
|
-
gapless-crypto-data --symbol BTCUSDT,ETHUSDT,SOLUSDT --timeframes 1h,4h
|
|
56
|
+
gapless-crypto-data --symbol BTCUSDT,ETHUSDT,SOLUSDT --timeframes 1h,4h,1d
|
|
95
57
|
|
|
96
58
|
# Collect specific date range with custom output directory
|
|
97
59
|
gapless-crypto-data --symbol BTCUSDT --timeframes 1h --start 2023-01-01 --end 2023-12-31 --output-dir ./crypto_data
|
|
@@ -453,16 +415,23 @@ gapless-crypto-data/
|
|
|
453
415
|
|
|
454
416
|
## 🔍 Supported Timeframes
|
|
455
417
|
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
|
459
|
-
|
|
460
|
-
|
|
|
461
|
-
|
|
|
462
|
-
|
|
|
463
|
-
|
|
|
464
|
-
|
|
|
465
|
-
|
|
|
418
|
+
All 13 Binance timeframes supported for complete market coverage:
|
|
419
|
+
|
|
420
|
+
| Timeframe | Code | Description | Use Case |
|
|
421
|
+
|-----------|------|-------------|----------|
|
|
422
|
+
| 1 second | `1s` | Ultra-high frequency | HFT, microstructure analysis |
|
|
423
|
+
| 1 minute | `1m` | High resolution | Scalping, order flow |
|
|
424
|
+
| 3 minutes | `3m` | Short-term analysis | Quick trend detection |
|
|
425
|
+
| 5 minutes | `5m` | Common trading timeframe | Day trading signals |
|
|
426
|
+
| 15 minutes| `15m`| Medium-term signals | Swing trading entry |
|
|
427
|
+
| 30 minutes| `30m`| Longer-term patterns | Position management |
|
|
428
|
+
| 1 hour | `1h` | Popular for backtesting | Strategy development |
|
|
429
|
+
| 2 hours | `2h` | Extended analysis | Multi-timeframe confluence |
|
|
430
|
+
| 4 hours | `4h` | Daily cycle patterns | Trend following |
|
|
431
|
+
| 6 hours | `6h` | Quarter-day analysis | Position sizing |
|
|
432
|
+
| 8 hours | `8h` | Third-day cycles | Risk management |
|
|
433
|
+
| 12 hours | `12h`| Half-day patterns | Overnight positions |
|
|
434
|
+
| 1 day | `1d` | Daily analysis | Long-term trends |
|
|
466
435
|
|
|
467
436
|
## ⚠️ Requirements
|
|
468
437
|
|
|
@@ -612,23 +581,104 @@ success = merger.merge_gap_data_safe(
|
|
|
612
581
|
)
|
|
613
582
|
```
|
|
614
583
|
|
|
615
|
-
|
|
584
|
+
## Output Formats
|
|
585
|
+
|
|
586
|
+
### DataFrame Structure (Python API)
|
|
587
|
+
|
|
588
|
+
Returns pandas DataFrame with 11-column microstructure format:
|
|
589
|
+
|
|
590
|
+
| Column | Type | Description | Example |
|
|
591
|
+
|--------|------|-------------|---------|
|
|
592
|
+
| `date` | datetime64[ns] | Open timestamp | `2024-01-01 12:00:00` |
|
|
593
|
+
| `open` | float64 | Opening price | `42150.50` |
|
|
594
|
+
| `high` | float64 | Highest price | `42200.00` |
|
|
595
|
+
| `low` | float64 | Lowest price | `42100.25` |
|
|
596
|
+
| `close` | float64 | Closing price | `42175.75` |
|
|
597
|
+
| `volume` | float64 | Base asset volume | `15.250000` |
|
|
598
|
+
| `close_time` | datetime64[ns] | Close timestamp | `2024-01-01 12:59:59` |
|
|
599
|
+
| `quote_asset_volume` | float64 | Quote asset volume | `643238.125` |
|
|
600
|
+
| `number_of_trades` | int64 | Trade count | `1547` |
|
|
601
|
+
| `taker_buy_base_asset_volume` | float64 | Taker buy base volume | `7.825000` |
|
|
602
|
+
| `taker_buy_quote_asset_volume` | float64 | Taker buy quote volume | `329891.750` |
|
|
603
|
+
|
|
604
|
+
### CSV File Structure
|
|
605
|
+
|
|
606
|
+
CSV files include header comments with metadata followed by data:
|
|
607
|
+
|
|
608
|
+
```csv
|
|
609
|
+
# Binance Spot Market Data v2.5.0
|
|
610
|
+
# Generated: 2025-09-18T23:09:25.391126+00:00Z
|
|
611
|
+
# Source: Binance Public Data Repository
|
|
612
|
+
# Market: SPOT | Symbol: BTCUSDT | Timeframe: 1h
|
|
613
|
+
# Coverage: 48 bars
|
|
614
|
+
# Period: 2024-01-01 00:00:00 to 2024-01-02 23:00:00
|
|
615
|
+
# Collection: direct_download in 0.0s
|
|
616
|
+
# Data Hash: 5fba9d2e5d3db849...
|
|
617
|
+
# Compliance: Zero-Magic-Numbers, Temporal-Integrity, Official-Binance-Source
|
|
618
|
+
#
|
|
619
|
+
date,open,high,low,close,volume,close_time,quote_asset_volume,number_of_trades,taker_buy_base_asset_volume,taker_buy_quote_asset_volume
|
|
620
|
+
2024-01-01 00:00:00,42283.58,42554.57,42261.02,42475.23,1271.68108,2024-01-01 00:59:59,53957248.973789,47134,682.57581,28957416.819645
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
### Metadata JSON Structure
|
|
624
|
+
|
|
625
|
+
Each CSV file includes comprehensive metadata in `.metadata.json`:
|
|
626
|
+
|
|
627
|
+
```json
|
|
628
|
+
{
|
|
629
|
+
"version": "v2.5.0",
|
|
630
|
+
"generator": "BinancePublicDataCollector",
|
|
631
|
+
"data_source": "Binance Public Data Repository",
|
|
632
|
+
"symbol": "BTCUSDT",
|
|
633
|
+
"timeframe": "1h",
|
|
634
|
+
"enhanced_microstructure_format": {
|
|
635
|
+
"total_columns": 11,
|
|
636
|
+
"analysis_capabilities": [
|
|
637
|
+
"order_flow_analysis",
|
|
638
|
+
"liquidity_metrics",
|
|
639
|
+
"market_microstructure",
|
|
640
|
+
"trade_weighted_prices",
|
|
641
|
+
"institutional_data_patterns"
|
|
642
|
+
]
|
|
643
|
+
},
|
|
644
|
+
"gap_analysis": {
|
|
645
|
+
"total_gaps_detected": 0,
|
|
646
|
+
"data_completeness_score": 1.0,
|
|
647
|
+
"gap_filling_method": "authentic_binance_api"
|
|
648
|
+
},
|
|
649
|
+
"data_integrity": {
|
|
650
|
+
"chronological_order": true,
|
|
651
|
+
"corruption_detected": false
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
### Streaming Output (Memory-Efficient)
|
|
657
|
+
|
|
658
|
+
For large datasets, Polars streaming provides constant memory usage:
|
|
616
659
|
|
|
617
|
-
|
|
660
|
+
```python
|
|
661
|
+
from gapless_crypto_data.streaming import StreamingDataProcessor
|
|
662
|
+
|
|
663
|
+
processor = StreamingDataProcessor(chunk_size=10_000, memory_limit_mb=100)
|
|
664
|
+
for chunk in processor.stream_csv_chunks("large_dataset.csv"):
|
|
665
|
+
# Process chunk with constant memory usage
|
|
666
|
+
print(f"Chunk shape: {chunk.shape}")
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
### File Naming Convention
|
|
670
|
+
|
|
671
|
+
Output files follow consistent naming pattern:
|
|
672
|
+
|
|
673
|
+
```
|
|
674
|
+
binance_spot_{SYMBOL}-{TIMEFRAME}_{START_DATE}-{END_DATE}_v{VERSION}.csv
|
|
675
|
+
binance_spot_{SYMBOL}-{TIMEFRAME}_{START_DATE}-{END_DATE}_v{VERSION}.metadata.json
|
|
676
|
+
```
|
|
618
677
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
| `high` | Highest price | `42200.00` |
|
|
624
|
-
| `low` | Lowest price | `42100.25` |
|
|
625
|
-
| `close` | Closing price | `42175.75` |
|
|
626
|
-
| `volume` | Base asset volume | `15.250000` |
|
|
627
|
-
| `close_time` | Close timestamp | `2024-01-01 12:59:59` |
|
|
628
|
-
| `quote_asset_volume` | Quote asset volume | `643238.125` |
|
|
629
|
-
| `number_of_trades` | Trade count | `1547` |
|
|
630
|
-
| `taker_buy_base_asset_volume` | Taker buy base volume | `7.825000` |
|
|
631
|
-
| `taker_buy_quote_asset_volume` | Taker buy quote volume | `329891.750` |
|
|
678
|
+
Examples:
|
|
679
|
+
- `binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.csv`
|
|
680
|
+
- `binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.csv`
|
|
681
|
+
- `binance_spot_SOLUSDT-1d_20240101-20241231_v2.5.0.csv`
|
|
632
682
|
|
|
633
683
|
### Error Handling
|
|
634
684
|
|