5.7 KiB
5.7 KiB
External Dependencies
Overview
This document describes all external dependencies used in the orderflow backtest system, their purposes, versions, and justifications for inclusion.
Production Dependencies
Core Framework Dependencies
Dash (^2.18.2)
- Purpose: Web application framework for interactive visualizations
- Usage: Real-time chart rendering and user interface
- Justification: Mature Python-based framework with excellent Plotly integration
- Key Features: Reactive components, built-in server, callback system
Dash Bootstrap Components (^1.6.0)
- Purpose: Bootstrap CSS framework integration for Dash
- Usage: Responsive layout grid and modern UI styling
- Justification: Provides professional appearance with minimal custom CSS
Plotly (^5.24.1)
- Purpose: Interactive charting and visualization library
- Usage: OHLC candlesticks, volume bars, depth charts, OBI metrics
- Justification: Industry standard for financial data visualization
- Key Features: WebGL acceleration, zooming/panning, dark themes
Data Processing Dependencies
Pandas (^2.2.3)
- Purpose: Data manipulation and analysis library
- Usage: Minimal usage for data structure conversions in visualization
- Justification: Standard tool for financial data handling
- Note: Usage kept minimal to maintain performance
Typer (^0.13.1)
- Purpose: Modern CLI framework
- Usage: Command-line argument parsing and help generation
- Justification: Type-safe, auto-generated help, better UX than argparse
- Key Features: Type hints integration, automatic validation
Data Storage Dependencies
SQLite3 (Built-in)
- Purpose: Database connectivity for historical data
- Usage: Read-only access to orderbook and trade data
- Justification: Built into Python, no external dependencies, excellent performance
- Configuration: Optimized with immutable mode and mmap
Development and Testing Dependencies
Pytest (^8.3.4)
- Purpose: Testing framework
- Usage: Unit tests, integration tests, test discovery
- Justification: Standard Python testing tool with excellent plugin ecosystem
Coverage (^7.6.9)
- Purpose: Code coverage measurement
- Usage: Test coverage reporting and quality metrics
- Justification: Essential for maintaining code quality
Build and Package Management
UV (Package Manager)
- Purpose: Fast Python package manager and task runner
- Usage: Dependency management, virtual environments, script execution
- Justification: Significantly faster than pip/poetry, better lock file format
- Commands:
uv sync,uv run,uv add
Python Standard Library Usage
Core Libraries
- sqlite3: Database connectivity
- json: JSON serialization for IPC
- pathlib: Modern file path handling
- subprocess: Process management for visualization
- logging: Structured logging throughout application
- datetime: Date/time parsing and manipulation
- dataclasses: Structured data types
- typing: Type annotations and hints
- tempfile: Atomic file operations
- ast: Safe evaluation of Python literals
Performance Libraries
- itertools: Efficient iteration patterns
- functools: Function decoration and caching
- collections: Specialized data structures
Dependency Justifications
Why Dash Over Alternatives?
- vs. Streamlit: Better real-time updates, more control over layout
- vs. Flask + Custom JS: Integrated Plotly support, faster development
- vs. Jupyter: Better for production deployment, process isolation
Why SQLite Over Alternatives?
- vs. PostgreSQL: No server setup required, excellent read performance
- vs. Parquet: Better for time-series queries, built-in indexing
- vs. CSV: Proper data types, much faster queries, atomic transactions
Why UV Over Poetry/Pip?
- vs. Poetry: Significantly faster dependency resolution and installation
- vs. Pip: Better dependency locking, integrated task runner
- vs. Pipenv: More active development, better performance
Version Pinning Strategy
Patch Version Pinning
- Core dependencies (Dash, Plotly) pinned to patch versions
- Prevents breaking changes while allowing security updates
Range Pinning
- Development tools use caret (^) ranges for flexibility
- Testing tools can update more freely
Lock File Management
uv.lockensures reproducible builds across environments- Regular updates scheduled monthly for security patches
Security Considerations
Dependency Scanning
- Regular audit of dependencies for known vulnerabilities
- Automated updates for security patches
- Minimal dependency tree to reduce attack surface
Data Isolation
- Read-only database access prevents data modification
- No external network connections required for core functionality
- All file operations contained within project directory
Performance Impact
Bundle Size
- Core runtime: ~50MB with all dependencies
- Dash frontend: Additional ~10MB for JavaScript assets
- SQLite: Zero overhead (built-in)
Startup Time
- Cold start: ~2-3 seconds for full application
- UV virtual environment activation: ~100ms
- Database connection: ~50ms per file
Memory Usage
- Base application: ~100MB
- Per 1000 OHLC bars: ~5MB additional
- Plotly charts: ~20MB for complex visualizations
Maintenance Schedule
Monthly
- Security update review and application
- Dependency version bump evaluation
Quarterly
- Major version update consideration
- Performance impact assessment
- Alternative technology evaluation
Annually
- Complete dependency audit
- Technology stack review
- Migration planning for deprecated packages