weekly-performance-digest
tradermonty/claude-trading-skills
Generate weekly performance summaries from closed trades with win rate, expectancy, profit factor, and pattern analysis.
What is weekly-performance-digest?
Weekly Performance Digest aggregates closed trades from trader-memory-core into a single performance report with headline metrics (win rate, expectancy, profit factor, R-multiple, MAE/MFE) and breakdowns by source skill, exit reason, thesis type, sector, and mechanism. Pure local calculation—no API required.
- Compute win rate, expectancy, profit factor, and R-multiple from closed theses
- Calculate average winner/loser, largest winner/loser, and holding-day metrics
- Analyze MAE/MFE (maximum adverse/favorable excursion) across trades
- Break down performance by source skill, exit reason, thesis type, sector, mechanism tag, and screening grade
- Generate both JSON and human-readable Markdown reports
- Track partial trims separately from closed trades to avoid double-counting
How to install weekly-performance-digest
npx skills add https://github.com/tradermonty/claude-trading-skills --skill weekly-performance-digest- Python 3.9+ with PyYAML installed
- A trader-memory-core state directory with thesis YAML files (state/theses/)
How to use weekly-performance-digest
- 1.Run the digest script with date range: python3 skills/weekly-performance-digest/scripts/generate_weekly_digest.py --state-dir state/theses --from-date YYYY-MM-DD --to-date YYYY-MM-DD --output-dir reports/
- 2.Omit date flags to default to the trailing 7 days
- 3.Review the generated Markdown report (weekly_digest_<to-date>.md) for executive summary, metrics table, and pattern breakdowns
- 4.Consume the JSON output (weekly_digest_<to-date>.json) for downstream analysis or monthly aggregation
- 5.Act on findings through your normal review process—the skill is descriptive only
Use cases
- Review aggregate realized performance at the end of a trading week
- Identify which source skills, sectors, or exit reasons drove wins versus losses
- Feed weekly digests into a month-end review by combining four weeks of data
- Conduct a postmortem analysis grounded in real closed-trade metrics
- Measure win rate and expectancy across all closed positions
- Traders running trader-memory-core thesis tracking
- Quantitative traders analyzing weekly performance patterns
- Trading coaches or mentors reviewing client performance
- Algorithmic trading teams conducting weekly reviews
weekly-performance-digest FAQ
A trade counts if its exit.actual_date falls within the specified date range and status == CLOSED. Partial trims are tracked separately and excluded from headline metrics.
R-multiple = pnl_dollars / ((entry.actual_price − exit.stop_loss) × position.shares), using the stop-loss from the thesis schema.
Partial trims are informational only and never added to headline totals or win-rate to avoid double-counting. A position trimmed in week 1 and closed in week 2 shows as a partial trim in week 1 and inside week 2's closed headline.
The script still produces a valid report with zeroed metrics and exits with code 0.
Yes—the JSON output is designed to be aggregated for month-end or longer-term reviews.
Full instructions (SKILL.md)
Source of truth, from tradermonty/claude-trading-skills.
name: weekly-performance-digest description: Generate a weekly performance summary from closed trader-memory-core theses — win rate, expectancy, profit factor, R-multiple, MAE/MFE, and win/loss pattern analysis by source skill, exit reason, thesis type, sector, and mechanism. No API required; pure local calculation.
Weekly Performance Digest
Overview
Weekly Performance Digest aggregates the trades you closed during a week into a single
performance report. It reads CLOSED theses tracked by trader-memory-core
(state/theses/th_*.yaml), computes headline metrics (win rate, expectancy, profit
factor, R-multiple, MAE/MFE), breaks results down across several pattern dimensions
(source skill, exit reason, thesis type, sector, mechanism tag, screening grade), and
surfaces the week's biggest winners, losers, and lessons. Output is a JSON record plus
a human-readable Markdown report. Pure calculation — no API key required.
When to Use
- At the end of a trading week to review aggregate realized performance
- To measure win rate and expectancy across all closed positions
- To see which source skills, exit reasons, sectors, or mechanisms drove wins vs losses
- To feed a month-end review (combine four weekly digests) or a postmortem
- For a quick "what worked / what didn't" snapshot grounded in real closed trades
When Not to Use
- For a single-trade deep review — use
trade-performance-coach - For signal-level true/false-positive classification — use
signal-postmortem - For buy/sell recommendations or position sizing — this skill is descriptive only
Prerequisites
- Python 3.9+ with
PyYAML(already a repo dependency) - A
trader-memory-corestate directory of thesis YAML files (state/theses/) - No API key required
Workflow
Step 1: Run the digest for a week
python3 skills/weekly-performance-digest/scripts/generate_weekly_digest.py \
--state-dir state/theses \
--from-date 2026-06-13 --to-date 2026-06-20 \
--output-dir reports/ -v
Defaults: --state-dir state/theses, --from-date = 7 days before --to-date,
--to-date = today, --output-dir reports/. With no date flags it digests the
trailing 7 days.
Step 2: Read the report
The run writes reports/weekly_digest_<to-date>.json and
reports/weekly_digest_<to-date>.md. Review the Markdown for the executive summary,
metrics table, pattern breakdowns, and top winners/losers; consume the JSON downstream.
Step 3 (optional): Feed downstream
Combine several weekly JSON digests for a monthly review, or pass the JSON to a postmortem/coach step. The skill is descriptive — act on its findings via your normal review process.
How It Works
- Trade selection. A trade counts in a week if its
exit.actual_datefalls in[from-date, to-date]andstatus == CLOSED. - Win/loss.
outcome.pnl_dollars > 0is a winner,< 0a loser,== 0breakeven;win_rate = winners / total_trades. - R-multiple.
pnl_dollars / ((entry.actual_price − exit.stop_loss) × position.shares). (Stop-loss is read fromexit.stop_loss, per the real thesis schema.) - Double-counting safeguard. A CLOSED thesis's
outcome.pnl_dollarsis the cumulative realized P&L across all trims plus the final leg. Headline metrics use that cumulative value over CLOSED theses only. The separatepartial_trimsblock scansstatus_history[]of PARTIALLY_CLOSED theses only (still open) and is reported for information — it is never added into the headline totals/win-rate. A position trimmed in week 1 then closed in week 2 therefore shows as a partial trim in week 1 and inside week 2's CLOSED headline; that is intended, not a duplicate.
Output Format
JSON (weekly_digest_<to-date>.json)
{
"schema_version": "1.0",
"report_type": "weekly_performance_digest",
"period": {"from": "2026-06-13", "to": "2026-06-20"},
"generated_at": "2026-06-20T21:39:07Z",
"summary": {
"total_trades": 2, "winners": 1, "losers": 1, "breakeven": 0,
"win_rate": 0.5, "expectancy": 25.0, "profit_factor": 2.0,
"total_realized_pnl": 50.0, "total_realized_pnl_pct": 4.17
},
"metrics": {
"avg_winner": 100.0, "avg_loser": -50.0,
"largest_winner": 100.0, "largest_loser": -50.0,
"avg_holding_days_winners": 9.0, "avg_holding_days_losers": 6.0,
"r_multiple_avg": 0.25, "r_multiple_stdev": 1.06,
"avg_mae_pct": -3.75, "avg_mfe_pct": 4.5
},
"pattern_analysis": {
"by_source_skill": {"...": {"wins": 1, "losses": 0, "total": 1, "win_rate": 1.0}},
"by_exit_reason": {}, "by_thesis_type": {}, "by_sector": {},
"by_mechanism_tag": {}, "by_screening_grade": {}
},
"partial_trims": {"count": 0, "total_realized_pnl": 0.0, "trims": []},
"lessons": {"top_wins": [], "top_losses": [], "process_improvements": []}
}
Markdown (weekly_digest_<to-date>.md)
Sections: # Weekly Performance Digest, ## Executive Summary,
## Performance Metrics, ## Pattern Analysis, ## Lessons Learned
(### Top Winners / ### Top Losers / ### Process Improvements).
An empty week still produces a valid report with zeroed metrics (exit code 0).
Resources
scripts/generate_weekly_digest.py— digest generator (JSON + Markdown)references/weekly-digest-metrics.md— metric formulas and interpretation
Key Principles
- Closed trades only for headline numbers — cumulative
outcome.*, keyed on exit date. - No double-counting — partial trims are informational and excluded from totals.
- Pattern attribution — every win/loss is attributed across multiple dimensions.
- Descriptive, not prescriptive — the digest reports; you decide.
Related skills
More from tradermonty/claude-trading-skills and the wider catalog.

backtest-expert
Expert guidance for systematic backtesting of trading strategies with stress-testing and bias prevention.

breadth-chart-analyst
Analyze market breadth charts to identify strategic positioning and tactical trading signals.

breakout-trade-planner
Generate Minervini-style breakout trade plans from VCP screener output with position sizing and Alpaca order templates.

canslim-screener
Screen US stocks using William O'Neil's CANSLIM growth methodology to identify high-momentum, fundamentally strong candidates.

address-sanitizer
Detect memory errors like buffer overflows and use-after-free in C/C++/Rust via AddressSanitizer instrumentation.

aflpp
Multi-core fuzzing for C/C++ projects with AFL++, ideal for scaling beyond single-threaded libFuzzer.