149 lines
4.2 KiB
Markdown
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
|
|
|