163 lines
5.7 KiB
Markdown
163 lines
5.7 KiB
Markdown
|
|
# 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.lock` ensures 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
|