Compare challenges for one trader
propfirms_compareSimulate the SAME trader across several challenges (directory references and/or inline specs, up to 12) under identical options and seed, and return one row per challenge sorted by expected value. THIS IS NOT A RANKING: rows are ordered by EV for the caller's specific inputs - trader stats, risk sizing, and options - and a different trader profile reorders them. The tool computes data for the user's own decision; it implies no endorsement, league table, or recommendation of any firm, and results should be presented that way ('best EV for these inputs', never 'best firm'). Each row carries perAttemptPassProbability, fundedProbability, expectedAttempts, expectedCost, evTotal, pEvPositive, daysToFundedP50, and the challenge's flagsNotSimulated - challenges with more unsimulated rules have optimistic numbers, so compare flags alongside EV, not EV alone. Consistency rules and funded payout gating ARE simulated (engine v1), so EV already reflects them where a ruleset has them. For full per-challenge distributions run propfirms_simulate on the interesting rows. UNITS: every *Pct rule field and every percent-mode risk value is in PERCENT UNITS (5 = 5%, 0.5 = 0.5%). The one exception is winRate, which is a FRACTION in [0, 1] (0.55 = 55% winners). Probabilities in results are fractions in [0, 1]. DETERMINISM: identical inputs including seed reproduce byte-identical results on any platform. Include the seed and path count when reporting numbers so users can reproduce them exactly; re-run with a few different seeds to gauge Monte Carlo spread. ASSUMPTIONS: every result carries assumptions.flags - dataset-declared rules the engine does NOT simulate (e.g. scaling plans or soft daily lockouts, which make real odds worse than simulated) plus engine simplifications - and assumptions.disclaimer. These are material: always surface the flags and the disclaimer to the user alongside the numbers, never just the headline probability. Results are distributions under stated assumptions, not promises.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | RNG seed (integer or string). Default 42. Same inputs + seed reproduce byte-identical results - include the seed when reporting so users can reproduce the numbers. | |
| paths | No | Monte Carlo paths (independent simulated trader journeys). Default 10,000 (well under a second); capped at 100,000 per tool call. Confidence intervals shrink roughly with the square root of paths. | |
| avgWinR | Yes | Average winning trade in R-multiples, i.e. multiples of the amount risked per trade (1.5 = winners average 1.5x the risk). | |
| context | Yes | Explain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVER use first person ('I', 'we', 'you') - maintain third-person perspective. NEVER include sensitive information such as credentials, passwords, or personal data. Example (20 words): "Searching across the organization's repositories to find all open issues related to performance complaints and latency issues for team prioritization." | |
| winRate | Yes | Probability a trade is a winner, as a FRACTION in [0, 1] (0.55 = 55% winners) - NOT percent units. The most impactful input: traders routinely overestimate it by a few points, which can flip EV negative, so prefer measured stats over self-reported ones. | |
| winStdR | No | Standard deviation of winner sizes in R (0 = every winner is exactly avgWinR). Default 0. Adding spread makes streak damage more realistic. | |
| avgLossR | No | Average losing trade in R, as a POSITIVE number. Default 1 (losers lose exactly the risked amount, i.e. stops are honored). Raise above 1 to model slippage or blown stops. | |
| lossStdR | No | Standard deviation of loser sizes in R (0 = every loser is exactly avgLossR). Default 0. | |
| riskMode | No | How riskValue is interpreted. 'percent-of-balance' (default): risk compounds with the current balance. 'percent-of-initial': constant currency risk derived from the initial account size - how most prop traders size, since loss limits are fixed in currency. 'fixed-amount': explicit currency risked per 1R. | |
| riskValue | Yes | Risk per trade - the value of 1R. PERCENT UNITS for percent modes (0.5 = 0.5% risked per trade; a typical prop range is 0.25-2), or a currency amount for 'fixed-amount'. NOT a fraction. | |
| attemptCap | No | Maximum challenge attempts per path before that path gives up. Default 25. Journey statistics (expected attempts/cost, P(funded)) are censored at this cap. | |
| challenges | Yes | The challenges to simulate this trader across (1-12 entries; 2+ for a meaningful comparison). Mix dataset references and inline specs freely. | |
| tradesPerDay | Yes | Average trades per simulated trading day. More trades per day means more ways to hit the daily loss limit within a single day. | |
| simulateFunded | No | Whether to simulate the funded stage (payouts, blowup risk) after passing. Default true - EV is only meaningful with it on; set false to study the evaluation alone. | |
| fundedHorizonDays | No | Funded-stage horizon in trading days for the payout/EV simulation. Default 90 (about 4 calendar months). EV scales with this choice - state it when reporting EV. | |
| tradesPerDayModel | No | 'fixed' (default): the same count every day. 'poisson': daily count drawn Poisson(tradesPerDay); days can then have zero trades, which do not count as trading days. |