8.0 KiB
V11 Test Parameter Sweep
Fast validation sweep for v11 "Money Line All Filters" indicator before full 65,536-combination optimization.
Overview
Purpose: Verify v11 indicator produces valid backtest data with varied P&L before committing to 30-35 hour full sweep.
Test Size: 256 combinations (2^8 parameters)
Expected Runtime: 6-25 minutes
Workers: 2 × 27 cores (85% CPU limit)
Output: CSV files + SQLite database
Critical v11 Fix
v9 Bug: Filters were calculated but NOT applied to signals (broken logic)
v11 Fix: ALL filters must pass for signal generation (lines 271-272 from pinescript)
# v11: Filters actually applied
if adx_ok and volume_ok and rsi_ok and pos_ok and entry_buffer_ok:
signals.append(...) # Signal only fires when ALL conditions met
Test Parameter Grid
8 parameters × 2 values each = 256 combinations:
| Parameter | Values | Purpose |
|---|---|---|
flip_threshold |
0.5, 0.6 | % price must move to flip trend |
adx_min |
18, 21 | Minimum ADX for trend strength |
long_pos_max |
75, 80 | Max price position for longs (%) |
short_pos_min |
20, 25 | Min price position for shorts (%) |
vol_min |
0.8, 1.0 | Minimum volume ratio |
entry_buffer_atr |
0.15, 0.20 | ATR buffer beyond Money Line |
rsi_long_min |
35, 40 | RSI minimum for longs |
rsi_short_max |
65, 70 | RSI maximum for shorts |
Worker Configuration
Worker 1 (pve-nu-monitor01)
- Host: root@10.10.254.106
- Cores: 27 (85% of 32 threads)
- Availability: 24/7 no restrictions
- Workspace: /home/comprehensive_sweep
Worker 2 (pve-srvmon01)
- Host: root@10.20.254.100 (via Worker 1 SSH hop)
- Cores: 27 (85% of 32 threads)
- Availability:
- Weekdays (Mon-Fri): 6 PM - 8 AM only (nights)
- Weekends (Sat-Sun): 24/7 at 85%
- Office hours (Mon-Fri 8am-6pm): DISABLED
- Workspace: /home/backtest_dual/backtest
Expected Performance
Test sweep (256 combos):
- Worker 1 only (weekday daytime): ~25 minutes
- Both workers (nights/weekends): ~12-15 minutes
Full sweep (65,536 combos) - after test passes:
- Optimal start: Friday 6 PM
- Completion: ~30-35 hours (by Tuesday morning)
Usage
Step 1: Deploy to Cluster
# On local machine
cd /home/icke/traderv4
rsync -avz --exclude 'node_modules' --exclude '.next' cluster/ root@10.10.254.106:/home/comprehensive_sweep/
rsync -avz backtester/ root@10.10.254.106:/home/comprehensive_sweep/backtester/
Step 2: Launch Test Sweep
# SSH to Worker 1
ssh root@10.10.254.106
# Navigate to workspace
cd /home/comprehensive_sweep
# Launch coordinator
bash run_v11_test_sweep.sh
Step 3: Monitor Progress
# Watch coordinator logs
tail -f coordinator_v11_test.log
# Check database status
sqlite3 exploration.db "SELECT id, status, assigned_worker FROM v11_test_chunks"
# Check completion
sqlite3 exploration.db "SELECT COUNT(*) FROM v11_test_strategies"
# Expected: 256
# View top results
sqlite3 exploration.db "SELECT params, pnl, total_trades FROM v11_test_strategies ORDER BY pnl DESC LIMIT 10"
Output Files
CSV Results
Location: cluster/v11_test_results/
Files:
v11_test_chunk_0000_results.csv(128 combinations)v11_test_chunk_0001_results.csv(128 combinations)
Format:
flip_threshold,adx_min,long_pos_max,short_pos_min,vol_min,entry_buffer_atr,rsi_long_min,rsi_short_max,pnl,win_rate,profit_factor,max_drawdown,total_trades
0.5,18,75,20,0.8,0.15,35,65,245.32,58.3,1.245,125.40,48
...
Database Tables
v11_test_chunks:
CREATE TABLE v11_test_chunks (
id TEXT PRIMARY KEY,
start_combo INTEGER,
end_combo INTEGER,
total_combos INTEGER,
status TEXT,
assigned_worker TEXT,
started_at INTEGER,
completed_at INTEGER
);
v11_test_strategies:
CREATE TABLE v11_test_strategies (
id INTEGER PRIMARY KEY AUTOINCREMENT,
chunk_id TEXT,
params TEXT,
pnl REAL,
win_rate REAL,
profit_factor REAL,
max_drawdown REAL,
total_trades INTEGER,
FOREIGN KEY (chunk_id) REFERENCES v11_test_chunks(id)
);
Verification Steps
After sweep completes (~6-25 minutes):
# 1. Check output files exist
ls -lh cluster/v11_test_results/
# Expected: 2 CSV files
# 2. Verify database has all strategies
sqlite3 cluster/exploration.db "SELECT COUNT(*) FROM v11_test_strategies"
# Expected: 256
# 3. Check for varied PnL (NOT all zeros like v9 bug)
head -10 cluster/v11_test_results/v11_test_chunk_0000_results.csv
# Should show different PnL values
# 4. View top 5 results
sqlite3 cluster/exploration.db "SELECT params, pnl, total_trades FROM v11_test_strategies ORDER BY pnl DESC LIMIT 5"
# Should show PnL > $0 and trades > 0
# 5. Check coordinator logs
tail -100 cluster/coordinator_v11_test.log
# Should show "V11 TEST SWEEP COMPLETE!"
Success Criteria
✅ Completes in <30 minutes
✅ CSV files have 256 rows total
✅ PnL values are varied (not all zeros)
✅ Database has 256 strategies
✅ Top result shows PnL > $0 and trades > 0
✅ Worker 2 respected office hours (if applicable)
Telegram Notifications
Bot sends 3 notifications:
-
Start: When coordinator launches
- Shows available workers
- Worker 2 status (active or office hours)
-
Completion: When all chunks finish
- Duration in minutes
- Total strategies tested
- Links to results
-
Failure: If coordinator crashes
- Premature stop notification
Troubleshooting
Worker 2 Not Starting (Weekday Daytime)
Expected: Worker 2 is disabled Mon-Fri 8am-6pm for office hours
Action: Wait until 6 PM or start on weekend for full 2-worker speed
No Signals Generated (All Zero PnL)
Symptom: All PnL values are 0.0
Cause: Filters too strict (blocks all signals)
Action: This is the validation - if v11 produces zeros like v9, don't run full sweep
SSH Timeout on Worker 2
Symptom: Worker 2 fails to deploy
Cause: SSH hop connection issue
Action:
# Test connection manually
ssh -o ProxyJump=root@10.10.254.106 root@10.20.254.100 'hostname'
Database Locked
Symptom: SQLite error "database is locked"
Cause: Coordinator still running
Action:
# Find coordinator PID
ps aux | grep v11_test_coordinator
# Kill gracefully
kill <PID>
Next Steps After Test Passes
-
User verifies data quality:
- PnL values varied (not all zeros)
- Top results show positive P&L
- Trade counts > 0
-
If test PASSES:
- Create full 65,536-combo sweep coordinator
- 4096 values per parameter (comprehensive grid)
- Start Friday 6 PM for optimal weekend utilization
- Complete by Tuesday morning (~30-35 hours)
-
If test FAILS (all zeros):
- v11 filters may still be broken
- Debug indicator logic
- Compare with pinescript lines 271-272
- Don't run full sweep until fixed
Architecture
run_v11_test_sweep.sh
├── Initializes database (2 chunks)
└── Launches v11_test_coordinator.py
├── Worker 1 (always available)
│ └── v11_test_worker.py (27 cores)
│ └── backtester/v11_moneyline_all_filters.py
└── Worker 2 (office hours aware)
└── v11_test_worker.py (27 cores)
└── backtester/v11_moneyline_all_filters.py
Files
| File | Purpose | Lines |
|---|---|---|
run_v11_test_sweep.sh |
Launch script | 52 |
v11_test_coordinator.py |
Orchestrates sweep | 384 |
v11_test_worker.py |
Processes chunks | 296 |
backtester/v11_moneyline_all_filters.py |
Indicator logic | 335 |
References
- Pinescript:
workflows/trading/moneyline_v11_all_filters.pinescript - v9 Bug: Filters calculated but not applied (lines 271-272 broken)
- v9 Coordinator:
cluster/v9_advanced_coordinator.py(reference pattern) - Math Utils:
backtester/math_utils.py(ATR, ADX, RSI) - Simulator:
backtester/simulator.py(backtest engine)