5.3 KiB
/iterate
Analyze recent discovery runs and P&L outcomes, update learning files in
docs/iterations/, implement concrete code improvements in tradingagents/,
then commit everything. In CI (CI=true), stop before git operations — the
workflow handles branching and PR creation.
Step 1: Determine What to Analyze
Read docs/iterations/LEARNINGS.md to find the Last analyzed run date.
If the file does not exist (first run), treat the Last analyzed run date as 1970-01-01 and proceed.
Then scan results/discovery/ for all run directories with dates AFTER the
last analyzed date. Each run directory contains discovery_result.json. Collect all unanalyzed runs.
Also scan data/recommendations/ for JSON files dated 5 or more days ago.
Load each file and extract all recommendations. These are mature enough to
have played out — analyze them regardless of status field value.
For P&L analysis you need: ticker, strategy_match, final_score,
confidence, discovery_date, entry_price, status.
Set your analysis mode:
- If unanalyzed runs exist → include fast-loop (output quality analysis)
- If mature recommendations exist → include P&L loop (outcome analysis)
- If neither → print "No new data to analyze since last run." and exit.
Step 2: Load Domain Context
For each scanner that appears in the unanalyzed runs (check strategy_match
field in discovery results), read the corresponding file from
docs/iterations/scanners/<scanner_name>.md.
Also read docs/iterations/pipeline/scoring.md.
Also read docs/iterations/LEARNINGS.md for full index awareness.
Step 3: Analyze
Fast-Loop Analysis (output quality)
For each unanalyzed run's discovery_result.json:
- Signal specificity: Does each candidate have a concrete, specific thesis or a generic one? Flag candidates with vague context.
- Scanner noise rate: How many candidates per scanner? Scanners producing 10+ candidates with low scores (<65) are noisy.
- Confidence calibration: Is confidence (1-10) consistent with score (0-100)? A score of 85 with confidence 5 suggests miscalibration.
- Duplicate candidates: Same ticker appearing from 2+ scanners — note as confluence (positive) or redundancy (negative, if identical thesis).
P&L Loop Analysis (outcome analysis)
For each mature recommendation:
- Group by
strategy_match(scanner). Compute per-scanner: how many recommendations were made, what was the average final_score, and whetherstatusfields suggest positive or negative outcomes. - Flag scanners where final_score > 80 but outcomes appear poor — overconfident.
- Flag scanners where final_score < 65 but outcomes appear good — undervalued.
- Note patterns: do high-confidence (9-10) picks outperform low-confidence (6-7)?
Step 4: Write Learnings
For each scanner that appeared in the analysis, update its domain file in
docs/iterations/scanners/<scanner_name>.md:
- Append to Evidence Log: Add a dated entry with your specific observations.
Use this format:
### YYYY-MM-DD — <run date or "P&L review"> - What was observed - What it implies - Confidence: low / medium / high - Update Current Understanding: If your new evidence is medium or high confidence AND contradicts or meaningfully extends the current understanding, rewrite that section. Otherwise leave it unchanged.
- Update Pending Hypotheses: Check off any hypotheses that are now answered. Add new ones that your analysis surfaced.
Update docs/iterations/LEARNINGS.md:
- Set Last analyzed run to today's date
- Update the one-line summary and Last Updated date for each scanner you touched
Step 5: Implement Code Changes
Based on your learnings, identify concrete improvements. For each improvement:
Translate one learning → one code change. Examples:
- "ML signal threshold is worse than a coin flip" → raise threshold in
tradingagents/dataflows/discovery/scanners/ml_signal.py - "Options flow premium filter is configured but not applied" → add the check
- "Reddit DD LLM score computed but unused" → use it for priority assignment
For each change:
- Read the relevant scanner file to understand current implementation
- Make the minimal change that encodes the learning
- Do not refactor surrounding code — change only what the learning motivates
Implement all changes before committing.
Step 6: Commit (skip if CI=true)
If the environment variable CI is set, stop here. The workflow handles git.
Otherwise:
git add docs/iterations/ tradingagents/
Run git commit with a message in the format: learn(iterate): YYYY-MM-DD — <your one-sentence summary of findings>
Then check for an existing open PR on branch iterate/current:
EXISTING=$(gh pr list --repo Aitous/TradingAgents --head iterate/current --state open --json number --jq '.[0].number // empty')
If one exists: push to that branch and update the PR description with your findings appended.
If none exists: create branch iterate/current, push, open PR against main:
git checkout -b iterate/current
git push -u origin iterate/current
gh pr create \
--repo Aitous/TradingAgents \
--title "learn(iterate): automated improvements — $(date +%Y-%m-%d)" \
--body "$(cat docs/iterations/LEARNINGS.md)" \
--label "automated,iteration" \
--base main