Changelog¶
All notable changes to qldata are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.3.0] - 2025-12-05¶
Added¶
- Resilience by Default:
qd.stream()now enables auto-reconnect, rate limiting, sequence tracking, and time sync by default - ResilienceConfig: New configuration class for customizing resilience behavior
- RateLimitManager: Intelligent rate limit handling for API calls
- SequenceTracker: Detect and log missing messages in streams
- TimeSyncManager: Clock synchronization with exchange servers
- DataQualityMonitor: Real-time latency, throughput, and staleness tracking
- AlertManager: Callback-based alerting for production systems
- ConnectionStateManager: Track connection state transitions
Changed¶
- Streaming sessions now include resilience features by default
- Improved WebSocket reconnection with exponential backoff
- Better error messages for connection failures
Fixed¶
- WebSocket connection drops no longer cause data loss
- Rate limit handling for high-frequency queries
- Timestamp handling for Bybit linear contracts
[0.2.0] - 2025-11-15¶
Added¶
- Fluent API: New chainable query builder for
qd.data()andqd.stream() - Transform Pipeline:
clean(),fill_forward(),resample()methods - Bybit Support: Full support for Bybit spot and linear perpetuals
- Multi-Symbol Queries: Parallel downloads for multiple symbols
- Symbol Discovery:
list_symbols()with filtering options
Changed¶
- Unified API design across all data sources
- Improved DataFrame column naming consistency
- Better timezone handling (all UTC)
Deprecated¶
- Old-style positional arguments (use keyword arguments)
[0.1.0] - 2025-10-01¶
Added¶
- Initial release
- Binance spot and USDM futures support
- Historical data fetching with
qd.data() - Live streaming with
qd.stream() - Basic data models (Bar, Tick, OrderBook)
- Symbol information API
- Parquet and DuckDB storage backends
Upgrade Guide¶
0.2.x → 0.3.0¶
Resilience is now enabled by default. To opt out:
# Disable resilience
stream = qd.stream(["BTCUSDT"], source="binance") \
.resolution("tick") \
.on_data(handler) \
.get(start=True, resilience=False)
0.1.x → 0.2.0¶
Update to fluent API style: