HdW Crypto Data
Utilities for downloading Binance Vision candlestick data, merging it with recent Binance API candles, and loading cleaned crypto time-series datasets for analysis.
The core package is intentionally kept lightweight. GUI tools and technical-analysis chart helpers live outside the hdw_crypto_data package so heavy optional dependencies do not get imported with the core data pipeline.
Repository: https://github.com/hansdeweme/HdWCryptoData
What It Does
- downloads historical Binance Vision kline CSV files
- verifies downloaded archives with Binance checksum files
- stores monthly and daily spot kline data in the Binance Vision folder layout
- merges historical files with recent live Binance candle data
- writes a
<MARKET>-total.csvdataset, for exampleBONKUSDT-total.csv - loads total datasets into pandas DataFrames with timezone handling and optional gap filling
Core Modules
binance_vision_dumper.pyprovidesBinanceVisionDumperfor downloading historical Binance Vision data.binance_vision_client.pycontains safe Binance Vision HTTP, retry, URL validation, and checksum helpers.binance_rest_client.pyprovidesBinanceRestClientfor recent Binance REST API candles.total_dataset_builder.pyprovidesTotalDatasetBuilderfor building total CSV datasets.total_dataset_loader.pyprovidesTotalDatasetLoaderfor loading and normalizing total CSV files.symbols.pyprovides symbol normalization helpers.
Public imports are available from the package root:
from hdw_crypto_data import BinanceVisionDumper, TotalDatasetBuilder, TotalDatasetLoader
Installation
Use Python 3.13 or newer. From the repository root:
py -3.13 -m venv .venv
.\.venv\Scripts\Activate.ps1
py -m pip install -r hdw_crypto_data\requirements.txt
The optional GUI and chart files may need extra packages such as PyQt6, Plotly, pandas-ta, ta, SciPy, and openpyxl.
Folder Layout
Typical repository structure:
HdWCryptoData/
hdw_crypto_data/
binance_vision_client.py
binance_vision_dumper.py
binance_rest_client.py
total_dataset_builder.py
total_dataset_loader.py
symbols.py
requirements.txt
binancedump.py
smoke_test.py
showcase_pyqt_app.py
ta_charts.py
test_*.py
Typical Binance Vision data layout under full_spot:
spot/
monthly/klines/BONKUSDT/1h/*.csv
daily/klines/BONKUSDT/1h/*.csv
Optional Tools
These files are outside the core package:
../binancedump.pyis a small command-line runner forBinanceVisionDumper.../showcase_pyqt_app.pyis a PyQt6 showcase app for testing the pipeline.../ta_charts.pycontains optional technical-analysis and Plotly chart helpers.
These optional tools may require heavier dependencies such as PyQt6, Plotly, pandas-ta, ta, SciPy, and openpyxl.
Settings
Most examples use a settings.json file:
{
"spot": "D:\\Coding\\forecast\\",
"full_spot": "D:\\Coding\\forecast\\spot",
"crypto_icons": "D:\\Coding\\forecast\\crypto_icons",
"preferred_time_zone": "CET",
"quote_currency": "USDT"
}
full_spot should point to the directory containing the spot data tree. The dumper handles both base/spot/... and base/... layouts where possible.
Basic Usage
Download Binance Vision data:
from hdw_crypto_data import BinanceVisionDumper
dumper = BinanceVisionDumper(
path_dir_where_to_dump=r"D:\Coding\forecast\spot",
asset_class="spot",
data_type="klines",
data_frequency="1h",
)
dumper.dump_data(tickers=["BONKUSDT"])
dumper.delete_outdated_daily_results()
Missing Binance archives are not always failures. New listings, inactive symbols, and dates before a market existed can legitimately return 404. The dumper reports not_found separately from network errors, rate limits, checksum failures, and invalid archives. If operational failures occur, BinanceVisionDumpError.failures contains the per-file ArchiveDownloadResult values with date, status, and optional error.
Build a total dataset:
from hdw_crypto_data import BinanceRestClient, BinanceVisionDumper, TotalDatasetBuilder
vision_dumper = BinanceVisionDumper(path_dir_where_to_dump=r"D:\Coding\forecast\spot")
rest_client = BinanceRestClient()
builder = TotalDatasetBuilder(
"BONK",
"settings.json",
force_merge=False,
historical_source=vision_dumper,
recent_source=rest_client,
)
result = builder.build()
print(result.filepath, result.rows)
force_merge=False requires recent historical Binance Vision files before merging. Use force_merge=True to merge anyway when historical files are older or incomplete, for example during manual recovery or experiments.
Load a total dataset:
from hdw_crypto_data import TotalDatasetLoader
loader = TotalDatasetLoader("BONK", "settings.json")
df = loader.load_total_dataframe(mode="ta", preferred_tz="CET")
print(df.tail())
By default the loader cleans the data without synthesizing missing candles:
df = loader.load_total_dataframe(clean=True, fill_gaps=False)
Set fill_gaps=True only when you want a continuous hourly index. In that mode, missing hourly candles are created and numeric fields are filled by interpolation/backfill/forward-fill. The returned DataFrame includes an is_imputed column so synthetic rows can be filtered or audited:
df = loader.load_total_dataframe(fill_gaps=True)
synthetic_rows = df[df["is_imputed"]]
number_of_trades is rounded back to integer values after filling so interpolated trade counts are not fractional.
Run the small download script from the project root:
py -3 binancedump.py BONK
py -3 binancedump.py BONK --start 2026-08-01 --end 2026-08-21
The CLI exits normally on success and prints * * * KLAAR * * *. Argument errors are handled by argparse. Download failures raise BinanceVisionDumpError, so the process exits non-zero and prints the exception traceback unless you catch it from your own wrapper.
Testing
Run the unit tests from the repository root:
$env:NUMBA_DISABLE_JIT='1'
py -m unittest discover -p "test*.py"
NUMBA_DISABLE_JIT=1 avoids optional pandas-ta/numba cache issues when importing chart tests. smoke_test.py is a manual end-to-end script and is not part of unit-test discovery.
Notes
The package downloads public market data from Binance endpoints. Network failures, missing Binance archives, checksum mismatches, rate limits, and invalid archives are reported explicitly by the dumper.
Original design notes: https://code2trade.dev/c
Release files for hdw-crypto-data 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hdw_crypto_data-0.1.0.tar.gz | 24.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hdw_crypto_data-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 44.0 kB
Release files / hdw_crypto_data-0.1.0.tar.gz
| Download URL | hdw_crypto_data-0.1.0.tar.gz |
|---|---|
| Size | 24.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
956bbbe974e4fb4dceb7e81407d67ff287842538efe3082099bae41c8cad2d7a
|
|
BLAKE2b-256 checksum How to use checksums |
0b67ec182b8e84c2057369c19ba702d9b1212af64c1dbbf05ae43f80640bb08d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.13
|
Release files / hdw_crypto_data-0.1.0-py3-none-any.whl
| Download URL | hdw_crypto_data-0.1.0-py3-none-any.whl |
|---|---|
| Size | 20.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1a83e4586a655a9cbe5e3598363b739b4cdc75809fb5f40abd20221514f0931a
|
|
BLAKE2b-256 checksum How to use checksums |
3debd70062a2af0627b9f1d3a87e8a95d948890297656f4c608b4636417d5cdb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.13
|