orderflow_backtest/docs/modules/dependencies.md

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.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