institutional-trader/BACKTESTING_IMPLEMENTATION_...

149 lines
4.2 KiB
Markdown

# Backtesting Implementation Summary
## Completed Tasks
### 1. Database Schema Validation ✓
- Created `backend/scripts/validateSchema.js` script
- Validates all required tables exist
- Checks indexes on critical tables
- Verifies PRIMARY KEY constraints
- Checks for data type inconsistencies
- Can be run with: `node backend/scripts/validateSchema.js`
### 2. Historical Data Pull Configuration ✓
- Updated `yahhooscript.py`:
- Changed `LOOKBACK_DAYS_INTRADAY` from `1` to `30` (1 month)
- Enhanced `run_intraday_batched()` function to automatically select interval:
- 1-7 days: Uses 1-minute intervals
- 8-60 days: Uses 5-minute intervals (handles 30-day requirement)
- >60 days: Uses 15-minute intervals
- Handles Yahoo Finance limitations gracefully
### 3. Enhanced Backtester ✓
- Created `backend/src/services/performanceMetrics.js` with:
- Sharpe ratio calculation
- Maximum drawdown tracking
- Win/loss streak calculation
- Session-based performance (PRE/RTH/POST)
- Best/worst performing symbols
- Equity curve generation
- Updated `backend/src/services/backtester.js`:
- Integrated new performance metrics
- Enhanced price lookup with daily data fallback
- Improved error handling for missing data
### 4. Backtest API Endpoints ✓
- Enhanced `backend/src/routes/backtest.js` with:
- `POST /api/backtest/run` - Run single backtest
- `POST /api/backtest/batch` - Run multiple backtests
- `GET /api/backtest/results/:id` - Get backtest results by ID
- `POST /api/backtest/compare` - Compare multiple strategies side-by-side
- Added strategy scoring for ranking
- Maintained backward compatibility with existing endpoints
## Usage
### Running Schema Validation
```bash
cd backend
node scripts/validateSchema.js
```
### Pulling Historical Data
```bash
# Pull data for all symbols (30 days, 5-minute intervals)
python yahhooscript.py
# Pull data for a single symbol
python yahhooscript.py --only AAPL
```
### Running Backtests via API
**Single Backtest:**
```bash
curl -X POST http://localhost:3010/api/backtest/run \
-H "Content-Type: application/json" \
-d '{
"pattern": {
"minRocketScore": 5.0,
"requireTapeAlignment": true,
"session": "RTH"
},
"options": {
"lookbackDays": 30,
"exitStrategy": "target_stop",
"targetPct": 1.5,
"stopPct": 1.5
}
}'
```
**Compare Strategies:**
```bash
curl -X POST http://localhost:3010/api/backtest/compare \
-H "Content-Type: application/json" \
-d '{
"strategies": [
{
"name": "High Score RTH",
"pattern": { "rocketScoreMin": 5, "session": "RTH" }
},
{
"name": "Tape Aligned",
"pattern": { "rocketScoreMin": 3, "tapeAligned": true }
}
],
"options": {
"lookbackDays": 30
}
}'
```
## New Metrics Available
The enhanced backtester now provides:
- **Sharpe Ratio**: Risk-adjusted return metric
- **Maximum Drawdown**: Largest peak-to-trough decline
- **Win/Loss Streaks**: Consecutive wins and losses
- **Session Performance**: Separate metrics for PRE/RTH/POST sessions
- **Symbol Performance**: Best and worst performing symbols
- **Equity Curve**: Portfolio value over time
## Testing
### Quick Test Commands
```bash
# Validate database schema
cd backend
npm run validate-schema
# Test backtester functionality
npm run test-backtester
# Pull historical data (single symbol for testing)
python yahhooscript.py --only AAPL
# Pull full universe (30 days)
python yahhooscript.py
```
See `TESTING_GUIDE.md` for detailed testing instructions.
## Next Steps
1. **Run Schema Validation**: `npm run validate-schema` in backend directory
2. **Pull Historical Data**: Run `python yahhooscript.py --only AAPL` to test, then full universe
3. **Test Backtesting**: Run `npm run test-backtester` or use API endpoints
4. **Monitor Performance**: Check that queries perform well with 30 days of data
5. **Review Results**: Analyze backtest results and refine trading patterns
## Notes
- Yahoo Finance provides 1-minute data for last 7 days only
- For 30-day lookback, the script automatically uses 5-minute intervals
- The backtester falls back to daily data if intraday data is unavailable
- All API endpoints maintain backward compatibility