4.2 KiB
4.2 KiB
Backtesting Implementation Summary
Completed Tasks
1. Database Schema Validation ✓
- Created
backend/scripts/validateSchema.jsscript - 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_INTRADAYfrom1to30(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
- Changed
- Handles Yahoo Finance limitations gracefully
3. Enhanced Backtester ✓
- Created
backend/src/services/performanceMetrics.jswith:- 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.jswith:POST /api/backtest/run- Run single backtestPOST /api/backtest/batch- Run multiple backtestsGET /api/backtest/results/:id- Get backtest results by IDPOST /api/backtest/compare- Compare multiple strategies side-by-side
- Added strategy scoring for ranking
- Maintained backward compatibility with existing endpoints
Usage
Running Schema Validation
cd backend
node scripts/validateSchema.js
Pulling Historical Data
# 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:
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:
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
# 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
- Run Schema Validation:
npm run validate-schemain backend directory - Pull Historical Data: Run
python yahhooscript.py --only AAPLto test, then full universe - Test Backtesting: Run
npm run test-backtesteror use API endpoints - Monitor Performance: Check that queries perform well with 30 days of data
- 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