
Futures Position Sizer
FreeCalculate futures position sizes with verified contract specs.
Free · Opens the source repo
What Futures Position Sizer does
The Futures Position Sizer is a specialized tool designed for traders who need to accurately determine the number of futures contracts to trade based on their risk tolerance and market conditions. This skill operates offline, ensuring that users can perform calculations without the need for API keys or internet connectivity. It uses verified contract specifications, including multiplier, tick size, and tick value, to provide precise sizing recommendations for a variety of futures contracts such as ES, NQ, GC, and CL.
The skill supports two distinct modes for sizing trades. In Mode A, users can explicitly provide the symbol, direction, entry price, and stop-loss to calculate the number of contracts to trade. Mode B allows users to pass a JSON report from a contrarian setup gate, ensuring that the sizing is based on a confirmed trade setup. This dual approach provides flexibility for users depending on their workflow and trading strategy.
The tool also includes features for checking verified contract specifications, allowing traders to validate the details of the futures contracts they are interested in before making sizing decisions. This is particularly useful for those trading less common futures symbols, as the skill can accommodate additional contract specifications when necessary. Overall, the Futures Position Sizer is an essential tool for traders looking to manage their risk effectively while trading leveraged futures contracts.
When to use it
Use this tool when you need to size a futures position based on a specific entry and stop-loss, or after receiving a confirmed setup from a contrarian-setup-gate.
When not to use it
This skill is not suitable for backtesting or historical analysis, as it is designed for real-time sizing based on current market conditions.
What you can build with it
Sizing a New Trade
You have a futures trade idea with a known entry and stop-loss, and you need to determine how many contracts to trade based on your risk budget.
Using Contrarian Setup Gates
After receiving a `READY_FOR_PLAN` signal from a contrarian setup gate, you need to calculate the contract size for the confirmed direction and stop.
Verifying Contract Specifications
You want to check the verified contract specs for a specific futures symbol before proceeding with your trade sizing.
How to install Futures Position Sizer
View source1. Install with the skills CLI
npx skills add tradermonty/claude-trading-skills/futures-position-sizer --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by tradermontyFutures Position Sizer
Overview
Shapiro pipeline step 4: convert a direction, entry price, and stop-loss into a contract count, given an account risk budget and a verified contract spec (multiplier, tick size, tick value). This is a NEW, separate skill from position-sizer -- futures contracts are leveraged, multiplier-based instruments with wildly different dollar-per-point values (a $0.25 move is $12.50 on ES but $5.00 on NQ and $31.25 on ZB); reusing the equity share-count sizer for futures would silently produce wrong position sizes.
Two ways to size a trade:
- Mode A (explicit): supply
--symbol --direction --entry --stopdirectly. - Mode B (gate handoff): supply
--gate-json <contrarian-setup-gate report> --entry. Direction and stop (the gate'sinvalidation_level) come from the gate'sREADY_FOR_PLANreport -- the sizer never sizes a setup the gate has not confirmed as READY, and never accepts an explicit--direction/--stopalongside--gate-json(the gate is authoritative when provided).
--entry is ALWAYS required, in both modes -- neither this skill nor the gate ever derives an entry price; the operator supplies it.
When to Use
- After
contrarian-setup-gatereachesREADY_FOR_PLANand you need a contract count for the confirmed direction and stop - User asks "how many ES/NQ/GC/CL/... contracts should I trade?"
- User has a futures trade idea with a known entry and stop and wants risk-based sizing
- User wants to check the verified contract spec (multiplier/tick size/tick value) for a symbol before sizing (
--list-specs)
Prerequisites
- Python 3.9+, standard library only -- no API keys, fully offline
- A direction, entry, and stop (mode A), or a
contrarian-setup-gateJSON report withsetup_status: READY_FOR_PLAN(mode B) - For a symbol outside the verified 23-market core table: its multiplier, tick size, and quote currency (all three, together)
Workflow
Step 1: Size the Position
Mode A -- explicit:
python3 skills/futures-position-sizer/scripts/futures_position_sizer.py \
--symbol ES --direction LONG --entry 5000.25 --stop 4980.00 \
--account-size 100000 --risk-pct 1.0 \
--output-dir reports/ --format both
Mode B -- gate handoff:
python3 skills/futures-position-sizer/scripts/futures_position_sizer.py \
--gate-json reports/contrarian_setup_gate_B6_2026-07-15.json \
--entry 1.3400 \
--account-size 100000 --risk-pct 1.0 \
--output-dir reports/ --format both
--symbol may be omitted in mode B -- it is taken from the gate report. If both are given, they must match (gate_symbol_mismatch otherwise). --direction/--stop are rejected alongside --gate-json (usage error, exit 2) -- pass one mode or the other, never both.
Step 2: Read the Result
sizing_status | Meaning |
|---|---|
SIZED | contracts >= 1; total_risk_usd/risk_pct_of_account are the actual risk taken |
NO_TRADE | Never a crash -- always carries no_trade_reason. See the reason glossary below |
A NO_TRADE result from risk_below_one_contract still reports the full risk math (risk per contract, risk budget, stop distance) -- the account simply cannot afford one contract at this risk percentage and stop distance; widen the stop, increase risk %, or skip the trade.
Step 3: Check Warnings
warnings (top-level list) never blocks sizing -- it flags audit-worthy conditions: risk_pct_above_2 (risk above the 2% guideline), off_tick_grid_entry/off_tick_grid_stop (a non-bond symbol's price is not exactly on the tick grid -- legitimate for a mid-quote, but worth a second look).
Step 4: Inspect the Verified Contract Spec Table
python3 skills/futures-position-sizer/scripts/futures_position_sizer.py --list-specs
Prints the full 23-market core table (multiplier, tick size, tick value, currency, exchange) sourced from official exchange contract-spec pages -- see references/futures-contract-specs.md for the per-row source URLs and verification dates.
Worked Example: Bond Off-Grid Guard (32nds -> Decimal)
Bond/note futures (ZT, ZF, ZN, ZB) quote in fractions of a point (32nds, or 32nds-of-32nds), commonly written with an apostrophe: 110'16 means 110 + 16/32 = 110.50. Typing 110.16 instead -- reading the digits after the apostrophe as if they were decimal cents -- is a classic, silent, wrong-money-math mistake: 110.16 is not on the ZB tick grid (0.03125 = 1/32) at all.
# WRONG -- 110.16 is not on the 1/32 grid; this is almost certainly a
# mistyped "110'16" (which means 110.50). Exits 2, no report written:
python3 skills/futures-position-sizer/scripts/futures_position_sizer.py \
--symbol ZB --direction LONG --entry 110.16 --stop 108.00 \
--account-size 100000 --risk-pct 1.0
# CORRECT -- decimal points, not the raw 32nds digits:
python3 skills/futures-position-sizer/scripts/futures_position_sizer.py \
--symbol ZB --direction LONG --entry 110.50 --stop 108.00 \
--account-size 100000 --risk-pct 1.0
Every other symbol in the table quotes in plain decimal points -- an off-grid price there (a mid-quote, for instance) is only a soft off_tick_grid_* warning, never a rejection.
Output Contract
Writes futures_position_size_<SYMBOL>_<as-of>.json to --output-dir when --format json|both; --format text|both prints a formatted summary to stdout. --as-of defaults to today (this is an operator-time sizing tool, not a backtest tool).
schema_version: "1.0"
symbol: ES
direction: LONG
sizing_status: SIZED | NO_TRADE
no_trade_reason: null | risk_below_one_contract | gate_not_ready | gate_symbol_mismatch | ...
entry: 5000.25
stop: 4980.00
stop_distance_points: 20.25
stop_distance_ticks: 81
contract_spec: {multiplier: 50, tick_size: 0.25, tick_value: 12.5, currency: USD, source: cme, verified: "2026-07-17"}
risk_per_contract_usd: 1012.50
risk_budget_usd: 2000.00
contracts: 1
total_risk_usd: 1012.50
risk_pct_of_account: 1.01
max_contracts_cap_applied: false
fx_rate_used: 1.0
margin_note: "Exchange margin requirements are broker/time-dependent and NOT computed here; verify initial/maintenance margin with your broker."
gate: {report_path, setup_status, gate_confidence, warnings} # mode B only
warnings: []
run_context: {symbol, as_of, schema_version, skill}
Guardrails
- Never sizes a position without an explicit stop.
--stopis required in mode A; mode B refuses to size (gate_not_ready) until the gate itself reportsREADY_FOR_PLANwith a validinvalidation_level. - Floor, never round up -- exact by construction, no epsilon.
contracts = floor(risk_budget / risk_per_contract)is computed with exact rational arithmetic (Python'sFraction, not float division), socontracts * risk_per_contract <= risk_budgetholds by construction -- no epsilon nudge, no float-representation edge case, and no risk of ever exceeding the budget. Also rejected outright if the resulting count is economically implausible (an absurd input like a denormal-scale multiplier override). Zero contracts is a legitimate, fail-closedNO_TRADEoutcome, not an error. - Two fail-closed classes, matched to who supplied the bad value. An operator-caused problem (an explicit
--stopon the wrong side of--entry, a stop closer than one tick, a bond price typed off the tick grid) is a usage error: exit 2, no report written. The identical class of problem on a value that came from the untrusted gate-report file (mode B's stop) is instead a fail-closedNO_TRADEresult: exit 0, a report IS written, naming the reason -- this never crashes on a bad or not-yet-ready gate file, matching every other skill in this pipeline. - Bond-family off-grid prices are a hard rejection, not a warning. ZT/ZF/ZN/ZB quote in 32nds/64ths notation; a price that doesn't land on the tick grid is almost certainly a notation mistype and would silently produce wrong money math if sized. Every other symbol only warns.
- Margin is never computed.
margin_noteis a static, never-stale reminder -- margin requirements are broker- and time-dependent; this skill does not estimate them. - Currency-aware. Every core-table symbol is USD-quoted (confirmed by a table-wide unit test), including the CME FX futures whose contract SIZE is denominated in a foreign currency (e.g. B6's GBP 62,500) but which trade and settle in USD. A symbol quoted in a non-USD currency (via
--contract-currencyoverride) requires an explicit--fx-rate-- there is no silent default. - Not investment advice. This skill performs risk-based arithmetic on operator-supplied or gate-confirmed inputs; it does not recommend a trade, a direction, or an entry.
Resources
scripts/futures_position_sizer.py-- CLI: argument parsing, hardened gate-json loading (unreadable / parse_error incl. RecursionError / non_finite via an iterative whole-file scan), report generationscripts/futures_sizing.py-- Pure sizing core: numeric validators, the verified 23-market contract-spec table, risk math, the floor algorithm, tick-grid guards, and gate-report shape normalizationreferences/futures-contract-specs.md-- The verified contract-spec table with per-row official source URLs and verification datesreferences/sizing-methodology.md-- Formulas, the exact-rational floor algorithm's rationale, the fail-closed exit-code convention, and worked examples (ES long, B6 short via gate handoff)
Frequently asked questions about Futures Position Sizer
Similar skills
Spring Boot Testing
Master testing techniques for Spring Boot 4 applications.
GitHub Issues
Manage GitHub issues efficiently with MCP tools.
Geofeed Tuner
Optimize your IP geolocation feeds in CSV format.
Batch Files
Master Windows batch scripting for automation and task management.
Adobe Illustrator Scripting
Automate your Illustrator workflows with ExtendScript.
Plugin Structure
Create and organize Claude Code plugins effectively.
