Review closed futures trades against their plan - R multiple, plan adherence, execution errors, setup tag, and result tag - and turn evidence into short lessons. Use after every exit, at end of session, and when the order gate reports an unreviewed entry.
Install
npx skillscat add johnamcruz/futures-trading-harness/trade-review Install via the SkillsCat registry.
SKILL.md
Trade Review
When to Use
- After every closed (or cancelled, unfilled) entry. The order gate blocks the
next entry until each entry has a review. - End of session: distil 1–3 lessons.
How It Works
- Gather facts.
search_tradesfor the fills (P&L is on the closing fill;
fees are separate),search_ordersfor what was placed and modified, andjournal_read {kind:"plan"}/{kind:"order_placed"}for the plan and
rationale. - Look back before grading (this is how the desk learns):
- What you saw when you entered. Autonomous: the cycle that placed
the entry in<FTH_HOME>/logs/cycles-<day>.jsonl(match its time andorders), then its record inlogs/cycles/<day>/: the prompt (the last
10 bars, what fired and its confluence, the trend rule, your last 10
decisions) and what you did. Interactive: the plan entry. Then the bars
after the entry (the harness toolbars_fetchwithname: "review", or the runner's file): was the read wrong,
or the execution? - Your last 10 trades. The harness tool
lessons(it starts
with the form of the last 10: record, expectancy, repeated mistakes)
andjournal_read {kind:"review", tag:"setup:<name>"}for this
setup's last reviews. Is this a mistake you already made? If the samemistake:*tag appears twice in the last 10 trades, write the lesson
now (with the trades as evidence), not at end of day.
- What you saw when you entered. Autonomous: the cycle that placed
- Compute. Planned risk $ = |entry − stop| ÷ tickSize × tickValue × size.
R = net P&L ÷ planned risk. MAE/MFE fromget_barsover the hold, if useful. - Grade the process (A–F) independently of the result:
- Was the trigger real (the plan's condition actually happened)?
- Entry at the planned price ± slippage? Stop placed at the exchange at once?
- Managed per the plan (no widened stop, no early panic exit, no moved target)?
- Size per the position-sizing rules?
- Write the review with
journal_add {kind:"review", contractId, text, tags}:- text: plan vs. actual, R, grade, what to repeat or change.
- tags: exactly one of
result:win | result:loss | result:scratch (|R| < 0.2) | result:nofill;setup:<name>;regime:<primary>(from the plan); the
symbol;r:<R net of fees>(e.g.r:-1.11); anymistake:<kind>
(mistake:chased,mistake:no-stop,mistake:moved-stop,mistake:early-exit,mistake:oversize,mistake:rule-break).
These tags are how the desk learns: thelessonstool
turns them into instincts (each setup's record by regime, recurring
mistakes) that every later cycle sees. A review without them teaches
nothing.
- Lessons (end of session) with
journal_add {kind:"lesson", tags}:
one rule, the evidence count, and the condition. Don't write a lesson from a
single trade unless it's a rule break. - Also review blocked orders: the server's (
order_blockedjournal
entries) and the harness gate's (<FTH_HOME>/logs/gate-log.jsonl, FTH_HOME defaulting to~/.futures-trading-harness, with the
checks that refused each). A block means the plan or sizing was wrong
before a guardrail had to say so.
Examples
review: "ORB long MNQ. Plan: break of 21500 OR high, stop 21490, target 21520,
1 contract, $20 risk. Filled 21500.75 (3 ticks slip). Stopped at 21490 after a
sweep of the OR high and close back inside: 43 ticks = $21.50 + $0.74 fees = $22.24
net loss, R = -22.24 / 20 = -1.11. Process B: trigger valid,
but relative volume was 0.9x, which the strategy says to skip."
tags: ["result:loss", "setup:orb", "MNQ", "regime:trend-up", "r:-1.11", "mistake:rule-break"]
lesson: "ORB on MNQ with relative volume < 1.0x: 1W/5L over 6 trades. Skip."
tags: ["setup:orb", "MNQ"]