
Backtest Diagnose
Diagnose failed or underperforming backtests, locate the root cause, and fix the issue
Install
npx skills add HKUDS/Vibe-Trading --skill backtest-diagnose -g -a claude-code -y- Repository
- HKUDS/Vibe-Trading37.4k
- Category
- Engineering
- Updated
- 3d ago
- License
- MIT
- Context cost
- Lightabout 1,207 tokens
- Runs scripts
- No, instructions only
What it does
Diagnose failed or underperforming backtests, locate the root cause, and fix the issue
Backtest Diagnosis
Overview
Use this skill when a user reports that a backtest failed, raised an error, or produced poor results.
Diagnostic Workflow
- Read existing artifacts: use
read_fileto inspectartifacts/metrics.csv,equity.csv, andtrades.csv - Read the code: use
read_fileto inspectcode/signal_engine.pyandconfig.json - Classify the issue: determine the root cause using the error taxonomy below
- Apply the fix: use
edit_fileto modify the code, then rerun the backtest - Verify the fix: use
read_fileto inspect the newmetrics.csv
Error Taxonomy
Runtime Errors (exit_code != 0)
| Error Type | Common Cause | Fix |
|---|---|---|
| ImportError | Missing dependency | bash("pip install xxx") |
| KeyError | DataFrame column-name mismatch | Check the actual column names in data_map |
| IndexError | Empty data or insufficient length | Add length checks |
| TypeError | Incorrect signal type | Ensure the return value is pd.Series |
Logic Bugs (Backtest Succeeds but Results Are Abnormal)
- Zero trades (
trade_count=0): signal-logic bug. Conditions are too strict, so the signal stays at 0. Check whether entry and exit logic is reasonable, and inspect the signal series to confirm it is not all zeros. - Late trades (first trade occurs more than 2 years after the backtest start): data-filtering bug. The lookback window may be too long, or the initial data segment may have been dropped. Shorten the window or check whether
dropnais too aggressive. - Capital utilization < 50% (mostly in cash): position-sizing bug. Signal triggers may be too sparse, or the position-sizing logic may be wrong.
- Open position at the end (a position still exists when the backtest ends): exit-timing bug. Forced liquidation may be missing, or exit logic does not cover the final segment.
