# Enhanced Pairs Trading Backtest Usage Guide ## Overview The enhanced `pt_backtest.py` script now supports multi-day and multi-instrument backtesting with SQLite database output. This guide explains how to use the new features. ## New Features ### 1. Multi-Day Data Processing - Process multiple data files in a single run - Support for wildcard patterns in configuration files - CLI override for data file specification ### 2. Dynamic Instrument Selection - Auto-detection of instruments from database - CLI override for instrument specification - No need to manually update configuration files ### 3. SQLite Database Output - Automated storage of backtest results - Structured data format for analysis - Optional database output (can be disabled) ## Command Line Arguments ### Required Arguments - `--config`: Path to configuration file - `--result_db`: Path to SQLite database for results (use "NONE" to disable) ### Optional Arguments - `--datafiles`: Comma-separated list of data files (overrides config) - `--instruments`: Comma-separated list of instruments (overrides auto-detection) ## Usage Examples ### Basic Usage (Auto-detect instruments, use config datafiles) ```bash python src/pt_backtest.py --config configuration/crypto.cfg --result_db results.db ``` ### Specify Instruments via CLI ```bash python src/pt_backtest.py \ --config configuration/crypto.cfg \ --result_db results.db \ --instruments "BTC-USDT,ETH-USDT,ADA-USDT" ``` ### Override Data Files via CLI ```bash python src/pt_backtest.py \ --config configuration/crypto.cfg \ --result_db results.db \ --datafiles "20250528.mktdata.ohlcv.db,20250529.mktdata.ohlcv.db" ``` ### Complete Override (Custom instruments and data files) ```bash python src/pt_backtest.py \ --config configuration/crypto.cfg \ --result_db results.db \ --instruments "BTC-USDT,ETH-USDT" \ --datafiles "20250528.mktdata.ohlcv.db,20250529.mktdata.ohlcv.db" ``` ### Disable Database Output ```bash python src/pt_backtest.py \ --config configuration/crypto.cfg \ --result_db NONE ``` ## Configuration File Updates ### Wildcard Support in Data Files The configuration file now supports wildcards in the `datafiles` array: ```json { "datafiles": [ "2025*.mktdata.ohlcv.db", "specific_file.db", "202405*.mktdata.ohlcv.db" ] } ``` ### Multiple Patterns You can specify multiple wildcard patterns: ```json { "datafiles": [ "202405*.mktdata.ohlcv.db", "202406*.mktdata.ohlcv.db", "special_data.db" ] } ``` ## Database Schema The script creates a `pt_bt_results` table with the following schema: | Column | Type | Description | |--------|------|-------------| | date | DATE | Trading date extracted from filename | | pair | TEXT | Trading pair name (e.g., "BTC-USDT & ETH-USDT") | | symbol | TEXT | Individual symbol (e.g., "BTC-USDT") | | open_time | DATETIME | Trade opening time | | open_side | TEXT | Opening side (BUY/SELL) | | open_price | REAL | Opening price | | open_quantity | INTEGER | Opening quantity | | open_disequilibrium | REAL | Disequilibrium at opening | | close_time | DATETIME | Trade closing time | | close_side | TEXT | Closing side (BUY/SELL) | | close_price | REAL | Closing price | | close_quantity | INTEGER | Closing quantity | | close_disequilibrium | REAL | Disequilibrium at closing | | symbol_return | REAL | Individual symbol return (%) | | pair_return | REAL | Combined pair return (%) | ## Auto-Detection Logic ### Instrument Auto-Detection When `--instruments` is not specified, the script: 1. Connects to each data file 2. Queries distinct `instrument_id` values from the configured table 3. Removes the configured prefix (`instrument_id_pfx`) 4. Uses the resulting symbols for pair generation ### Data File Resolution The script resolves data files in this order: 1. If `--datafiles` is specified, use those files 2. Otherwise, process each pattern in config `datafiles`: - Expand wildcards using `glob.glob()` - Resolve relative paths using `data_directory` - Remove duplicates and sort ## Output ### Console Output - Lists all data files to be processed - Shows auto-detected or specified instruments - Displays trade signals for each file - Prints returns by day and pair - Shows grand totals and outstanding positions ### Database Output - Creates database and table automatically - Stores detailed trade information - Includes calculated returns - One record per symbol per trade ## Error Handling The script includes comprehensive error handling: - Invalid data files are skipped with warnings - Database connection errors are reported - Auto-detection failures fall back gracefully - Processing errors are logged with stack traces ## Performance Considerations - Wildcard expansion happens once at startup - Database connections are opened/closed per operation - Large numbers of files are processed sequentially - Memory usage scales with the number of instruments and data points ## Troubleshooting ### Common Issues 1. **No instruments found**: Check that the database contains data for the specified exchange_id 2. **No data files found**: Verify wildcard patterns and data_directory path 3. **Database errors**: Ensure write permissions for the result database path 4. **Memory issues**: Consider processing fewer files at once or reducing instrument count ### Debug Tips - Use `--result_db NONE` to disable database output during testing - Start with a small set of instruments using `--instruments` - Test with explicit file lists using `--datafiles` before using wildcards - Check console output for detailed processing information