11 KiB
Strategy Backtest Runner
A comprehensive and efficient backtest runner for executing predefined trading strategies with advanced visualization and analysis capabilities.
Overview
The Strategy Backtest Runner (strategy_run.py) executes specific trading strategies with predefined parameters defined in a JSON configuration file. Unlike the parameter optimization script, this runner focuses on testing and comparing specific strategy configurations with detailed market analysis and visualization.
Features
- JSON Configuration: Define strategies and parameters in easy-to-edit JSON files
- Multiple Strategy Support: Run multiple strategies in sequence with a single command
- All Strategy Types: Support for MetaTrend, BBRS, and Random strategies
- Organized Results: Automatic folder structure creation for each run
- Advanced Visualization: Detailed plots showing portfolio performance and market context
- Full Market Data Integration: Continuous price charts with buy/sell signals overlay
- Signal Export: Complete buy/sell signal data exported to CSV files
- Real-time File Saving: Individual strategy results saved immediately upon completion
- Comprehensive Analysis: Multiple plot types for thorough performance analysis
- Detailed Results: Comprehensive result reporting with CSV and JSON export
- Result Analysis: Automatic summary generation and performance comparison
- Error Handling: Robust error handling with detailed logging
- Flexible Configuration: Support for different data files, date ranges, and trader parameters
Usage
Basic Usage
# Run strategies from a configuration file
python test/backtest/strategy_run.py --config configs/strategy/example_strategies.json
# Save results to a custom directory
python test/backtest/strategy_run.py --config configs/strategy/my_strategies.json --results-dir my_results
# Enable verbose logging
python test/backtest/strategy_run.py --config configs/strategy/example_strategies.json --verbose
Enhanced Analysis Features
Each run automatically generates:
- Organized folder structure with timestamp for easy management
- Real-time file saving - results saved immediately after each strategy completes
- Full market data visualization - continuous price charts show complete market context
- Signal tracking - all buy/sell decisions exported with precise timing and pricing
- Multi-layered analysis - from individual trade details to portfolio-wide comparisons
- Professional plots - high-resolution (300 DPI) charts suitable for reports and presentations
Create Example Configuration
# Create an example configuration file
python test/backtest/strategy_run.py --create-example configs/example_strategies.json
Configuration File Format
The configuration file uses JSON format with two main sections:
Backtest Settings
{
"backtest_settings": {
"data_file": "btcusd_1-min_data.csv",
"data_dir": "data",
"start_date": "2023-01-01",
"end_date": "2023-01-31",
"initial_usd": 10000
}
}
Strategy Definitions
{
"strategies": [
{
"name": "MetaTrend_Conservative",
"type": "metatrend",
"params": {
"supertrend_periods": [12, 10, 11],
"supertrend_multipliers": [3.0, 1.0, 2.0],
"min_trend_agreement": 0.8,
"timeframe": "15min"
},
"trader_params": {
"stop_loss_pct": 0.02,
"portfolio_percent_per_trade": 0.5
}
}
]
}
Strategy Types
MetaTrend Strategy
Parameters:
supertrend_periods: List of periods for multiple supertrend indicatorssupertrend_multipliers: List of multipliers for supertrend indicatorsmin_trend_agreement: Minimum agreement threshold between indicators (0.0-1.0)timeframe: Data aggregation timeframe ("1min", "5min", "15min", "30min", "1h")
BBRS Strategy
Parameters:
bb_length: Bollinger Bands periodbb_std: Bollinger Bands standard deviation multiplierrsi_length: RSI periodrsi_overbought: RSI overbought thresholdrsi_oversold: RSI oversold thresholdtimeframe: Data aggregation timeframe
Random Strategy
Parameters:
signal_probability: Probability of generating a signal (0.0-1.0)timeframe: Data aggregation timeframe
Trader Parameters
All strategies support these trader parameters:
stop_loss_pct: Stop loss percentage (e.g., 0.02 for 2%)portfolio_percent_per_trade: Percentage of portfolio to use per trade (0.0-1.0)
Results Organization
Each run creates an organized folder structure for easy navigation and analysis:
results/
└── [config_name]_[timestamp]/
├── strategy_1_[strategy_name].json # Individual strategy data
├── strategy_1_[strategy_name]_plot.png # 4-panel performance plot
├── strategy_1_[strategy_name]_detailed_plot.png # 3-panel market analysis
├── strategy_1_[strategy_name]_trades.csv # Trade details
├── strategy_1_[strategy_name]_signals.csv # All buy/sell signals
├── strategy_2_[strategy_name].* # Second strategy files
├── ... # Additional strategies
├── summary.csv # Strategy comparison table
├── summary_plot.png # Multi-strategy comparison
└── summary_*.json # Comprehensive results
Visualization Types
The runner generates three types of plots for comprehensive analysis:
1. Individual Strategy Plot (4-Panel)
- Equity Curve: Portfolio value over time
- Trade P&L: Individual trade profits/losses
- Drawdown: Portfolio drawdown visualization
- Statistics: Strategy performance summary
2. Detailed Market Analysis Plot (3-Panel)
- Portfolio Signals: Portfolio value with buy/sell signal markers
- Market Price: Full continuous market price with entry/exit points
- Combined View: Dual-axis plot showing market vs portfolio performance
3. Summary Comparison Plot (4-Panel)
- Returns Comparison: Total returns across all strategies
- Trade Counts: Number of trades per strategy
- Risk vs Return: Win rate vs maximum drawdown scatter plot
- Statistics Table: Comprehensive performance metrics
Output Files
The runner generates comprehensive output files organized in dedicated folders:
Individual Strategy Files (per strategy)
strategy_N_[name].json: Complete strategy data and metadatastrategy_N_[name]_plot.png: 4-panel performance analysis plotstrategy_N_[name]_detailed_plot.png: 3-panel market context plotstrategy_N_[name]_trades.csv: Detailed trade informationstrategy_N_[name]_signals.csv: All buy/sell signals with timestamps
Summary Files (per run)
summary.csv: Strategy comparison tablesummary_plot.png: Multi-strategy comparison visualizationsummary_*.json: Comprehensive results and metadata
Signal Data Format
Each signal CSV contains:
signal_id: Unique signal identifiersignal_type: BUY or SELLtime: Signal timestampprice: Execution pricetrade_id: Associated trade numberquantity: Trade quantityvalue: Trade value (quantity × price)strategy: Strategy name
Example Configurations
Simple MetaTrend Test
{
"backtest_settings": {
"data_file": "btcusd_1-min_data.csv",
"start_date": "2023-01-01",
"end_date": "2023-01-07",
"initial_usd": 10000
},
"strategies": [
{
"name": "MetaTrend_Test",
"type": "metatrend",
"params": {
"supertrend_periods": [12, 10],
"supertrend_multipliers": [3.0, 1.0],
"min_trend_agreement": 0.5,
"timeframe": "15min"
},
"trader_params": {
"stop_loss_pct": 0.02,
"portfolio_percent_per_trade": 0.5
}
}
]
}
Multiple Strategy Comparison
{
"backtest_settings": {
"data_file": "btcusd_1-min_data.csv",
"start_date": "2023-01-01",
"end_date": "2023-01-31",
"initial_usd": 10000
},
"strategies": [
{
"name": "Conservative_MetaTrend",
"type": "metatrend",
"params": {
"supertrend_periods": [12, 10, 11],
"supertrend_multipliers": [3.0, 1.0, 2.0],
"min_trend_agreement": 0.8,
"timeframe": "15min"
},
"trader_params": {
"stop_loss_pct": 0.02,
"portfolio_percent_per_trade": 0.5
}
},
{
"name": "Aggressive_MetaTrend",
"type": "metatrend",
"params": {
"supertrend_periods": [10, 8],
"supertrend_multipliers": [2.0, 1.0],
"min_trend_agreement": 0.5,
"timeframe": "5min"
},
"trader_params": {
"stop_loss_pct": 0.03,
"portfolio_percent_per_trade": 0.8
}
},
{
"name": "BBRS_Baseline",
"type": "bbrs",
"params": {
"bb_length": 20,
"bb_std": 2.0,
"rsi_length": 14,
"rsi_overbought": 70,
"rsi_oversold": 30,
"timeframe": "15min"
},
"trader_params": {
"stop_loss_pct": 0.025,
"portfolio_percent_per_trade": 0.6
}
}
]
}
Command Line Options
--config: Path to JSON configuration file (required)--results-dir: Directory for saving results (default: "results")--create-example: Create example config file at specified path--verbose: Enable verbose logging for debugging
Error Handling
The runner includes comprehensive error handling:
- Configuration Validation: Validates JSON structure and required fields
- Data File Verification: Checks if data files exist before running
- Strategy Creation: Handles unknown strategy types gracefully
- Backtest Execution: Captures and logs individual strategy failures
- Result Saving: Ensures results are saved even if some strategies fail
Integration
This runner integrates seamlessly with the existing IncrementalTrader framework:
- Uses the same
IncBacktesterand strategy classes - Compatible with all existing data formats
- Leverages the same result saving utilities
- Maintains consistency with optimization scripts
Performance
- Sequential Execution: Strategies run one after another for clear logging
- Real-time Results: Individual strategy files saved immediately upon completion
- Efficient Data Loading: Market data loaded once per run for all visualizations
- Progress Tracking: Clear progress indication for long-running backtests
- Detailed Timing: Individual strategy execution times are tracked
- High-Quality Output: Professional 300 DPI plots suitable for presentations
Best Practices
- Start Small: Test with short date ranges first
- Validate Data: Ensure data files exist and cover the specified date range
- Monitor Resources: Watch memory usage for very long backtests
- Save Configs: Keep configuration files organized for reproducibility
- Use Descriptive Names: Give strategies clear, descriptive names
- Test Incrementally: Add strategies one by one when debugging
- Leverage Visualizations: Use detailed plots to understand market context and strategy behavior
- Analyze Signals: Review signal CSV files to understand strategy decision patterns
- Compare Runs: Use organized folder structure to compare different parameter sets
- Monitor Execution: Watch real-time progress as individual strategies complete