Claude-trading-skills position-sizer
Calculate risk-based position sizes for long stock trades. Use when user asks about position sizing, how many shares to buy, risk per trade, Kelly criterion, ATR-based sizing, or portfolio risk allocation. Supports stop-loss distance calculation, volatility scaling, and sector concentration checks.
git clone https://github.com/tradermonty/claude-trading-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/tradermonty/claude-trading-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/position-sizer" ~/.claude/skills/tradermonty-claude-trading-skills-position-sizer && rm -rf "$T"
skills/position-sizer/SKILL.mdPosition Sizer
Overview
Calculate the optimal number of shares to buy for a long stock trade based on risk management principles. Supports three sizing methods:
- Fixed Fractional: Risk a fixed percentage of account equity per trade (default: 1%)
- ATR-Based: Use Average True Range to set volatility-adjusted stop distances
- Kelly Criterion: Calculate mathematically optimal risk allocation from historical win/loss statistics
All methods apply portfolio constraints (max position %, max sector %) and output a final recommended share count with full risk breakdown.
When to Use
- User asks "how many shares should I buy?"
- User wants to calculate position size for a specific trade setup
- User mentions risk per trade, stop-loss sizing, or portfolio allocation
- User asks about Kelly Criterion or ATR-based position sizing
- User wants to check if a position fits within portfolio concentration limits
Prerequisites
- No API keys required
- Python 3.9+ with standard library only
Workflow
Step 1: Gather Trade Parameters
Collect from the user:
- Required: Account size (total equity)
- Mode A (Fixed Fractional): Entry price, stop price, risk percentage (default 1%)
- Mode B (ATR-Based): Entry price, ATR value, ATR multiplier (default 2.0x), risk percentage
- Mode C (Kelly Criterion): Win rate, average win, average loss; optionally entry and stop for share calculation
- Optional constraints: Max position % of account, max sector %, current sector exposure
If the user provides a stock ticker but not specific prices, use available tools to look up the current price and suggest entry/stop levels based on technical analysis.
Step 2: Execute Position Sizer Script
Run the position sizing calculation:
# Fixed Fractional (most common) python3 skills/position-sizer/scripts/position_sizer.py \ --account-size 100000 \ --entry 155 \ --stop 148.50 \ --risk-pct 1.0 \ --output-dir reports/ # ATR-Based python3 skills/position-sizer/scripts/position_sizer.py \ --account-size 100000 \ --entry 155 \ --atr 3.20 \ --atr-multiplier 2.0 \ --risk-pct 1.0 \ --output-dir reports/ # Kelly Criterion (budget mode - no entry) python3 skills/position-sizer/scripts/position_sizer.py \ --account-size 100000 \ --win-rate 0.55 \ --avg-win 2.5 \ --avg-loss 1.0 \ --output-dir reports/ # Kelly Criterion (shares mode - with entry/stop) python3 skills/position-sizer/scripts/position_sizer.py \ --account-size 100000 \ --entry 155 \ --stop 148.50 \ --win-rate 0.55 \ --avg-win 2.5 \ --avg-loss 1.0 \ --output-dir reports/
Step 3: Load Methodology Reference
Read
references/sizing_methodologies.md to provide context on the chosen method, risk guidelines, and portfolio constraint best practices.
Step 4: Calculate Multiple Scenarios
If the user has not specified a single method, run multiple scenarios for comparison:
- Fixed Fractional at 0.5%, 1.0%, and 1.5% risk
- ATR-based at 1.5x, 2.0x, and 3.0x multipliers
- Present a comparison table showing shares, position value, and dollar risk for each
Step 5: Apply Portfolio Constraints and Determine Final Size
Add constraints if the user has portfolio context:
python3 skills/position-sizer/scripts/position_sizer.py \ --account-size 100000 \ --entry 155 \ --stop 148.50 \ --risk-pct 1.0 \ --max-position-pct 10 \ --max-sector-pct 30 \ --current-sector-exposure 22 \ --output-dir reports/
Explain which constraint is binding and why it limits the position.
Step 6: Generate Position Report
Present the final recommendation including:
- Method used and rationale
- Exact share count and position value
- Dollar risk and percentage of account
- Stop-loss price
- Any binding constraints
- Risk management reminders (portfolio heat, loss-cutting discipline)
Output Format
JSON Report
{ "schema_version": "1.0", "mode": "shares", "parameters": { "entry_price": 155.0, "account_size": 100000, "stop_price": 148.50, "risk_pct": 1.0 }, "calculations": { "fixed_fractional": { "method": "fixed_fractional", "shares": 153, "risk_per_share": 6.50, "dollar_risk": 1000.0, "stop_price": 148.50 }, "atr_based": null, "kelly": null }, "constraints_applied": [], "final_recommended_shares": 153, "final_position_value": 23715.0, "final_risk_dollars": 994.50, "final_risk_pct": 0.99, "binding_constraint": null }
Markdown Report
Generated automatically alongside the JSON report. Contains:
- Parameters summary
- Calculation details for the active method
- Constraints analysis (if any)
- Final recommendation with shares, value, and risk
Reports are saved to
reports/ with filenames position_sizer_YYYY-MM-DD_HHMMSS.json and .md.
Resources
: Comprehensive guide to Fixed Fractional, ATR-based, and Kelly Criterion methods with examples, comparison table, and risk management principlesreferences/sizing_methodologies.md
: Main calculation script (CLI interface)scripts/position_sizer.py
Key Principles
- Survival first: Position sizing is about surviving losing streaks, not maximizing winners
- The 1% rule: Default to 1% risk per trade; never exceed 2% without exceptional reason
- Round down: Always round shares down to whole numbers (never round up)
- Strictest constraint wins: When multiple limits apply, the tightest one determines final size
- Half Kelly: Never use full Kelly in practice; half Kelly captures 75% of growth with far less risk
- Portfolio heat: Total open risk should not exceed 6-8% of account equity
- Asymmetry of losses: A 50% loss requires a 100% gain to recover; size accordingly