jebel-quant/jquantstats/portfolio-robustness
Claude Code and agent skill by jebel-quant/jquantstats
- community
Checking that the SKILL.md file is still in the repository.
Stress-test a jquantstats result rather than just computing it — is this Sharpe real, does it survive execution delay, trading costs, autocorrelation, outliers, or a different sub-period? Use when asked whether a backtest holds up, how sensitive it is to costs or lag, whether performance is luck, or for Monte Carlo, probabilistic Sharpe, or lead/lag analysis.
Install
npx vskill@latest install jebel-quant/jquantstats/portfolio-robustnessSKILL.md
Is the result real?
Computing a Sharpe and asking whether it means anything are different jobs. This skill is the second one.
Start from the shared context — read ${CLAUDE_PLUGIN_ROOT}/reference/portfolio-context.md, then:
Record each stress case as its own named context so the comparison is reproducible rather than a one-off object (jqs_load.py ... --name lag1).
Six ways a good backtest dies
Work down this list; the early entries kill more strategies than the late ones.
1. Execution delay
If the edge disappears when positions are shifted by a period, it was reading the future. This is a Portfolio-only test — a return series cannot express it.
A peak at lag 0 that falls off a cliff at lag 1 is the signature to report. The lead side (negative lags) matters too: information ratio that is strong ahead of the trade is a look-ahead artefact, not skill.
2. Trading costs
Report the bps level at which the edge reaches zero — that number is far more useful than a Sharpe at one assumed cost. Pair it with turnover: high turnover plus cost sensitivity is the common way a paper result fails in production.
3. Autocorrelation inflating the Sharpe
Serially correlated returns understate risk, so the Sharpe flatters.
A large gap between sharpe and smart_sharpe is the finding. Illiquid or smoothed holdings are the usual cause.
4. Statistical significance
A Sharpe from a short sample is barely an estimate.
probabilistic_sharpe_ratio returns NaN when the standard deviation or the higher moments are unusable, or when estimated Sharpe variance is non-positive — treat NaN as "the sample cannot support this claim", not as an error to route around.
5. Path dependence — Monte Carlo
Block bootstrap, so serial structure is partly preserved:
Report where the observed result sits in the simulated distribution. The drawdown distribution is usually the decision-relevant one: a strategy whose 95th-percentile simulated drawdown exceeds the risk budget is not viable at that size regardless of its Sharpe.
6. Concentration — a few days carrying everything
If the Sharpe collapses once the top 5% of days are removed, the result rests on a handful of observations. Say so explicitly.
Stability through time
Full-sample metrics hide regime dependence.
Record sub-periods as named contexts (--start / --end) rather than inline truncation when the comparison is the deliverable.
Position smoothing
Whether the signal needs its exact timing, or works held longer:
Performance that improves under smoothing usually means the raw signal is noisy and turnover is being wasted.
Ruin and sizing
How to report
- Lead with what failed, not what passed. A robustness pass whose findings
are all reassuring is usually a pass that did not test hard enough.
- Give the breaking point, not a verdict: the bps at which the edge vanishes,
the lag at which IR crosses zero, the percentile the observed result occupies.
- Name the sample. A 320-row backtest cannot support strong claims regardless of
the metric, and sharpe_variance / probabilistic_sharpe_ratio should be quoted alongside any headline Sharpe from a short history.
- Carry the digest's warnings through. Nulls, a positional date axis, or a
misinferred periods_per_year invalidate a robustness conclusion exactly as they invalidate the underlying metric — if any are outstanding, use portfolio-diagnostics first.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugin/skills/portfolio-robustness/SKILL.md
Popularity
- Repository stars
- 43
- Repository forks
- 10
- 7-day trend score
- 19
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 31 Aug 2026, 2 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/jebel-quant/jquantstats/portfolio-robustness)